@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,3 @@
1
+ export * from './garbage-collector';
2
+ export * from './progress-printer';
3
+ export * from './stack-refresh';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./garbage-collector"), exports);
18
+ // testing exports
19
+ __exportStar(require("./progress-printer"), exports);
20
+ __exportStar(require("./stack-refresh"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DO0FBRXBDLGtCQUFrQjtBQUNsQixxREFBbUM7QUFDbkMsa0RBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9nYXJiYWdlLWNvbGxlY3Rvcic7XG5cbi8vIHRlc3RpbmcgZXhwb3J0c1xuZXhwb3J0ICogZnJvbSAnLi9wcm9ncmVzcy1wcmludGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhY2stcmVmcmVzaCc7XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import type { GcAsset as GCAsset } from './garbage-collector';
2
+ import { type IoHelper } from '../io/private';
3
+ export declare class ProgressPrinter {
4
+ private ioHelper;
5
+ private totalAssets;
6
+ private assetsScanned;
7
+ private taggedAsset;
8
+ private taggedAssetsSizeMb;
9
+ private deletedAssets;
10
+ private deletedAssetsSizeMb;
11
+ private interval;
12
+ private setInterval?;
13
+ private isPaused;
14
+ constructor(ioHelper: IoHelper, totalAssets: number, interval?: number);
15
+ reportScannedAsset(amt: number): void;
16
+ reportTaggedAsset(assets: GCAsset[]): void;
17
+ reportDeletedAsset(assets: GCAsset[]): void;
18
+ start(): void;
19
+ pause(): void;
20
+ resume(): void;
21
+ stop(): void;
22
+ private print;
23
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProgressPrinter = void 0;
4
+ const chalk = require("chalk");
5
+ const private_1 = require("../io/private");
6
+ const toolkit_error_1 = require("../toolkit-error");
7
+ class ProgressPrinter {
8
+ ioHelper;
9
+ totalAssets;
10
+ assetsScanned;
11
+ taggedAsset;
12
+ taggedAssetsSizeMb;
13
+ deletedAssets;
14
+ deletedAssetsSizeMb;
15
+ interval;
16
+ setInterval;
17
+ isPaused;
18
+ constructor(ioHelper, totalAssets, interval) {
19
+ this.ioHelper = ioHelper;
20
+ this.totalAssets = totalAssets;
21
+ this.assetsScanned = 0;
22
+ this.taggedAsset = 0;
23
+ this.taggedAssetsSizeMb = 0;
24
+ this.deletedAssets = 0;
25
+ this.deletedAssetsSizeMb = 0;
26
+ this.interval = interval ?? 10_000;
27
+ this.isPaused = false;
28
+ }
29
+ reportScannedAsset(amt) {
30
+ this.assetsScanned += amt;
31
+ }
32
+ reportTaggedAsset(assets) {
33
+ this.taggedAsset += assets.length;
34
+ const sizeInBytes = assets.reduce((total, asset) => total + asset.size, 0);
35
+ this.taggedAssetsSizeMb += sizeInBytes / 1_048_576;
36
+ }
37
+ reportDeletedAsset(assets) {
38
+ this.deletedAssets += assets.length;
39
+ const sizeInBytes = assets.reduce((total, asset) => total + asset.size, 0);
40
+ this.deletedAssetsSizeMb += sizeInBytes / 1_048_576;
41
+ }
42
+ start() {
43
+ // If there is already a running setInterval, throw an error.
44
+ // This is because if this.setInterval is reassigned to another setInterval,
45
+ // the original setInterval remains and can no longer be cleared.
46
+ if (this.setInterval) {
47
+ throw new toolkit_error_1.ToolkitError('ProgressPrinter is already running. Stop it first using the stop() method before starting it again.');
48
+ }
49
+ this.setInterval = setInterval(() => {
50
+ if (!this.isPaused) {
51
+ this.print();
52
+ }
53
+ }, this.interval);
54
+ }
55
+ pause() {
56
+ this.isPaused = true;
57
+ }
58
+ resume() {
59
+ this.isPaused = false;
60
+ }
61
+ stop() {
62
+ clearInterval(this.setInterval);
63
+ // print one last time if not paused
64
+ if (!this.isPaused) {
65
+ this.print();
66
+ }
67
+ }
68
+ print() {
69
+ const percentage = ((this.assetsScanned / this.totalAssets) * 100).toFixed(2);
70
+ // print in MiB until we hit at least 1 GiB of data tagged/deleted
71
+ if (Math.max(this.taggedAssetsSizeMb, this.deletedAssetsSizeMb) >= 1000) {
72
+ void this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_INFO.msg(chalk.green(`[${percentage}%] ${this.assetsScanned} files scanned: ${this.taggedAsset} assets (${(this.taggedAssetsSizeMb / 1000).toFixed(2)} GiB) tagged, ${this.deletedAssets} assets (${(this.deletedAssetsSizeMb / 1000).toFixed(2)} GiB) deleted.`)));
73
+ }
74
+ else {
75
+ void this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_INFO.msg(chalk.green(`[${percentage}%] ${this.assetsScanned} files scanned: ${this.taggedAsset} assets (${this.taggedAssetsSizeMb.toFixed(2)} MiB) tagged, ${this.deletedAssets} assets (${this.deletedAssetsSizeMb.toFixed(2)} MiB) deleted.`)));
76
+ }
77
+ }
78
+ }
79
+ exports.ProgressPrinter = ProgressPrinter;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtcHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2dyZXNzLXByaW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBRS9CLDJDQUFrRDtBQUNsRCxvREFBZ0Q7QUFFaEQsTUFBYSxlQUFlO0lBQ2xCLFFBQVEsQ0FBVztJQUNuQixXQUFXLENBQVM7SUFDcEIsYUFBYSxDQUFTO0lBQ3RCLFdBQVcsQ0FBUztJQUNwQixrQkFBa0IsQ0FBUztJQUMzQixhQUFhLENBQVM7SUFDdEIsbUJBQW1CLENBQVM7SUFDNUIsUUFBUSxDQUFTO0lBQ2pCLFdBQVcsQ0FBaUM7SUFDNUMsUUFBUSxDQUFVO0lBRTFCLFlBQVksUUFBa0IsRUFBRSxXQUFtQixFQUFFLFFBQWlCO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE1BQWlCO1FBQ3hDLElBQUksQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxD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QUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pTLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoRkQsMENBZ0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBHY0Fzc2V0IGFzIEdDQXNzZXQgfSBmcm9tICcuL2dhcmJhZ2UtY29sbGVjdG9yJztcbmltcG9ydCB7IElPLCB0eXBlIElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGNsYXNzIFByb2dyZXNzUHJpbnRlciB7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHRvdGFsQXNzZXRzOiBudW1iZXI7XG4gIHByaXZhdGUgYXNzZXRzU2Nhbm5lZDogbnVtYmVyO1xuICBwcml2YXRlIHRhZ2dlZEFzc2V0OiBudW1iZXI7XG4gIHByaXZhdGUgdGFnZ2VkQXNzZXRzU2l6ZU1iOiBudW1iZXI7XG4gIHByaXZhdGUgZGVsZXRlZEFzc2V0czogbnVtYmVyO1xuICBwcml2YXRlIGRlbGV0ZWRBc3NldHNTaXplTWI6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnRlcnZhbDogbnVtYmVyO1xuICBwcml2YXRlIHNldEludGVydmFsPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgaXNQYXVzZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoaW9IZWxwZXI6IElvSGVscGVyLCB0b3RhbEFzc2V0czogbnVtYmVyLCBpbnRlcnZhbD86IG51bWJlcikge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgICB0aGlzLnRvdGFsQXNzZXRzID0gdG90YWxBc3NldHM7XG4gICAgdGhpcy5hc3NldHNTY2FubmVkID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ID0gMDtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiA9IDA7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzID0gMDtcbiAgICB0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgPSAwO1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBpbnRlcnZhbCA/PyAxMF8wMDA7XG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHJlcG9ydFNjYW5uZWRBc3NldChhbXQ6IG51bWJlcikge1xuICAgIHRoaXMuYXNzZXRzU2Nhbm5lZCArPSBhbXQ7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0VGFnZ2VkQXNzZXQoYXNzZXRzOiBHQ0Fzc2V0W10pIHtcbiAgICB0aGlzLnRhZ2dlZEFzc2V0ICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy50YWdnZWRBc3NldHNTaXplTWIgKz0gc2l6ZUluQnl0ZXMgLyAxXzA0OF81NzY7XG4gIH1cblxuICBwdWJsaWMgcmVwb3J0RGVsZXRlZEFzc2V0KGFzc2V0czogR0NBc3NldFtdKSB7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzICs9IGFzc2V0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2l6ZUluQnl0ZXMgPSBhc3NldHMucmVkdWNlKCh0b3RhbCwgYXNzZXQpID0+IHRvdGFsICsgYXNzZXQuc2l6ZSwgMCk7XG4gICAgdGhpcy5kZWxldGVkQXNzZXRzU2l6ZU1iICs9IHNpemVJbkJ5dGVzIC8gMV8wNDhfNTc2O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0KCkge1xuICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBydW5uaW5nIHNldEludGVydmFsLCB0aHJvdyBhbiBlcnJvci5cbiAgICAvLyBUaGlzIGlzIGJlY2F1c2UgaWYgdGhpcy5zZXRJbnRlcnZhbCBpcyByZWFzc2lnbmVkIHRvIGFub3RoZXIgc2V0SW50ZXJ2YWwsXG4gICAgLy8gdGhlIG9yaWdpbmFsIHNldEludGVydmFsIHJlbWFpbnMgYW5kIGNhbiBubyBsb25nZXIgYmUgY2xlYXJlZC5cbiAgICBpZiAodGhpcy5zZXRJbnRlcnZhbCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUHJvZ3Jlc3NQcmludGVyIGlzIGFscmVhZHkgcnVubmluZy4gU3RvcCBpdCBmaXJzdCB1c2luZyB0aGUgc3RvcCgpIG1ldGhvZCBiZWZvcmUgc3RhcnRpbmcgaXQgYWdhaW4uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc1BhdXNlZCkge1xuICAgICAgICB0aGlzLnByaW50KCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5pbnRlcnZhbCk7XG4gIH1cblxuICBwdWJsaWMgcGF1c2UoKSB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgcmVzdW1lKCkge1xuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zZXRJbnRlcnZhbCk7XG4gICAgLy8gcHJpbnQgb25lIGxhc3QgdGltZSBpZiBub3QgcGF1c2VkXG4gICAgaWYgKCF0aGlzLmlzUGF1c2VkKSB7XG4gICAgICB0aGlzLnByaW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcmludCgpIHtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gKCh0aGlzLmFzc2V0c1NjYW5uZWQgLyB0aGlzLnRvdGFsQXNzZXRzKSAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICAvLyBwcmludCBpbiBNaUIgdW50aWwgd2UgaGl0IGF0IGxlYXN0IDEgR2lCIG9mIGRhdGEgdGFnZ2VkL2RlbGV0ZWRcbiAgICBpZiAoTWF0aC5tYXgodGhpcy50YWdnZWRBc3NldHNTaXplTWIsIHRoaXMuZGVsZXRlZEFzc2V0c1NpemVNYikgPj0gMTAwMCkge1xuICAgICAgdm9pZCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfSU5GTy5tc2coY2hhbGsuZ3JlZW4oYFske3BlcmNlbnRhZ2V9JV0gJHt0aGlzLmFzc2V0c1NjYW5uZWR9IGZpbGVzIHNjYW5uZWQ6ICR7dGhpcy50YWdnZWRBc3NldH0gYXNzZXRzICgkeyh0aGlzLnRhZ2dlZEFzc2V0c1NpemVNYiAvIDEwMDApLnRvRml4ZWQoMil9IEdpQikgdGFnZ2VkLCAke3RoaXMuZGVsZXRlZEFzc2V0c30gYXNzZXRzICgkeyh0aGlzLmRlbGV0ZWRBc3NldHNTaXplTWIgLyAxMDAwKS50b0ZpeGVkKDIpfSBHaUIpIGRlbGV0ZWQuYCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfSU5GTy5tc2coY2hhbGsuZ3JlZW4oYFske3BlcmNlbnRhZ2V9JV0gJHt0aGlzLmFzc2V0c1NjYW5uZWR9IGZpbGVzIHNjYW5uZWQ6ICR7dGhpcy50YWdnZWRBc3NldH0gYXNzZXRzICgke3RoaXMudGFnZ2VkQXNzZXRzU2l6ZU1iLnRvRml4ZWQoMil9IE1pQikgdGFnZ2VkLCAke3RoaXMuZGVsZXRlZEFzc2V0c30gYXNzZXRzICgke3RoaXMuZGVsZXRlZEFzc2V0c1NpemVNYi50b0ZpeGVkKDIpfSBNaUIpIGRlbGV0ZWQuYCkpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,49 @@
1
+ import type { ICloudFormationClient } from '../aws-auth/private';
2
+ import { type IoHelper } from '../io/private';
3
+ export declare class ActiveAssetCache {
4
+ private readonly stacks;
5
+ rememberStack(stackTemplate: string): void;
6
+ contains(asset: string): boolean;
7
+ }
8
+ export declare function refreshStacks(cfn: ICloudFormationClient, ioHelper: IoHelper, activeAssets: ActiveAssetCache, qualifier?: string): Promise<void>;
9
+ /**
10
+ * Background Stack Refresh properties
11
+ */
12
+ export interface BackgroundStackRefreshProps {
13
+ /**
14
+ * The CFN SDK handler
15
+ */
16
+ readonly cfn: ICloudFormationClient;
17
+ /**
18
+ * Used to send messages.
19
+ */
20
+ readonly ioHelper: IoHelper;
21
+ /**
22
+ * Active Asset storage
23
+ */
24
+ readonly activeAssets: ActiveAssetCache;
25
+ /**
26
+ * Stack bootstrap qualifier
27
+ */
28
+ readonly qualifier?: string;
29
+ }
30
+ /**
31
+ * Class that controls scheduling of the background stack refresh
32
+ */
33
+ export declare class BackgroundStackRefresh {
34
+ private readonly props;
35
+ private timeout?;
36
+ private lastRefreshTime;
37
+ private queuedPromises;
38
+ constructor(props: BackgroundStackRefreshProps);
39
+ start(): void;
40
+ private refresh;
41
+ private justRefreshedStacks;
42
+ /**
43
+ * Checks if the last successful background refresh happened within the specified time frame.
44
+ * If the last refresh is older than the specified time frame, it returns a Promise that resolves
45
+ * when the next background refresh completes or rejects if the refresh takes too long.
46
+ */
47
+ noOlderThan(ms: number): Promise<unknown>;
48
+ stop(): void;
49
+ }
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackgroundStackRefresh = exports.ActiveAssetCache = void 0;
4
+ exports.refreshStacks = refreshStacks;
5
+ const private_1 = require("../io/private");
6
+ const toolkit_error_1 = require("../toolkit-error");
7
+ class ActiveAssetCache {
8
+ stacks = new Set();
9
+ rememberStack(stackTemplate) {
10
+ this.stacks.add(stackTemplate);
11
+ }
12
+ contains(asset) {
13
+ for (const stack of this.stacks) {
14
+ if (stack.includes(asset)) {
15
+ return true;
16
+ }
17
+ }
18
+ return false;
19
+ }
20
+ }
21
+ exports.ActiveAssetCache = ActiveAssetCache;
22
+ async function paginateSdkCall(cb) {
23
+ let finished = false;
24
+ let nextToken;
25
+ while (!finished) {
26
+ nextToken = await cb(nextToken);
27
+ if (nextToken === undefined) {
28
+ finished = true;
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * Fetches all relevant stack templates from CloudFormation. It ignores the following stacks:
34
+ * - stacks in DELETE_COMPLETE or DELETE_IN_PROGRESS stage
35
+ * - stacks that are using a different bootstrap qualifier
36
+ */
37
+ async function fetchAllStackTemplates(cfn, ioHelper, qualifier) {
38
+ const stackNames = [];
39
+ await paginateSdkCall(async (nextToken) => {
40
+ const stacks = await cfn.listStacks({ NextToken: nextToken });
41
+ // We ignore stacks with these statuses because their assets are no longer live
42
+ const ignoredStatues = ['CREATE_FAILED', 'DELETE_COMPLETE', 'DELETE_IN_PROGRESS', 'DELETE_FAILED', 'REVIEW_IN_PROGRESS'];
43
+ stackNames.push(...(stacks.StackSummaries ?? [])
44
+ .filter((s) => !ignoredStatues.includes(s.StackStatus))
45
+ .map((s) => s.StackId ?? s.StackName));
46
+ return stacks.NextToken;
47
+ });
48
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Parsing through ${stackNames.length} stacks`));
49
+ const templates = [];
50
+ for (const stack of stackNames) {
51
+ let summary;
52
+ summary = await cfn.getTemplateSummary({
53
+ StackName: stack,
54
+ });
55
+ if (bootstrapFilter(summary.Parameters, qualifier)) {
56
+ // This stack is definitely bootstrapped to a different qualifier so we can safely ignore it
57
+ continue;
58
+ }
59
+ else {
60
+ const template = await cfn.getTemplate({
61
+ StackName: stack,
62
+ });
63
+ templates.push((template.TemplateBody ?? '') + JSON.stringify(summary?.Parameters));
64
+ }
65
+ }
66
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg('Done parsing through stacks'));
67
+ return templates;
68
+ }
69
+ /**
70
+ * Filter out stacks that we KNOW are using a different bootstrap qualifier
71
+ * This is mostly necessary for the integration tests that can run the same app (with the same assets)
72
+ * under different qualifiers.
73
+ * This is necessary because a stack under a different bootstrap could coincidentally reference the same hash
74
+ * and cause a false negative (cause an asset to be preserved when its isolated)
75
+ * This is intentionally done in a way where we ONLY filter out stacks that are meant for a different qualifier
76
+ * because we are okay with false positives.
77
+ */
78
+ function bootstrapFilter(parameters, qualifier) {
79
+ const bootstrapVersion = parameters?.find((p) => p.ParameterKey === 'BootstrapVersion');
80
+ const splitBootstrapVersion = bootstrapVersion?.DefaultValue?.split('/');
81
+ // We find the qualifier in a specific part of the bootstrap version parameter
82
+ return (qualifier &&
83
+ splitBootstrapVersion &&
84
+ splitBootstrapVersion.length == 4 &&
85
+ splitBootstrapVersion[2] != qualifier);
86
+ }
87
+ async function refreshStacks(cfn, ioHelper, activeAssets, qualifier) {
88
+ try {
89
+ const stacks = await fetchAllStackTemplates(cfn, ioHelper, qualifier);
90
+ for (const stack of stacks) {
91
+ activeAssets.rememberStack(stack);
92
+ }
93
+ }
94
+ catch (err) {
95
+ throw new toolkit_error_1.ToolkitError(`Error refreshing stacks: ${err}`);
96
+ }
97
+ }
98
+ /**
99
+ * Class that controls scheduling of the background stack refresh
100
+ */
101
+ class BackgroundStackRefresh {
102
+ props;
103
+ timeout;
104
+ lastRefreshTime;
105
+ queuedPromises = [];
106
+ constructor(props) {
107
+ this.props = props;
108
+ this.lastRefreshTime = Date.now();
109
+ }
110
+ start() {
111
+ // Since start is going to be called right after the first invocation of refreshStacks,
112
+ // lets wait some time before beginning the background refresh.
113
+ this.timeout = setTimeout(() => this.refresh(), 300_000); // 5 minutes
114
+ }
115
+ async refresh() {
116
+ const startTime = Date.now();
117
+ await refreshStacks(this.props.cfn, this.props.ioHelper, this.props.activeAssets, this.props.qualifier);
118
+ this.justRefreshedStacks();
119
+ // If the last invocation of refreshStacks takes <5 minutes, the next invocation starts 5 minutes after the last one started.
120
+ // If the last invocation of refreshStacks takes >5 minutes, the next invocation starts immediately.
121
+ this.timeout = setTimeout(() => this.refresh(), Math.max(startTime + 300_000 - Date.now(), 0));
122
+ }
123
+ justRefreshedStacks() {
124
+ this.lastRefreshTime = Date.now();
125
+ for (const p of this.queuedPromises.splice(0, this.queuedPromises.length)) {
126
+ p(undefined);
127
+ }
128
+ }
129
+ /**
130
+ * Checks if the last successful background refresh happened within the specified time frame.
131
+ * If the last refresh is older than the specified time frame, it returns a Promise that resolves
132
+ * when the next background refresh completes or rejects if the refresh takes too long.
133
+ */
134
+ noOlderThan(ms) {
135
+ const horizon = Date.now() - ms;
136
+ // The last refresh happened within the time frame
137
+ if (this.lastRefreshTime >= horizon) {
138
+ return Promise.resolve();
139
+ }
140
+ // The last refresh happened earlier than the time frame
141
+ // We will wait for the latest refresh to land or reject if it takes too long
142
+ return Promise.race([
143
+ new Promise(resolve => this.queuedPromises.push(resolve)),
144
+ new Promise((_, reject) => setTimeout(() => reject(new toolkit_error_1.ToolkitError('refreshStacks took too long; the background thread likely threw an error')), ms)),
145
+ ]);
146
+ }
147
+ stop() {
148
+ clearTimeout(this.timeout);
149
+ }
150
+ }
151
+ exports.BackgroundStackRefresh = BackgroundStackRefresh;
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stcmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0YWNrLXJlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUdBLHNDQVNDO0FBMUdELDJDQUFrRDtBQUNsRCxvREFBZ0Q7QUFFaEQsTUFBYSxnQkFBZ0I7SUFDVixNQUFNLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFMUMsYUFBYSxDQUFDLGFBQXFCO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBYTtRQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBZkQsNENBZUM7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQXVEO0lBQ3BGLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNyQixJQUFJLFNBQTZCLENBQUM7SUFDbEMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsc0JBQXNCLENBQUMsR0FBMEIsRUFBRSxRQUFrQixFQUFFLFNBQWtCO0lBQ3RHLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFD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Q0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLEVBQVU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUVoQyxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsNkVBQTZFO1FBQzdFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNsQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLDRCQUFZLENBQUMsMEVBQTBFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZKLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJO1FBQ1QsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUF6REQsd0RBeURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJEZWNsYXJhdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IElDbG91ZEZvcm1hdGlvbkNsaWVudCB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgQWN0aXZlQXNzZXRDYWNoZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgcmVtZW1iZXJTdGFjayhzdGFja1RlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0YWNrcy5hZGQoc3RhY2tUZW1wbGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgY29udGFpbnMoYXNzZXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgdGhpcy5zdGFja3MpIHtcbiAgICAgIGlmIChzdGFjay5pbmNsdWRlcyhhc3NldCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVNka0NhbGwoY2I6IChuZXh0VG9rZW4/OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPikge1xuICBsZXQgZmluaXNoZWQgPSBmYWxzZTtcbiAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB3aGlsZSAoIWZpbmlzaGVkKSB7XG4gICAgbmV4dFRva2VuID0gYXdhaXQgY2IobmV4dFRva2VuKTtcbiAgICBpZiAobmV4dFRva2VuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFsbCByZWxldmFudCBzdGFjayB0ZW1wbGF0ZXMgZnJvbSBDbG91ZEZvcm1hdGlvbi4gSXQgaWdub3JlcyB0aGUgZm9sbG93aW5nIHN0YWNrczpcbiAqIC0gc3RhY2tzIGluIERFTEVURV9DT01QTEVURSBvciBERUxFVEVfSU5fUFJPR1JFU1Mgc3RhZ2VcbiAqIC0gc3RhY2tzIHRoYXQgYXJlIHVzaW5nIGEgZGlmZmVyZW50IGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hBbGxTdGFja1RlbXBsYXRlcyhjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudCwgaW9IZWxwZXI6IElvSGVscGVyLCBxdWFsaWZpZXI/OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RhY2tOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVTZGtDYWxsKGFzeW5jIChuZXh0VG9rZW4pID0+IHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBjZm4ubGlzdFN0YWNrcyh7IE5leHRUb2tlbjogbmV4dFRva2VuIH0pO1xuXG4gICAgLy8gV2UgaWdub3JlIHN0YWNrcyB3aXRoIHRoZXNlIHN0YXR1c2VzIGJlY2F1c2UgdGhlaXIgYXNzZXRzIGFyZSBubyBsb25nZXIgbGl2ZVxuICAgIGNvbnN0IGlnbm9yZWRTdGF0dWVzID0gWydDUkVBVEVfRkFJTEVEJywgJ0RFTEVURV9DT01QTEVURScsICdERUxFVEVfSU5fUFJPR1JFU1MnLCAnREVMRVRFX0ZBSUxFRCcsICdSRVZJRVdfSU5fUFJPR1JFU1MnXTtcbiAgICBzdGFja05hbWVzLnB1c2goXG4gICAgICAuLi4oc3RhY2tzLlN0YWNrU3VtbWFyaWVzID8/IFtdKVxuICAgICAgICAuZmlsdGVyKChzOiBhbnkpID0+ICFpZ25vcmVkU3RhdHVlcy5pbmNsdWRlcyhzLlN0YWNrU3RhdHVzKSlcbiAgICAgICAgLm1hcCgoczogYW55KSA9PiBzLlN0YWNrSWQgPz8gcy5TdGFja05hbWUpLFxuICAgICk7XG5cbiAgICByZXR1cm4gc3RhY2tzLk5leHRUb2tlbjtcbiAgfSk7XG5cbiAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFBhcnNpbmcgdGhyb3VnaCAke3N0YWNrTmFtZXMubGVuZ3RofSBzdGFja3NgKSk7XG5cbiAgY29uc3QgdGVtcGxhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrTmFtZXMpIHtcbiAgICBsZXQgc3VtbWFyeTtcbiAgICBzdW1tYXJ5ID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlU3VtbWFyeSh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgIH0pO1xuXG4gICAgaWYgKGJvb3RzdHJhcEZpbHRlcihzdW1tYXJ5LlBhcmFtZXRlcnMsIHF1YWxpZmllcikpIHtcbiAgICAgIC8vIFRoaXMgc3RhY2sgaXMgZGVmaW5pdGVseSBib290c3RyYXBwZWQgdG8gYSBkaWZmZXJlbnQgcXVhbGlmaWVyIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlIGl0XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlcy5wdXNoKCh0ZW1wbGF0ZS5UZW1wbGF0ZUJvZHkgPz8gJycpICsgSlNPTi5zdHJpbmdpZnkoc3VtbWFyeT8uUGFyYW1ldGVycykpO1xuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKCdEb25lIHBhcnNpbmcgdGhyb3VnaCBzdGFja3MnKSk7XG5cbiAgcmV0dXJuIHRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IHdlIEtOT1cgYXJlIHVzaW5nIGEgZGlmZmVyZW50IGJvb3RzdHJhcCBxdWFsaWZpZXJcbiAqIFRoaXMgaXMgbW9zdGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGludGVncmF0aW9uIHRlc3RzIHRoYXQgY2FuIHJ1biB0aGUgc2FtZSBhcHAgKHdpdGggdGhlIHNhbWUgYXNzZXRzKVxuICogdW5kZXIgZGlmZmVyZW50IHF1YWxpZmllcnMuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGEgc3RhY2sgdW5kZXIgYSBkaWZmZXJlbnQgYm9vdHN0cmFwIGNvdWxkIGNvaW5jaWRlbnRhbGx5IHJlZmVyZW5jZSB0aGUgc2FtZSBoYXNoXG4gKiBhbmQgY2F1c2UgYSBmYWxzZSBuZWdhdGl2ZSAoY2F1c2UgYW4gYXNzZXQgdG8gYmUgcHJlc2VydmVkIHdoZW4gaXRzIGlzb2xhdGVkKVxuICogVGhpcyBpcyBpbnRlbnRpb25hbGx5IGRvbmUgaW4gYSB3YXkgd2hlcmUgd2UgT05MWSBmaWx0ZXIgb3V0IHN0YWNrcyB0aGF0IGFyZSBtZWFudCBmb3IgYSBkaWZmZXJlbnQgcXVhbGlmaWVyXG4gKiBiZWNhdXNlIHdlIGFyZSBva2F5IHdpdGggZmFsc2UgcG9zaXRpdmVzLlxuICovXG5mdW5jdGlvbiBib290c3RyYXBGaWx0ZXIocGFyYW1ldGVycz86IFBhcmFtZXRlckRlY2xhcmF0aW9uW10sIHF1YWxpZmllcj86IHN0cmluZykge1xuICBjb25zdCBib290c3RyYXBWZXJzaW9uID0gcGFyYW1ldGVycz8uZmluZCgocCkgPT4gcC5QYXJhbWV0ZXJLZXkgPT09ICdCb290c3RyYXBWZXJzaW9uJyk7XG4gIGNvbnN0IHNwbGl0Qm9vdHN0cmFwVmVyc2lvbiA9IGJvb3RzdHJhcFZlcnNpb24/LkRlZmF1bHRWYWx1ZT8uc3BsaXQoJy8nKTtcbiAgLy8gV2UgZmluZCB0aGUgcXVhbGlmaWVyIGluIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyXG4gIHJldHVybiAocXVhbGlmaWVyICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uLmxlbmd0aCA9PSA0ICYmXG4gICAgICAgICAgc3BsaXRCb290c3RyYXBWZXJzaW9uWzJdICE9IHF1YWxpZmllcik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoU3RhY2tzKGNmbjogSUNsb3VkRm9ybWF0aW9uQ2xpZW50LCBpb0hlbHBlcjogSW9IZWxwZXIsIGFjdGl2ZUFzc2V0czogQWN0aXZlQXNzZXRDYWNoZSwgcXVhbGlmaWVyPzogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgZmV0Y2hBbGxTdGFja1RlbXBsYXRlcyhjZm4sIGlvSGVscGVyLCBxdWFsaWZpZXIpO1xuICAgIGZvciAoY29uc3Qgc3RhY2sgb2Ygc3RhY2tzKSB7XG4gICAgICBhY3RpdmVBc3NldHMucmVtZW1iZXJTdGFjayhzdGFjayk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBFcnJvciByZWZyZXNoaW5nIHN0YWNrczogJHtlcnJ9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYWNrZ3JvdW5kIFN0YWNrIFJlZnJlc2ggcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ0ZOIFNESyBoYW5kbGVyXG4gICAqL1xuICByZWFkb25seSBjZm46IElDbG91ZEZvcm1hdGlvbkNsaWVudDtcblxuICAvKipcbiAgICogVXNlZCB0byBzZW5kIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIC8qKlxuICAgKiBBY3RpdmUgQXNzZXQgc3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aXZlQXNzZXRzOiBBY3RpdmVBc3NldENhY2hlO1xuXG4gIC8qKlxuICAgKiBTdGFjayBib290c3RyYXAgcXVhbGlmaWVyXG4gICAqL1xuICByZWFkb25seSBxdWFsaWZpZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgdGhhdCBjb250cm9scyBzY2hlZHVsaW5nIG9mIHRoZSBiYWNrZ3JvdW5kIHN0YWNrIHJlZnJlc2hcbiAqL1xuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRTdGFja1JlZnJlc2gge1xuICBwcml2YXRlIHRpbWVvdXQ/OiBOb2RlSlMuVGltZW91dDtcbiAgcHJpdmF0ZSBsYXN0UmVmcmVzaFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBxdWV1ZWRQcm9taXNlczogQXJyYXk8KHZhbHVlOiB1bmtub3duKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcykge1xuICAgIHRoaXMubGFzdFJlZnJlc2hUaW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydCgpIHtcbiAgICAvLyBTaW5jZSBzdGFydCBpcyBnb2luZyB0byBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIGZpcnN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyxcbiAgICAvLyBsZXRzIHdhaXQgc29tZSB0aW1lIGJlZm9yZSBiZWdpbm5pbmcgdGhlIGJhY2tncm91bmQgcmVmcmVzaC5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaCgpLCAzMDBfMDAwKTsgLy8gNSBtaW51dGVzXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIGF3YWl0IHJlZnJlc2hTdGFja3ModGhpcy5wcm9wcy5jZm4sIHRoaXMucHJvcHMuaW9IZWxwZXIsIHRoaXMucHJvcHMuYWN0aXZlQXNzZXRzLCB0aGlzLnByb3BzLnF1YWxpZmllcik7XG4gICAgdGhpcy5qdXN0UmVmcmVzaGVkU3RhY2tzKCk7XG5cbiAgICAvLyBJZiB0aGUgbGFzdCBpbnZvY2F0aW9uIG9mIHJlZnJlc2hTdGFja3MgdGFrZXMgPDUgbWludXRlcywgdGhlIG5leHQgaW52b2NhdGlvbiBzdGFydHMgNSBtaW51dGVzIGFmdGVyIHRoZSBsYXN0IG9uZSBzdGFydGVkLlxuICAgIC8vIElmIHRoZSBsYXN0IGludm9jYXRpb24gb2YgcmVmcmVzaFN0YWNrcyB0YWtlcyA+NSBtaW51dGVzLCB0aGUgbmV4dCBpbnZvY2F0aW9uIHN0YXJ0cyBpbW1lZGlhdGVseS5cbiAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVmcmVzaCgpLCBNYXRoLm1heChzdGFydFRpbWUgKyAzMDBfMDAwIC0gRGF0ZS5ub3coKSwgMCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBqdXN0UmVmcmVzaGVkU3RhY2tzKCkge1xuICAgIHRoaXMubGFzdFJlZnJlc2hUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5xdWV1ZWRQcm9taXNlcy5zcGxpY2UoMCwgdGhpcy5xdWV1ZWRQcm9taXNlcy5sZW5ndGgpKSB7XG4gICAgICBwKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgbGFzdCBzdWNjZXNzZnVsIGJhY2tncm91bmQgcmVmcmVzaCBoYXBwZW5lZCB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lIGZyYW1lLlxuICAgKiBJZiB0aGUgbGFzdCByZWZyZXNoIGlzIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCB0aW1lIGZyYW1lLCBpdCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gICAqIHdoZW4gdGhlIG5leHQgYmFja2dyb3VuZCByZWZyZXNoIGNvbXBsZXRlcyBvciByZWplY3RzIGlmIHRoZSByZWZyZXNoIHRha2VzIHRvbyBsb25nLlxuICAgKi9cbiAgcHVibGljIG5vT2xkZXJUaGFuKG1zOiBudW1iZXIpIHtcbiAgICBjb25zdCBob3Jpem9uID0gRGF0ZS5ub3coKSAtIG1zO1xuXG4gICAgLy8gVGhlIGxhc3QgcmVmcmVzaCBoYXBwZW5lZCB3aXRoaW4gdGhlIHRpbWUgZnJhbWVcbiAgICBpZiAodGhpcy5sYXN0UmVmcmVzaFRpbWUgPj0gaG9yaXpvbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZSBsYXN0IHJlZnJlc2ggaGFwcGVuZWQgZWFybGllciB0aGFuIHRoZSB0aW1lIGZyYW1lXG4gICAgLy8gV2Ugd2lsbCB3YWl0IGZvciB0aGUgbGF0ZXN0IHJlZnJlc2ggdG8gbGFuZCBvciByZWplY3QgaWYgaXQgdGFrZXMgdG9vIGxvbmdcbiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICAgIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gdGhpcy5xdWV1ZWRQcm9taXNlcy5wdXNoKHJlc29sdmUpKSxcbiAgICAgIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBUb29sa2l0RXJyb3IoJ3JlZnJlc2hTdGFja3MgdG9vayB0b28gbG9uZzsgdGhlIGJhY2tncm91bmQgdGhyZWFkIGxpa2VseSB0aHJldyBhbiBlcnJvcicpKSwgbXMpKSxcbiAgICBdKTtcbiAgfVxuXG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { type HotswapChange } from './common';
2
+ import type { ResourceChange } from '../../payloads/hotswap';
3
+ import type { EvaluateCloudFormationTemplate } from '../cloudformation';
4
+ export declare function isHotswappableAppSyncChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isHotswappableAppSyncChange = isHotswappableAppSyncChange;
4
+ const common_1 = require("./common");
5
+ const util_1 = require("../../util");
6
+ const toolkit_error_1 = require("../toolkit-error");
7
+ async function isHotswappableAppSyncChange(logicalId, change, evaluateCfnTemplate) {
8
+ const isResolver = change.newValue.Type === 'AWS::AppSync::Resolver';
9
+ const isFunction = change.newValue.Type === 'AWS::AppSync::FunctionConfiguration';
10
+ const isGraphQLSchema = change.newValue.Type === 'AWS::AppSync::GraphQLSchema';
11
+ const isAPIKey = change.newValue.Type === 'AWS::AppSync::ApiKey';
12
+ if (!isResolver && !isFunction && !isGraphQLSchema && !isAPIKey) {
13
+ return [];
14
+ }
15
+ const ret = [];
16
+ const classifiedChanges = (0, common_1.classifyChanges)(change, [
17
+ 'RequestMappingTemplate',
18
+ 'RequestMappingTemplateS3Location',
19
+ 'ResponseMappingTemplate',
20
+ 'ResponseMappingTemplateS3Location',
21
+ 'Code',
22
+ 'CodeS3Location',
23
+ 'Definition',
24
+ 'DefinitionS3Location',
25
+ 'Expires',
26
+ ]);
27
+ classifiedChanges.reportNonHotswappablePropertyChanges(ret);
28
+ const namesOfHotswappableChanges = Object.keys(classifiedChanges.hotswappableProps);
29
+ if (namesOfHotswappableChanges.length > 0) {
30
+ let physicalName = undefined;
31
+ const arn = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, isFunction ? change.newValue.Properties?.Name : undefined);
32
+ if (isResolver) {
33
+ const arnParts = arn?.split('/');
34
+ physicalName = arnParts ? `${arnParts[3]}.${arnParts[5]}` : undefined;
35
+ }
36
+ else {
37
+ physicalName = arn;
38
+ }
39
+ // nothing do here
40
+ if (!physicalName) {
41
+ return ret;
42
+ }
43
+ ret.push({
44
+ change: {
45
+ cause: change,
46
+ resources: [{
47
+ logicalId,
48
+ resourceType: change.newValue.Type,
49
+ physicalName,
50
+ metadata: evaluateCfnTemplate.metadataFor(logicalId),
51
+ }],
52
+ },
53
+ hotswappable: true,
54
+ service: 'appsync',
55
+ apply: async (sdk) => {
56
+ const sdkProperties = {
57
+ ...change.oldValue.Properties,
58
+ Definition: change.newValue.Properties?.Definition,
59
+ DefinitionS3Location: change.newValue.Properties?.DefinitionS3Location,
60
+ requestMappingTemplate: change.newValue.Properties?.RequestMappingTemplate,
61
+ requestMappingTemplateS3Location: change.newValue.Properties?.RequestMappingTemplateS3Location,
62
+ responseMappingTemplate: change.newValue.Properties?.ResponseMappingTemplate,
63
+ responseMappingTemplateS3Location: change.newValue.Properties?.ResponseMappingTemplateS3Location,
64
+ code: change.newValue.Properties?.Code,
65
+ codeS3Location: change.newValue.Properties?.CodeS3Location,
66
+ expires: change.newValue.Properties?.Expires,
67
+ };
68
+ const evaluatedResourceProperties = await evaluateCfnTemplate.evaluateCfnExpression(sdkProperties);
69
+ const sdkRequestObject = (0, util_1.transformObjectKeys)(evaluatedResourceProperties, util_1.lowerCaseFirstCharacter);
70
+ // resolve s3 location files as SDK doesn't take in s3 location but inline code
71
+ if (sdkRequestObject.requestMappingTemplateS3Location) {
72
+ sdkRequestObject.requestMappingTemplate = await fetchFileFromS3(sdkRequestObject.requestMappingTemplateS3Location, sdk);
73
+ delete sdkRequestObject.requestMappingTemplateS3Location;
74
+ }
75
+ if (sdkRequestObject.responseMappingTemplateS3Location) {
76
+ sdkRequestObject.responseMappingTemplate = await fetchFileFromS3(sdkRequestObject.responseMappingTemplateS3Location, sdk);
77
+ delete sdkRequestObject.responseMappingTemplateS3Location;
78
+ }
79
+ if (sdkRequestObject.definitionS3Location) {
80
+ sdkRequestObject.definition = await fetchFileFromS3(sdkRequestObject.definitionS3Location, sdk);
81
+ delete sdkRequestObject.definitionS3Location;
82
+ }
83
+ if (sdkRequestObject.codeS3Location) {
84
+ sdkRequestObject.code = await fetchFileFromS3(sdkRequestObject.codeS3Location, sdk);
85
+ delete sdkRequestObject.codeS3Location;
86
+ }
87
+ if (isResolver) {
88
+ await sdk.appsync().updateResolver(sdkRequestObject);
89
+ }
90
+ else if (isFunction) {
91
+ // Function version is only applicable when using VTL and mapping templates
92
+ // Runtime only applicable when using code (JS mapping templates)
93
+ if (sdkRequestObject.code) {
94
+ delete sdkRequestObject.functionVersion;
95
+ }
96
+ else {
97
+ delete sdkRequestObject.runtime;
98
+ }
99
+ const functions = await sdk.appsync().listFunctions({ apiId: sdkRequestObject.apiId });
100
+ const { functionId } = functions.find((fn) => fn.name === physicalName) ?? {};
101
+ // Updating multiple functions at the same time or along with graphql schema results in `ConcurrentModificationException`
102
+ await exponentialBackOffRetry(() => sdk.appsync().updateFunction({
103
+ ...sdkRequestObject,
104
+ functionId: functionId,
105
+ }), 6, 1000, 'ConcurrentModificationException');
106
+ }
107
+ else if (isGraphQLSchema) {
108
+ let schemaCreationResponse = await sdk
109
+ .appsync()
110
+ .startSchemaCreation(sdkRequestObject);
111
+ while (schemaCreationResponse.status &&
112
+ ['PROCESSING', 'DELETING'].some((status) => status === schemaCreationResponse.status)) {
113
+ await sleep(1000); // poll every second
114
+ const getSchemaCreationStatusRequest = {
115
+ apiId: sdkRequestObject.apiId,
116
+ };
117
+ schemaCreationResponse = await sdk.appsync().getSchemaCreationStatus(getSchemaCreationStatusRequest);
118
+ }
119
+ if (schemaCreationResponse.status === 'FAILED') {
120
+ throw new toolkit_error_1.ToolkitError(schemaCreationResponse.details ?? 'Schema creation has failed.');
121
+ }
122
+ }
123
+ else {
124
+ // isApiKey
125
+ if (!sdkRequestObject.id) {
126
+ // ApiKeyId is optional in CFN but required in SDK. Grab the KeyId from physicalArn if not available as part of CFN template
127
+ const arnParts = physicalName?.split('/');
128
+ if (arnParts && arnParts.length === 4) {
129
+ sdkRequestObject.id = arnParts[3];
130
+ }
131
+ }
132
+ await sdk.appsync().updateApiKey(sdkRequestObject);
133
+ }
134
+ },
135
+ });
136
+ }
137
+ return ret;
138
+ }
139
+ async function fetchFileFromS3(s3Url, sdk) {
140
+ const s3PathParts = s3Url.split('/');
141
+ const s3Bucket = s3PathParts[2]; // first two are "s3:" and "" due to s3://
142
+ const s3Key = s3PathParts.splice(3).join('/'); // after removing first three we reconstruct the key
143
+ return (await sdk.s3().getObject({ Bucket: s3Bucket, Key: s3Key })).Body?.transformToString();
144
+ }
145
+ async function exponentialBackOffRetry(fn, numOfRetries, backOff, errorCodeToRetry) {
146
+ try {
147
+ await fn();
148
+ }
149
+ catch (error) {
150
+ if (error && error.name === errorCodeToRetry && numOfRetries > 0) {
151
+ await sleep(backOff); // time to wait doubles everytime function fails, starts at 1 second
152
+ await exponentialBackOffRetry(fn, numOfRetries - 1, backOff * 2, errorCodeToRetry);
153
+ }
154
+ else {
155
+ throw error;
156
+ }
157
+ }
158
+ }
159
+ async function sleep(ms) {
160
+ return new Promise((ok) => setTimeout(ok, ms));
161
+ }
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1tYXBwaW5nLXRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwcHN5bmMtbWFwcGluZy10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxrRUE0SkM7QUF2S0QscUNBR2tCO0FBRWxCLHFDQUEwRTtBQUkxRSxvREFBZ0Q7QUFFekMsS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxTQUFpQixFQUNqQixNQUFzQixFQUN0QixtQkFBbUQ7SUFFbkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssd0JBQXdCLENBQUM7SUFDckUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUsscUNBQXFDLENBQUM7SUFDbEYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssNkJBQTZCLENBQUM7SUFDL0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLENBQUM7SUFDakUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFvQixFQUFFLENBQUM7SUFFaEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHdCQUFlLEVBQUMsTUFBTSxFQUFFO1FBQ2hELHdCQUF3QjtRQUN4QixrQ0FBa0M7UUFDbEMseUJBQXlCO1FBQ3pCLG1DQUFtQztRQUNuQyxNQUFNO1FBQ04sZ0JBQWdCO1FBQ2hCLFlBQVk7UUFDWixzQkFBc0I7UUFDdEIsU0FBUztLQUNWLENBQUMsQ0FBQztJQUNILGlCQUFpQixDQUFDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTVELE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFB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LEVBQUUsQ0FBQztJQUNiLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsb0VBQW9FO1lBQzFGLE1BQU0sdUJBQXVCLENBQUMsRUFBRSxFQUFFLFlBQVksR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCxcbiAgR2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNDb21tYW5kSW5wdXQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hcHBzeW5jJztcbmltcG9ydCB7XG4gIHR5cGUgSG90c3dhcENoYW5nZSxcbiAgY2xhc3NpZnlDaGFuZ2VzLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMvaG90c3dhcCc7XG5pbXBvcnQgeyBsb3dlckNhc2VGaXJzdENoYXJhY3RlciwgdHJhbnNmb3JtT2JqZWN0S2V5cyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcblxuaW1wb3J0IHR5cGUgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0LWVycm9yJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlQXBwU3luY0NoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsXG4gIGNoYW5nZTogUmVzb3VyY2VDaGFuZ2UsXG4gIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8SG90c3dhcENoYW5nZVtdPiB7XG4gIGNvbnN0IGlzUmVzb2x2ZXIgPSBjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInO1xuICBjb25zdCBpc0Z1bmN0aW9uID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvbic7XG4gIGNvbnN0IGlzR3JhcGhRTFNjaGVtYSA9IGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpBcHBTeW5jOjpHcmFwaFFMU2NoZW1hJztcbiAgY29uc3QgaXNBUElLZXkgPSBjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6QXBwU3luYzo6QXBpS2V5JztcbiAgaWYgKCFpc1Jlc29sdmVyICYmICFpc0Z1bmN0aW9uICYmICFpc0dyYXBoUUxTY2hlbWEgJiYgIWlzQVBJS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcmV0OiBIb3Rzd2FwQ2hhbmdlW10gPSBbXTtcblxuICBjb25zdCBjbGFzc2lmaWVkQ2hhbmdlcyA9IGNsYXNzaWZ5Q2hhbmdlcyhjaGFuZ2UsIFtcbiAgICAnUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZScsXG4gICAgJ1JlcXVlc3RNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uJyxcbiAgICAnUmVzcG9uc2VNYXBwaW5nVGVtcGxhdGUnLFxuICAgICdSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24nLFxuICAgICdDb2RlJyxcbiAgICAnQ29kZVMzTG9jYXRpb24nLFxuICAgICdEZWZpbml0aW9uJyxcbiAgICAnRGVmaW5pdGlvblMzTG9jYXRpb24nLFxuICAgICdFeHBpcmVzJyxcbiAgXSk7XG4gIGNsYXNzaWZpZWRDaGFuZ2VzLnJlcG9ydE5vbkhvdHN3YXBwYWJsZVByb3BlcnR5Q2hhbmdlcyhyZXQpO1xuXG4gIGNvbnN0IG5hbWVzT2ZIb3Rzd2FwcGFibGVDaGFuZ2VzID0gT2JqZWN0LmtleXMoY2xhc3NpZmllZENoYW5nZXMuaG90c3dhcHBhYmxlUHJvcHMpO1xuICBpZiAobmFtZXNPZkhvdHN3YXBwYWJsZUNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgIGxldCBwaHlzaWNhbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhcm4gPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lKFxuICAgICAgbG9naWNhbElkLFxuICAgICAgaXNGdW5jdGlvbiA/IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5OYW1lIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgaWYgKGlzUmVzb2x2ZXIpIHtcbiAgICAgIGNvbnN0IGFyblBhcnRzID0gYXJuPy5zcGxpdCgnLycpO1xuICAgICAgcGh5c2ljYWxOYW1lID0gYXJuUGFydHMgPyBgJHthcm5QYXJ0c1szXX0uJHthcm5QYXJ0c1s1XX1gIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBwaHlzaWNhbE5hbWUgPSBhcm47XG4gICAgfVxuXG4gICAgLy8gbm90aGluZyBkbyBoZXJlXG4gICAgaWYgKCFwaHlzaWNhbE5hbWUpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goe1xuICAgICAgY2hhbmdlOiB7XG4gICAgICAgIGNhdXNlOiBjaGFuZ2UsXG4gICAgICAgIHJlc291cmNlczogW3tcbiAgICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBjaGFuZ2UubmV3VmFsdWUuVHlwZSxcbiAgICAgICAgICBwaHlzaWNhbE5hbWUsXG4gICAgICAgICAgbWV0YWRhdGE6IGV2YWx1YXRlQ2ZuVGVtcGxhdGUubWV0YWRhdGFGb3IobG9naWNhbElkKSxcbiAgICAgICAgfV0sXG4gICAgICB9LFxuICAgICAgaG90c3dhcHBhYmxlOiB0cnVlLFxuICAgICAgc2VydmljZTogJ2FwcHN5bmMnLFxuICAgICAgYXBwbHk6IGFzeW5jIChzZGs6IFNESykgPT4ge1xuICAgICAgICBjb25zdCBzZGtQcm9wZXJ0aWVzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgICAgICAgICAuLi5jaGFuZ2Uub2xkVmFsdWUuUHJvcGVydGllcyxcbiAgICAgICAgICBEZWZpbml0aW9uOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uRGVmaW5pdGlvbixcbiAgICAgICAgICBEZWZpbml0aW9uUzNMb2NhdGlvbjogY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LkRlZmluaXRpb25TM0xvY2F0aW9uLFxuICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SZXF1ZXN0TWFwcGluZ1RlbXBsYXRlLFxuICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24sXG4gICAgICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SZXNwb25zZU1hcHBpbmdUZW1wbGF0ZSxcbiAgICAgICAgICByZXNwb25zZU1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb246IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SZXNwb25zZU1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24sXG4gICAgICAgICAgY29kZTogY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LkNvZGUsXG4gICAgICAgICAgY29kZVMzTG9jYXRpb246IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5Db2RlUzNMb2NhdGlvbixcbiAgICAgICAgICBleHBpcmVzOiBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uRXhwaXJlcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkUmVzb3VyY2VQcm9wZXJ0aWVzID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oc2RrUHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHNka1JlcXVlc3RPYmplY3QgPSB0cmFuc2Zvcm1PYmplY3RLZXlzKGV2YWx1YXRlZFJlc291cmNlUHJvcGVydGllcywgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIpO1xuXG4gICAgICAgIC8vIHJlc29sdmUgczMgbG9jYXRpb24gZmlsZXMgYXMgU0RLIGRvZXNuJ3QgdGFrZSBpbiBzMyBsb2NhdGlvbiBidXQgaW5saW5lIGNvZGVcbiAgICAgICAgaWYgKHNka1JlcXVlc3RPYmplY3QucmVxdWVzdE1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb24pIHtcbiAgICAgICAgICBzZGtSZXF1ZXN0T2JqZWN0LnJlcXVlc3RNYXBwaW5nVGVtcGxhdGUgPSBhd2FpdCBmZXRjaEZpbGVGcm9tUzMoXG4gICAgICAgICAgICBzZGtSZXF1ZXN0T2JqZWN0LnJlcXVlc3RNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uLFxuICAgICAgICAgICAgc2RrLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIHNka1JlcXVlc3RPYmplY3QucmVxdWVzdE1hcHBpbmdUZW1wbGF0ZVMzTG9jYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNka1JlcXVlc3RPYmplY3QucmVzcG9uc2VNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uKSB7XG4gICAgICAgICAgc2RrUmVxdWVzdE9iamVjdC5yZXNwb25zZU1hcHBpbmdUZW1wbGF0ZSA9IGF3YWl0IGZldGNoRmlsZUZyb21TMyhcbiAgICAgICAgICAgIHNka1JlcXVlc3RPYmplY3QucmVzcG9uc2VNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uLFxuICAgICAgICAgICAgc2RrLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIHNka1JlcXVlc3RPYmplY3QucmVzcG9uc2VNYXBwaW5nVGVtcGxhdGVTM0xvY2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZGtSZXF1ZXN0T2JqZWN0LmRlZmluaXRpb25TM0xvY2F0aW9uKSB7XG4gICAgICAgICAgc2RrUmVxdWVzdE9iamVjdC5kZWZpbml0aW9uID0gYXdhaXQgZmV0Y2hGaWxlRnJvbVMzKHNka1JlcXVlc3RPYmplY3QuZGVmaW5pdGlvblMzTG9jYXRpb24sIHNkayk7XG4gICAgICAgICAgZGVsZXRlIHNka1JlcXVlc3RPYmplY3QuZGVmaW5pdGlvblMzTG9jYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNka1JlcXVlc3RPYmplY3QuY29kZVMzTG9jYXRpb24pIHtcbiAgICAgICAgICBzZGtSZXF1ZXN0T2JqZWN0LmNvZGUgPSBhd2FpdCBmZXRjaEZpbGVGcm9tUzMoc2RrUmVxdWVzdE9iamVjdC5jb2RlUzNMb2NhdGlvbiwgc2RrKTtcbiAgICAgICAgICBkZWxldGUgc2RrUmVxdWVzdE9iamVjdC5jb2RlUzNMb2NhdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Jlc29sdmVyKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmFwcHN5bmMoKS51cGRhdGVSZXNvbHZlcihzZGtSZXF1ZXN0T2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKSB7XG4gICAgICAgICAgLy8gRnVuY3Rpb24gdmVyc2lvbiBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiB1c2luZyBWVEwgYW5kIG1hcHBpbmcgdGVtcGxhdGVzXG4gICAgICAgICAgLy8gUnVudGltZSBvbmx5IGFwcGxpY2FibGUgd2hlbiB1c2luZyBjb2RlIChKUyBtYXBwaW5nIHRlbXBsYXRlcylcbiAgICAgICAgICBpZiAoc2RrUmVxdWVzdE9iamVjdC5jb2RlKSB7XG4gICAgICAgICAgICBkZWxldGUgc2RrUmVxdWVzdE9iamVjdC5mdW5jdGlvblZlcnNpb247XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzZGtSZXF1ZXN0T2JqZWN0LnJ1bnRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gYXdhaXQgc2RrLmFwcHN5bmMoKS5saXN0RnVuY3Rpb25zKHsgYXBpSWQ6IHNka1JlcXVlc3RPYmplY3QuYXBpSWQgfSk7XG4gICAgICAgICAgY29uc3QgeyBmdW5jdGlvbklkIH0gPSBmdW5jdGlvbnMuZmluZCgoZm4pID0+IGZuLm5hbWUgPT09IHBoeXNpY2FsTmFtZSkgPz8ge307XG4gICAgICAgICAgLy8gVXBkYXRpbmcgbXVsdGlwbGUgZnVuY3Rpb25zIGF0IHRoZSBzYW1lIHRpbWUgb3IgYWxvbmcgd2l0aCBncmFwaHFsIHNjaGVtYSByZXN1bHRzIGluIGBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uYFxuICAgICAgICAgIGF3YWl0IGV4cG9uZW50aWFsQmFja09mZlJldHJ5KFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgc2RrLmFwcHN5bmMoKS51cGRhdGVGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgLi4uc2RrUmVxdWVzdE9iamVjdCxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbklkOiBmdW5jdGlvbklkLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDYsXG4gICAgICAgICAgICAxMDAwLFxuICAgICAgICAgICAgJ0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24nLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNHcmFwaFFMU2NoZW1hKSB7XG4gICAgICAgICAgbGV0IHNjaGVtYUNyZWF0aW9uUmVzcG9uc2U6IEdldFNjaGVtYUNyZWF0aW9uU3RhdHVzQ29tbWFuZE91dHB1dCA9IGF3YWl0IHNka1xuICAgICAgICAgICAgLmFwcHN5bmMoKVxuICAgICAgICAgICAgLnN0YXJ0U2NoZW1hQ3JlYXRpb24oc2RrUmVxdWVzdE9iamVjdCk7XG4gICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgc2NoZW1hQ3JlYXRpb25SZXNwb25zZS5zdGF0dXMgJiZcbiAgICAgICAgICAgIFsnUFJPQ0VTU0lORycsICdERUxFVElORyddLnNvbWUoKHN0YXR1cykgPT4gc3RhdHVzID09PSBzY2hlbWFDcmVhdGlvblJlc3BvbnNlLnN0YXR1cylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApOyAvLyBwb2xsIGV2ZXJ5IHNlY29uZFxuICAgICAgICAgICAgY29uc3QgZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNSZXF1ZXN0OiBHZXRTY2hlbWFDcmVhdGlvblN0YXR1c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgICAgICAgYXBpSWQ6IHNka1JlcXVlc3RPYmplY3QuYXBpSWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2NoZW1hQ3JlYXRpb25SZXNwb25zZSA9IGF3YWl0IHNkay5hcHBzeW5jKCkuZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXMoZ2V0U2NoZW1hQ3JlYXRpb25TdGF0dXNSZXF1ZXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNjaGVtYUNyZWF0aW9uUmVzcG9uc2Uuc3RhdHVzID09PSAnRkFJTEVEJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihzY2hlbWFDcmVhdGlvblJlc3BvbnNlLmRldGFpbHMgPz8gJ1NjaGVtYSBjcmVhdGlvbiBoYXMgZmFpbGVkLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpc0FwaUtleVxuICAgICAgICAgIGlmICghc2RrUmVxdWVzdE9iamVjdC5pZCkge1xuICAgICAgICAgICAgLy8gQXBpS2V5SWQgaXMgb3B0aW9uYWwgaW4gQ0ZOIGJ1dCByZXF1aXJlZCBpbiBTREsuIEdyYWIgdGhlIEtleUlkIGZyb20gcGh5c2ljYWxBcm4gaWYgbm90IGF2YWlsYWJsZSBhcyBwYXJ0IG9mIENGTiB0ZW1wbGF0ZVxuICAgICAgICAgICAgY29uc3QgYXJuUGFydHMgPSBwaHlzaWNhbE5hbWU/LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBpZiAoYXJuUGFydHMgJiYgYXJuUGFydHMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgIHNka1JlcXVlc3RPYmplY3QuaWQgPSBhcm5QYXJ0c1szXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2RrLmFwcHN5bmMoKS51cGRhdGVBcGlLZXkoc2RrUmVxdWVzdE9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEZpbGVGcm9tUzMoczNVcmw6IHN0cmluZywgc2RrOiBTREspIHtcbiAgY29uc3QgczNQYXRoUGFydHMgPSBzM1VybC5zcGxpdCgnLycpO1xuICBjb25zdCBzM0J1Y2tldCA9IHMzUGF0aFBhcnRzWzJdOyAvLyBmaXJzdCB0d28gYXJlIFwiczM6XCIgYW5kIFwiXCIgZHVlIHRvIHMzOi8vXG4gIGNvbnN0IHMzS2V5ID0gczNQYXRoUGFydHMuc3BsaWNlKDMpLmpvaW4oJy8nKTsgLy8gYWZ0ZXIgcmVtb3ZpbmcgZmlyc3QgdGhyZWUgd2UgcmVjb25zdHJ1Y3QgdGhlIGtleVxuICByZXR1cm4gKGF3YWl0IHNkay5zMygpLmdldE9iamVjdCh7IEJ1Y2tldDogczNCdWNrZXQsIEtleTogczNLZXkgfSkpLkJvZHk/LnRyYW5zZm9ybVRvU3RyaW5nKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cG9uZW50aWFsQmFja09mZlJldHJ5KGZuOiAoKSA9PiBQcm9taXNlPGFueT4sIG51bU9mUmV0cmllczogbnVtYmVyLCBiYWNrT2ZmOiBudW1iZXIsIGVycm9yQ29kZVRvUmV0cnk6IHN0cmluZykge1xuICB0cnkge1xuICAgIGF3YWl0IGZuKCk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoZXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gZXJyb3JDb2RlVG9SZXRyeSAmJiBudW1PZlJldHJpZXMgPiAwKSB7XG4gICAgICBhd2FpdCBzbGVlcChiYWNrT2ZmKTsgLy8gdGltZSB0byB3YWl0IGRvdWJsZXMgZXZlcnl0aW1lIGZ1bmN0aW9uIGZhaWxzLCBzdGFydHMgYXQgMSBzZWNvbmRcbiAgICAgIGF3YWl0IGV4cG9uZW50aWFsQmFja09mZlJldHJ5KGZuLCBudW1PZlJldHJpZXMgLSAxLCBiYWNrT2ZmICogMiwgZXJyb3JDb2RlVG9SZXRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ import { type HotswapChange } from './common';
2
+ import type { ResourceChange } from '../../payloads/hotswap';
3
+ import type { EvaluateCloudFormationTemplate } from '../cloudformation';
4
+ export declare function isHotswappableCodeBuildProjectChange(logicalId: string, change: ResourceChange, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<HotswapChange[]>;