@aws-cdk/toolkit-lib 0.3.2 → 0.3.4

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 (392) hide show
  1. package/api-extractor.json +3 -0
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/bootstrap/index.d.ts +1 -1
  5. package/lib/actions/bootstrap/index.js +5 -5
  6. package/lib/actions/bootstrap/private/helpers.js +3 -3
  7. package/lib/actions/deploy/index.d.ts +1 -1
  8. package/lib/actions/deploy/index.js +1 -1
  9. package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
  10. package/lib/actions/deploy/private/deploy-options.js +1 -1
  11. package/lib/actions/deploy/private/helpers.d.ts +3 -2
  12. package/lib/actions/deploy/private/helpers.js +3 -3
  13. package/lib/actions/diff/index.d.ts +1 -1
  14. package/lib/actions/diff/index.js +1 -1
  15. package/lib/actions/diff/private/helpers.d.ts +5 -9
  16. package/lib/actions/diff/private/helpers.js +13 -30
  17. package/lib/actions/refactor/index.d.ts +12 -0
  18. package/lib/actions/refactor/index.js +1 -1
  19. package/lib/api/aws-auth/account-cache.d.ts +41 -0
  20. package/lib/api/aws-auth/account-cache.js +108 -0
  21. package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
  22. package/lib/api/aws-auth/awscli-compatible.js +250 -0
  23. package/lib/api/aws-auth/cached.d.ts +11 -0
  24. package/lib/api/aws-auth/cached.js +26 -0
  25. package/lib/api/aws-auth/credential-plugins.d.ts +38 -0
  26. package/lib/api/aws-auth/credential-plugins.js +154 -0
  27. package/lib/api/aws-auth/private/index.d.ts +11 -0
  28. package/lib/api/aws-auth/private/index.js +37 -0
  29. package/lib/api/aws-auth/provider-caching.d.ts +13 -0
  30. package/lib/api/aws-auth/provider-caching.js +24 -0
  31. package/lib/api/aws-auth/proxy-agent.d.ts +13 -0
  32. package/lib/api/aws-auth/proxy-agent.js +54 -0
  33. package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
  34. package/lib/api/aws-auth/sdk-logger.js +128 -0
  35. package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
  36. package/lib/api/aws-auth/sdk-provider.js +373 -0
  37. package/lib/api/aws-auth/sdk.d.ts +235 -0
  38. package/lib/api/aws-auth/sdk.js +391 -0
  39. package/lib/api/aws-auth/tracing.d.ts +11 -0
  40. package/lib/api/aws-auth/tracing.js +60 -0
  41. package/lib/api/aws-auth/user-agent.d.ts +7 -0
  42. package/lib/api/aws-auth/user-agent.js +20 -0
  43. package/lib/api/aws-auth/util.d.ts +6 -0
  44. package/lib/api/aws-auth/util.js +21 -0
  45. package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
  46. package/lib/api/bootstrap/bootstrap-environment.js +323 -0
  47. package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
  48. package/lib/api/bootstrap/bootstrap-props.js +14 -0
  49. package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
  50. package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
  51. package/lib/api/bootstrap/index.d.ts +3 -0
  52. package/lib/api/bootstrap/index.js +23 -0
  53. package/lib/api/bootstrap/legacy-template.d.ts +2 -0
  54. package/lib/api/bootstrap/legacy-template.js +82 -0
  55. package/lib/api/cloud-assembly/environment.d.ts +43 -0
  56. package/lib/api/cloud-assembly/environment.js +127 -0
  57. package/lib/api/cloud-assembly/index.d.ts +1 -1
  58. package/lib/api/cloud-assembly/index.js +5 -4
  59. package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
  60. package/lib/api/cloud-assembly/private/context-aware-source.js +7 -7
  61. package/lib/api/cloud-assembly/private/exec.js +3 -3
  62. package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
  63. package/lib/api/cloud-assembly/private/prepare-source.js +17 -15
  64. package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
  65. package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
  66. package/lib/api/cloud-assembly/private/source-builder.d.ts +10 -8
  67. package/lib/api/cloud-assembly/private/source-builder.js +43 -24
  68. package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
  69. package/lib/api/cloud-assembly/private/stack-assembly.js +16 -15
  70. package/lib/api/cloud-assembly/source-builder.d.ts +19 -0
  71. package/lib/api/cloud-assembly/source-builder.js +1 -1
  72. package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
  73. package/lib/api/cloud-assembly/stack-assembly.js +139 -0
  74. package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
  75. package/lib/api/cloud-assembly/stack-collection.js +112 -0
  76. package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
  77. package/lib/api/cloud-assembly/stack-selector.js +62 -5
  78. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
  79. package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
  80. package/lib/api/cloudformation/index.d.ts +4 -0
  81. package/lib/api/cloudformation/index.js +21 -0
  82. package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
  83. package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
  84. package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
  85. package/lib/api/cloudformation/stack-helpers.js +163 -0
  86. package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
  87. package/lib/api/cloudformation/template-body-parameter.js +104 -0
  88. package/lib/api/context.d.ts +40 -0
  89. package/lib/api/context.js +84 -0
  90. package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
  91. package/lib/api/deployments/asset-manifest-builder.js +33 -0
  92. package/lib/api/deployments/asset-publishing.d.ts +60 -0
  93. package/lib/api/deployments/asset-publishing.js +144 -0
  94. package/lib/api/deployments/assets.d.ts +11 -0
  95. package/lib/api/deployments/assets.js +108 -0
  96. package/lib/api/deployments/cfn-api.d.ts +145 -0
  97. package/lib/api/deployments/cfn-api.js +444 -0
  98. package/lib/api/deployments/checks.d.ts +9 -0
  99. package/lib/api/deployments/checks.js +72 -0
  100. package/lib/api/deployments/deploy-stack.d.ts +164 -0
  101. package/lib/api/deployments/deploy-stack.js +490 -0
  102. package/lib/api/deployments/deployment-method.d.ts +24 -0
  103. package/lib/api/deployments/deployment-method.js +3 -0
  104. package/lib/api/deployments/deployment-result.d.ts +21 -0
  105. package/lib/api/deployments/deployment-result.js +10 -0
  106. package/lib/api/deployments/deployments.d.ts +289 -0
  107. package/lib/api/deployments/deployments.js +355 -0
  108. package/lib/api/deployments/index.d.ts +6 -0
  109. package/lib/api/deployments/index.js +27 -0
  110. package/lib/api/diff/diff-formatter.d.ts +147 -0
  111. package/lib/api/diff/diff-formatter.js +225 -0
  112. package/lib/api/diff/index.d.ts +1 -0
  113. package/lib/api/diff/index.js +18 -0
  114. package/lib/api/environment/environment-access.d.ts +139 -0
  115. package/lib/api/environment/environment-access.js +205 -0
  116. package/lib/api/environment/environment-resources.d.ts +75 -0
  117. package/lib/api/environment/environment-resources.js +213 -0
  118. package/lib/api/environment/index.d.ts +3 -0
  119. package/lib/api/environment/index.js +20 -0
  120. package/lib/api/environment/placeholders.d.ts +10 -0
  121. package/lib/api/environment/placeholders.js +23 -0
  122. package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
  123. package/lib/api/garbage-collection/garbage-collector.js +614 -0
  124. package/lib/api/garbage-collection/index.d.ts +3 -0
  125. package/lib/api/garbage-collection/index.js +21 -0
  126. package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
  127. package/lib/api/garbage-collection/progress-printer.js +80 -0
  128. package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
  129. package/lib/api/garbage-collection/stack-refresh.js +152 -0
  130. package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
  131. package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
  132. package/lib/api/hotswap/code-build-projects.d.ts +4 -0
  133. package/lib/api/hotswap/code-build-projects.js +62 -0
  134. package/lib/api/hotswap/common.d.ts +89 -0
  135. package/lib/api/hotswap/common.js +137 -0
  136. package/lib/api/hotswap/ecs-services.d.ts +4 -0
  137. package/lib/api/hotswap/ecs-services.js +159 -0
  138. package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
  139. package/lib/api/hotswap/hotswap-deployments.js +441 -0
  140. package/lib/api/hotswap/index.d.ts +2 -0
  141. package/lib/api/hotswap/index.js +19 -0
  142. package/lib/api/hotswap/lambda-functions.d.ts +4 -0
  143. package/lib/api/hotswap/lambda-functions.js +297 -0
  144. package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
  145. package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
  146. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
  147. package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
  148. package/lib/api/index.d.ts +24 -0
  149. package/lib/api/index.js +41 -0
  150. package/lib/api/io/index.d.ts +3 -1
  151. package/lib/api/io/index.js +18 -1
  152. package/lib/api/io/io-host.d.ts +15 -0
  153. package/lib/api/io/io-host.js +3 -0
  154. package/lib/api/io/io-message.d.ts +76 -0
  155. package/lib/api/io/io-message.js +3 -0
  156. package/lib/api/io/private/index.d.ts +7 -1
  157. package/lib/api/io/private/index.js +8 -5
  158. package/lib/api/io/private/io-default-messages.d.ts +21 -0
  159. package/lib/api/io/private/io-default-messages.js +59 -0
  160. package/lib/api/io/private/io-helper.d.ts +32 -0
  161. package/lib/api/io/private/io-helper.js +51 -0
  162. package/lib/api/io/private/level-priority.d.ts +11 -0
  163. package/lib/api/io/private/level-priority.js +33 -0
  164. package/lib/api/io/private/message-maker.d.ts +89 -0
  165. package/lib/api/io/private/message-maker.js +60 -0
  166. package/lib/api/io/private/messages.d.ts +178 -0
  167. package/lib/api/io/private/messages.js +534 -0
  168. package/lib/api/io/private/sdk-logger.d.ts +1 -1
  169. package/lib/api/io/private/sdk-logger.js +6 -6
  170. package/lib/api/io/private/span.d.ts +93 -0
  171. package/lib/api/io/private/span.js +87 -0
  172. package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
  173. package/lib/api/io/private/testing/fake-io-host.js +41 -0
  174. package/lib/api/io/private/testing/index.d.ts +2 -0
  175. package/lib/api/io/private/testing/index.js +19 -0
  176. package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
  177. package/lib/api/io/private/testing/test-io-host.js +61 -0
  178. package/lib/api/io/private/types.d.ts +4 -0
  179. package/lib/api/io/private/types.js +3 -0
  180. package/lib/api/io/toolkit-action.d.ts +4 -0
  181. package/lib/api/io/toolkit-action.js +3 -0
  182. package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
  183. package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
  184. package/lib/api/logs-monitor/index.d.ts +2 -0
  185. package/lib/api/logs-monitor/index.js +19 -0
  186. package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
  187. package/lib/api/logs-monitor/logs-monitor.js +194 -0
  188. package/lib/api/notices/cached-data-source.d.ts +13 -0
  189. package/lib/api/notices/cached-data-source.js +77 -0
  190. package/lib/api/notices/filter.d.ts +59 -0
  191. package/lib/api/notices/filter.js +189 -0
  192. package/lib/api/notices/index.d.ts +1 -0
  193. package/lib/api/notices/index.js +18 -0
  194. package/lib/api/notices/notices.d.ts +111 -0
  195. package/lib/api/notices/notices.js +131 -0
  196. package/lib/api/notices/types.d.ts +37 -0
  197. package/lib/api/notices/types.js +3 -0
  198. package/lib/api/notices/web-data-source.d.ts +9 -0
  199. package/lib/api/notices/web-data-source.js +70 -0
  200. package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
  201. package/lib/api/plugin/context-provider-plugin.js +7 -0
  202. package/lib/api/plugin/index.d.ts +3 -0
  203. package/lib/api/plugin/index.js +20 -0
  204. package/lib/api/plugin/mode.d.ts +4 -0
  205. package/lib/api/plugin/mode.js +9 -0
  206. package/lib/api/plugin/plugin.d.ts +70 -0
  207. package/lib/api/plugin/plugin.js +127 -0
  208. package/lib/api/private.d.ts +1 -0
  209. package/lib/api/private.js +18 -0
  210. package/lib/api/refactoring/cloudformation.d.ts +38 -0
  211. package/lib/api/refactoring/cloudformation.js +56 -0
  212. package/lib/api/refactoring/digest.d.ts +26 -0
  213. package/lib/api/refactoring/digest.js +175 -0
  214. package/lib/api/refactoring/exclude.d.ts +29 -0
  215. package/lib/api/refactoring/exclude.js +94 -0
  216. package/lib/api/refactoring/index.d.ts +32 -0
  217. package/lib/api/refactoring/index.js +191 -0
  218. package/lib/api/require-approval.d.ts +17 -0
  219. package/lib/api/require-approval.js +22 -0
  220. package/lib/api/resource-import/importer.d.ts +216 -0
  221. package/lib/api/resource-import/importer.js +331 -0
  222. package/lib/api/resource-import/index.d.ts +2 -0
  223. package/lib/api/resource-import/index.js +19 -0
  224. package/lib/api/resource-import/migrator.d.ts +26 -0
  225. package/lib/api/resource-import/migrator.js +73 -0
  226. package/lib/api/resource-metadata/index.d.ts +1 -0
  227. package/lib/api/resource-metadata/index.js +18 -0
  228. package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
  229. package/lib/api/resource-metadata/resource-metadata.js +42 -0
  230. package/lib/api/rwlock.d.ts +60 -0
  231. package/lib/api/rwlock.js +204 -0
  232. package/lib/api/settings.d.ts +26 -0
  233. package/lib/api/settings.js +107 -0
  234. package/lib/api/shared-private.d.ts +8 -6
  235. package/lib/api/shared-private.js +31 -12561
  236. package/lib/api/stack-events/index.d.ts +4 -0
  237. package/lib/api/stack-events/index.js +23 -0
  238. package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
  239. package/lib/api/stack-events/stack-activity-monitor.js +164 -0
  240. package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
  241. package/lib/api/stack-events/stack-event-poller.js +130 -0
  242. package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
  243. package/lib/api/stack-events/stack-progress-monitor.js +98 -0
  244. package/lib/api/stack-events/stack-status.d.ts +42 -0
  245. package/lib/api/stack-events/stack-status.js +90 -0
  246. package/lib/api/streams.d.ts +7 -0
  247. package/lib/api/streams.js +24 -0
  248. package/lib/api/tags.d.ts +9 -0
  249. package/lib/api/tags.js +10 -0
  250. package/lib/api/toolkit-info.d.ts +52 -0
  251. package/lib/api/toolkit-info.js +157 -0
  252. package/lib/api/tree.d.ts +31 -0
  253. package/lib/api/tree.js +37 -0
  254. package/lib/api/work-graph/index.d.ts +3 -0
  255. package/lib/api/work-graph/index.js +20 -0
  256. package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
  257. package/lib/api/work-graph/work-graph-builder.js +172 -0
  258. package/lib/api/work-graph/work-graph-types.d.ts +50 -0
  259. package/lib/api/work-graph/work-graph-types.js +13 -0
  260. package/lib/api/work-graph/work-graph.d.ts +72 -0
  261. package/lib/api/work-graph/work-graph.js +349 -0
  262. package/lib/context-providers/ami.d.ts +13 -0
  263. package/lib/context-providers/ami.js +52 -0
  264. package/lib/context-providers/availability-zones.d.ts +13 -0
  265. package/lib/context-providers/availability-zones.js +29 -0
  266. package/lib/context-providers/cc-api-provider.d.ts +30 -0
  267. package/lib/context-providers/cc-api-provider.js +145 -0
  268. package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
  269. package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
  270. package/lib/context-providers/hosted-zones.d.ts +12 -0
  271. package/lib/context-providers/hosted-zones.js +69 -0
  272. package/lib/context-providers/index.d.ts +44 -0
  273. package/lib/context-providers/index.js +128 -0
  274. package/lib/context-providers/keys.d.ts +13 -0
  275. package/lib/context-providers/keys.js +54 -0
  276. package/lib/context-providers/load-balancers.d.ts +20 -0
  277. package/lib/context-providers/load-balancers.js +161 -0
  278. package/lib/context-providers/security-groups.d.ts +9 -0
  279. package/lib/context-providers/security-groups.js +69 -0
  280. package/lib/context-providers/ssm-parameters.d.ts +25 -0
  281. package/lib/context-providers/ssm-parameters.js +61 -0
  282. package/lib/context-providers/vpcs.d.ts +13 -0
  283. package/lib/context-providers/vpcs.js +291 -0
  284. package/lib/index.d.ts +4 -1
  285. package/lib/index.js +5 -2
  286. package/lib/index_bg.wasm +0 -0
  287. package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
  288. package/lib/payloads/bootstrap-environment-progress.js +3 -0
  289. package/lib/payloads/context.d.ts +9 -0
  290. package/lib/payloads/context.js +3 -0
  291. package/lib/payloads/deploy.d.ts +50 -0
  292. package/lib/payloads/deploy.js +3 -0
  293. package/lib/payloads/destroy.d.ts +23 -0
  294. package/lib/payloads/destroy.js +3 -0
  295. package/lib/payloads/diff.d.ts +31 -0
  296. package/lib/payloads/diff.js +22 -0
  297. package/lib/payloads/hotswap.d.ts +212 -0
  298. package/lib/payloads/hotswap.js +43 -0
  299. package/lib/payloads/index.d.ts +17 -0
  300. package/lib/payloads/index.js +34 -0
  301. package/lib/payloads/list.d.ts +4 -0
  302. package/lib/payloads/list.js +3 -0
  303. package/lib/payloads/logs-monitor.d.ts +33 -0
  304. package/lib/payloads/logs-monitor.js +3 -0
  305. package/lib/payloads/progress.d.ts +14 -0
  306. package/lib/payloads/progress.js +3 -0
  307. package/lib/payloads/refactor.d.ts +14 -0
  308. package/lib/payloads/refactor.js +3 -0
  309. package/lib/payloads/rollback.d.ts +17 -0
  310. package/lib/payloads/rollback.js +3 -0
  311. package/lib/payloads/sdk-trace.d.ts +20 -0
  312. package/lib/payloads/sdk-trace.js +3 -0
  313. package/lib/payloads/stack-activity.d.ts +53 -0
  314. package/lib/payloads/stack-activity.js +3 -0
  315. package/lib/payloads/stack-details.d.ts +17 -0
  316. package/lib/payloads/stack-details.js +3 -0
  317. package/lib/payloads/synth.d.ts +7 -0
  318. package/lib/payloads/synth.js +3 -0
  319. package/lib/payloads/types.d.ts +95 -0
  320. package/lib/payloads/types.js +3 -0
  321. package/lib/payloads/watch.d.ts +27 -0
  322. package/lib/payloads/watch.js +3 -0
  323. package/lib/private/activity-printer/base.d.ts +50 -0
  324. package/lib/private/activity-printer/base.js +120 -0
  325. package/lib/private/activity-printer/current.d.ts +26 -0
  326. package/lib/private/activity-printer/current.js +122 -0
  327. package/lib/private/activity-printer/display.d.ts +13 -0
  328. package/lib/private/activity-printer/display.js +81 -0
  329. package/lib/private/activity-printer/history.d.ts +32 -0
  330. package/lib/private/activity-printer/history.js +109 -0
  331. package/lib/private/activity-printer/index.d.ts +3 -0
  332. package/lib/private/activity-printer/index.js +20 -0
  333. package/lib/private/index.d.ts +1 -0
  334. package/lib/private/index.js +18 -0
  335. package/lib/toolkit/non-interactive-io-host.js +5 -4
  336. package/lib/toolkit/private/index.d.ts +2 -1
  337. package/lib/toolkit/private/index.js +1 -1
  338. package/lib/toolkit/toolkit-error.d.ts +86 -0
  339. package/lib/toolkit/toolkit-error.js +132 -0
  340. package/lib/toolkit/toolkit.d.ts +2 -2
  341. package/lib/toolkit/toolkit.js +161 -130
  342. package/lib/toolkit/types.d.ts +0 -55
  343. package/lib/toolkit/types.js +1 -1
  344. package/lib/util/archive.d.ts +1 -0
  345. package/lib/util/archive.js +86 -0
  346. package/lib/util/arrays.d.ts +14 -0
  347. package/lib/util/arrays.js +36 -0
  348. package/lib/util/bool.d.ts +7 -0
  349. package/lib/util/bool.js +13 -0
  350. package/lib/util/bytes.d.ts +8 -0
  351. package/lib/util/bytes.js +21 -0
  352. package/lib/util/cloudformation.d.ts +16 -0
  353. package/lib/util/cloudformation.js +36 -0
  354. package/lib/util/content-hash.d.ts +5 -0
  355. package/lib/util/content-hash.js +43 -0
  356. package/lib/util/directories.d.ts +22 -0
  357. package/lib/util/directories.js +59 -0
  358. package/lib/util/format-error.d.ts +9 -0
  359. package/lib/util/format-error.js +22 -0
  360. package/lib/util/index.d.ts +19 -0
  361. package/lib/util/index.js +36 -0
  362. package/lib/util/json.d.ts +48 -0
  363. package/lib/util/json.js +68 -0
  364. package/lib/util/net.d.ts +9 -0
  365. package/lib/util/net.js +60 -0
  366. package/lib/util/objects.d.ts +65 -0
  367. package/lib/util/objects.js +230 -0
  368. package/lib/util/package-info.d.ts +3 -0
  369. package/lib/util/package-info.js +22 -0
  370. package/lib/util/parallel.d.ts +6 -0
  371. package/lib/util/parallel.js +48 -0
  372. package/lib/util/serialize.d.ts +27 -0
  373. package/lib/util/serialize.js +86 -0
  374. package/lib/util/string-manipulation.d.ts +18 -0
  375. package/lib/util/string-manipulation.js +46 -0
  376. package/lib/util/type-brands.d.ts +39 -0
  377. package/lib/util/type-brands.js +39 -0
  378. package/lib/util/types.d.ts +27 -0
  379. package/lib/util/types.js +25 -0
  380. package/lib/util/version-range.d.ts +2 -0
  381. package/lib/util/version-range.js +36 -0
  382. package/lib/util/yaml-cfn.d.ts +15 -0
  383. package/lib/util/yaml-cfn.js +58 -0
  384. package/package.json +26 -28
  385. package/tsdoc.json +15 -0
  386. package/lib/api/shared-private.js.map +0 -7
  387. package/lib/api/shared-public.d.ts +0 -2159
  388. package/lib/api/shared-public.js +0 -1110
  389. package/lib/api/shared-public.js.map +0 -7
  390. package/lib/private/util.d.ts +0 -1
  391. package/lib/private/util.js +0 -787
  392. package/lib/private/util.js.map +0 -7
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilteredNotice = exports.NoticesFilter = void 0;
4
+ const semver = require("semver");
5
+ const private_1 = require("../io/private");
6
+ const tree_1 = require("../tree");
7
+ /**
8
+ * Normalizes the given components structure into DNF form
9
+ */
10
+ function normalizeComponents(xs) {
11
+ return xs.map(x => Array.isArray(x) ? x : [x]);
12
+ }
13
+ function renderConjunction(xs) {
14
+ return xs.map(c => `${c.name}: ${c.version}`).join(' AND ');
15
+ }
16
+ class NoticesFilter {
17
+ ioMessages;
18
+ constructor(ioMessages) {
19
+ this.ioMessages = ioMessages;
20
+ }
21
+ filter(options) {
22
+ const components = [
23
+ ...this.constructTreeComponents(options.outDir),
24
+ ...this.otherComponents(options),
25
+ ];
26
+ return this.findForNamedComponents(options.data, components);
27
+ }
28
+ /**
29
+ * From a set of input options, return the notices components we are searching for
30
+ */
31
+ otherComponents(options) {
32
+ return [
33
+ // CLI
34
+ {
35
+ name: 'cli',
36
+ version: options.cliVersion,
37
+ },
38
+ // Node version
39
+ {
40
+ name: 'node',
41
+ version: process.version.replace(/^v/, ''), // remove the 'v' prefix.
42
+ dynamicName: 'node',
43
+ },
44
+ // Bootstrap environments
45
+ ...options.bootstrappedEnvironments.flatMap(env => {
46
+ const semverBootstrapVersion = semver.coerce(env.bootstrapStackVersion);
47
+ if (!semverBootstrapVersion) {
48
+ // we don't throw because notices should never crash the cli.
49
+ this.ioMessages.warning(`While filtering notices, could not coerce bootstrap version '${env.bootstrapStackVersion}' into semver`);
50
+ return [];
51
+ }
52
+ return [{
53
+ name: 'bootstrap',
54
+ version: `${semverBootstrapVersion}`,
55
+ dynamicName: 'ENVIRONMENTS',
56
+ dynamicValue: env.environment.name,
57
+ }];
58
+ }),
59
+ ];
60
+ }
61
+ /**
62
+ * Based on a set of component names, find all notices that match one of the given components
63
+ */
64
+ findForNamedComponents(data, actualComponents) {
65
+ return data.flatMap(notice => {
66
+ const ors = this.resolveAliases(normalizeComponents(notice.components));
67
+ // Find the first set of the disjunctions of which all components match against the actual components.
68
+ // Return the actual components we found so that we can inject their dynamic values. A single filter
69
+ // component can match more than one actual component
70
+ for (const ands of ors) {
71
+ const matched = ands.map(affected => actualComponents.filter(actual => this.componentNameMatches(affected, actual) && semver.satisfies(actual.version, affected.version, { includePrerelease: true })));
72
+ // For every clause in the filter we matched one or more components
73
+ if (matched.every(xs => xs.length > 0)) {
74
+ const ret = new FilteredNotice(notice);
75
+ this.addDynamicValues(matched.flatMap(x => x), ret);
76
+ return [ret];
77
+ }
78
+ }
79
+ return [];
80
+ });
81
+ }
82
+ /**
83
+ * Whether the given "affected component" name applies to the given actual component name.
84
+ *
85
+ * The name matches if the name is exactly the same, or the name in the notice
86
+ * is a prefix of the node name when the query ends in '.'.
87
+ */
88
+ componentNameMatches(pattern, actual) {
89
+ return pattern.name.endsWith('.') ? actual.name.startsWith(pattern.name) : pattern.name === actual.name;
90
+ }
91
+ /**
92
+ * Adds dynamic values from the given ActualComponents
93
+ *
94
+ * If there are multiple components with the same dynamic name, they are joined
95
+ * by a comma.
96
+ */
97
+ addDynamicValues(comps, notice) {
98
+ const dynamicValues = {};
99
+ for (const comp of comps) {
100
+ if (comp.dynamicName) {
101
+ dynamicValues[comp.dynamicName] = dynamicValues[comp.dynamicName] ?? [];
102
+ dynamicValues[comp.dynamicName].push(comp.dynamicValue ?? comp.version);
103
+ }
104
+ }
105
+ for (const [key, values] of Object.entries(dynamicValues)) {
106
+ notice.addDynamicValue(key, values.join(','));
107
+ }
108
+ }
109
+ /**
110
+ * Treat 'framework' as an alias for either `aws-cdk-lib.` or `@aws-cdk/core.`.
111
+ *
112
+ * Because it's EITHER `aws-cdk-lib` or `@aws-cdk/core`, we need to add multiple
113
+ * arrays at the top level.
114
+ */
115
+ resolveAliases(ors) {
116
+ return ors.flatMap(ands => {
117
+ const hasFramework = ands.find(c => c.name === 'framework');
118
+ if (!hasFramework) {
119
+ return [ands];
120
+ }
121
+ return [
122
+ ands.map(c => c.name === 'framework' ? { ...c, name: '@aws-cdk/core.' } : c),
123
+ ands.map(c => c.name === 'framework' ? { ...c, name: 'aws-cdk-lib.' } : c),
124
+ ];
125
+ });
126
+ }
127
+ /**
128
+ * Load the construct tree from the given directory and return its components
129
+ */
130
+ constructTreeComponents(manifestDir) {
131
+ const tree = (0, tree_1.loadTreeFromDir)(manifestDir, (msg) => void this.ioMessages.notify(private_1.IO.DEFAULT_ASSEMBLY_TRACE.msg(msg)));
132
+ if (!tree) {
133
+ return [];
134
+ }
135
+ const ret = [];
136
+ recurse(tree);
137
+ return ret;
138
+ function recurse(x) {
139
+ if (x.constructInfo?.fqn && x.constructInfo?.version) {
140
+ ret.push({
141
+ name: x.constructInfo?.fqn,
142
+ version: x.constructInfo?.version,
143
+ });
144
+ }
145
+ for (const child of Object.values(x.children ?? {})) {
146
+ recurse(child);
147
+ }
148
+ }
149
+ }
150
+ }
151
+ exports.NoticesFilter = NoticesFilter;
152
+ /**
153
+ * Notice after passing the filter. A filter can augment a notice with
154
+ * dynamic values as it has access to the dynamic matching data.
155
+ */
156
+ class FilteredNotice {
157
+ notice;
158
+ dynamicValues = {};
159
+ constructor(notice) {
160
+ this.notice = notice;
161
+ }
162
+ addDynamicValue(key, value) {
163
+ this.dynamicValues[`{resolve:${key}}`] = value;
164
+ }
165
+ format() {
166
+ const componentsValue = normalizeComponents(this.notice.components).map(renderConjunction).join(', ');
167
+ return this.resolveDynamicValues([
168
+ `${this.notice.issueNumber}\t${this.notice.title}`,
169
+ this.formatOverview(),
170
+ `\tAffected versions: ${componentsValue}`,
171
+ `\tMore information at: https://github.com/aws/aws-cdk/issues/${this.notice.issueNumber}`,
172
+ ].join('\n\n') + '\n');
173
+ }
174
+ formatOverview() {
175
+ const wrap = (s) => s.replace(/(?![^\n]{1,60}$)([^\n]{1,60})\s/g, '$1\n');
176
+ const heading = 'Overview: ';
177
+ const separator = `\n\t${' '.repeat(heading.length)}`;
178
+ const content = wrap(this.notice.overview)
179
+ .split('\n')
180
+ .join(separator);
181
+ return '\t' + heading + content;
182
+ }
183
+ resolveDynamicValues(input) {
184
+ const pattern = new RegExp(Object.keys(this.dynamicValues).join('|'), 'g');
185
+ return input.replace(pattern, (matched) => this.dynamicValues[matched] ?? matched);
186
+ }
187
+ }
188
+ exports.FilteredNotice = FilteredNotice;
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQywyQ0FBMkQ7QUFFM0Qsa0NBQTBDO0FBRzFDOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxFQUFrQztJQUM3RCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFlO0lBQ3hDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQTRDRCxNQUFhLGFBQWE7SUFDSztJQUE3QixZQUE2QixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtJQUMxRCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQW1DO1FBQy9DLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDL0MsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztTQUNqQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsT0FBbUM7UUFDekQsT0FBTztZQUNMLE1BQU07WUFDTjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsT0FBTyxD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QUFDLFFBQVEsQ0FBQzthQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRW5CLE9BQU8sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWE7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUM7SUFDckYsQ0FBQztDQUNGO0FBcENELHdDQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgSU8sIHR5cGUgSW9EZWZhdWx0TWVzc2FnZXMgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0VHJlZU5vZGUgfSBmcm9tICcuLi90cmVlJztcbmltcG9ydCB7IGxvYWRUcmVlRnJvbURpciB9IGZyb20gJy4uL3RyZWUnO1xuaW1wb3J0IHR5cGUgeyBCb290c3RyYXBwZWRFbnZpcm9ubWVudCwgQ29tcG9uZW50LCBOb3RpY2UgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSBnaXZlbiBjb21wb25lbnRzIHN0cnVjdHVyZSBpbnRvIERORiBmb3JtXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudHMoeHM6IEFycmF5PENvbXBvbmVudCB8IENvbXBvbmVudFtdPik6IENvbXBvbmVudFtdW10ge1xuICByZXR1cm4geHMubWFwKHggPT4gQXJyYXkuaXNBcnJheSh4KSA/IHggOiBbeF0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb25qdW5jdGlvbih4czogQ29tcG9uZW50W10pOiBzdHJpbmcge1xuICByZXR1cm4geHMubWFwKGMgPT4gYCR7Yy5uYW1lfTogJHtjLnZlcnNpb259YCkuam9pbignIEFORCAnKTtcbn1cblxuaW50ZXJmYWNlIEFjdHVhbENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIG1hdGNoZWQsIHVuZGVyIHdoYXQgbmFtZSBzaG91bGQgaXQgYmUgYWRkZWQgdG8gdGhlIHNldCBvZiBkeW5hbWljIHZhbHVlc1xuICAgKlxuICAgKiBUaGVzZSB3aWxsIGJlIHVzZWQgdG8gc3Vic3RpdHV0ZSBwbGFjZWhvbGRlcnMgaW4gdGhlIG1lc3NhZ2Ugc3RyaW5nLCB3aGVyZVxuICAgKiBwbGFjZWhvbGRlcnMgbG9vayBsaWtlIGB7cmVzb2x2ZTpYWVp9YC5cbiAgICpcbiAgICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjb21wb25lbnQgd2l0aCB0aGUgc2FtZSBkeW5hbWljIG5hbWUsIHRoZXkgYXJlXG4gICAqIGpvaW5lZCBieSAnLCcuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRG9uJ3QgYWRkIHRvIHRoZSBzZXQgb2YgZHluYW1pYyB2YWx1ZXMuXG4gICAqL1xuICByZWFkb25seSBkeW5hbWljTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgbWF0Y2hlZCwgd2hhdCB3ZSBzaG91bGQgcHV0IGluIHRoZSBzZXQgb2YgZHluYW1pYyB2YWx1ZXMgaW5zc3RlYWQgb2YgdGhlIHZlcnNpb24uXG4gICAqXG4gICAqIE9ubHkgdXNlZCBpZiBgZHluYW1pY05hbWVgIGlzIHNldDsgYnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgYWN0dWFsIHZlcnNpb25cbiAgICogb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGR5bmFtaWNWYWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRhdGE6IE5vdGljZVtdO1xuICByZWFkb25seSBjbGlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dERpcjogc3RyaW5nO1xuICByZWFkb25seSBib290c3RyYXBwZWRFbnZpcm9ubWVudHM6IEJvb3RzdHJhcHBlZEVudmlyb25tZW50W107XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RpY2VzRmlsdGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpb01lc3NhZ2VzOiBJb0RlZmF1bHRNZXNzYWdlcykge1xuICB9XG5cbiAgcHVibGljIGZpbHRlcihvcHRpb25zOiBOb3RpY2VzRmlsdGVyRmlsdGVyT3B0aW9ucyk6IEZpbHRlcmVkTm90aWNlW10ge1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdFRyZWVDb21wb25lbnRzKG9wdGlvbnMub3V0RGlyKSxcbiAgICAgIC4uLnRoaXMub3RoZXJDb21wb25lbnRzKG9wdGlvbnMpLFxuICAgIF07XG5cbiAgICByZXR1cm4gdGhpcy5maW5kRm9yTmFtZWRDb21wb25lbnRzKG9wdGlvbnMuZGF0YSwgY29tcG9uZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogRnJvbSBhIHNldCBvZiBpbnB1dCBvcHRpb25zLCByZXR1cm4gdGhlIG5vdGljZXMgY29tcG9uZW50cyB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICAgKi9cbiAgcHJpdmF0ZSBvdGhlckNvbXBvbmVudHMob3B0aW9uczogTm90aWNlc0ZpbHRlckZpbHRlck9wdGlvbnMpOiBBY3R1YWxDb21wb25lbnRbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIENMSVxuICAgICAge1xuICAgICAgICBuYW1lOiAnY2xpJyxcbiAgICAgICAgdmVyc2lvbjogb3B0aW9ucy5jbGlWZXJzaW9uLFxuICAgICAgfSxcblxuICAgICAgLy8gTm9kZSB2ZXJzaW9uXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdub2RlJyxcbiAgICAgICAgdmVyc2lvbjogcHJvY2Vzcy52ZXJzaW9uLnJlcGxhY2UoL152LywgJycpLCAvLyByZW1vdmUgdGhlICd2JyBwcmVmaXguXG4gICAgICAgIGR5bmFtaWNOYW1lOiAnbm9kZScsXG4gICAgICB9LFxuXG4gICAgICAvLyBCb290c3RyYXAgZW52aXJvbm1lbnRzXG4gICAgICAuLi5vcHRpb25zLmJvb3RzdHJhcHBlZEVudmlyb25tZW50cy5mbGF0TWFwKGVudiA9PiB7XG4gICAgICAgIGNvbnN0IHNlbXZlckJvb3RzdHJhcFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGVudi5ib290c3RyYXBTdGFja1ZlcnNpb24pO1xuICAgICAgICBpZiAoIXNlbXZlckJvb3RzdHJhcFZlcnNpb24pIHtcbiAgICAgICAgICAvLyB3ZSBkb24ndCB0aHJvdyBiZWNhdXNlIG5vdGljZXMgc2hvdWxkIG5ldmVyIGNyYXNoIHRoZSBjbGkuXG4gICAgICAgICAgdGhpcy5pb01lc3NhZ2VzLndhcm5pbmcoYFdoaWxlIGZpbHRlcmluZyBub3RpY2VzLCBjb3VsZCBub3QgY29lcmNlIGJvb3RzdHJhcCB2ZXJzaW9uICcke2Vudi5ib290c3RyYXBTdGFja1ZlcnNpb259JyBpbnRvIHNlbXZlcmApO1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICdib290c3RyYXAnLFxuICAgICAgICAgIHZlcnNpb246IGAke3NlbXZlckJvb3RzdHJhcFZlcnNpb259YCxcbiAgICAgICAgICBkeW5hbWljTmFtZTogJ0VOVklST05NRU5UUycsXG4gICAgICAgICAgZHluYW1pY1ZhbHVlOiBlbnYuZW52aXJvbm1lbnQubmFtZSxcbiAgICAgICAgfV07XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uIGEgc2V0IG9mIGNvbXBvbmVudCBuYW1lcywgZmluZCBhbGwgbm90aWNlcyB0aGF0IG1hdGNoIG9uZSBvZiB0aGUgZ2l2ZW4gY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBmaW5kRm9yTmFtZWRDb21wb25lbnRzKGRhdGE6IE5vdGljZVtdLCBhY3R1YWxDb21wb25lbnRzOiBBY3R1YWxDb21wb25lbnRbXSk6IEZpbHRlcmVkTm90aWNlW10ge1xuICAgIHJldHVybiBkYXRhLmZsYXRNYXAobm90aWNlID0+IHtcbiAgICAgIGNvbnN0IG9ycyA9IHRoaXMucmVzb2x2ZUFsaWFzZXMobm9ybWFsaXplQ29tcG9uZW50cyhub3RpY2UuY29tcG9uZW50cykpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBmaXJzdCBzZXQgb2YgdGhlIGRpc2p1bmN0aW9ucyBvZiB3aGljaCBhbGwgY29tcG9uZW50cyBtYXRjaCBhZ2FpbnN0IHRoZSBhY3R1YWwgY29tcG9uZW50cy5cbiAgICAgIC8vIFJldHVybiB0aGUgYWN0dWFsIGNvbXBvbmVudHMgd2UgZm91bmQgc28gdGhhdCB3ZSBjYW4gaW5qZWN0IHRoZWlyIGR5bmFtaWMgdmFsdWVzLiBBIHNpbmdsZSBmaWx0ZXJcbiAgICAgIC8vIGNvbXBvbmVudCBjYW4gbWF0Y2ggbW9yZSB0aGFuIG9uZSBhY3R1YWwgY29tcG9uZW50XG4gICAgICBmb3IgKGNvbnN0IGFuZHMgb2Ygb3JzKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWQgPSBhbmRzLm1hcChhZmZlY3RlZCA9PiBhY3R1YWxDb21wb25lbnRzLmZpbHRlcihhY3R1YWwgPT5cbiAgICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWVNYXRjaGVzKGFmZmVjdGVkLCBhY3R1YWwpICYmIHNlbXZlci5zYXRpc2ZpZXMoYWN0dWFsLnZlcnNpb24sIGFmZmVjdGVkLnZlcnNpb24sIHsgaW5jbHVkZVByZXJlbGVhc2U6IHRydWUgfSkpKTtcblxuICAgICAgICAvLyBGb3IgZXZlcnkgY2xhdXNlIGluIHRoZSBmaWx0ZXIgd2UgbWF0Y2hlZCBvbmUgb3IgbW9yZSBjb21wb25lbnRzXG4gICAgICAgIGlmIChtYXRjaGVkLmV2ZXJ5KHhzID0+IHhzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgY29uc3QgcmV0ID0gbmV3IEZpbHRlcmVkTm90aWNlKG5vdGljZSk7XG4gICAgICAgICAgdGhpcy5hZGREeW5hbWljVmFsdWVzKG1hdGNoZWQuZmxhdE1hcCh4ID0+IHgpLCByZXQpO1xuICAgICAgICAgIHJldHVybiBbcmV0XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gXCJhZmZlY3RlZCBjb21wb25lbnRcIiBuYW1lIGFwcGxpZXMgdG8gdGhlIGdpdmVuIGFjdHVhbCBjb21wb25lbnQgbmFtZS5cbiAgICpcbiAgICogVGhlIG5hbWUgbWF0Y2hlcyBpZiB0aGUgbmFtZSBpcyBleGFjdGx5IHRoZSBzYW1lLCBvciB0aGUgbmFtZSBpbiB0aGUgbm90aWNlXG4gICAqIGlzIGEgcHJlZml4IG9mIHRoZSBub2RlIG5hbWUgd2hlbiB0aGUgcXVlcnkgZW5kcyBpbiAnLicuXG4gICAqL1xuICBwcml2YXRlIGNvbXBvbmVudE5hbWVNYXRjaGVzKHBhdHRlcm46IENvbXBvbmVudCwgYWN0dWFsOiBBY3R1YWxDb21wb25lbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0dGVybi5uYW1lLmVuZHNXaXRoKCcuJykgPyBhY3R1YWwubmFtZS5zdGFydHNXaXRoKHBhdHRlcm4ubmFtZSkgOiBwYXR0ZXJuLm5hbWUgPT09IGFjdHVhbC5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgZHluYW1pYyB2YWx1ZXMgZnJvbSB0aGUgZ2l2ZW4gQWN0dWFsQ29tcG9uZW50c1xuICAgKlxuICAgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29tcG9uZW50cyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbmFtZSwgdGhleSBhcmUgam9pbmVkXG4gICAqIGJ5IGEgY29tbWEuXG4gICAqL1xuICBwcml2YXRlIGFkZER5bmFtaWNWYWx1ZXMoY29tcHM6IEFjdHVhbENvbXBvbmVudFtdLCBub3RpY2U6IEZpbHRlcmVkTm90aWNlKSB7XG4gICAgY29uc3QgZHluYW1pY1ZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gICAgZm9yIChjb25zdCBjb21wIG9mIGNvbXBzKSB7XG4gICAgICBpZiAoY29tcC5keW5hbWljTmFtZSkge1xuICAgICAgICBkeW5hbWljVmFsdWVzW2NvbXAuZHluYW1pY05hbWVdID0gZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXSA/PyBbXTtcbiAgICAgICAgZHluYW1pY1ZhbHVlc1tjb21wLmR5bmFtaWNOYW1lXS5wdXNoKGNvbXAuZHluYW1pY1ZhbHVlID8/IGNvbXAudmVyc2lvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhkeW5hbWljVmFsdWVzKSkge1xuICAgICAgbm90aWNlLmFkZER5bmFtaWNWYWx1ZShrZXksIHZhbHVlcy5qb2luKCcsJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmVhdCAnZnJhbWV3b3JrJyBhcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBhd3MtY2RrLWxpYi5gIG9yIGBAYXdzLWNkay9jb3JlLmAuXG4gICAqXG4gICAqIEJlY2F1c2UgaXQncyBFSVRIRVIgYGF3cy1jZGstbGliYCBvciBgQGF3cy1jZGsvY29yZWAsIHdlIG5lZWQgdG8gYWRkIG11bHRpcGxlXG4gICAqIGFycmF5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlQWxpYXNlcyhvcnM6IENvbXBvbmVudFtdW10pOiBDb21wb25lbnRbXVtdIHtcbiAgICByZXR1cm4gb3JzLmZsYXRNYXAoYW5kcyA9PiB7XG4gICAgICBjb25zdCBoYXNGcmFtZXdvcmsgPSBhbmRzLmZpbmQoYyA9PiBjLm5hbWUgPT09ICdmcmFtZXdvcmsnKTtcbiAgICAgIGlmICghaGFzRnJhbWV3b3JrKSB7XG4gICAgICAgIHJldHVybiBbYW5kc107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGFuZHMubWFwKGMgPT4gYy5uYW1lID09PSAnZnJhbWV3b3JrJyA/IHsgLi4uYywgbmFtZTogJ0Bhd3MtY2RrL2NvcmUuJyB9IDogYyksXG4gICAgICAgIGFuZHMubWFwKGMgPT4gYy5uYW1lID09PSAnZnJhbWV3b3JrJyA/IHsgLi4uYywgbmFtZTogJ2F3cy1jZGstbGliLicgfSA6IGMpLFxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBjb25zdHJ1Y3QgdHJlZSBmcm9tIHRoZSBnaXZlbiBkaXJlY3RvcnkgYW5kIHJldHVybiBpdHMgY29tcG9uZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RUcmVlQ29tcG9uZW50cyhtYW5pZmVzdERpcjogc3RyaW5nKTogQWN0dWFsQ29tcG9uZW50W10ge1xuICAgIGNvbnN0IHRyZWUgPSBsb2FkVHJlZUZyb21EaXIobWFuaWZlc3REaXIsIChtc2c6IHN0cmluZykgPT4gdm9pZCB0aGlzLmlvTWVzc2FnZXMubm90aWZ5KElPLkRFRkFVTFRfQVNTRU1CTFlfVFJBQ0UubXNnKG1zZykpKTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQ6IEFjdHVhbENvbXBvbmVudFtdID0gW107XG4gICAgcmVjdXJzZSh0cmVlKTtcbiAgICByZXR1cm4gcmV0O1xuXG4gICAgZnVuY3Rpb24gcmVjdXJzZSh4OiBDb25zdHJ1Y3RUcmVlTm9kZSkge1xuICAgICAgaWYgKHguY29uc3RydWN0SW5mbz8uZnFuICYmIHguY29uc3RydWN0SW5mbz8udmVyc2lvbikge1xuICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgbmFtZTogeC5jb25zdHJ1Y3RJbmZvPy5mcW4sXG4gICAgICAgICAgdmVyc2lvbjogeC5jb25zdHJ1Y3RJbmZvPy52ZXJzaW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBPYmplY3QudmFsdWVzKHguY2hpbGRyZW4gPz8ge30pKSB7XG4gICAgICAgIHJlY3Vyc2UoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE5vdGljZSBhZnRlciBwYXNzaW5nIHRoZSBmaWx0ZXIuIEEgZmlsdGVyIGNhbiBhdWdtZW50IGEgbm90aWNlIHdpdGhcbiAqIGR5bmFtaWMgdmFsdWVzIGFzIGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGR5bmFtaWMgbWF0Y2hpbmcgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlcmVkTm90aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkeW5hbWljVmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBub3RpY2U6IE5vdGljZSkge1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtaWNWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZHluYW1pY1ZhbHVlc1tge3Jlc29sdmU6JHtrZXl9fWBdID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcG9uZW50c1ZhbHVlID0gbm9ybWFsaXplQ29tcG9uZW50cyh0aGlzLm5vdGljZS5jb21wb25lbnRzKS5tYXAocmVuZGVyQ29uanVuY3Rpb24pLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZUR5bmFtaWNWYWx1ZXMoW1xuICAgICAgYCR7dGhpcy5ub3RpY2UuaXNzdWVOdW1iZXJ9XFx0JHt0aGlzLm5vdGljZS50aXRsZX1gLFxuICAgICAgdGhpcy5mb3JtYXRPdmVydmlldygpLFxuICAgICAgYFxcdEFmZmVjdGVkIHZlcnNpb25zOiAke2NvbXBvbmVudHNWYWx1ZX1gLFxuICAgICAgYFxcdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvJHt0aGlzLm5vdGljZS5pc3N1ZU51bWJlcn1gLFxuICAgIF0uam9pbignXFxuXFxuJykgKyAnXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE92ZXJ2aWV3KCkge1xuICAgIGNvbnN0IHdyYXAgPSAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoLyg/IVteXFxuXXsxLDYwfSQpKFteXFxuXXsxLDYwfSlcXHMvZywgJyQxXFxuJyk7XG5cbiAgICBjb25zdCBoZWFkaW5nID0gJ092ZXJ2aWV3OiAnO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IGBcXG5cXHQkeycgJy5yZXBlYXQoaGVhZGluZy5sZW5ndGgpfWA7XG4gICAgY29uc3QgY29udGVudCA9IHdyYXAodGhpcy5ub3RpY2Uub3ZlcnZpZXcpXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuam9pbihzZXBhcmF0b3IpO1xuXG4gICAgcmV0dXJuICdcXHQnICsgaGVhZGluZyArIGNvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEeW5hbWljVmFsdWVzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHRoaXMuZHluYW1pY1ZhbHVlcykuam9pbignfCcpLCAnZycpO1xuICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKHBhdHRlcm4sIChtYXRjaGVkKSA9PiB0aGlzLmR5bmFtaWNWYWx1ZXNbbWF0Y2hlZF0gPz8gbWF0Y2hlZCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from './notices';
@@ -0,0 +1,18 @@
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("./notices"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ub3RpY2VzJztcbiJdfQ==
@@ -0,0 +1,111 @@
1
+ import type { SdkHttpOptions } from '../aws-auth';
2
+ import type { Context } from '../context';
3
+ import type { IIoHost } from '../io';
4
+ import type { FilteredNotice } from './filter';
5
+ import type { BootstrappedEnvironment, NoticeDataSource } from './types';
6
+ export interface NoticesProps {
7
+ /**
8
+ * CDK context
9
+ */
10
+ readonly context: Context;
11
+ /**
12
+ * Global CLI option for output directory for synthesized cloud assembly
13
+ *
14
+ * @default 'cdk.out'
15
+ */
16
+ readonly output?: string;
17
+ /**
18
+ * Options for the HTTP request
19
+ */
20
+ readonly httpOptions?: SdkHttpOptions;
21
+ /**
22
+ * Where messages are going to be sent
23
+ */
24
+ readonly ioHost: IIoHost;
25
+ /**
26
+ * The version of the CLI
27
+ */
28
+ readonly cliVersion: string;
29
+ }
30
+ export interface NoticesFilterOptions {
31
+ /**
32
+ * Include notices that have already been acknowledged.
33
+ *
34
+ * @default false
35
+ */
36
+ readonly includeAcknowledged?: boolean;
37
+ }
38
+ export interface NoticesDisplayOptions extends NoticesFilterOptions {
39
+ /**
40
+ * Whether to append the total number of unacknowledged notices to the display.
41
+ *
42
+ * @default false
43
+ */
44
+ readonly showTotal?: boolean;
45
+ }
46
+ export interface NoticesRefreshOptions {
47
+ /**
48
+ * Whether to force a cache refresh regardless of expiration time.
49
+ *
50
+ * @default false
51
+ */
52
+ readonly force?: boolean;
53
+ /**
54
+ * Data source for fetch notices from.
55
+ *
56
+ * @default - WebsiteNoticeDataSource
57
+ */
58
+ readonly dataSource?: NoticeDataSource;
59
+ }
60
+ /**
61
+ * Provides access to notices the CLI can display.
62
+ */
63
+ export declare class Notices {
64
+ /**
65
+ * Create an instance. Note that this replaces the singleton.
66
+ */
67
+ static create(props: NoticesProps): Notices;
68
+ /**
69
+ * Get the singleton instance. May return `undefined` if `create` has not been called.
70
+ */
71
+ static get(): Notices | undefined;
72
+ private static _instance;
73
+ private readonly context;
74
+ private readonly output;
75
+ private readonly acknowledgedIssueNumbers;
76
+ private readonly httpOptions;
77
+ private readonly ioHelper;
78
+ private readonly ioMessages;
79
+ private readonly cliVersion;
80
+ private data;
81
+ private readonly bootstrappedEnvironments;
82
+ private constructor();
83
+ /**
84
+ * Add a bootstrap information to filter on. Can have multiple values
85
+ * in case of multi-environment deployments.
86
+ */
87
+ addBootstrappedEnvironment(bootstrapped: BootstrappedEnvironment): void;
88
+ /**
89
+ * Refresh the list of notices this instance is aware of.
90
+ *
91
+ * This method throws an error if the data source fails to fetch notices.
92
+ * When using, consider if execution should halt immdiately or if catching the rror and continuing is more appropriate
93
+ *
94
+ * @throws on failure to refresh the data source
95
+ */
96
+ refresh(options?: NoticesRefreshOptions): Promise<void>;
97
+ /**
98
+ * Filter the data sourece for relevant notices
99
+ */
100
+ filter(options?: NoticesDisplayOptions): FilteredNotice[];
101
+ /**
102
+ * Display the relevant notices (unless context dictates we shouldn't).
103
+ */
104
+ display(options?: NoticesDisplayOptions): Promise<void>;
105
+ /**
106
+ * List all notices available in the data source.
107
+ *
108
+ * @param includeAcknowlegded Whether to include acknowledged notices.
109
+ */
110
+ private noticesFromData;
111
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Notices = void 0;
4
+ const path = require("path");
5
+ const util_1 = require("../../util");
6
+ const cached_data_source_1 = require("./cached-data-source");
7
+ const filter_1 = require("./filter");
8
+ const web_data_source_1 = require("./web-data-source");
9
+ const private_1 = require("../io/private");
10
+ const CACHE_FILE_PATH = path.join((0, util_1.cdkCacheDir)(), 'notices.json');
11
+ /**
12
+ * Provides access to notices the CLI can display.
13
+ */
14
+ class Notices {
15
+ /**
16
+ * Create an instance. Note that this replaces the singleton.
17
+ */
18
+ static create(props) {
19
+ this._instance = new Notices(props);
20
+ return this._instance;
21
+ }
22
+ /**
23
+ * Get the singleton instance. May return `undefined` if `create` has not been called.
24
+ */
25
+ static get() {
26
+ return this._instance;
27
+ }
28
+ static _instance;
29
+ context;
30
+ output;
31
+ acknowledgedIssueNumbers;
32
+ httpOptions;
33
+ ioHelper;
34
+ ioMessages;
35
+ cliVersion;
36
+ data = new Set();
37
+ // sets don't deduplicate interfaces, so we use a map.
38
+ bootstrappedEnvironments = new Map();
39
+ constructor(props) {
40
+ this.context = props.context;
41
+ this.acknowledgedIssueNumbers = new Set(this.context.get('acknowledged-issue-numbers') ?? []);
42
+ this.output = props.output ?? 'cdk.out';
43
+ this.httpOptions = props.httpOptions ?? {};
44
+ this.ioHelper = (0, private_1.asIoHelper)(props.ioHost, 'notices' /* forcing a CliAction to a ToolkitAction */);
45
+ this.ioMessages = new private_1.IoDefaultMessages(this.ioHelper);
46
+ this.cliVersion = props.cliVersion;
47
+ }
48
+ /**
49
+ * Add a bootstrap information to filter on. Can have multiple values
50
+ * in case of multi-environment deployments.
51
+ */
52
+ addBootstrappedEnvironment(bootstrapped) {
53
+ const key = [
54
+ bootstrapped.bootstrapStackVersion,
55
+ bootstrapped.environment.account,
56
+ bootstrapped.environment.region,
57
+ bootstrapped.environment.name,
58
+ ].join(':');
59
+ this.bootstrappedEnvironments.set(key, bootstrapped);
60
+ }
61
+ /**
62
+ * Refresh the list of notices this instance is aware of.
63
+ *
64
+ * This method throws an error if the data source fails to fetch notices.
65
+ * When using, consider if execution should halt immdiately or if catching the rror and continuing is more appropriate
66
+ *
67
+ * @throws on failure to refresh the data source
68
+ */
69
+ async refresh(options = {}) {
70
+ const innerDataSource = options.dataSource ?? new web_data_source_1.WebsiteNoticeDataSource(this.ioHelper, this.httpOptions);
71
+ const dataSource = new cached_data_source_1.CachedDataSource(this.ioMessages, CACHE_FILE_PATH, innerDataSource, options.force ?? false);
72
+ const notices = await dataSource.fetch();
73
+ this.data = new Set(notices);
74
+ }
75
+ /**
76
+ * Filter the data sourece for relevant notices
77
+ */
78
+ filter(options = {}) {
79
+ return new filter_1.NoticesFilter(this.ioMessages).filter({
80
+ data: this.noticesFromData(options.includeAcknowledged ?? false),
81
+ cliVersion: this.cliVersion,
82
+ outDir: this.output,
83
+ bootstrappedEnvironments: Array.from(this.bootstrappedEnvironments.values()),
84
+ });
85
+ }
86
+ /**
87
+ * Display the relevant notices (unless context dictates we shouldn't).
88
+ */
89
+ async display(options = {}) {
90
+ const filteredNotices = this.filter(options);
91
+ if (filteredNotices.length > 0) {
92
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_I0100.msg([
93
+ '',
94
+ 'NOTICES (What\'s this? https://github.com/aws/aws-cdk/wiki/CLI-Notices)',
95
+ '',
96
+ ].join('\n')));
97
+ for (const filtered of filteredNotices) {
98
+ const formatted = filtered.format() + '\n';
99
+ switch (filtered.notice.severity) {
100
+ case 'warning':
101
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_W0101.msg(formatted));
102
+ break;
103
+ case 'error':
104
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_E0101.msg(formatted));
105
+ break;
106
+ default:
107
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_I0101.msg(formatted));
108
+ break;
109
+ }
110
+ }
111
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_I0100.msg(`If you don’t want to see a notice anymore, use "cdk acknowledge <id>". For example, "cdk acknowledge ${filteredNotices[0].notice.issueNumber}".`));
112
+ }
113
+ if (options.showTotal ?? false) {
114
+ await this.ioHelper.notify(private_1.IO.CDK_TOOLKIT_I0100.msg(`\nThere are ${filteredNotices.length} unacknowledged notice(s).`));
115
+ }
116
+ }
117
+ /**
118
+ * List all notices available in the data source.
119
+ *
120
+ * @param includeAcknowlegded Whether to include acknowledged notices.
121
+ */
122
+ noticesFromData(includeAcknowlegded = false) {
123
+ const data = Array.from(this.data);
124
+ if (includeAcknowlegded) {
125
+ return data;
126
+ }
127
+ return data.filter(n => !this.acknowledgedIssueNumbers.has(n.issueNumber));
128
+ }
129
+ }
130
+ exports.Notices = Notices;
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdGljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLHFDQUF5QztBQUl6Qyw2REFBd0Q7QUFFeEQscUNBQXlDO0FBRXpDLHVEQUE0RDtBQUU1RCwyQ0FBa0U7QUFFbEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLGtCQUFXLEdBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQWlFakU7O0dBRUc7QUFDSCxNQUFhLE9BQU87SUFDbEI7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQW1CO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxHQUFHO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFzQjtJQUU3QixPQUFPLENBQVU7SUFDakIsTUFBTSxDQUFTO0lBQ2Ysd0JBQXdCLENBQWM7SUFDdEMsV0FBVyxDQUFpQjtJQUM1QixRQUFRLENBQVc7SUFDbkIsVUFBVSxDQUFvQjtJQUM5QixVQUFVLENBQVM7SUFFNUIsSUFBSSxHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXRDLHNEQUFzRDtJQUNyQyx3QkFBd0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU1RixZQUFvQixLQUFtQjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUYs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QUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztDQUNGO0FBdElELDBCQXNJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjZGtDYWNoZURpciB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTZGtIdHRwT3B0aW9ucyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgeyBJSW9Ib3N0IH0gZnJvbSAnLi4vaW8nO1xuaW1wb3J0IHsgQ2FjaGVkRGF0YVNvdXJjZSB9IGZyb20gJy4vY2FjaGVkLWRhdGEtc291cmNlJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyZWROb3RpY2UgfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQgeyBOb3RpY2VzRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHR5cGUgeyBCb290c3RyYXBwZWRFbnZpcm9ubWVudCwgTm90aWNlLCBOb3RpY2VEYXRhU291cmNlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSB9IGZyb20gJy4vd2ViLWRhdGEtc291cmNlJztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IElPLCBhc0lvSGVscGVyLCBJb0RlZmF1bHRNZXNzYWdlcyB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuXG5jb25zdCBDQUNIRV9GSUxFX1BBVEggPSBwYXRoLmpvaW4oY2RrQ2FjaGVEaXIoKSwgJ25vdGljZXMuanNvbicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vdGljZXNQcm9wcyB7XG4gIC8qKlxuICAgKiBDREsgY29udGV4dFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogQ29udGV4dDtcblxuICAvKipcbiAgICogR2xvYmFsIENMSSBvcHRpb24gZm9yIG91dHB1dCBkaXJlY3RvcnkgZm9yIHN5bnRoZXNpemVkIGNsb3VkIGFzc2VtYmx5XG4gICAqXG4gICAqIEBkZWZhdWx0ICdjZGsub3V0J1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgSFRUUCByZXF1ZXN0XG4gICAqL1xuICByZWFkb25seSBodHRwT3B0aW9ucz86IFNka0h0dHBPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGVyZSBtZXNzYWdlcyBhcmUgZ29pbmcgdG8gYmUgc2VudFxuICAgKi9cbiAgcmVhZG9ubHkgaW9Ib3N0OiBJSW9Ib3N0O1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgQ0xJXG4gICAqL1xuICByZWFkb25seSBjbGlWZXJzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlc0ZpbHRlck9wdGlvbnMge1xuICAvKipcbiAgICogSW5jbHVkZSBub3RpY2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWNrbm93bGVkZ2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZUFja25vd2xlZGdlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlc0Rpc3BsYXlPcHRpb25zIGV4dGVuZHMgTm90aWNlc0ZpbHRlck9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBhcHBlbmQgdGhlIHRvdGFsIG51bWJlciBvZiB1bmFja25vd2xlZGdlZCBub3RpY2VzIHRvIHRoZSBkaXNwbGF5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RvdGFsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2VzUmVmcmVzaE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBmb3JjZSBhIGNhY2hlIHJlZnJlc2ggcmVnYXJkbGVzcyBvZiBleHBpcmF0aW9uIHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERhdGEgc291cmNlIGZvciBmZXRjaCBub3RpY2VzIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gV2Vic2l0ZU5vdGljZURhdGFTb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U/OiBOb3RpY2VEYXRhU291cmNlO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGFjY2VzcyB0byBub3RpY2VzIHRoZSBDTEkgY2FuIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RpY2VzIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgcmVwbGFjZXMgdGhlIHNpbmdsZXRvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHByb3BzOiBOb3RpY2VzUHJvcHMpOiBOb3RpY2VzIHtcbiAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBOb3RpY2VzKHByb3BzKTtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuIE1heSByZXR1cm4gYHVuZGVmaW5lZGAgaWYgYGNyZWF0ZWAgaGFzIG5vdCBiZWVuIGNhbGxlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0KCk6IE5vdGljZXMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTm90aWNlcyB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBTZXQ8TnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwT3B0aW9uczogU2RrSHR0cE9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvTWVzc2FnZXM6IElvRGVmYXVsdE1lc3NhZ2VzO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaVZlcnNpb246IHN0cmluZztcblxuICBwcml2YXRlIGRhdGE6IFNldDxOb3RpY2U+ID0gbmV3IFNldCgpO1xuXG4gIC8vIHNldHMgZG9uJ3QgZGVkdXBsaWNhdGUgaW50ZXJmYWNlcywgc28gd2UgdXNlIGEgbWFwLlxuICBwcml2YXRlIHJlYWRvbmx5IGJvb3RzdHJhcHBlZEVudmlyb25tZW50czogTWFwPHN0cmluZywgQm9vdHN0cmFwcGVkRW52aXJvbm1lbnQ+ID0gbmV3IE1hcCgpO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvcHM6IE5vdGljZXNQcm9wcykge1xuICAgIHRoaXMuY29udGV4dCA9IHByb3BzLmNvbnRleHQ7XG4gICAgdGhpcy5hY2tub3dsZWRnZWRJc3N1ZU51bWJlcnMgPSBuZXcgU2V0KHRoaXMuY29udGV4dC5nZXQoJ2Fja25vd2xlZGdlZC1pc3N1ZS1udW1iZXJzJykgPz8gW10pO1xuICAgIHRoaXMub3V0cHV0ID0gcHJvcHMub3V0cHV0ID8/ICdjZGsub3V0JztcbiAgICB0aGlzLmh0dHBPcHRpb25zID0gcHJvcHMuaHR0cE9wdGlvbnMgPz8ge307XG4gICAgdGhpcy5pb0hlbHBlciA9IGFzSW9IZWxwZXIocHJvcHMuaW9Ib3N0LCAnbm90aWNlcycgYXMgYW55IC8qIGZvcmNpbmcgYSBDbGlBY3Rpb24gdG8gYSBUb29sa2l0QWN0aW9uICovKTtcbiAgICB0aGlzLmlvTWVzc2FnZXMgPSBuZXcgSW9EZWZhdWx0TWVzc2FnZXModGhpcy5pb0hlbHBlcik7XG4gICAgdGhpcy5jbGlWZXJzaW9uID0gcHJvcHMuY2xpVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBib290c3RyYXAgaW5mb3JtYXRpb24gdG8gZmlsdGVyIG9uLiBDYW4gaGF2ZSBtdWx0aXBsZSB2YWx1ZXNcbiAgICogaW4gY2FzZSBvZiBtdWx0aS1lbnZpcm9ubWVudCBkZXBsb3ltZW50cy5cbiAgICovXG4gIHB1YmxpYyBhZGRCb290c3RyYXBwZWRFbnZpcm9ubWVudChib290c3RyYXBwZWQ6IEJvb3RzdHJhcHBlZEVudmlyb25tZW50KSB7XG4gICAgY29uc3Qga2V5ID0gW1xuICAgICAgYm9vdHN0cmFwcGVkLmJvb3RzdHJhcFN0YWNrVmVyc2lvbixcbiAgICAgIGJvb3RzdHJhcHBlZC5lbnZpcm9ubWVudC5hY2NvdW50LFxuICAgICAgYm9vdHN0cmFwcGVkLmVudmlyb25tZW50LnJlZ2lvbixcbiAgICAgIGJvb3RzdHJhcHBlZC5lbnZpcm9ubWVudC5uYW1lLFxuICAgIF0uam9pbignOicpO1xuICAgIHRoaXMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnNldChrZXksIGJvb3RzdHJhcHBlZCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgbGlzdCBvZiBub3RpY2VzIHRoaXMgaW5zdGFuY2UgaXMgYXdhcmUgb2YuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHRocm93cyBhbiBlcnJvciBpZiB0aGUgZGF0YSBzb3VyY2UgZmFpbHMgdG8gZmV0Y2ggbm90aWNlcy5cbiAgICogV2hlbiB1c2luZywgY29uc2lkZXIgaWYgZXhlY3V0aW9uIHNob3VsZCBoYWx0IGltbWRpYXRlbHkgb3IgaWYgY2F0Y2hpbmcgdGhlIHJyb3IgYW5kIGNvbnRpbnVpbmcgaXMgbW9yZSBhcHByb3ByaWF0ZVxuICAgKlxuICAgKiBAdGhyb3dzIG9uIGZhaWx1cmUgdG8gcmVmcmVzaCB0aGUgZGF0YSBzb3VyY2VcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoKG9wdGlvbnM6IE5vdGljZXNSZWZyZXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaW5uZXJEYXRhU291cmNlID0gb3B0aW9ucy5kYXRhU291cmNlID8/IG5ldyBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSh0aGlzLmlvSGVscGVyLCB0aGlzLmh0dHBPcHRpb25zKTtcbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IENhY2hlZERhdGFTb3VyY2UodGhpcy5pb01lc3NhZ2VzLCBDQUNIRV9GSUxFX1BBVEgsIGlubmVyRGF0YVNvdXJjZSwgb3B0aW9ucy5mb3JjZSA/PyBmYWxzZSk7XG4gICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcbiAgICB0aGlzLmRhdGEgPSBuZXcgU2V0KG5vdGljZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgZGF0YSBzb3VyZWNlIGZvciByZWxldmFudCBub3RpY2VzXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKG9wdGlvbnM6IE5vdGljZXNEaXNwbGF5T3B0aW9ucyA9IHt9KTogRmlsdGVyZWROb3RpY2VbXSB7XG4gICAgcmV0dXJuIG5ldyBOb3RpY2VzRmlsdGVyKHRoaXMuaW9NZXNzYWdlcykuZmlsdGVyKHtcbiAgICAgIGRhdGE6IHRoaXMubm90aWNlc0Zyb21EYXRhKG9wdGlvbnMuaW5jbHVkZUFja25vd2xlZGdlZCA/PyBmYWxzZSksXG4gICAgICBjbGlWZXJzaW9uOiB0aGlzLmNsaVZlcnNpb24sXG4gICAgICBvdXREaXI6IHRoaXMub3V0cHV0LFxuICAgICAgYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzOiBBcnJheS5mcm9tKHRoaXMuYm9vdHN0cmFwcGVkRW52aXJvbm1lbnRzLnZhbHVlcygpKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSByZWxldmFudCBub3RpY2VzICh1bmxlc3MgY29udGV4dCBkaWN0YXRlcyB3ZSBzaG91bGRuJ3QpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRpc3BsYXkob3B0aW9uczogTm90aWNlc0Rpc3BsYXlPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWx0ZXJlZE5vdGljZXMgPSB0aGlzLmZpbHRlcihvcHRpb25zKTtcblxuICAgIGlmIChmaWx0ZXJlZE5vdGljZXMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX1RPT0xLSVRfSTAxMDAubXNnKFtcbiAgICAgICAgJycsXG4gICAgICAgICdOT1RJQ0VTICAgICAgICAgKFdoYXRcXCdzIHRoaXM/IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay93aWtpL0NMSS1Ob3RpY2VzKScsXG4gICAgICAgICcnLFxuICAgICAgXS5qb2luKCdcXG4nKSkpO1xuICAgICAgZm9yIChjb25zdCBmaWx0ZXJlZCBvZiBmaWx0ZXJlZE5vdGljZXMpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZmlsdGVyZWQuZm9ybWF0KCkgKyAnXFxuJztcbiAgICAgICAgc3dpdGNoIChmaWx0ZXJlZC5ub3RpY2Uuc2V2ZXJpdHkpIHtcbiAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19UT09MS0lUX1cwMTAxLm1zZyhmb3JtYXR0ZWQpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkNES19UT09MS0lUX0UwMTAxLm1zZyhmb3JtYXR0ZWQpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JMDEwMS5tc2coZm9ybWF0dGVkKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uQ0RLX1RPT0xLSVRfSTAxMDAubXNnKFxuICAgICAgICBgSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlICR7ZmlsdGVyZWROb3RpY2VzWzBdLm5vdGljZS5pc3N1ZU51bWJlcn1cIi5gLFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hvd1RvdGFsID8/IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5DREtfVE9PTEtJVF9JMDEwMC5tc2coXG4gICAgICAgIGBcXG5UaGVyZSBhcmUgJHtmaWx0ZXJlZE5vdGljZXMubGVuZ3RofSB1bmFja25vd2xlZGdlZCBub3RpY2UocykuYCxcbiAgICAgICkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBub3RpY2VzIGF2YWlsYWJsZSBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBpbmNsdWRlQWNrbm93bGVnZGVkIFdoZXRoZXIgdG8gaW5jbHVkZSBhY2tub3dsZWRnZWQgbm90aWNlcy5cbiAgICovXG4gIHByaXZhdGUgbm90aWNlc0Zyb21EYXRhKGluY2x1ZGVBY2tub3dsZWdkZWQgPSBmYWxzZSk6IE5vdGljZVtdIHtcbiAgICBjb25zdCBkYXRhID0gQXJyYXkuZnJvbSh0aGlzLmRhdGEpO1xuXG4gICAgaWYgKGluY2x1ZGVBY2tub3dsZWdkZWQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmZpbHRlcihuID0+ICF0aGlzLmFja25vd2xlZGdlZElzc3VlTnVtYmVycy5oYXMobi5pc3N1ZU51bWJlcikpO1xuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,37 @@
1
+ import type { Environment } from '@aws-cdk/cx-api';
2
+ export interface Component {
3
+ name: string;
4
+ /**
5
+ * The range of affected versions
6
+ */
7
+ version: string;
8
+ }
9
+ export interface Notice {
10
+ title: string;
11
+ issueNumber: number;
12
+ overview: string;
13
+ /**
14
+ * A set of affected components
15
+ *
16
+ * The canonical form of a list of components is in Disjunctive Normal Form
17
+ * (i.e., an OR of ANDs). This is the form when the list of components is a
18
+ * doubly nested array: the notice matches if all components of at least one
19
+ * of the top-level array matches.
20
+ *
21
+ * If the `components` is a single-level array, it is evaluated as an OR; it
22
+ * matches if any of the components matches.
23
+ */
24
+ components: Array<Component | Component[]>;
25
+ schemaVersion: string;
26
+ severity?: string;
27
+ }
28
+ export interface NoticeDataSource {
29
+ fetch(): Promise<Notice[]>;
30
+ }
31
+ /**
32
+ * Information about a bootstrapped environment.
33
+ */
34
+ export interface BootstrappedEnvironment {
35
+ readonly bootstrapStackVersion: number;
36
+ readonly environment: Environment;
37
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2Ugb2YgYWZmZWN0ZWQgdmVyc2lvbnNcbiAgICovXG4gIHZlcnNpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3RpY2Uge1xuICB0aXRsZTogc3RyaW5nO1xuICBpc3N1ZU51bWJlcjogbnVtYmVyO1xuICBvdmVydmlldzogc3RyaW5nO1xuICAvKipcbiAgICogQSBzZXQgb2YgYWZmZWN0ZWQgY29tcG9uZW50c1xuICAgKlxuICAgKiBUaGUgY2Fub25pY2FsIGZvcm0gb2YgYSBsaXN0IG9mIGNvbXBvbmVudHMgaXMgaW4gRGlzanVuY3RpdmUgTm9ybWFsIEZvcm1cbiAgICogKGkuZS4sIGFuIE9SIG9mIEFORHMpLiBUaGlzIGlzIHRoZSBmb3JtIHdoZW4gdGhlIGxpc3Qgb2YgY29tcG9uZW50cyBpcyBhXG4gICAqIGRvdWJseSBuZXN0ZWQgYXJyYXk6IHRoZSBub3RpY2UgbWF0Y2hlcyBpZiBhbGwgY29tcG9uZW50cyBvZiBhdCBsZWFzdCBvbmVcbiAgICogb2YgdGhlIHRvcC1sZXZlbCBhcnJheSBtYXRjaGVzLlxuICAgKlxuICAgKiBJZiB0aGUgYGNvbXBvbmVudHNgIGlzIGEgc2luZ2xlLWxldmVsIGFycmF5LCBpdCBpcyBldmFsdWF0ZWQgYXMgYW4gT1I7IGl0XG4gICAqIG1hdGNoZXMgaWYgYW55IG9mIHRoZSBjb21wb25lbnRzIG1hdGNoZXMuXG4gICAqL1xuICBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnQgfCBDb21wb25lbnRbXT47XG4gIHNjaGVtYVZlcnNpb246IHN0cmluZztcbiAgc2V2ZXJpdHk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlRGF0YVNvdXJjZSB7XG4gIGZldGNoKCk6IFByb21pc2U8Tm90aWNlW10+O1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgYm9vdHN0cmFwcGVkIGVudmlyb25tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvb3RzdHJhcHBlZEVudmlyb25tZW50IHtcbiAgcmVhZG9ubHkgYm9vdHN0cmFwU3RhY2tWZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import type { SdkHttpOptions } from '../aws-auth';
2
+ import type { Notice, NoticeDataSource } from './types';
3
+ import type { IoHelper } from '../io/private';
4
+ export declare class WebsiteNoticeDataSource implements NoticeDataSource {
5
+ private readonly ioHelper;
6
+ private readonly options;
7
+ constructor(ioHelper: IoHelper, options?: SdkHttpOptions);
8
+ fetch(): Promise<Notice[]>;
9
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebsiteNoticeDataSource = void 0;
4
+ const https = require("node:https");
5
+ const toolkit_error_1 = require("../../toolkit/toolkit-error");
6
+ const util_1 = require("../../util");
7
+ const private_1 = require("../aws-auth/private");
8
+ const private_2 = require("../io/private");
9
+ class WebsiteNoticeDataSource {
10
+ ioHelper;
11
+ options;
12
+ constructor(ioHelper, options = {}) {
13
+ this.ioHelper = ioHelper;
14
+ this.options = options;
15
+ }
16
+ async fetch() {
17
+ const timeout = 3000;
18
+ const options = {
19
+ agent: await new private_1.ProxyAgentProvider(this.ioHelper).create(this.options),
20
+ };
21
+ const notices = await new Promise((resolve, reject) => {
22
+ let req;
23
+ let timer = setTimeout(() => {
24
+ if (req) {
25
+ req.destroy(new toolkit_error_1.ToolkitError('Request timed out'));
26
+ }
27
+ }, timeout);
28
+ timer.unref();
29
+ try {
30
+ req = https.get('https://cli.cdk.dev-tools.aws.dev/notices.json', options, res => {
31
+ if (res.statusCode === 200) {
32
+ res.setEncoding('utf8');
33
+ let rawData = '';
34
+ res.on('data', (chunk) => {
35
+ rawData += chunk;
36
+ });
37
+ res.on('end', () => {
38
+ try {
39
+ const data = JSON.parse(rawData).notices;
40
+ if (!data) {
41
+ throw new toolkit_error_1.ToolkitError("'notices' key is missing from received data");
42
+ }
43
+ resolve(data ?? []);
44
+ }
45
+ catch (e) {
46
+ reject(toolkit_error_1.ToolkitError.withCause(`Parse error: ${(0, util_1.formatErrorMessage)(e)}`, e));
47
+ }
48
+ });
49
+ res.on('error', e => {
50
+ reject(toolkit_error_1.ToolkitError.withCause((0, util_1.formatErrorMessage)(e), e));
51
+ });
52
+ }
53
+ else {
54
+ reject(new toolkit_error_1.ToolkitError(`${(0, util_1.humanHttpStatusError)(res.statusCode)} (Status code: ${res.statusCode})`));
55
+ }
56
+ });
57
+ req.on('error', e => {
58
+ reject(toolkit_error_1.ToolkitError.withCause((0, util_1.humanNetworkError)(e), e));
59
+ });
60
+ }
61
+ catch (e) {
62
+ reject(toolkit_error_1.ToolkitError.withCause((0, util_1.formatErrorMessage)(e), e));
63
+ }
64
+ });
65
+ await this.ioHelper.notify(private_2.IO.DEFAULT_TOOLKIT_DEBUG.msg('Notices refreshed'));
66
+ return notices;
67
+ }
68
+ }
69
+ exports.WebsiteNoticeDataSource = WebsiteNoticeDataSource;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWRhdGEtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2ViLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9DQUFvQztBQUdwQywrREFBMkQ7QUFDM0QscUNBQXlGO0FBQ3pGLGlEQUF5RDtBQUV6RCwyQ0FBbUM7QUFFbkMsTUFBYSx1QkFBdUI7SUFHTDtJQUZaLE9BQU8sQ0FBaUI7SUFFekMsWUFBNkIsUUFBa0IsRUFBRSxVQUEwQixFQUFFO1FBQWhELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXJCLE1BQU0sT0FBTyxHQUFtQjtZQUM5QixLQUFLLEVBQUUsTUFBTSxJQUFJLDRCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUN4RSxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM5RCxJQUFJLEdBQThCLENBQUM7WUFFbkMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDMUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDUixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksNEJBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7WUFDSCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFWixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFZCxJQUFJLENBQUM7Z0JBQ0gsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0RBQWdELEVBQzlELE9BQU8sRUFDUCxHQUFHLENBQUMsRUFBRTtvQkFDSixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQzNCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3hCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTs0QkFDdkIsT0FBTyxJQUFJLEtBQUssQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFOzRCQUNqQixJQUFJLENBQUM7Z0NBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFtQixDQUFDO2dDQUNyRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7b0NBQ1YsTUFBTSxJQUFJLDRCQUFZLENBQUMsNkNBQTZDLENBQUMsQ0FBQztnQ0FDeEUsQ0FBQztnQ0FDRCxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN0QixDQUFDOzRCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7Z0NBQ2hCLE1BQU0sQ0FBQyw0QkFBWSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsSUFBQSx5QkFBa0IsRUFBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzdFLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7NEJBQ2xCLE1BQU0sQ0FBQyw0QkFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFBLHlCQUFrQixFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNELENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLENBQUMsSUFBSSw0QkFBWSxDQUFDLEdBQUcsSUFBQSwyQkFBb0IsRUFBQyxHQUFHLENBQUMsVUFBVyxDQUFDLGtCQUFrQixHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN4RyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNMLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUNsQixNQUFNLENBQUMsNEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBQSx3QkFBaUIsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsNEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBQSx5QkFBa0IsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDOUUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBaEVELDBEQWdFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xpZW50UmVxdWVzdCB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJ2h0dHBzJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ25vZGU6aHR0cHMnO1xuaW1wb3J0IHR5cGUgeyBTZGtIdHRwT3B0aW9ucyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB0eXBlIHsgTm90aWNlLCBOb3RpY2VEYXRhU291cmNlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlLCBodW1hbkh0dHBTdGF0dXNFcnJvciwgaHVtYW5OZXR3b3JrRXJyb3IgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IFByb3h5QWdlbnRQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgSU8gfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuZXhwb3J0IGNsYXNzIFdlYnNpdGVOb3RpY2VEYXRhU291cmNlIGltcGxlbWVudHMgTm90aWNlRGF0YVNvdXJjZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogU2RrSHR0cE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXIsIG9wdGlvbnM6IFNka0h0dHBPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2goKTogUHJvbWlzZTxOb3RpY2VbXT4ge1xuICAgIGNvbnN0IHRpbWVvdXQgPSAzMDAwO1xuXG4gICAgY29uc3Qgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICBhZ2VudDogYXdhaXQgbmV3IFByb3h5QWdlbnRQcm92aWRlcih0aGlzLmlvSGVscGVyKS5jcmVhdGUodGhpcy5vcHRpb25zKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IG5ldyBQcm9taXNlPE5vdGljZVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcmVxOiBDbGllbnRSZXF1ZXN0IHwgdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgIHJlcS5kZXN0cm95KG5ldyBUb29sa2l0RXJyb3IoJ1JlcXVlc3QgdGltZWQgb3V0JykpO1xuICAgICAgICB9XG4gICAgICB9LCB0aW1lb3V0KTtcblxuICAgICAgdGltZXIudW5yZWYoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVxID0gaHR0cHMuZ2V0KCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYvbm90aWNlcy5qc29uJyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgICAgICAgICAgICAgbGV0IHJhd0RhdGEgPSAnJztcbiAgICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgcmF3RGF0YSArPSBjaHVuaztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShyYXdEYXRhKS5ub3RpY2VzIGFzIE5vdGljZVtdO1xuICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXCInbm90aWNlcycga2V5IGlzIG1pc3NpbmcgZnJvbSByZWNlaXZlZCBkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhID8/IFtdKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChUb29sa2l0RXJyb3Iud2l0aENhdXNlKGBQYXJzZSBlcnJvcjogJHtmb3JtYXRFcnJvck1lc3NhZ2UoZSl9YCwgZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlcy5vbignZXJyb3InLCBlID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoVG9vbGtpdEVycm9yLndpdGhDYXVzZShmb3JtYXRFcnJvck1lc3NhZ2UoZSksIGUpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QobmV3IFRvb2xraXRFcnJvcihgJHtodW1hbkh0dHBTdGF0dXNFcnJvcihyZXMuc3RhdHVzQ29kZSEpfSAoU3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9KWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgcmVxLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgICAgIHJlamVjdChUb29sa2l0RXJyb3Iud2l0aENhdXNlKGh1bWFuTmV0d29ya0Vycm9yKGUpLCBlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHJlamVjdChUb29sa2l0RXJyb3Iud2l0aENhdXNlKGZvcm1hdEVycm9yTWVzc2FnZShlKSwgZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZygnTm90aWNlcyByZWZyZXNoZWQnKSk7XG4gICAgcmV0dXJuIG5vdGljZXM7XG4gIH1cbn1cbiJdfQ==