@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,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Context = exports.PROJECT_CONTEXT = exports.TRANSIENT_CONTEXT_KEY = void 0;
4
+ const settings_1 = require("./settings");
5
+ const toolkit_error_1 = require("./toolkit-error");
6
+ var settings_2 = require("./settings");
7
+ Object.defineProperty(exports, "TRANSIENT_CONTEXT_KEY", { enumerable: true, get: function () { return settings_2.TRANSIENT_CONTEXT_KEY; } });
8
+ exports.PROJECT_CONTEXT = 'cdk.context.json';
9
+ /**
10
+ * Class that supports overlaying property bags
11
+ *
12
+ * Reads come from the first property bag that can has the given key,
13
+ * writes go to the first property bag that is not readonly. A write
14
+ * will remove the value from all property bags after the first
15
+ * writable one.
16
+ */
17
+ class Context {
18
+ bags;
19
+ fileNames;
20
+ constructor(...bags) {
21
+ this.bags = bags.length > 0 ? bags.map((b) => b.bag) : [new settings_1.Settings()];
22
+ this.fileNames =
23
+ bags.length > 0 ? bags.map((b) => b.fileName) : ['default'];
24
+ }
25
+ get keys() {
26
+ return Object.keys(this.all);
27
+ }
28
+ has(key) {
29
+ return this.keys.indexOf(key) > -1;
30
+ }
31
+ get all() {
32
+ let ret = new settings_1.Settings();
33
+ // In reverse order so keys to the left overwrite keys to the right of them
34
+ for (const bag of [...this.bags].reverse()) {
35
+ ret = ret.merge(bag);
36
+ }
37
+ return ret.all;
38
+ }
39
+ get(key) {
40
+ for (const bag of this.bags) {
41
+ const v = bag.get([key]);
42
+ if (v !== undefined) {
43
+ return v;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ set(key, value) {
49
+ for (const bag of this.bags) {
50
+ if (bag.readOnly) {
51
+ continue;
52
+ }
53
+ // All bags past the first one have the value erased
54
+ bag.set([key], value);
55
+ value = undefined;
56
+ }
57
+ }
58
+ unset(key) {
59
+ this.set(key, undefined);
60
+ }
61
+ clear() {
62
+ for (const key of this.keys) {
63
+ this.unset(key);
64
+ }
65
+ }
66
+ /**
67
+ * Save a specific context file
68
+ */
69
+ async save(fileName) {
70
+ const index = this.fileNames.indexOf(fileName);
71
+ // File not found, don't do anything in this scenario
72
+ if (index === -1) {
73
+ return this;
74
+ }
75
+ const bag = this.bags[index];
76
+ if (bag.readOnly) {
77
+ throw new toolkit_error_1.ToolkitError(`Context file ${fileName} is read only!`);
78
+ }
79
+ await bag.save(fileName);
80
+ return this;
81
+ }
82
+ }
83
+ exports.Context = Context;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXNDO0FBQ3RDLG1EQUErQztBQUUvQyx1Q0FBbUQ7QUFBMUMsaUhBQUEscUJBQXFCLE9BQUE7QUFDakIsUUFBQSxlQUFlLEdBQUcsa0JBQWtCLENBQUM7QUFlbEQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsT0FBTztJQUNELElBQUksQ0FBYTtJQUNqQixTQUFTLENBQXlCO0lBRW5ELFlBQVksR0FBRyxJQUFrQjtRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxtQkFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsU0FBUztZQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLElBQUksR0FBRyxHQUFHLElBQUksbUJBQVEsRUFBRSxDQUFDO1FBRXpCLDJFQUEyRTtRQUMzRSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMzQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBVztRQUNwQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTSxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDaEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLFNBQVM7WUFDWCxDQUFDO1lBRUQsb0RBQW9EO1lBQ3BELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QixLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQVc7UUFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLEtBQUs7UUFDVixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQWdCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLHFEQUFxRDtRQUNyRCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLDRCQUFZLENBQUMsZ0JBQWdCLFFBQVEsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBaEZELDBCQWdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNldHRpbmdzIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuL3Rvb2xraXQtZXJyb3InO1xuXG5leHBvcnQgeyBUUkFOU0lFTlRfQ09OVEVYVF9LRVkgfSBmcm9tICcuL3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBQUk9KRUNUX0NPTlRFWFQgPSAnY2RrLmNvbnRleHQuanNvbic7XG5cbmludGVyZmFjZSBDb250ZXh0QmFnIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIGNvbnRleHQuIFdpbGwgYmUgdXNlZCB0byBwb3RlbnRpYWxseVxuICAgKiBzYXZlIG5ldyBjb250ZXh0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBmaWxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQgdmFsdWVzLlxuICAgKi9cbiAgYmFnOiBTZXR0aW5ncztcbn1cblxuLyoqXG4gKiBDbGFzcyB0aGF0IHN1cHBvcnRzIG92ZXJsYXlpbmcgcHJvcGVydHkgYmFnc1xuICpcbiAqIFJlYWRzIGNvbWUgZnJvbSB0aGUgZmlyc3QgcHJvcGVydHkgYmFnIHRoYXQgY2FuIGhhcyB0aGUgZ2l2ZW4ga2V5LFxuICogd3JpdGVzIGdvIHRvIHRoZSBmaXJzdCBwcm9wZXJ0eSBiYWcgdGhhdCBpcyBub3QgcmVhZG9ubHkuIEEgd3JpdGVcbiAqIHdpbGwgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIGFsbCBwcm9wZXJ0eSBiYWdzIGFmdGVyIHRoZSBmaXJzdFxuICogd3JpdGFibGUgb25lLlxuICovXG5leHBvcnQgY2xhc3MgQ29udGV4dCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFnczogU2V0dGluZ3NbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlTmFtZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cbiAgY29uc3RydWN0b3IoLi4uYmFnczogQ29udGV4dEJhZ1tdKSB7XG4gICAgdGhpcy5iYWdzID0gYmFncy5sZW5ndGggPiAwID8gYmFncy5tYXAoKGIpID0+IGIuYmFnKSA6IFtuZXcgU2V0dGluZ3MoKV07XG4gICAgdGhpcy5maWxlTmFtZXMgPVxuICAgICAgYmFncy5sZW5ndGggPiAwID8gYmFncy5tYXAoKGIpID0+IGIuZmlsZU5hbWUpIDogWydkZWZhdWx0J107XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmFsbCk7XG4gIH1cblxuICBwdWJsaWMgaGFzKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5cy5pbmRleE9mKGtleSkgPiAtMTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxsKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGxldCByZXQgPSBuZXcgU2V0dGluZ3MoKTtcblxuICAgIC8vIEluIHJldmVyc2Ugb3JkZXIgc28ga2V5cyB0byB0aGUgbGVmdCBvdmVyd3JpdGUga2V5cyB0byB0aGUgcmlnaHQgb2YgdGhlbVxuICAgIGZvciAoY29uc3QgYmFnIG9mIFsuLi50aGlzLmJhZ3NdLnJldmVyc2UoKSkge1xuICAgICAgcmV0ID0gcmV0Lm1lcmdlKGJhZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldC5hbGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICBmb3IgKGNvbnN0IGJhZyBvZiB0aGlzLmJhZ3MpIHtcbiAgICAgIGNvbnN0IHYgPSBiYWcuZ2V0KFtrZXldKTtcbiAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgZm9yIChjb25zdCBiYWcgb2YgdGhpcy5iYWdzKSB7XG4gICAgICBpZiAoYmFnLnJlYWRPbmx5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBbGwgYmFncyBwYXN0IHRoZSBmaXJzdCBvbmUgaGF2ZSB0aGUgdmFsdWUgZXJhc2VkXG4gICAgICBiYWcuc2V0KFtrZXldLCB2YWx1ZSk7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdW5zZXQoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldChrZXksIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5rZXlzKSB7XG4gICAgICB0aGlzLnVuc2V0KGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBzcGVjaWZpYyBjb250ZXh0IGZpbGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzYXZlKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHRoaXM+IHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsZU5hbWVzLmluZGV4T2YoZmlsZU5hbWUpO1xuXG4gICAgLy8gRmlsZSBub3QgZm91bmQsIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgc2NlbmFyaW9cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBiYWcgPSB0aGlzLmJhZ3NbaW5kZXhdO1xuICAgIGlmIChiYWcucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYENvbnRleHQgZmlsZSAke2ZpbGVOYW1lfSBpcyByZWFkIG9ubHkhYCk7XG4gICAgfVxuXG4gICAgYXdhaXQgYmFnLnNhdmUoZmlsZU5hbWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ import * as cxschema from '@aws-cdk/cloud-assembly-schema';
2
+ import { AssetManifest } from 'cdk-assets';
3
+ export declare class AssetManifestBuilder {
4
+ private readonly manifest;
5
+ addFileAsset(id: string, source: cxschema.FileSource, destination: cxschema.FileDestination): void;
6
+ addDockerImageAsset(id: string, source: cxschema.DockerImageSource, destination: cxschema.DockerImageDestination): void;
7
+ toManifest(directory: string): AssetManifest;
8
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssetManifestBuilder = void 0;
4
+ const cxschema = require("@aws-cdk/cloud-assembly-schema");
5
+ const cdk_assets_1 = require("cdk-assets");
6
+ class AssetManifestBuilder {
7
+ manifest = {
8
+ version: cxschema.Manifest.version(),
9
+ files: {},
10
+ dockerImages: {},
11
+ };
12
+ addFileAsset(id, source, destination) {
13
+ this.manifest.files[id] = {
14
+ source,
15
+ destinations: {
16
+ current: destination,
17
+ },
18
+ };
19
+ }
20
+ addDockerImageAsset(id, source, destination) {
21
+ this.manifest.dockerImages[id] = {
22
+ source,
23
+ destinations: {
24
+ current: destination,
25
+ },
26
+ };
27
+ }
28
+ toManifest(directory) {
29
+ return new cdk_assets_1.AssetManifest(directory, this.manifest);
30
+ }
31
+ }
32
+ exports.AssetManifestBuilder = AssetManifestBuilder;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtbWFuaWZlc3QtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFzc2V0LW1hbmlmZXN0LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQTJEO0FBQzNELDJDQUEyQztBQUUzQyxNQUFhLG9CQUFvQjtJQUNkLFFBQVEsR0FBMkI7UUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3BDLEtBQUssRUFBRSxFQUFFO1FBQ1QsWUFBWSxFQUFFLEVBQUU7S0FDakIsQ0FBQztJQUVLLFlBQVksQ0FBQyxFQUFVLEVBQUUsTUFBMkIsRUFBRSxXQUFxQztRQUNoRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQU0sQ0FBQyxFQUFFLENBQUMsR0FBRztZQUN6QixNQUFNO1lBQ04sWUFBWSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxXQUFXO2FBQ3JCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxFQUFVLEVBQUUsTUFBa0MsRUFBRSxXQUE0QztRQUNySCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQWEsQ0FBQyxFQUFFLENBQUMsR0FBRztZQUNoQyxNQUFNO1lBQ04sWUFBWSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxXQUFXO2FBQ3JCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxVQUFVLENBQUMsU0FBaUI7UUFDakMsT0FBTyxJQUFJLDBCQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0Y7QUE1QkQsb0RBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IEFzc2V0TWFuaWZlc3QgfSBmcm9tICdjZGstYXNzZXRzJztcblxuZXhwb3J0IGNsYXNzIEFzc2V0TWFuaWZlc3RCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5pZmVzdDogY3hzY2hlbWEuQXNzZXRNYW5pZmVzdCA9IHtcbiAgICB2ZXJzaW9uOiBjeHNjaGVtYS5NYW5pZmVzdC52ZXJzaW9uKCksXG4gICAgZmlsZXM6IHt9LFxuICAgIGRvY2tlckltYWdlczoge30sXG4gIH07XG5cbiAgcHVibGljIGFkZEZpbGVBc3NldChpZDogc3RyaW5nLCBzb3VyY2U6IGN4c2NoZW1hLkZpbGVTb3VyY2UsIGRlc3RpbmF0aW9uOiBjeHNjaGVtYS5GaWxlRGVzdGluYXRpb24pIHtcbiAgICB0aGlzLm1hbmlmZXN0LmZpbGVzIVtpZF0gPSB7XG4gICAgICBzb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvbnM6IHtcbiAgICAgICAgY3VycmVudDogZGVzdGluYXRpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYWRkRG9ja2VySW1hZ2VBc3NldChpZDogc3RyaW5nLCBzb3VyY2U6IGN4c2NoZW1hLkRvY2tlckltYWdlU291cmNlLCBkZXN0aW5hdGlvbjogY3hzY2hlbWEuRG9ja2VySW1hZ2VEZXN0aW5hdGlvbikge1xuICAgIHRoaXMubWFuaWZlc3QuZG9ja2VySW1hZ2VzIVtpZF0gPSB7XG4gICAgICBzb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvbnM6IHtcbiAgICAgICAgY3VycmVudDogZGVzdGluYXRpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdG9NYW5pZmVzdChkaXJlY3Rvcnk6IHN0cmluZyk6IEFzc2V0TWFuaWZlc3Qge1xuICAgIHJldHVybiBuZXcgQXNzZXRNYW5pZmVzdChkaXJlY3RvcnksIHRoaXMubWFuaWZlc3QpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { type Environment } from '@aws-cdk/cx-api';
2
+ import type { ClientOptions, EventType, Account, AssetManifest, IAws, IECRClient, IPublishProgress, IPublishProgressListener, IS3Client, ISecretsManagerClient } from 'cdk-assets';
3
+ import type { SdkProvider } from '../aws-auth/private';
4
+ import type { IoHelper } from '../io/private';
5
+ interface PublishAssetsOptions {
6
+ /**
7
+ * Whether to build/publish assets in parallel
8
+ *
9
+ * @default true To remain backward compatible.
10
+ */
11
+ readonly parallel?: boolean;
12
+ /**
13
+ * Whether cdk-assets is allowed to do cross account publishing.
14
+ */
15
+ readonly allowCrossAccount: boolean;
16
+ }
17
+ /**
18
+ * Use cdk-assets to publish all assets in the given manifest.
19
+ *
20
+ * @deprecated used in legacy deployments only, should be migrated at some point
21
+ */
22
+ export declare function publishAssets(manifest: AssetManifest, sdk: SdkProvider, targetEnv: Environment, options: PublishAssetsOptions, ioHelper: IoHelper): Promise<void>;
23
+ export declare class PublishingAws implements IAws {
24
+ /**
25
+ * The base SDK to work with
26
+ */
27
+ private readonly aws;
28
+ /**
29
+ * Environment where the stack we're deploying is going
30
+ */
31
+ private readonly targetEnv;
32
+ private sdkCache;
33
+ constructor(
34
+ /**
35
+ * The base SDK to work with
36
+ */
37
+ aws: SdkProvider,
38
+ /**
39
+ * Environment where the stack we're deploying is going
40
+ */
41
+ targetEnv: Environment);
42
+ discoverPartition(): Promise<string>;
43
+ discoverDefaultRegion(): Promise<string>;
44
+ discoverCurrentAccount(): Promise<Account>;
45
+ discoverTargetAccount(options: ClientOptions): Promise<Account>;
46
+ s3Client(options: ClientOptions): Promise<IS3Client>;
47
+ ecrClient(options: ClientOptions): Promise<IECRClient>;
48
+ secretsManagerClient(options: ClientOptions): Promise<ISecretsManagerClient>;
49
+ /**
50
+ * Get an SDK appropriate for the given client options
51
+ */
52
+ private sdk;
53
+ }
54
+ export declare abstract class BasePublishProgressListener implements IPublishProgressListener {
55
+ protected readonly ioHelper: IoHelper;
56
+ constructor(ioHelper: IoHelper);
57
+ protected abstract getMessage(type: EventType, event: IPublishProgress): string;
58
+ onPublishEvent(type: EventType, event: IPublishProgress): void;
59
+ }
60
+ export {};
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BasePublishProgressListener = exports.PublishingAws = void 0;
4
+ exports.publishAssets = publishAssets;
5
+ const cx_api_1 = require("@aws-cdk/cx-api");
6
+ const cdk_assets_1 = require("cdk-assets");
7
+ const private_1 = require("../io/private");
8
+ const plugin_1 = require("../plugin");
9
+ const toolkit_error_1 = require("../toolkit-error");
10
+ /**
11
+ * Use cdk-assets to publish all assets in the given manifest.
12
+ *
13
+ * @deprecated used in legacy deployments only, should be migrated at some point
14
+ */
15
+ async function publishAssets(manifest, sdk, targetEnv, options, ioHelper) {
16
+ // This shouldn't really happen (it's a programming error), but we don't have
17
+ // the types here to guide us. Do an runtime validation to be super super sure.
18
+ if (targetEnv.account === undefined ||
19
+ targetEnv.account === cx_api_1.UNKNOWN_ACCOUNT ||
20
+ targetEnv.region === undefined ||
21
+ targetEnv.account === cx_api_1.UNKNOWN_REGION) {
22
+ throw new toolkit_error_1.ToolkitError(`Asset publishing requires resolved account and region, got ${JSON.stringify(targetEnv)}`);
23
+ }
24
+ const publisher = new cdk_assets_1.AssetPublishing(manifest, {
25
+ aws: new PublishingAws(sdk, targetEnv),
26
+ progressListener: new PublishingProgressListener(ioHelper),
27
+ throwOnError: false,
28
+ publishInParallel: options.parallel ?? true,
29
+ buildAssets: true,
30
+ publishAssets: true,
31
+ quiet: false,
32
+ });
33
+ await publisher.publish({ allowCrossAccount: options.allowCrossAccount });
34
+ if (publisher.hasFailures) {
35
+ throw new toolkit_error_1.ToolkitError('Failed to publish one or more assets. See the error messages above for more information.');
36
+ }
37
+ }
38
+ class PublishingAws {
39
+ aws;
40
+ targetEnv;
41
+ sdkCache = new Map();
42
+ constructor(
43
+ /**
44
+ * The base SDK to work with
45
+ */
46
+ aws,
47
+ /**
48
+ * Environment where the stack we're deploying is going
49
+ */
50
+ targetEnv) {
51
+ this.aws = aws;
52
+ this.targetEnv = targetEnv;
53
+ }
54
+ async discoverPartition() {
55
+ return (await this.aws.baseCredentialsPartition(this.targetEnv, plugin_1.Mode.ForWriting)) ?? 'aws';
56
+ }
57
+ async discoverDefaultRegion() {
58
+ return this.targetEnv.region;
59
+ }
60
+ async discoverCurrentAccount() {
61
+ const account = await this.aws.defaultAccount();
62
+ return (account ?? {
63
+ accountId: '<unknown account>',
64
+ partition: 'aws',
65
+ });
66
+ }
67
+ async discoverTargetAccount(options) {
68
+ return (await this.sdk(options)).currentAccount();
69
+ }
70
+ async s3Client(options) {
71
+ return (await this.sdk(options)).s3();
72
+ }
73
+ async ecrClient(options) {
74
+ return (await this.sdk(options)).ecr();
75
+ }
76
+ async secretsManagerClient(options) {
77
+ return (await this.sdk(options)).secretsManager();
78
+ }
79
+ /**
80
+ * Get an SDK appropriate for the given client options
81
+ */
82
+ async sdk(options) {
83
+ const env = {
84
+ ...this.targetEnv,
85
+ region: options.region ?? this.targetEnv.region, // Default: same region as the stack
86
+ };
87
+ const cacheKeyMap = {
88
+ env, // region, name, account
89
+ assumeRuleArn: options.assumeRoleArn,
90
+ assumeRoleExternalId: options.assumeRoleExternalId,
91
+ quiet: options.quiet,
92
+ };
93
+ if (options.assumeRoleAdditionalOptions) {
94
+ cacheKeyMap.assumeRoleAdditionalOptions = options.assumeRoleAdditionalOptions;
95
+ }
96
+ const cacheKey = JSON.stringify(cacheKeyMap);
97
+ const maybeSdk = this.sdkCache.get(cacheKey);
98
+ if (maybeSdk) {
99
+ return maybeSdk;
100
+ }
101
+ const sdk = (await this.aws.forEnvironment(env, plugin_1.Mode.ForWriting, {
102
+ assumeRoleArn: options.assumeRoleArn,
103
+ assumeRoleExternalId: options.assumeRoleExternalId,
104
+ assumeRoleAdditionalOptions: options.assumeRoleAdditionalOptions,
105
+ }, options.quiet)).sdk;
106
+ this.sdkCache.set(cacheKey, sdk);
107
+ return sdk;
108
+ }
109
+ }
110
+ exports.PublishingAws = PublishingAws;
111
+ const EVENT_TO_MSG_MAKER = {
112
+ build: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
113
+ cached: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
114
+ check: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
115
+ debug: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
116
+ fail: private_1.IO.DEFAULT_TOOLKIT_ERROR,
117
+ found: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
118
+ start: private_1.IO.DEFAULT_TOOLKIT_INFO,
119
+ success: private_1.IO.DEFAULT_TOOLKIT_INFO,
120
+ upload: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
121
+ shell_open: private_1.IO.DEFAULT_TOOLKIT_DEBUG,
122
+ shell_stderr: false,
123
+ shell_stdout: false,
124
+ shell_close: false,
125
+ };
126
+ class BasePublishProgressListener {
127
+ ioHelper;
128
+ constructor(ioHelper) {
129
+ this.ioHelper = ioHelper;
130
+ }
131
+ onPublishEvent(type, event) {
132
+ const maker = EVENT_TO_MSG_MAKER[type];
133
+ if (maker) {
134
+ void this.ioHelper.notify(maker.msg(this.getMessage(type, event)));
135
+ }
136
+ }
137
+ }
138
+ exports.BasePublishProgressListener = BasePublishProgressListener;
139
+ class PublishingProgressListener extends BasePublishProgressListener {
140
+ getMessage(type, event) {
141
+ return `[${event.percentComplete}%] ${type}: ${event.message}`;
142
+ }
143
+ }
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcHVibGlzaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFzc2V0LXB1Ymxpc2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUNBLHNDQStCQztBQXhFRCw0Q0FBb0Y7QUFhcEYsMkNBRW9CO0FBR3BCLDJDQUFtQztBQUNuQyxzQ0FBaUM7QUFDakMsb0RBQWdEO0FBZ0JoRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FDakMsUUFBdUIsRUFDdkIsR0FBZ0IsRUFDaEIsU0FBc0IsRUFDdEIsT0FBNkIsRUFDN0IsUUFBa0I7SUFFbEIsNkVBQTZFO0lBQzdFLCtFQUErRTtJQUMvRSxJQUNFLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUztRQUMvQixTQUFTLENBQUMsT0FBTyxLQUFLLHdCQUFlO1FBQ3JDLFNBQVMsQ0FBQyxNQUFNLEtBQUssU0FBUztRQUM5QixTQUFTLENBQUMsT0FBTyxLQUFLLHVCQUFjLEVBQ3BDLENBQUM7UUFDRCxNQUFNLElBQUksNEJBQVksQ0FBQyw4REFBOEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUksNEJBQWUsQ0FBQyxRQUFRLEVBQUU7UUFDOUMsR0FBRyxFQUFFLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7UUFDdEMsZ0JBQWdCLEVBQUUsSUFBSSwwQkFBMEIsQ0FBQyxRQUFRLENBQUM7UUFDMUQsWUFBWSxFQUFFLEtBQUs7UUFDbkIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO1FBQzNDLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLEtBQUssRUFBRSxLQUFLO0tBQ2IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFF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SUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWZELGtFQWVDO0FBRUQsTUFBTSwwQkFBMkIsU0FBUSwyQkFBMkI7SUFDeEQsVUFBVSxDQUFDLElBQWUsRUFBRSxLQUF1QjtRQUMzRCxPQUFPLElBQUksS0FBSyxDQUFDLGVBQWUsTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnQsIFVOS05PV05fQUNDT1VOVCwgVU5LTk9XTl9SRUdJT04gfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUge1xuICBDbGllbnRPcHRpb25zLFxuICBFdmVudFR5cGUsXG4gIEFjY291bnQsXG4gIEFzc2V0TWFuaWZlc3QsXG4gIElBd3MsXG4gIElFQ1JDbGllbnQsXG4gIElQdWJsaXNoUHJvZ3Jlc3MsXG4gIElQdWJsaXNoUHJvZ3Jlc3NMaXN0ZW5lcixcbiAgSVMzQ2xpZW50LFxuICBJU2VjcmV0c01hbmFnZXJDbGllbnQsXG59IGZyb20gJ2Nkay1hc3NldHMnO1xuaW1wb3J0IHtcbiAgQXNzZXRQdWJsaXNoaW5nLFxufSBmcm9tICdjZGstYXNzZXRzJztcbmltcG9ydCB0eXBlIHsgU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJb01lc3NhZ2VNYWtlciwgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IElPIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uL3Rvb2xraXQtZXJyb3InO1xuXG5pbnRlcmZhY2UgUHVibGlzaEFzc2V0c09wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBidWlsZC9wdWJsaXNoIGFzc2V0cyBpbiBwYXJhbGxlbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIFRvIHJlbWFpbiBiYWNrd2FyZCBjb21wYXRpYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYWxsZWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNkay1hc3NldHMgaXMgYWxsb3dlZCB0byBkbyBjcm9zcyBhY2NvdW50IHB1Ymxpc2hpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGxvd0Nyb3NzQWNjb3VudDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBVc2UgY2RrLWFzc2V0cyB0byBwdWJsaXNoIGFsbCBhc3NldHMgaW4gdGhlIGdpdmVuIG1hbmlmZXN0LlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZWQgaW4gbGVnYWN5IGRlcGxveW1lbnRzIG9ubHksIHNob3VsZCBiZSBtaWdyYXRlZCBhdCBzb21lIHBvaW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoQXNzZXRzKFxuICBtYW5pZmVzdDogQXNzZXRNYW5pZmVzdCxcbiAgc2RrOiBTZGtQcm92aWRlcixcbiAgdGFyZ2V0RW52OiBFbnZpcm9ubWVudCxcbiAgb3B0aW9uczogUHVibGlzaEFzc2V0c09wdGlvbnMsXG4gIGlvSGVscGVyOiBJb0hlbHBlcixcbikge1xuICAvLyBUaGlzIHNob3VsZG4ndCByZWFsbHkgaGFwcGVuIChpdCdzIGEgcHJvZ3JhbW1pbmcgZXJyb3IpLCBidXQgd2UgZG9uJ3QgaGF2ZVxuICAvLyB0aGUgdHlwZXMgaGVyZSB0byBndWlkZSB1cy4gRG8gYW4gcnVudGltZSB2YWxpZGF0aW9uIHRvIGJlIHN1cGVyIHN1cGVyIHN1cmUuXG4gIGlmIChcbiAgICB0YXJnZXRFbnYuYWNjb3VudCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdGFyZ2V0RW52LmFjY291bnQgPT09IFVOS05PV05fQUNDT1VOVCB8fFxuICAgIHRhcmdldEVudi5yZWdpb24gPT09IHVuZGVmaW5lZCB8fFxuICAgIHRhcmdldEVudi5hY2NvdW50ID09PSBVTktOT1dOX1JFR0lPTlxuICApIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBBc3NldCBwdWJsaXNoaW5nIHJlcXVpcmVzIHJlc29sdmVkIGFjY291bnQgYW5kIHJlZ2lvbiwgZ290ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0RW52KX1gKTtcbiAgfVxuXG4gIGNvbnN0IHB1Ymxpc2hlciA9IG5ldyBBc3NldFB1Ymxpc2hpbmcobWFuaWZlc3QsIHtcbiAgICBhd3M6IG5ldyBQdWJsaXNoaW5nQXdzKHNkaywgdGFyZ2V0RW52KSxcbiAgICBwcm9ncmVzc0xpc3RlbmVyOiBuZXcgUHVibGlzaGluZ1Byb2dyZXNzTGlzdGVuZXIoaW9IZWxwZXIpLFxuICAgIHRocm93T25FcnJvcjogZmFsc2UsXG4gICAgcHVibGlzaEluUGFyYWxsZWw6IG9wdGlvbnMucGFyYWxsZWwgPz8gdHJ1ZSxcbiAgICBidWlsZEFzc2V0czogdHJ1ZSxcbiAgICBwdWJsaXNoQXNzZXRzOiB0cnVlLFxuICAgIHF1aWV0OiBmYWxzZSxcbiAgfSk7XG4gIGF3YWl0IHB1Ymxpc2hlci5wdWJsaXNoKHsgYWxsb3dDcm9zc0FjY291bnQ6IG9wdGlvbnMuYWxsb3dDcm9zc0FjY291bnQgfSk7XG4gIGlmIChwdWJsaXNoZXIuaGFzRmFpbHVyZXMpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCBvbmUgb3IgbW9yZSBhc3NldHMuIFNlZSB0aGUgZXJyb3IgbWVzc2FnZXMgYWJvdmUgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFB1Ymxpc2hpbmdBd3MgaW1wbGVtZW50cyBJQXdzIHtcbiAgcHJpdmF0ZSBzZGtDYWNoZTogTWFwPFN0cmluZywgU0RLPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBTREsgdG8gd29yayB3aXRoXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBhd3M6IFNka1Byb3ZpZGVyLFxuXG4gICAgLyoqXG4gICAgICogRW52aXJvbm1lbnQgd2hlcmUgdGhlIHN0YWNrIHdlJ3JlIGRlcGxveWluZyBpcyBnb2luZ1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0RW52OiBFbnZpcm9ubWVudCxcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGlzY292ZXJQYXJ0aXRpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXdzLmJhc2VDcmVkZW50aWFsc1BhcnRpdGlvbih0aGlzLnRhcmdldEVudiwgTW9kZS5Gb3JXcml0aW5nKSkgPz8gJ2F3cyc7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGlzY292ZXJEZWZhdWx0UmVnaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0RW52LnJlZ2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNjb3ZlckN1cnJlbnRBY2NvdW50KCk6IFByb21pc2U8QWNjb3VudD4ge1xuICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLmF3cy5kZWZhdWx0QWNjb3VudCgpO1xuICAgIHJldHVybiAoXG4gICAgICBhY2NvdW50ID8/IHtcbiAgICAgICAgYWNjb3VudElkOiAnPHVua25vd24gYWNjb3VudD4nLFxuICAgICAgICBwYXJ0aXRpb246ICdhd3MnLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGlzY292ZXJUYXJnZXRBY2NvdW50KG9wdGlvbnM6IENsaWVudE9wdGlvbnMpOiBQcm9taXNlPEFjY291bnQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2RrKG9wdGlvbnMpKS5jdXJyZW50QWNjb3VudCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHMzQ2xpZW50KG9wdGlvbnM6IENsaWVudE9wdGlvbnMpOiBQcm9taXNlPElTM0NsaWVudD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZGsob3B0aW9ucykpLnMzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZWNyQ2xpZW50KG9wdGlvbnM6IENsaWVudE9wdGlvbnMpOiBQcm9taXNlPElFQ1JDbGllbnQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2RrKG9wdGlvbnMpKS5lY3IoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZWNyZXRzTWFuYWdlckNsaWVudChvcHRpb25zOiBDbGllbnRPcHRpb25zKTogUHJvbWlzZTxJU2VjcmV0c01hbmFnZXJDbGllbnQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2RrKG9wdGlvbnMpKS5zZWNyZXRzTWFuYWdlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBTREsgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBjbGllbnQgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZGsob3B0aW9uczogQ2xpZW50T3B0aW9ucyk6IFByb21pc2U8U0RLPiB7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4udGhpcy50YXJnZXRFbnYsXG4gICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uID8/IHRoaXMudGFyZ2V0RW52LnJlZ2lvbiwgLy8gRGVmYXVsdDogc2FtZSByZWdpb24gYXMgdGhlIHN0YWNrXG4gICAgfTtcblxuICAgIGNvbnN0IGNhY2hlS2V5TWFwOiBhbnkgPSB7XG4gICAgICBlbnYsIC8vIHJlZ2lvbiwgbmFtZSwgYWNjb3VudFxuICAgICAgYXNzdW1lUnVsZUFybjogb3B0aW9ucy5hc3N1bWVSb2xlQXJuLFxuICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IG9wdGlvbnMuYXNzdW1lUm9sZUV4dGVybmFsSWQsXG4gICAgICBxdWlldDogb3B0aW9ucy5xdWlldCxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuYXNzdW1lUm9sZUFkZGl0aW9uYWxPcHRpb25zKSB7XG4gICAgICBjYWNoZUtleU1hcC5hc3N1bWVSb2xlQWRkaXRpb25hbE9wdGlvbnMgPSBvcHRpb25zLmFzc3VtZVJvbGVBZGRpdGlvbmFsT3B0aW9ucztcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IEpTT04uc3RyaW5naWZ5KGNhY2hlS2V5TWFwKTtcblxuICAgIGNvbnN0IG1heWJlU2RrID0gdGhpcy5zZGtDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChtYXliZVNkaykge1xuICAgICAgcmV0dXJuIG1heWJlU2RrO1xuICAgIH1cblxuICAgIGNvbnN0IHNkayA9IChcbiAgICAgIGF3YWl0IHRoaXMuYXdzLmZvckVudmlyb25tZW50KFxuICAgICAgICBlbnYsXG4gICAgICAgIE1vZGUuRm9yV3JpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGFzc3VtZVJvbGVBcm46IG9wdGlvbnMuYXNzdW1lUm9sZUFybixcbiAgICAgICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogb3B0aW9ucy5hc3N1bWVSb2xlRXh0ZXJuYWxJZCxcbiAgICAgICAgICBhc3N1bWVSb2xlQWRkaXRpb25hbE9wdGlvbnM6IG9wdGlvbnMuYXNzdW1lUm9sZUFkZGl0aW9uYWxPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zLnF1aWV0LFxuICAgICAgKVxuICAgICkuc2RrO1xuICAgIHRoaXMuc2RrQ2FjaGUuc2V0KGNhY2hlS2V5LCBzZGspO1xuXG4gICAgcmV0dXJuIHNkaztcbiAgfVxufVxuXG5jb25zdCBFVkVOVF9UT19NU0dfTUFLRVI6IFJlY29yZDxFdmVudFR5cGUsIElvTWVzc2FnZU1ha2VyPGFueT4gfCBmYWxzZT4gPSB7XG4gIGJ1aWxkOiBJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcsXG4gIGNhY2hlZDogSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLFxuICBjaGVjazogSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLFxuICBkZWJ1ZzogSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLFxuICBmYWlsOiBJTy5ERUZBVUxUX1RPT0xLSVRfRVJST1IsXG4gIGZvdW5kOiBJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcsXG4gIHN0YXJ0OiBJTy5ERUZBVUxUX1RPT0xLSVRfSU5GTyxcbiAgc3VjY2VzczogSU8uREVGQVVMVF9UT09MS0lUX0lORk8sXG4gIHVwbG9hZDogSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLFxuICBzaGVsbF9vcGVuOiBJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcsXG4gIHNoZWxsX3N0ZGVycjogZmFsc2UsXG4gIHNoZWxsX3N0ZG91dDogZmFsc2UsXG4gIHNoZWxsX2Nsb3NlOiBmYWxzZSxcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUHVibGlzaFByb2dyZXNzTGlzdGVuZXIgaW1wbGVtZW50cyBJUHVibGlzaFByb2dyZXNzTGlzdGVuZXIge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuXG4gIGNvbnN0cnVjdG9yKGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBpb0hlbHBlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRNZXNzYWdlKHR5cGU6IEV2ZW50VHlwZSwgZXZlbnQ6IElQdWJsaXNoUHJvZ3Jlc3MpOiBzdHJpbmc7XG5cbiAgcHVibGljIG9uUHVibGlzaEV2ZW50KHR5cGU6IEV2ZW50VHlwZSwgZXZlbnQ6IElQdWJsaXNoUHJvZ3Jlc3MpOiB2b2lkIHtcbiAgICBjb25zdCBtYWtlciA9IEVWRU5UX1RPX01TR19NQUtFUlt0eXBlXTtcbiAgICBpZiAobWFrZXIpIHtcbiAgICAgIHZvaWQgdGhpcy5pb0hlbHBlci5ub3RpZnkobWFrZXIubXNnKHRoaXMuZ2V0TWVzc2FnZSh0eXBlLCBldmVudCkpKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUHVibGlzaGluZ1Byb2dyZXNzTGlzdGVuZXIgZXh0ZW5kcyBCYXNlUHVibGlzaFByb2dyZXNzTGlzdGVuZXIge1xuICBwcm90ZWN0ZWQgZ2V0TWVzc2FnZSh0eXBlOiBFdmVudFR5cGUsIGV2ZW50OiBJUHVibGlzaFByb2dyZXNzKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFske2V2ZW50LnBlcmNlbnRDb21wbGV0ZX0lXSAke3R5cGV9OiAke2V2ZW50Lm1lc3NhZ2V9YDtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import * as cxapi from '@aws-cdk/cx-api';
2
+ import type { AssetManifestBuilder } from './asset-manifest-builder';
3
+ import type { EnvironmentResources } from '../environment';
4
+ import { type IoHelper } from '../io/private';
5
+ /**
6
+ * Take the metadata assets from the given stack and add them to the given asset manifest
7
+ *
8
+ * Returns the CloudFormation parameters that need to be sent to the template to
9
+ * pass Asset coordinates.
10
+ */
11
+ export declare function addMetadataAssetsToManifest(ioHelper: IoHelper, stack: cxapi.CloudFormationStackArtifact, assetManifest: AssetManifestBuilder, envResources: EnvironmentResources, reuse?: string[]): Promise<Record<string, string>>;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addMetadataAssetsToManifest = addMetadataAssetsToManifest;
4
+ // eslint-disable-next-line max-len
5
+ const path = require("path");
6
+ const cxschema = require("@aws-cdk/cloud-assembly-schema");
7
+ const cxapi = require("@aws-cdk/cx-api");
8
+ const chalk = require("chalk");
9
+ const private_1 = require("../io/private");
10
+ const toolkit_error_1 = require("../toolkit-error");
11
+ /**
12
+ * Take the metadata assets from the given stack and add them to the given asset manifest
13
+ *
14
+ * Returns the CloudFormation parameters that need to be sent to the template to
15
+ * pass Asset coordinates.
16
+ */
17
+ async function addMetadataAssetsToManifest(ioHelper, stack, assetManifest, envResources, reuse) {
18
+ reuse = reuse || [];
19
+ const assets = stack.assets;
20
+ if (assets.length === 0) {
21
+ return {};
22
+ }
23
+ const toolkitInfo = await envResources.lookupToolkit();
24
+ if (!toolkitInfo.found) {
25
+ // eslint-disable-next-line max-len
26
+ throw new toolkit_error_1.ToolkitError(`This stack uses assets, so the toolkit stack must be deployed to the environment (Run "${chalk.blue('cdk bootstrap ' + stack.environment.name)}")`);
27
+ }
28
+ const params = {};
29
+ for (const asset of assets) {
30
+ // FIXME: Should have excluded by construct path here instead of by unique ID, preferably using
31
+ // minimatch so we can support globs. Maybe take up during artifact refactoring.
32
+ const reuseAsset = reuse.indexOf(asset.id) > -1;
33
+ if (reuseAsset) {
34
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Reusing asset ${asset.id}: ${JSON.stringify(asset)}`));
35
+ continue;
36
+ }
37
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Preparing asset ${asset.id}: ${JSON.stringify(asset)}`));
38
+ if (!stack.assembly) {
39
+ throw new toolkit_error_1.ToolkitError('Unexpected: stack assembly is required in order to find assets in assembly directory');
40
+ }
41
+ Object.assign(params, await prepareAsset(ioHelper, asset, assetManifest, envResources, toolkitInfo));
42
+ }
43
+ return params;
44
+ }
45
+ // eslint-disable-next-line max-len
46
+ async function prepareAsset(ioHelper, asset, assetManifest, envResources, toolkitInfo) {
47
+ switch (asset.packaging) {
48
+ case 'zip':
49
+ case 'file':
50
+ return prepareFileAsset(ioHelper, asset, assetManifest, toolkitInfo, asset.packaging === 'zip' ? cxschema.FileAssetPackaging.ZIP_DIRECTORY : cxschema.FileAssetPackaging.FILE);
51
+ case 'container-image':
52
+ return prepareDockerImageAsset(asset, assetManifest, envResources);
53
+ default:
54
+ // eslint-disable-next-line max-len
55
+ throw new toolkit_error_1.ToolkitError(`Unsupported packaging type: ${asset.packaging}. You might need to upgrade your aws-cdk toolkit to support this asset type.`);
56
+ }
57
+ }
58
+ async function prepareFileAsset(ioHelper, asset, assetManifest, toolkitInfo, packaging) {
59
+ const extension = packaging === cxschema.FileAssetPackaging.ZIP_DIRECTORY ? '.zip' : path.extname(asset.path);
60
+ const baseName = `${asset.sourceHash}${extension}`;
61
+ // Simplify key: assets/abcdef/abcdef.zip is kinda silly and unnecessary, so if they're the same just pick one component.
62
+ const s3Prefix = asset.id === asset.sourceHash ? 'assets/' : `assets/${asset.id}/`;
63
+ const key = `${s3Prefix}${baseName}`;
64
+ const s3url = `s3://${toolkitInfo.bucketName}/${key}`;
65
+ await ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`Storing asset ${asset.path} at ${s3url}`));
66
+ assetManifest.addFileAsset(asset.sourceHash, {
67
+ path: asset.path,
68
+ packaging,
69
+ }, {
70
+ bucketName: toolkitInfo.bucketName,
71
+ objectKey: key,
72
+ });
73
+ return {
74
+ [asset.s3BucketParameter]: toolkitInfo.bucketName,
75
+ [asset.s3KeyParameter]: `${s3Prefix}${cxapi.ASSET_PREFIX_SEPARATOR}${baseName}`,
76
+ [asset.artifactHashParameter]: asset.sourceHash,
77
+ };
78
+ }
79
+ async function prepareDockerImageAsset(asset, assetManifest, envResources) {
80
+ // Pre-1.21.0, repositoryName can be specified by the user or can be left out, in which case we make
81
+ // a per-asset repository which will get adopted and cleaned up along with the stack.
82
+ // Post-1.21.0, repositoryName will always be specified and it will be a shared repository between
83
+ // all assets, and asset will have imageTag specified as well. Validate the combination.
84
+ if (!asset.imageNameParameter && (!asset.repositoryName || !asset.imageTag)) {
85
+ throw new toolkit_error_1.ToolkitError('Invalid Docker image asset configuration: "repositoryName" and "imageTag" are required when "imageNameParameter" is left out');
86
+ }
87
+ const repositoryName = asset.repositoryName ?? 'cdk/' + asset.id.replace(/[:/]/g, '-').toLowerCase();
88
+ // Make sure the repository exists, since the 'cdk-assets' tool will not create it for us.
89
+ const { repositoryUri } = await envResources.prepareEcrRepository(repositoryName);
90
+ const imageTag = asset.imageTag ?? asset.sourceHash;
91
+ assetManifest.addDockerImageAsset(asset.sourceHash, {
92
+ directory: asset.path,
93
+ dockerBuildArgs: asset.buildArgs,
94
+ dockerBuildSsh: asset.buildSsh,
95
+ dockerBuildTarget: asset.target,
96
+ dockerFile: asset.file,
97
+ networkMode: asset.networkMode,
98
+ platform: asset.platform,
99
+ dockerOutputs: asset.outputs,
100
+ }, {
101
+ repositoryName,
102
+ imageTag,
103
+ });
104
+ if (!asset.imageNameParameter) {
105
+ return {};
106
+ }
107
+ return { [asset.imageNameParameter]: `${repositoryUri}:${imageTag}` };
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXNzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLGtFQXlDQztBQTFERCxtQ0FBbUM7QUFDbkMsNkJBQTZCO0FBQzdCLDJEQUEyRDtBQUMzRCx5Q0FBeUM7QUFDekMsK0JBQStCO0FBRy9CLDJDQUFrRDtBQUNsRCxvREFBZ0Q7QUFHaEQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLFFBQWtCLEVBQ2xCLEtBQXdDLEVBQ3hDLGFBQW1DLEVBQ25DLFlBQWtDLEVBQ2xDLEtBQWdCO0lBRWhCLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3BCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFNUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsbUNBQW1DO1FBQ25DLE1BQU0sSUFBSSw0QkFBWSxDQUFDLDBGQUEwRixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxXQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9LLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBRTFDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsK0ZBQStGO1FBQy9GLGdGQUFnRjtRQUNoRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxRQUFRLENB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ckIsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQ2hDLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUTtRQUM5QixpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTTtRQUMvQixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDdEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQzlCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtRQUN4QixhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU87S0FDN0IsRUFBRTtRQUNELGNBQWM7UUFDZCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsYUFBYSxJQUFJLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgdHlwZSB7IEFzc2V0TWFuaWZlc3RCdWlsZGVyIH0gZnJvbSAnLi9hc3NldC1tYW5pZmVzdC1idWlsZGVyJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRSZXNvdXJjZXMgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBJTywgdHlwZSBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgdHlwZSB7IFRvb2xraXRJbmZvIH0gZnJvbSAnLi4vdG9vbGtpdC1pbmZvJztcblxuLyoqXG4gKiBUYWtlIHRoZSBtZXRhZGF0YSBhc3NldHMgZnJvbSB0aGUgZ2l2ZW4gc3RhY2sgYW5kIGFkZCB0aGVtIHRvIHRoZSBnaXZlbiBhc3NldCBtYW5pZmVzdFxuICpcbiAqIFJldHVybnMgdGhlIENsb3VkRm9ybWF0aW9uIHBhcmFtZXRlcnMgdGhhdCBuZWVkIHRvIGJlIHNlbnQgdG8gdGhlIHRlbXBsYXRlIHRvXG4gKiBwYXNzIEFzc2V0IGNvb3JkaW5hdGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkTWV0YWRhdGFBc3NldHNUb01hbmlmZXN0KFxuICBpb0hlbHBlcjogSW9IZWxwZXIsXG4gIHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gIGFzc2V0TWFuaWZlc3Q6IEFzc2V0TWFuaWZlc3RCdWlsZGVyLFxuICBlbnZSZXNvdXJjZXM6IEVudmlyb25tZW50UmVzb3VyY2VzLFxuICByZXVzZT86IHN0cmluZ1tdLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIHJldXNlID0gcmV1c2UgfHwgW107XG4gIGNvbnN0IGFzc2V0cyA9IHN0YWNrLmFzc2V0cztcblxuICBpZiAoYXNzZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHRvb2xraXRJbmZvID0gYXdhaXQgZW52UmVzb3VyY2VzLmxvb2t1cFRvb2xraXQoKTtcbiAgaWYgKCF0b29sa2l0SW5mby5mb3VuZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGhpcyBzdGFjayB1c2VzIGFzc2V0cywgc28gdGhlIHRvb2xraXQgc3RhY2sgbXVzdCBiZSBkZXBsb3llZCB0byB0aGUgZW52aXJvbm1lbnQgKFJ1biBcIiR7Y2hhbGsuYmx1ZSgnY2RrIGJvb3RzdHJhcCAnICsgc3RhY2suZW52aXJvbm1lbnQhLm5hbWUpfVwiKWApO1xuICB9XG5cbiAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBhc3NldHMpIHtcbiAgICAvLyBGSVhNRTogU2hvdWxkIGhhdmUgZXhjbHVkZWQgYnkgY29uc3RydWN0IHBhdGggaGVyZSBpbnN0ZWFkIG9mIGJ5IHVuaXF1ZSBJRCwgcHJlZmVyYWJseSB1c2luZ1xuICAgIC8vIG1pbmltYXRjaCBzbyB3ZSBjYW4gc3VwcG9ydCBnbG9icy4gTWF5YmUgdGFrZSB1cCBkdXJpbmcgYXJ0aWZhY3QgcmVmYWN0b3JpbmcuXG4gICAgY29uc3QgcmV1c2VBc3NldCA9IHJldXNlLmluZGV4T2YoYXNzZXQuaWQpID4gLTE7XG5cbiAgICBpZiAocmV1c2VBc3NldCkge1xuICAgICAgYXdhaXQgaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coYFJldXNpbmcgYXNzZXQgJHthc3NldC5pZH06ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXQpfWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IGlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGBQcmVwYXJpbmcgYXNzZXQgJHthc3NldC5pZH06ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXQpfWApKTtcbiAgICBpZiAoIXN0YWNrLmFzc2VtYmx5KSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdVbmV4cGVjdGVkOiBzdGFjayBhc3NlbWJseSBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBmaW5kIGFzc2V0cyBpbiBhc3NlbWJseSBkaXJlY3RvcnknKTtcbiAgICB9XG5cbiAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgYXdhaXQgcHJlcGFyZUFzc2V0KGlvSGVscGVyLCBhc3NldCwgYXNzZXRNYW5pZmVzdCwgZW52UmVzb3VyY2VzLCB0b29sa2l0SW5mbykpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVBc3NldChcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBhc3NldDogY3hzY2hlbWEuQXNzZXRNZXRhZGF0YUVudHJ5LFxuICBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0QnVpbGRlcixcbiAgZW52UmVzb3VyY2VzOiBFbnZpcm9ubWVudFJlc291cmNlcyxcbiAgdG9vbGtpdEluZm86IFRvb2xraXRJbmZvLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIHN3aXRjaCAoYXNzZXQucGFja2FnaW5nKSB7XG4gICAgY2FzZSAnemlwJzpcbiAgICBjYXNlICdmaWxlJzpcbiAgICAgIHJldHVybiBwcmVwYXJlRmlsZUFzc2V0KFxuICAgICAgICBpb0hlbHBlcixcbiAgICAgICAgYXNzZXQsXG4gICAgICAgIGFzc2V0TWFuaWZlc3QsXG4gICAgICAgIHRvb2xraXRJbmZvLFxuICAgICAgICBhc3NldC5wYWNrYWdpbmcgPT09ICd6aXAnID8gY3hzY2hlbWEuRmlsZUFzc2V0UGFja2FnaW5nLlpJUF9ESVJFQ1RPUlkgOiBjeHNjaGVtYS5GaWxlQXNzZXRQYWNrYWdpbmcuRklMRSk7XG4gICAgY2FzZSAnY29udGFpbmVyLWltYWdlJzpcbiAgICAgIHJldHVybiBwcmVwYXJlRG9ja2VySW1hZ2VBc3NldChhc3NldCwgYXNzZXRNYW5pZmVzdCwgZW52UmVzb3VyY2VzKTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuc3VwcG9ydGVkIHBhY2thZ2luZyB0eXBlOiAkeyhhc3NldCBhcyBhbnkpLnBhY2thZ2luZ30uIFlvdSBtaWdodCBuZWVkIHRvIHVwZ3JhZGUgeW91ciBhd3MtY2RrIHRvb2xraXQgdG8gc3VwcG9ydCB0aGlzIGFzc2V0IHR5cGUuYCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUZpbGVBc3NldChcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuICBhc3NldDogY3hzY2hlbWEuRmlsZUFzc2V0TWV0YWRhdGFFbnRyeSxcbiAgYXNzZXRNYW5pZmVzdDogQXNzZXRNYW5pZmVzdEJ1aWxkZXIsXG4gIHRvb2xraXRJbmZvOiBUb29sa2l0SW5mbyxcbiAgcGFja2FnaW5nOiBjeHNjaGVtYS5GaWxlQXNzZXRQYWNrYWdpbmcsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gcGFja2FnaW5nID09PSBjeHNjaGVtYS5GaWxlQXNzZXRQYWNrYWdpbmcuWklQX0RJUkVDVE9SWSA/ICcuemlwJyA6IHBhdGguZXh0bmFtZShhc3NldC5wYXRoKTtcbiAgY29uc3QgYmFzZU5hbWUgPSBgJHthc3NldC5zb3VyY2VIYXNofSR7ZXh0ZW5zaW9ufWA7XG4gIC8vIFNpbXBsaWZ5IGtleTogYXNzZXRzL2FiY2RlZi9hYmNkZWYuemlwIGlzIGtpbmRhIHNpbGx5IGFuZCB1bm5lY2Vzc2FyeSwgc28gaWYgdGhleSdyZSB0aGUgc2FtZSBqdXN0IHBpY2sgb25lIGNvbXBvbmVudC5cbiAgY29uc3QgczNQcmVmaXggPSBhc3NldC5pZCA9PT0gYXNzZXQuc291cmNlSGFzaCA/ICdhc3NldHMvJyA6IGBhc3NldHMvJHthc3NldC5pZH0vYDtcbiAgY29uc3Qga2V5ID0gYCR7czNQcmVmaXh9JHtiYXNlTmFtZX1gO1xuICBjb25zdCBzM3VybCA9IGBzMzovLyR7dG9vbGtpdEluZm8uYnVja2V0TmFtZX0vJHtrZXl9YDtcblxuICBhd2FpdCBpb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgU3RvcmluZyBhc3NldCAke2Fzc2V0LnBhdGh9IGF0ICR7czN1cmx9YCkpO1xuXG4gIGFzc2V0TWFuaWZlc3QuYWRkRmlsZUFzc2V0KGFzc2V0LnNvdXJjZUhhc2gsIHtcbiAgICBwYXRoOiBhc3NldC5wYXRoLFxuICAgIHBhY2thZ2luZyxcbiAgfSwge1xuICAgIGJ1Y2tldE5hbWU6IHRvb2xraXRJbmZvLmJ1Y2tldE5hbWUsXG4gICAgb2JqZWN0S2V5OiBrZXksXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgW2Fzc2V0LnMzQnVja2V0UGFyYW1ldGVyXTogdG9vbGtpdEluZm8uYnVja2V0TmFtZSxcbiAgICBbYXNzZXQuczNLZXlQYXJhbWV0ZXJdOiBgJHtzM1ByZWZpeH0ke2N4YXBpLkFTU0VUX1BSRUZJWF9TRVBBUkFUT1J9JHtiYXNlTmFtZX1gLFxuICAgIFthc3NldC5hcnRpZmFjdEhhc2hQYXJhbWV0ZXJdOiBhc3NldC5zb3VyY2VIYXNoLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlRG9ja2VySW1hZ2VBc3NldChcbiAgYXNzZXQ6IGN4c2NoZW1hLkNvbnRhaW5lckltYWdlQXNzZXRNZXRhZGF0YUVudHJ5LFxuICBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0QnVpbGRlcixcbiAgZW52UmVzb3VyY2VzOiBFbnZpcm9ubWVudFJlc291cmNlcyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAvLyBQcmUtMS4yMS4wLCByZXBvc2l0b3J5TmFtZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIG9yIGNhbiBiZSBsZWZ0IG91dCwgaW4gd2hpY2ggY2FzZSB3ZSBtYWtlXG4gIC8vIGEgcGVyLWFzc2V0IHJlcG9zaXRvcnkgd2hpY2ggd2lsbCBnZXQgYWRvcHRlZCBhbmQgY2xlYW5lZCB1cCBhbG9uZyB3aXRoIHRoZSBzdGFjay5cbiAgLy8gUG9zdC0xLjIxLjAsIHJlcG9zaXRvcnlOYW1lIHdpbGwgYWx3YXlzIGJlIHNwZWNpZmllZCBhbmQgaXQgd2lsbCBiZSBhIHNoYXJlZCByZXBvc2l0b3J5IGJldHdlZW5cbiAgLy8gYWxsIGFzc2V0cywgYW5kIGFzc2V0IHdpbGwgaGF2ZSBpbWFnZVRhZyBzcGVjaWZpZWQgYXMgd2VsbC4gVmFsaWRhdGUgdGhlIGNvbWJpbmF0aW9uLlxuICBpZiAoIWFzc2V0LmltYWdlTmFtZVBhcmFtZXRlciAmJiAoIWFzc2V0LnJlcG9zaXRvcnlOYW1lIHx8ICFhc3NldC5pbWFnZVRhZykpIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbnZhbGlkIERvY2tlciBpbWFnZSBhc3NldCBjb25maWd1cmF0aW9uOiBcInJlcG9zaXRvcnlOYW1lXCIgYW5kIFwiaW1hZ2VUYWdcIiBhcmUgcmVxdWlyZWQgd2hlbiBcImltYWdlTmFtZVBhcmFtZXRlclwiIGlzIGxlZnQgb3V0Jyk7XG4gIH1cblxuICBjb25zdCByZXBvc2l0b3J5TmFtZSA9IGFzc2V0LnJlcG9zaXRvcnlOYW1lID8/ICdjZGsvJyArIGFzc2V0LmlkLnJlcGxhY2UoL1s6L10vZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGUgcmVwb3NpdG9yeSBleGlzdHMsIHNpbmNlIHRoZSAnY2RrLWFzc2V0cycgdG9vbCB3aWxsIG5vdCBjcmVhdGUgaXQgZm9yIHVzLlxuICBjb25zdCB7IHJlcG9zaXRvcnlVcmkgfSA9IGF3YWl0IGVudlJlc291cmNlcy5wcmVwYXJlRWNyUmVwb3NpdG9yeShyZXBvc2l0b3J5TmFtZSk7XG4gIGNvbnN0IGltYWdlVGFnID0gYXNzZXQuaW1hZ2VUYWcgPz8gYXNzZXQuc291cmNlSGFzaDtcblxuICBhc3NldE1hbmlmZXN0LmFkZERvY2tlckltYWdlQXNzZXQoYXNzZXQuc291cmNlSGFzaCwge1xuICAgIGRpcmVjdG9yeTogYXNzZXQucGF0aCxcbiAgICBkb2NrZXJCdWlsZEFyZ3M6IGFzc2V0LmJ1aWxkQXJncyxcbiAgICBkb2NrZXJCdWlsZFNzaDogYXNzZXQuYnVpbGRTc2gsXG4gICAgZG9ja2VyQnVpbGRUYXJnZXQ6IGFzc2V0LnRhcmdldCxcbiAgICBkb2NrZXJGaWxlOiBhc3NldC5maWxlLFxuICAgIG5ldHdvcmtNb2RlOiBhc3NldC5uZXR3b3JrTW9kZSxcbiAgICBwbGF0Zm9ybTogYXNzZXQucGxhdGZvcm0sXG4gICAgZG9ja2VyT3V0cHV0czogYXNzZXQub3V0cHV0cyxcbiAgfSwge1xuICAgIHJlcG9zaXRvcnlOYW1lLFxuICAgIGltYWdlVGFnLFxuICB9KTtcblxuICBpZiAoIWFzc2V0LmltYWdlTmFtZVBhcmFtZXRlcikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICByZXR1cm4geyBbYXNzZXQuaW1hZ2VOYW1lUGFyYW1ldGVyXTogYCR7cmVwb3NpdG9yeVVyaX06JHtpbWFnZVRhZ31gIH07XG59XG4iXX0=