aws-cdk 2.1007.0 → 3.0.0

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 (253) hide show
  1. package/THIRD_PARTY_LICENSES +24 -6
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/api/aws-auth.d.ts +1 -0
  5. package/lib/api/{logs/index.js → aws-auth.js} +2 -3
  6. package/lib/api/bootstrap.d.ts +1 -0
  7. package/lib/api/bootstrap.js +18 -0
  8. package/lib/api/cloud-assembly.d.ts +1 -0
  9. package/lib/api/cloud-assembly.js +18 -0
  10. package/lib/api/cloudformation.d.ts +1 -0
  11. package/lib/api/cloudformation.js +18 -0
  12. package/lib/api/context.d.ts +1 -40
  13. package/lib/api/context.js +16 -80
  14. package/lib/api/deployments.d.ts +1 -0
  15. package/lib/api/deployments.js +18 -0
  16. package/lib/api/environment.d.ts +1 -0
  17. package/lib/api/environment.js +18 -0
  18. package/lib/api/garbage-collection.d.ts +1 -0
  19. package/lib/api/garbage-collection.js +18 -0
  20. package/lib/api/hotswap.d.ts +1 -0
  21. package/lib/api/hotswap.js +18 -0
  22. package/lib/api/index.d.ts +5 -1
  23. package/lib/api/index.js +6 -2
  24. package/lib/api/logs-monitor.d.ts +1 -0
  25. package/lib/api/logs-monitor.js +18 -0
  26. package/lib/api/notices.d.ts +1 -0
  27. package/lib/api/notices.js +18 -0
  28. package/lib/api/plugin.d.ts +1 -0
  29. package/lib/api/{garbage-collection/index.js → plugin.js} +2 -2
  30. package/lib/api/resource-import.d.ts +1 -0
  31. package/lib/api/resource-import.js +18 -0
  32. package/lib/api/rwlock.d.ts +1 -0
  33. package/lib/api/{resource-import/index.js → rwlock.js} +2 -3
  34. package/lib/api/settings.d.ts +1 -26
  35. package/lib/api/settings.js +16 -103
  36. package/lib/api/stack-events.d.ts +1 -0
  37. package/lib/api/stack-events.js +18 -0
  38. package/lib/api/tags.d.ts +1 -9
  39. package/lib/api/tags.js +16 -8
  40. package/lib/api/toolkit-info.d.ts +1 -52
  41. package/lib/api/toolkit-info.js +16 -152
  42. package/lib/api/tree.d.ts +1 -31
  43. package/lib/api/tree.js +16 -35
  44. package/lib/api/work-graph.d.ts +1 -0
  45. package/lib/api/work-graph.js +18 -0
  46. package/lib/api-private.d.ts +3 -0
  47. package/lib/api-private.js +22 -0
  48. package/lib/cli/cdk-toolkit.d.ts +6 -5
  49. package/lib/cli/cdk-toolkit.js +74 -44
  50. package/lib/cli/cli.d.ts +1 -1
  51. package/lib/cli/cli.js +21 -19
  52. package/lib/cli/io-host/cli-io-host.js +2 -2
  53. package/lib/cli/pretty-print-error.js +3 -1
  54. package/lib/cli/util/npm.d.ts +4 -1
  55. package/lib/cli/util/npm.js +25 -13
  56. package/lib/cli/version.d.ts +1 -1
  57. package/lib/cli/version.js +21 -25
  58. package/lib/commands/context.js +3 -2
  59. package/lib/commands/init/init.js +3 -2
  60. package/lib/commands/list-stacks.js +4 -4
  61. package/lib/context-providers/ami.d.ts +1 -13
  62. package/lib/context-providers/ami.js +16 -48
  63. package/lib/context-providers/availability-zones.d.ts +1 -13
  64. package/lib/context-providers/availability-zones.js +16 -25
  65. package/lib/context-providers/cc-api-provider.d.ts +1 -30
  66. package/lib/context-providers/cc-api-provider.js +16 -142
  67. package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -13
  68. package/lib/context-providers/endpoint-service-availability-zones.js +16 -31
  69. package/lib/context-providers/hosted-zones.d.ts +1 -12
  70. package/lib/context-providers/hosted-zones.js +16 -65
  71. package/lib/context-providers/index.d.ts +1 -44
  72. package/lib/context-providers/index.js +15 -126
  73. package/lib/context-providers/keys.d.ts +1 -13
  74. package/lib/context-providers/keys.js +16 -50
  75. package/lib/context-providers/load-balancers.d.ts +1 -20
  76. package/lib/context-providers/load-balancers.js +16 -154
  77. package/lib/context-providers/security-groups.d.ts +1 -9
  78. package/lib/context-providers/security-groups.js +16 -66
  79. package/lib/context-providers/ssm-parameters.d.ts +1 -25
  80. package/lib/context-providers/ssm-parameters.js +16 -57
  81. package/lib/context-providers/vpcs.d.ts +1 -13
  82. package/lib/context-providers/vpcs.js +16 -285
  83. package/lib/cxapp/cloud-assembly.d.ts +79 -0
  84. package/lib/cxapp/cloud-assembly.js +108 -0
  85. package/lib/{api/cxapp → cxapp}/cloud-executable.d.ts +6 -4
  86. package/lib/cxapp/cloud-executable.js +92 -0
  87. package/lib/{api/cxapp → cxapp}/environments.d.ts +1 -2
  88. package/lib/{api/cxapp → cxapp}/environments.js +2 -2
  89. package/lib/cxapp/exec.d.ts +14 -0
  90. package/lib/cxapp/exec.js +157 -0
  91. package/lib/cxapp/index.d.ts +4 -0
  92. package/lib/{api/bootstrap → cxapp}/index.js +5 -3
  93. package/lib/index.js +133605 -124560
  94. package/lib/init-templates/.init-version.json +1 -1
  95. package/lib/init-templates/.recommended-feature-flags.json +2 -1
  96. package/lib/legacy-aws-auth.d.ts +74 -0
  97. package/lib/legacy-aws-auth.js +40 -0
  98. package/lib/legacy-exports-source.d.ts +13 -18
  99. package/lib/legacy-exports-source.js +42 -49
  100. package/lib/legacy-exports.d.ts +3 -6
  101. package/lib/legacy-exports.js +5 -5
  102. package/lib/legacy-types.d.ts +31 -0
  103. package/lib/legacy-types.js +3 -0
  104. package/package.json +8 -7
  105. package/lib/api/aws-auth/account-cache.d.ts +0 -36
  106. package/lib/api/aws-auth/account-cache.js +0 -99
  107. package/lib/api/aws-auth/awscli-compatible.d.ts +0 -42
  108. package/lib/api/aws-auth/awscli-compatible.js +0 -263
  109. package/lib/api/aws-auth/cached.d.ts +0 -11
  110. package/lib/api/aws-auth/cached.js +0 -26
  111. package/lib/api/aws-auth/credential-plugins.d.ts +0 -36
  112. package/lib/api/aws-auth/credential-plugins.js +0 -152
  113. package/lib/api/aws-auth/index.d.ts +0 -3
  114. package/lib/api/aws-auth/index.js +0 -20
  115. package/lib/api/aws-auth/provider-caching.d.ts +0 -13
  116. package/lib/api/aws-auth/provider-caching.js +0 -24
  117. package/lib/api/aws-auth/sdk-logger.d.ts +0 -69
  118. package/lib/api/aws-auth/sdk-logger.js +0 -124
  119. package/lib/api/aws-auth/sdk-provider.d.ts +0 -207
  120. package/lib/api/aws-auth/sdk-provider.js +0 -357
  121. package/lib/api/aws-auth/sdk.d.ts +0 -229
  122. package/lib/api/aws-auth/sdk.js +0 -373
  123. package/lib/api/aws-auth/tracing.d.ts +0 -11
  124. package/lib/api/aws-auth/tracing.js +0 -60
  125. package/lib/api/aws-auth/user-agent.d.ts +0 -7
  126. package/lib/api/aws-auth/user-agent.js +0 -20
  127. package/lib/api/aws-auth/util.d.ts +0 -6
  128. package/lib/api/aws-auth/util.js +0 -23
  129. package/lib/api/bootstrap/bootstrap-environment.d.ts +0 -35
  130. package/lib/api/bootstrap/bootstrap-environment.js +0 -321
  131. package/lib/api/bootstrap/bootstrap-props.d.ts +0 -130
  132. package/lib/api/bootstrap/bootstrap-props.js +0 -14
  133. package/lib/api/bootstrap/deploy-bootstrap.d.ts +0 -39
  134. package/lib/api/bootstrap/deploy-bootstrap.js +0 -141
  135. package/lib/api/bootstrap/index.d.ts +0 -2
  136. package/lib/api/bootstrap/legacy-template.d.ts +0 -2
  137. package/lib/api/bootstrap/legacy-template.js +0 -82
  138. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +0 -85
  139. package/lib/api/cloudformation/evaluate-cloudformation-template.js +0 -440
  140. package/lib/api/cloudformation/index.d.ts +0 -4
  141. package/lib/api/cloudformation/index.js +0 -21
  142. package/lib/api/cloudformation/nested-stack-helpers.d.ts +0 -19
  143. package/lib/api/cloudformation/nested-stack-helpers.js +0 -86
  144. package/lib/api/cloudformation/stack-helpers.d.ts +0 -88
  145. package/lib/api/cloudformation/stack-helpers.js +0 -158
  146. package/lib/api/cloudformation/template-body-parameter.d.ts +0 -22
  147. package/lib/api/cloudformation/template-body-parameter.js +0 -104
  148. package/lib/api/cxapp/cloud-assembly.d.ts +0 -137
  149. package/lib/api/cxapp/cloud-assembly.js +0 -305
  150. package/lib/api/cxapp/cloud-executable.js +0 -89
  151. package/lib/api/cxapp/exec.d.ts +0 -57
  152. package/lib/api/cxapp/exec.js +0 -279
  153. package/lib/api/deployments/asset-manifest-builder.d.ts +0 -8
  154. package/lib/api/deployments/asset-manifest-builder.js +0 -35
  155. package/lib/api/deployments/asset-publishing.d.ts +0 -60
  156. package/lib/api/deployments/asset-publishing.js +0 -141
  157. package/lib/api/deployments/assets.d.ts +0 -11
  158. package/lib/api/deployments/assets.js +0 -109
  159. package/lib/api/deployments/cfn-api.d.ts +0 -138
  160. package/lib/api/deployments/cfn-api.js +0 -438
  161. package/lib/api/deployments/checks.d.ts +0 -9
  162. package/lib/api/deployments/checks.js +0 -72
  163. package/lib/api/deployments/deploy-stack.d.ts +0 -155
  164. package/lib/api/deployments/deploy-stack.js +0 -478
  165. package/lib/api/deployments/deployment-method.d.ts +0 -24
  166. package/lib/api/deployments/deployment-method.js +0 -3
  167. package/lib/api/deployments/deployment-result.d.ts +0 -21
  168. package/lib/api/deployments/deployment-result.js +0 -10
  169. package/lib/api/deployments/deployments.d.ts +0 -296
  170. package/lib/api/deployments/deployments.js +0 -331
  171. package/lib/api/deployments/hotswap-deployments.d.ts +0 -17
  172. package/lib/api/deployments/hotswap-deployments.js +0 -441
  173. package/lib/api/deployments/index.d.ts +0 -5
  174. package/lib/api/deployments/index.js +0 -22
  175. package/lib/api/environment/environment-access.d.ts +0 -140
  176. package/lib/api/environment/environment-access.js +0 -202
  177. package/lib/api/environment/environment-resources.d.ts +0 -75
  178. package/lib/api/environment/environment-resources.js +0 -207
  179. package/lib/api/environment/index.d.ts +0 -3
  180. package/lib/api/environment/index.js +0 -20
  181. package/lib/api/environment/placeholders.d.ts +0 -10
  182. package/lib/api/environment/placeholders.js +0 -23
  183. package/lib/api/garbage-collection/garbage-collector.d.ts +0 -158
  184. package/lib/api/garbage-collection/garbage-collector.js +0 -599
  185. package/lib/api/garbage-collection/index.d.ts +0 -1
  186. package/lib/api/garbage-collection/progress-printer.d.ts +0 -23
  187. package/lib/api/garbage-collection/progress-printer.js +0 -70
  188. package/lib/api/garbage-collection/stack-refresh.d.ts +0 -49
  189. package/lib/api/garbage-collection/stack-refresh.js +0 -151
  190. package/lib/api/hotswap/appsync-mapping-templates.d.ts +0 -4
  191. package/lib/api/hotswap/appsync-mapping-templates.js +0 -162
  192. package/lib/api/hotswap/code-build-projects.d.ts +0 -4
  193. package/lib/api/hotswap/code-build-projects.js +0 -62
  194. package/lib/api/hotswap/common.d.ts +0 -89
  195. package/lib/api/hotswap/common.js +0 -128
  196. package/lib/api/hotswap/ecs-services.d.ts +0 -4
  197. package/lib/api/hotswap/ecs-services.js +0 -159
  198. package/lib/api/hotswap/lambda-functions.d.ts +0 -4
  199. package/lib/api/hotswap/lambda-functions.js +0 -297
  200. package/lib/api/hotswap/s3-bucket-deployments.d.ts +0 -5
  201. package/lib/api/hotswap/s3-bucket-deployments.js +0 -117
  202. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +0 -4
  203. package/lib/api/hotswap/stepfunctions-state-machines.js +0 -48
  204. package/lib/api/logs/find-cloudwatch-logs.d.ts +0 -25
  205. package/lib/api/logs/find-cloudwatch-logs.js +0 -95
  206. package/lib/api/logs/index.d.ts +0 -2
  207. package/lib/api/logs/logs-monitor.d.ts +0 -76
  208. package/lib/api/logs/logs-monitor.js +0 -187
  209. package/lib/api/plugin/context-provider-plugin.d.ts +0 -6
  210. package/lib/api/plugin/context-provider-plugin.js +0 -7
  211. package/lib/api/plugin/index.d.ts +0 -3
  212. package/lib/api/plugin/index.js +0 -20
  213. package/lib/api/plugin/mode.d.ts +0 -4
  214. package/lib/api/plugin/mode.js +0 -9
  215. package/lib/api/plugin/plugin.d.ts +0 -63
  216. package/lib/api/plugin/plugin.js +0 -102
  217. package/lib/api/resource-import/importer.d.ts +0 -215
  218. package/lib/api/resource-import/importer.js +0 -322
  219. package/lib/api/resource-import/index.d.ts +0 -2
  220. package/lib/api/resource-import/migrator.d.ts +0 -26
  221. package/lib/api/resource-import/migrator.js +0 -71
  222. package/lib/api/stack-events/index.d.ts +0 -3
  223. package/lib/api/stack-events/index.js +0 -20
  224. package/lib/api/stack-events/stack-activity-monitor.d.ts +0 -100
  225. package/lib/api/stack-events/stack-activity-monitor.js +0 -142
  226. package/lib/api/stack-events/stack-event-poller.d.ts +0 -69
  227. package/lib/api/stack-events/stack-event-poller.js +0 -128
  228. package/lib/api/stack-events/stack-progress-monitor.d.ts +0 -48
  229. package/lib/api/stack-events/stack-progress-monitor.js +0 -94
  230. package/lib/api/stack-events/stack-status.d.ts +0 -42
  231. package/lib/api/stack-events/stack-status.js +0 -88
  232. package/lib/api/util/rwlock.d.ts +0 -65
  233. package/lib/api/util/rwlock.js +0 -179
  234. package/lib/api/work-graph/index.d.ts +0 -3
  235. package/lib/api/work-graph/index.js +0 -20
  236. package/lib/api/work-graph/work-graph-builder.d.ts +0 -34
  237. package/lib/api/work-graph/work-graph-builder.js +0 -168
  238. package/lib/api/work-graph/work-graph-types.d.ts +0 -50
  239. package/lib/api/work-graph/work-graph-types.js +0 -13
  240. package/lib/api/work-graph/work-graph.d.ts +0 -72
  241. package/lib/api/work-graph/work-graph.js +0 -346
  242. package/lib/cli/activity-printer/base.d.ts +0 -50
  243. package/lib/cli/activity-printer/base.js +0 -114
  244. package/lib/cli/activity-printer/current.d.ts +0 -26
  245. package/lib/cli/activity-printer/current.js +0 -118
  246. package/lib/cli/activity-printer/display.d.ts +0 -13
  247. package/lib/cli/activity-printer/display.js +0 -80
  248. package/lib/cli/activity-printer/history.d.ts +0 -32
  249. package/lib/cli/activity-printer/history.js +0 -108
  250. package/lib/cli/activity-printer/index.d.ts +0 -3
  251. package/lib/cli/activity-printer/index.js +0 -20
  252. package/lib/notices.d.ts +0 -203
  253. package/lib/notices.js +0 -411
@@ -1,50 +0,0 @@
1
- import type * as cxapi from '@aws-cdk/cx-api';
2
- import type { AssetManifest, IManifestEntry } from 'cdk-assets';
3
- export declare enum DeploymentState {
4
- PENDING = "pending",
5
- QUEUED = "queued",
6
- DEPLOYING = "deploying",
7
- COMPLETED = "completed",
8
- FAILED = "failed",
9
- SKIPPED = "skipped"
10
- }
11
- export type WorkNode = StackNode | AssetBuildNode | AssetPublishNode;
12
- export interface WorkNodeCommon {
13
- readonly id: string;
14
- readonly dependencies: Set<string>;
15
- deploymentState: DeploymentState;
16
- /** Some readable information to attach to the id, which may be unreadable */
17
- readonly note?: string;
18
- }
19
- export interface StackNode extends WorkNodeCommon {
20
- readonly type: 'stack';
21
- readonly stack: cxapi.CloudFormationStackArtifact;
22
- /** Sort by priority when picking up work, higher is earlier */
23
- readonly priority?: number;
24
- }
25
- export interface AssetBuildNode extends WorkNodeCommon {
26
- readonly type: 'asset-build';
27
- /** The asset manifest this asset resides in (artifact) */
28
- readonly assetManifestArtifact: cxapi.AssetManifestArtifact;
29
- /** The asset manifest this asset resides in */
30
- readonly assetManifest: AssetManifest;
31
- /** The stack this asset was defined in (used for environment settings) */
32
- readonly parentStack: cxapi.CloudFormationStackArtifact;
33
- /** The asset that needs to be built */
34
- readonly asset: IManifestEntry;
35
- /** Sort by priority when picking up work, higher is earlier */
36
- readonly priority?: number;
37
- }
38
- export interface AssetPublishNode extends WorkNodeCommon {
39
- readonly type: 'asset-publish';
40
- /** The asset manifest this asset resides in (artifact) */
41
- readonly assetManifestArtifact: cxapi.AssetManifestArtifact;
42
- /** The asset manifest this asset resides in */
43
- readonly assetManifest: AssetManifest;
44
- /** The stack this asset was defined in (used for environment settings) */
45
- readonly parentStack: cxapi.CloudFormationStackArtifact;
46
- /** The asset that needs to be published */
47
- readonly asset: IManifestEntry;
48
- /** Sort by priority when picking up work, higher is earlier */
49
- readonly priority?: number;
50
- }
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DeploymentState = void 0;
4
- var DeploymentState;
5
- (function (DeploymentState) {
6
- DeploymentState["PENDING"] = "pending";
7
- DeploymentState["QUEUED"] = "queued";
8
- DeploymentState["DEPLOYING"] = "deploying";
9
- DeploymentState["COMPLETED"] = "completed";
10
- DeploymentState["FAILED"] = "failed";
11
- DeploymentState["SKIPPED"] = "skipped";
12
- })(DeploymentState || (exports.DeploymentState = DeploymentState = {}));
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3pCLHNDQUFtQixDQUFBO0lBQ25CLG9DQUFpQixDQUFBO0lBQ2pCLDBDQUF1QixDQUFBO0lBQ3ZCLDBDQUF1QixDQUFBO0lBQ3ZCLG9DQUFpQixDQUFBO0lBQ2pCLHNDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFQVyxlQUFlLCtCQUFmLGVBQWUsUUFPMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgdHlwZSB7IEFzc2V0TWFuaWZlc3QsIElNYW5pZmVzdEVudHJ5IH0gZnJvbSAnY2RrLWFzc2V0cyc7XG5cbmV4cG9ydCBlbnVtIERlcGxveW1lbnRTdGF0ZSB7XG4gIFBFTkRJTkcgPSAncGVuZGluZycsXG4gIFFVRVVFRCA9ICdxdWV1ZWQnLFxuICBERVBMT1lJTkcgPSAnZGVwbG95aW5nJyxcbiAgQ09NUExFVEVEID0gJ2NvbXBsZXRlZCcsXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxuICBTS0lQUEVEID0gJ3NraXBwZWQnLFxufVxuXG5leHBvcnQgdHlwZSBXb3JrTm9kZSA9IFN0YWNrTm9kZSB8IEFzc2V0QnVpbGROb2RlIHwgQXNzZXRQdWJsaXNoTm9kZTtcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrTm9kZUNvbW1vbiB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogU2V0PHN0cmluZz47XG4gIGRlcGxveW1lbnRTdGF0ZTogRGVwbG95bWVudFN0YXRlO1xuICAvKiogU29tZSByZWFkYWJsZSBpbmZvcm1hdGlvbiB0byBhdHRhY2ggdG8gdGhlIGlkLCB3aGljaCBtYXkgYmUgdW5yZWFkYWJsZSAqL1xuICByZWFkb25seSBub3RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrTm9kZSBleHRlbmRzIFdvcmtOb2RlQ29tbW9uIHtcbiAgcmVhZG9ubHkgdHlwZTogJ3N0YWNrJztcbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgLyoqIFNvcnQgYnkgcHJpb3JpdHkgd2hlbiBwaWNraW5nIHVwIHdvcmssIGhpZ2hlciBpcyBlYXJsaWVyICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFzc2V0QnVpbGROb2RlIGV4dGVuZHMgV29ya05vZGVDb21tb24ge1xuICByZWFkb25seSB0eXBlOiAnYXNzZXQtYnVpbGQnO1xuICAvKiogVGhlIGFzc2V0IG1hbmlmZXN0IHRoaXMgYXNzZXQgcmVzaWRlcyBpbiAoYXJ0aWZhY3QpICovXG4gIHJlYWRvbmx5IGFzc2V0TWFuaWZlc3RBcnRpZmFjdDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0O1xuICAvKiogVGhlIGFzc2V0IG1hbmlmZXN0IHRoaXMgYXNzZXQgcmVzaWRlcyBpbiAqL1xuICByZWFkb25seSBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0O1xuICAvKiogVGhlIHN0YWNrIHRoaXMgYXNzZXQgd2FzIGRlZmluZWQgaW4gKHVzZWQgZm9yIGVudmlyb25tZW50IHNldHRpbmdzKSAqL1xuICByZWFkb25seSBwYXJlbnRTdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICAvKiogVGhlIGFzc2V0IHRoYXQgbmVlZHMgdG8gYmUgYnVpbHQgKi9cbiAgcmVhZG9ubHkgYXNzZXQ6IElNYW5pZmVzdEVudHJ5O1xuICAvKiogU29ydCBieSBwcmlvcml0eSB3aGVuIHBpY2tpbmcgdXAgd29yaywgaGlnaGVyIGlzIGVhcmxpZXIgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRQdWJsaXNoTm9kZSBleHRlbmRzIFdvcmtOb2RlQ29tbW9uIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2Fzc2V0LXB1Ymxpc2gnO1xuICAvKiogVGhlIGFzc2V0IG1hbmlmZXN0IHRoaXMgYXNzZXQgcmVzaWRlcyBpbiAoYXJ0aWZhY3QpICovXG4gIHJlYWRvbmx5IGFzc2V0TWFuaWZlc3RBcnRpZmFjdDogY3hhcGkuQXNzZXRNYW5pZmVzdEFydGlmYWN0O1xuICAvKiogVGhlIGFzc2V0IG1hbmlmZXN0IHRoaXMgYXNzZXQgcmVzaWRlcyBpbiAqL1xuICByZWFkb25seSBhc3NldE1hbmlmZXN0OiBBc3NldE1hbmlmZXN0O1xuICAvKiogVGhlIHN0YWNrIHRoaXMgYXNzZXQgd2FzIGRlZmluZWQgaW4gKHVzZWQgZm9yIGVudmlyb25tZW50IHNldHRpbmdzKSAqL1xuICByZWFkb25seSBwYXJlbnRTdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICAvKiogVGhlIGFzc2V0IHRoYXQgbmVlZHMgdG8gYmUgcHVibGlzaGVkICovXG4gIHJlYWRvbmx5IGFzc2V0OiBJTWFuaWZlc3RFbnRyeTtcbiAgLyoqIFNvcnQgYnkgcHJpb3JpdHkgd2hlbiBwaWNraW5nIHVwIHdvcmssIGhpZ2hlciBpcyBlYXJsaWVyICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xufVxuIl19
@@ -1,72 +0,0 @@
1
- import type { WorkNode, StackNode, AssetBuildNode, AssetPublishNode } from './work-graph-types';
2
- import { type IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
3
- export type Concurrency = number | Record<WorkNode['type'], number>;
4
- export declare class WorkGraph {
5
- readonly nodes: Record<string, WorkNode>;
6
- private readonly readyPool;
7
- private readonly lazyDependencies;
8
- private readonly ioHelper;
9
- error?: Error;
10
- constructor(nodes: Record<string, WorkNode>, ioHelper: IoHelper);
11
- addNodes(...nodes: WorkNode[]): void;
12
- removeNode(nodeId: string | WorkNode): void;
13
- /**
14
- * Return all nodes of a given type
15
- */
16
- nodesOfType<T extends WorkNode['type']>(type: T): Extract<WorkNode, {
17
- type: T;
18
- }>[];
19
- /**
20
- * Return all nodes that depend on a given node
21
- */
22
- dependees(nodeId: string | WorkNode): WorkNode[];
23
- /**
24
- * Add a dependency, that may come before or after the nodes involved
25
- */
26
- addDependency(fromId: string, toId: string): void;
27
- tryGetNode(id: string): WorkNode | undefined;
28
- node(id: string): WorkNode;
29
- absorb(graph: WorkGraph): void;
30
- private hasFailed;
31
- doParallel(concurrency: Concurrency, actions: WorkGraphActions): Promise<void>;
32
- /**
33
- * Return the set of unblocked nodes
34
- */
35
- ready(): Promise<ReadonlyArray<WorkNode>>;
36
- private forAllArtifacts;
37
- private done;
38
- private deployed;
39
- private failed;
40
- toString(): string;
41
- /**
42
- * Ensure all dependencies actually exist. This protects against scenarios such as the following:
43
- * StackA depends on StackB, but StackB is not selected to deploy. The dependency is redundant
44
- * and will be dropped.
45
- * This assumes the manifest comes uncorrupted so we will not fail if a dependency is not found.
46
- */
47
- removeUnavailableDependencies(): void;
48
- /**
49
- * Remove all asset publishing steps for assets that are already published, and then build
50
- * that aren't used anymore.
51
- *
52
- * Do this in parallel, because there may be a lot of assets in an application (seen in practice: >100 assets)
53
- */
54
- removeUnnecessaryAssets(isUnnecessary: (x: AssetPublishNode) => Promise<boolean>): Promise<void>;
55
- private updateReadyPool;
56
- private skipRest;
57
- /**
58
- * Find cycles in a graph
59
- *
60
- * Not the fastest, but effective and should be rare
61
- */
62
- findCycle(): string[] | undefined;
63
- /**
64
- * Whether the `end` node is reachable from the `start` node, following the dependency arrows
65
- */
66
- reachable(start: string, end: string): boolean;
67
- }
68
- export interface WorkGraphActions {
69
- deployStack: (stackNode: StackNode) => Promise<void>;
70
- buildAsset: (assetNode: AssetBuildNode) => Promise<void>;
71
- publishAsset: (assetNode: AssetPublishNode) => Promise<void>;
72
- }
@@ -1,346 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkGraph = void 0;
4
- const work_graph_types_1 = require("./work-graph-types");
5
- const api_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api");
6
- const private_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private");
7
- const util_1 = require("../../util");
8
- class WorkGraph {
9
- constructor(nodes, ioHelper) {
10
- this.readyPool = [];
11
- this.lazyDependencies = new Map();
12
- this.nodes = { ...nodes };
13
- this.ioHelper = ioHelper;
14
- }
15
- addNodes(...nodes) {
16
- for (const node of nodes) {
17
- if (this.nodes[node.id]) {
18
- throw new api_1.ToolkitError(`Duplicate use of node id: ${node.id}`);
19
- }
20
- const ld = this.lazyDependencies.get(node.id);
21
- if (ld) {
22
- for (const x of ld) {
23
- node.dependencies.add(x);
24
- }
25
- this.lazyDependencies.delete(node.id);
26
- }
27
- this.nodes[node.id] = node;
28
- }
29
- }
30
- removeNode(nodeId) {
31
- const id = typeof nodeId === 'string' ? nodeId : nodeId.id;
32
- const removedNode = this.nodes[id];
33
- this.lazyDependencies.delete(id);
34
- delete this.nodes[id];
35
- if (removedNode) {
36
- for (const node of Object.values(this.nodes)) {
37
- node.dependencies.delete(removedNode.id);
38
- }
39
- }
40
- }
41
- /**
42
- * Return all nodes of a given type
43
- */
44
- nodesOfType(type) {
45
- return Object.values(this.nodes).filter(n => n.type === type);
46
- }
47
- /**
48
- * Return all nodes that depend on a given node
49
- */
50
- dependees(nodeId) {
51
- const id = typeof nodeId === 'string' ? nodeId : nodeId.id;
52
- return Object.values(this.nodes).filter(n => n.dependencies.has(id));
53
- }
54
- /**
55
- * Add a dependency, that may come before or after the nodes involved
56
- */
57
- addDependency(fromId, toId) {
58
- const node = this.nodes[fromId];
59
- if (node) {
60
- node.dependencies.add(toId);
61
- return;
62
- }
63
- let lazyDeps = this.lazyDependencies.get(fromId);
64
- if (!lazyDeps) {
65
- lazyDeps = [];
66
- this.lazyDependencies.set(fromId, lazyDeps);
67
- }
68
- lazyDeps.push(toId);
69
- }
70
- tryGetNode(id) {
71
- return this.nodes[id];
72
- }
73
- node(id) {
74
- const ret = this.nodes[id];
75
- if (!ret) {
76
- throw new api_1.ToolkitError(`No node with id ${id} among ${Object.keys(this.nodes)}`);
77
- }
78
- return ret;
79
- }
80
- absorb(graph) {
81
- this.addNodes(...Object.values(graph.nodes));
82
- }
83
- hasFailed() {
84
- return Object.values(this.nodes).some((n) => n.deploymentState === work_graph_types_1.DeploymentState.FAILED);
85
- }
86
- doParallel(concurrency, actions) {
87
- return this.forAllArtifacts(concurrency, async (x) => {
88
- switch (x.type) {
89
- case 'stack':
90
- await actions.deployStack(x);
91
- break;
92
- case 'asset-build':
93
- await actions.buildAsset(x);
94
- break;
95
- case 'asset-publish':
96
- await actions.publishAsset(x);
97
- break;
98
- }
99
- });
100
- }
101
- /**
102
- * Return the set of unblocked nodes
103
- */
104
- async ready() {
105
- await this.updateReadyPool();
106
- return this.readyPool;
107
- }
108
- forAllArtifacts(n, fn) {
109
- const graph = this;
110
- // If 'n' is a number, we limit all concurrency equally (effectively we will be using totalMax)
111
- // If 'n' is a record, we limit each job independently (effectively we will be using max)
112
- const max = typeof n === 'number' ?
113
- {
114
- 'asset-build': n,
115
- 'asset-publish': n,
116
- 'stack': n,
117
- } : n;
118
- const totalMax = typeof n === 'number' ? n : sum(Object.values(n));
119
- return new Promise((ok, fail) => {
120
- let active = {
121
- 'asset-build': 0,
122
- 'asset-publish': 0,
123
- 'stack': 0,
124
- };
125
- function totalActive() {
126
- return sum(Object.values(active));
127
- }
128
- start();
129
- function start() {
130
- graph.updateReadyPool().then(() => {
131
- for (let i = 0; i < graph.readyPool.length;) {
132
- const node = graph.readyPool[i];
133
- if (active[node.type] < max[node.type] && totalActive() < totalMax) {
134
- graph.readyPool.splice(i, 1);
135
- startOne(node);
136
- }
137
- else {
138
- i += 1;
139
- }
140
- }
141
- if (totalActive() === 0) {
142
- if (graph.done()) {
143
- ok();
144
- }
145
- // wait for other active deploys to finish before failing
146
- if (graph.hasFailed()) {
147
- fail(graph.error);
148
- }
149
- }
150
- }).catch((e) => {
151
- fail(e);
152
- });
153
- }
154
- function startOne(x) {
155
- x.deploymentState = work_graph_types_1.DeploymentState.DEPLOYING;
156
- active[x.type]++;
157
- void fn(x)
158
- .finally(() => {
159
- active[x.type]--;
160
- })
161
- .then(() => {
162
- graph.deployed(x);
163
- start();
164
- }).catch((err) => {
165
- // By recording the failure immediately as the queued task exits, we prevent the next
166
- // queued task from starting.
167
- graph.failed(x, err);
168
- start();
169
- });
170
- }
171
- });
172
- }
173
- done() {
174
- return Object.values(this.nodes).every((n) => work_graph_types_1.DeploymentState.COMPLETED === n.deploymentState);
175
- }
176
- deployed(node) {
177
- node.deploymentState = work_graph_types_1.DeploymentState.COMPLETED;
178
- }
179
- failed(node, error) {
180
- this.error = error;
181
- node.deploymentState = work_graph_types_1.DeploymentState.FAILED;
182
- this.skipRest();
183
- this.readyPool.splice(0);
184
- }
185
- toString() {
186
- return [
187
- 'digraph D {',
188
- ...Object.entries(this.nodes).flatMap(([id, node]) => renderNode(id, node)),
189
- '}',
190
- ].join('\n');
191
- function renderNode(id, node) {
192
- const ret = [];
193
- if (node.deploymentState === work_graph_types_1.DeploymentState.COMPLETED) {
194
- ret.push(` ${gv(id, { style: 'filled', fillcolor: 'yellow', comment: node.note })};`);
195
- }
196
- else {
197
- ret.push(` ${gv(id, { comment: node.note })};`);
198
- }
199
- for (const dep of node.dependencies) {
200
- ret.push(` ${gv(id)} -> ${gv(dep)};`);
201
- }
202
- return ret;
203
- }
204
- }
205
- /**
206
- * Ensure all dependencies actually exist. This protects against scenarios such as the following:
207
- * StackA depends on StackB, but StackB is not selected to deploy. The dependency is redundant
208
- * and will be dropped.
209
- * This assumes the manifest comes uncorrupted so we will not fail if a dependency is not found.
210
- */
211
- removeUnavailableDependencies() {
212
- for (const node of Object.values(this.nodes)) {
213
- const removeDeps = Array.from(node.dependencies).filter((dep) => this.nodes[dep] === undefined);
214
- removeDeps.forEach((d) => {
215
- node.dependencies.delete(d);
216
- });
217
- }
218
- }
219
- /**
220
- * Remove all asset publishing steps for assets that are already published, and then build
221
- * that aren't used anymore.
222
- *
223
- * Do this in parallel, because there may be a lot of assets in an application (seen in practice: >100 assets)
224
- */
225
- async removeUnnecessaryAssets(isUnnecessary) {
226
- await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg('Checking for previously published assets'));
227
- const publishes = this.nodesOfType('asset-publish');
228
- const classifiedNodes = await (0, util_1.parallelPromises)(8, publishes.map((assetNode) => async () => [assetNode, await isUnnecessary(assetNode)]));
229
- const alreadyPublished = classifiedNodes.filter(([_, unnecessary]) => unnecessary).map(([assetNode, _]) => assetNode);
230
- for (const assetNode of alreadyPublished) {
231
- this.removeNode(assetNode);
232
- }
233
- await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`${publishes.length} total assets, ${publishes.length - alreadyPublished.length} still need to be published`));
234
- // Now also remove any asset build steps that don't have any dependencies on them anymore
235
- const unusedBuilds = this.nodesOfType('asset-build').filter(build => this.dependees(build).length === 0);
236
- for (const unusedBuild of unusedBuilds) {
237
- this.removeNode(unusedBuild);
238
- }
239
- }
240
- async updateReadyPool() {
241
- const activeCount = Object.values(this.nodes).filter((x) => x.deploymentState === work_graph_types_1.DeploymentState.DEPLOYING).length;
242
- const pendingCount = Object.values(this.nodes).filter((x) => x.deploymentState === work_graph_types_1.DeploymentState.PENDING).length;
243
- const newlyReady = Object.values(this.nodes).filter((x) => x.deploymentState === work_graph_types_1.DeploymentState.PENDING &&
244
- Array.from(x.dependencies).every((id) => this.node(id).deploymentState === work_graph_types_1.DeploymentState.COMPLETED));
245
- // Add newly available nodes to the ready pool
246
- for (const node of newlyReady) {
247
- node.deploymentState = work_graph_types_1.DeploymentState.QUEUED;
248
- this.readyPool.push(node);
249
- }
250
- // Remove nodes from the ready pool that have already started deploying
251
- retainOnly(this.readyPool, (node) => node.deploymentState === work_graph_types_1.DeploymentState.QUEUED);
252
- // Sort by reverse priority
253
- this.readyPool.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
254
- if (this.readyPool.length === 0 && activeCount === 0 && pendingCount > 0) {
255
- const cycle = this.findCycle() ?? ['No cycle found!'];
256
- await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_TRACE.msg(`Cycle ${cycle.join(' -> ')} in graph ${this}`));
257
- throw new api_1.ToolkitError(`Unable to make progress anymore, dependency cycle between remaining artifacts: ${cycle.join(' -> ')} (run with -vv for full graph)`);
258
- }
259
- }
260
- skipRest() {
261
- for (const node of Object.values(this.nodes)) {
262
- if ([work_graph_types_1.DeploymentState.QUEUED, work_graph_types_1.DeploymentState.PENDING].includes(node.deploymentState)) {
263
- node.deploymentState = work_graph_types_1.DeploymentState.SKIPPED;
264
- }
265
- }
266
- }
267
- /**
268
- * Find cycles in a graph
269
- *
270
- * Not the fastest, but effective and should be rare
271
- */
272
- findCycle() {
273
- const seen = new Set();
274
- const self = this;
275
- for (const nodeId of Object.keys(this.nodes)) {
276
- const cycle = recurse(nodeId, [nodeId]);
277
- if (cycle) {
278
- return cycle;
279
- }
280
- }
281
- return undefined;
282
- function recurse(nodeId, path) {
283
- if (seen.has(nodeId)) {
284
- return undefined;
285
- }
286
- try {
287
- for (const dep of self.nodes[nodeId].dependencies ?? []) {
288
- const index = path.indexOf(dep);
289
- if (index > -1) {
290
- return [...path.slice(index), dep];
291
- }
292
- const cycle = recurse(dep, [...path, dep]);
293
- if (cycle) {
294
- return cycle;
295
- }
296
- }
297
- return undefined;
298
- }
299
- finally {
300
- seen.add(nodeId);
301
- }
302
- }
303
- }
304
- /**
305
- * Whether the `end` node is reachable from the `start` node, following the dependency arrows
306
- */
307
- reachable(start, end) {
308
- const seen = new Set();
309
- const self = this;
310
- return recurse(start);
311
- function recurse(current) {
312
- if (seen.has(current)) {
313
- return false;
314
- }
315
- seen.add(current);
316
- if (current === end) {
317
- return true;
318
- }
319
- for (const dep of self.nodes[current].dependencies) {
320
- if (recurse(dep)) {
321
- return true;
322
- }
323
- }
324
- return false;
325
- }
326
- }
327
- }
328
- exports.WorkGraph = WorkGraph;
329
- function sum(xs) {
330
- let ret = 0;
331
- for (const x of xs) {
332
- ret += x;
333
- }
334
- return ret;
335
- }
336
- function retainOnly(xs, pred) {
337
- xs.splice(0, xs.length, ...xs.filter(pred));
338
- }
339
- function gv(id, attrs) {
340
- const attrString = Object.entries(attrs ?? {}).flatMap(([k, v]) => v !== undefined ? [`${k}="${v}"`] : []).join(',');
341
- return attrString ? `"${simplifyId(id)}" [${attrString}]` : `"${simplifyId(id)}"`;
342
- }
343
- function simplifyId(id) {
344
- return id.replace(/([0-9a-f]{6})[0-9a-f]{6,}/g, '$1');
345
- }
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndvcmstZ3JhcGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseURBQXFEO0FBQ3JELDBFQUFnRjtBQUNoRix5RkFBZ0c7QUFDaEcscUNBQThDO0FBRzlDLE1BQWEsU0FBUztJQVFwQixZQUFtQixLQUErQixFQUFFLFFBQWtCO1FBTnJELGNBQVMsR0FBb0IsRUFBRSxDQUFDO1FBQ2hDLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO1FBTTlELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTSxRQUFRLENBQUMsR0FBRyxLQUFpQjtRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLGtCQUFZLENBQUMsNkJBQTZCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNQLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FB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QUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELFNBQVMsRUFBRSxDQUFDLEVBQVUsRUFBRSxLQUEwQztJQUNoRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckgsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ3BGLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxFQUFVO0lBQzVCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXb3JrTm9kZSwgU3RhY2tOb2RlLCBBc3NldEJ1aWxkTm9kZSwgQXNzZXRQdWJsaXNoTm9kZSB9IGZyb20gJy4vd29yay1ncmFwaC10eXBlcyc7XG5pbXBvcnQgeyBEZXBsb3ltZW50U3RhdGUgfSBmcm9tICcuL3dvcmstZ3JhcGgtdHlwZXMnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpJztcbmltcG9ydCB7IElPLCB0eXBlIElvSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgcGFyYWxsZWxQcm9taXNlcyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuZXhwb3J0IHR5cGUgQ29uY3VycmVuY3kgPSBudW1iZXIgfCBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPjtcblxuZXhwb3J0IGNsYXNzIFdvcmtHcmFwaCB7XG4gIHB1YmxpYyByZWFkb25seSBub2RlczogUmVjb3JkPHN0cmluZywgV29ya05vZGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWR5UG9vbDogQXJyYXk8V29ya05vZGU+ID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF6eURlcGVuZGVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb0hlbHBlcjogSW9IZWxwZXI7XG5cbiAgcHVibGljIGVycm9yPzogRXJyb3I7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG5vZGVzOiBSZWNvcmQ8c3RyaW5nLCBXb3JrTm9kZT4sIGlvSGVscGVyOiBJb0hlbHBlcikge1xuICAgIHRoaXMubm9kZXMgPSB7IC4uLm5vZGVzIH07XG4gICAgdGhpcy5pb0hlbHBlciA9IGlvSGVscGVyO1xuICB9XG5cbiAgcHVibGljIGFkZE5vZGVzKC4uLm5vZGVzOiBXb3JrTm9kZVtdKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAodGhpcy5ub2Rlc1tub2RlLmlkXSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBEdXBsaWNhdGUgdXNlIG9mIG5vZGUgaWQ6ICR7bm9kZS5pZH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGQgPSB0aGlzLmxhenlEZXBlbmRlbmNpZXMuZ2V0KG5vZGUuaWQpO1xuICAgICAgaWYgKGxkKSB7XG4gICAgICAgIGZvciAoY29uc3QgeCBvZiBsZCkge1xuICAgICAgICAgIG5vZGUuZGVwZW5kZW5jaWVzLmFkZCh4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhenlEZXBlbmRlbmNpZXMuZGVsZXRlKG5vZGUuaWQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vZGVzW25vZGUuaWRdID0gbm9kZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZyB8IFdvcmtOb2RlKSB7XG4gICAgY29uc3QgaWQgPSB0eXBlb2Ygbm9kZUlkID09PSAnc3RyaW5nJyA/IG5vZGVJZCA6IG5vZGVJZC5pZDtcbiAgICBjb25zdCByZW1vdmVkTm9kZSA9IHRoaXMubm9kZXNbaWRdO1xuXG4gICAgdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmRlbGV0ZShpZCk7XG4gICAgZGVsZXRlIHRoaXMubm9kZXNbaWRdO1xuXG4gICAgaWYgKHJlbW92ZWROb2RlKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5kZWxldGUocmVtb3ZlZE5vZGUuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG5vZGVzIG9mIGEgZ2l2ZW4gdHlwZVxuICAgKi9cbiAgcHVibGljIG5vZGVzT2ZUeXBlPFQgZXh0ZW5kcyBXb3JrTm9kZVsndHlwZSddPih0eXBlOiBUKTogRXh0cmFjdDxXb3JrTm9kZSwgeyB0eXBlOiBUIH0+W10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmZpbHRlcihuID0+IG4udHlwZSA9PT0gdHlwZSkgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgbm9kZXMgdGhhdCBkZXBlbmQgb24gYSBnaXZlbiBub2RlXG4gICAqL1xuICBwdWJsaWMgZGVwZW5kZWVzKG5vZGVJZDogc3RyaW5nIHwgV29ya05vZGUpIHtcbiAgICBjb25zdCBpZCA9IHR5cGVvZiBub2RlSWQgPT09ICdzdHJpbmcnID8gbm9kZUlkIDogbm9kZUlkLmlkO1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmZpbHRlcihuID0+IG4uZGVwZW5kZW5jaWVzLmhhcyhpZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRlcGVuZGVuY3ksIHRoYXQgbWF5IGNvbWUgYmVmb3JlIG9yIGFmdGVyIHRoZSBub2RlcyBpbnZvbHZlZFxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZGVuY3koZnJvbUlkOiBzdHJpbmcsIHRvSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVzW2Zyb21JZF07XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuZGVwZW5kZW5jaWVzLmFkZCh0b0lkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGxhenlEZXBzID0gdGhpcy5sYXp5RGVwZW5kZW5jaWVzLmdldChmcm9tSWQpO1xuICAgIGlmICghbGF6eURlcHMpIHtcbiAgICAgIGxhenlEZXBzID0gW107XG4gICAgICB0aGlzLmxhenlEZXBlbmRlbmNpZXMuc2V0KGZyb21JZCwgbGF6eURlcHMpO1xuICAgIH1cbiAgICBsYXp5RGVwcy5wdXNoKHRvSWQpO1xuICB9XG5cbiAgcHVibGljIHRyeUdldE5vZGUoaWQ6IHN0cmluZyk6IFdvcmtOb2RlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ub2Rlc1tpZF07XG4gIH1cblxuICBwdWJsaWMgbm9kZShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ub2Rlc1tpZF07XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE5vIG5vZGUgd2l0aCBpZCAke2lkfSBhbW9uZyAke09iamVjdC5rZXlzKHRoaXMubm9kZXMpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIGFic29yYihncmFwaDogV29ya0dyYXBoKSB7XG4gICAgdGhpcy5hZGROb2RlcyguLi5PYmplY3QudmFsdWVzKGdyYXBoLm5vZGVzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhc0ZhaWxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5zb21lKChuKSA9PiBuLmRlcGxveW1lbnRTdGF0ZSA9PT0gRGVwbG95bWVudFN0YXRlLkZBSUxFRCk7XG4gIH1cblxuICBwdWJsaWMgZG9QYXJhbGxlbChjb25jdXJyZW5jeTogQ29uY3VycmVuY3ksIGFjdGlvbnM6IFdvcmtHcmFwaEFjdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JBbGxBcnRpZmFjdHMoY29uY3VycmVuY3ksIGFzeW5jICh4OiBXb3JrTm9kZSkgPT4ge1xuICAgICAgc3dpdGNoICh4LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RhY2snOlxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZGVwbG95U3RhY2soeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Fzc2V0LWJ1aWxkJzpcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmJ1aWxkQXNzZXQoeCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Fzc2V0LXB1Ymxpc2gnOlxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMucHVibGlzaEFzc2V0KHgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2V0IG9mIHVuYmxvY2tlZCBub2Rlc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlYWR5KCk6IFByb21pc2U8UmVhZG9ubHlBcnJheTxXb3JrTm9kZT4+IHtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlYWR5UG9vbCgpO1xuICAgIHJldHVybiB0aGlzLnJlYWR5UG9vbDtcbiAgfVxuXG4gIHByaXZhdGUgZm9yQWxsQXJ0aWZhY3RzKG46IENvbmN1cnJlbmN5LCBmbjogKHg6IFdvcmtOb2RlKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZ3JhcGggPSB0aGlzO1xuXG4gICAgLy8gSWYgJ24nIGlzIGEgbnVtYmVyLCB3ZSBsaW1pdCBhbGwgY29uY3VycmVuY3kgZXF1YWxseSAoZWZmZWN0aXZlbHkgd2Ugd2lsbCBiZSB1c2luZyB0b3RhbE1heClcbiAgICAvLyBJZiAnbicgaXMgYSByZWNvcmQsIHdlIGxpbWl0IGVhY2ggam9iIGluZGVwZW5kZW50bHkgKGVmZmVjdGl2ZWx5IHdlIHdpbGwgYmUgdXNpbmcgbWF4KVxuICAgIGNvbnN0IG1heDogUmVjb3JkPFdvcmtOb2RlWyd0eXBlJ10sIG51bWJlcj4gPSB0eXBlb2YgbiA9PT0gJ251bWJlcicgP1xuICAgICAge1xuICAgICAgICAnYXNzZXQtYnVpbGQnOiBuLFxuICAgICAgICAnYXNzZXQtcHVibGlzaCc6IG4sXG4gICAgICAgICdzdGFjayc6IG4sXG4gICAgICB9IDogbjtcbiAgICBjb25zdCB0b3RhbE1heCA9IHR5cGVvZiBuID09PSAnbnVtYmVyJyA/IG4gOiBzdW0oT2JqZWN0LnZhbHVlcyhuKSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBmYWlsKSA9PiB7XG4gICAgICBsZXQgYWN0aXZlOiBSZWNvcmQ8V29ya05vZGVbJ3R5cGUnXSwgbnVtYmVyPiA9IHtcbiAgICAgICAgJ2Fzc2V0LWJ1aWxkJzogMCxcbiAgICAgICAgJ2Fzc2V0LXB1Ymxpc2gnOiAwLFxuICAgICAgICAnc3RhY2snOiAwLFxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHRvdGFsQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gc3VtKE9iamVjdC52YWx1ZXMoYWN0aXZlKSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgICBncmFwaC51cGRhdGVSZWFkeVBvb2woKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyYXBoLnJlYWR5UG9vbC5sZW5ndGg7ICkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGdyYXBoLnJlYWR5UG9vbFtpXTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZVtub2RlLnR5cGVdIDwgbWF4W25vZGUudHlwZV0gJiYgdG90YWxBY3RpdmUoKSA8IHRvdGFsTWF4KSB7XG4gICAgICAgICAgICAgIGdyYXBoLnJlYWR5UG9vbC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIHN0YXJ0T25lKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0b3RhbEFjdGl2ZSgpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoZ3JhcGguZG9uZSgpKSB7XG4gICAgICAgICAgICAgIG9rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB3YWl0IGZvciBvdGhlciBhY3RpdmUgZGVwbG95cyB0byBmaW5pc2ggYmVmb3JlIGZhaWxpbmdcbiAgICAgICAgICAgIGlmIChncmFwaC5oYXNGYWlsZWQoKSkge1xuICAgICAgICAgICAgICBmYWlsKGdyYXBoLmVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgZmFpbChlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0T25lKHg6IFdvcmtOb2RlKSB7XG4gICAgICAgIHguZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkRFUExPWUlORztcbiAgICAgICAgYWN0aXZlW3gudHlwZV0rKztcbiAgICAgICAgdm9pZCBmbih4KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIGFjdGl2ZVt4LnR5cGVdLS07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBncmFwaC5kZXBsb3llZCh4KTtcbiAgICAgICAgICAgIHN0YXJ0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgLy8gQnkgcmVjb3JkaW5nIHRoZSBmYWlsdXJlIGltbWVkaWF0ZWx5IGFzIHRoZSBxdWV1ZWQgdGFzayBleGl0cywgd2UgcHJldmVudCB0aGUgbmV4dFxuICAgICAgICAgICAgLy8gcXVldWVkIHRhc2sgZnJvbSBzdGFydGluZy5cbiAgICAgICAgICAgIGdyYXBoLmZhaWxlZCh4LCBlcnIpO1xuICAgICAgICAgICAgc3RhcnQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5ldmVyeSgobikgPT4gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRCA9PT0gbi5kZXBsb3ltZW50U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXBsb3llZChub2RlOiBXb3JrTm9kZSkge1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkNPTVBMRVRFRDtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbGVkKG5vZGU6IFdvcmtOb2RlLCBlcnJvcj86IEVycm9yKSB7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgIG5vZGUuZGVwbG95bWVudFN0YXRlID0gRGVwbG95bWVudFN0YXRlLkZBSUxFRDtcbiAgICB0aGlzLnNraXBSZXN0KCk7XG4gICAgdGhpcy5yZWFkeVBvb2wuc3BsaWNlKDApO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBbXG4gICAgICAnZGlncmFwaCBEIHsnLFxuICAgICAgLi4uT2JqZWN0LmVudHJpZXModGhpcy5ub2RlcykuZmxhdE1hcCgoW2lkLCBub2RlXSkgPT4gcmVuZGVyTm9kZShpZCwgbm9kZSkpLFxuICAgICAgJ30nLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBmdW5jdGlvbiByZW5kZXJOb2RlKGlkOiBzdHJpbmcsIG5vZGU6IFdvcmtOb2RlKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgcmV0ID0gW107XG4gICAgICBpZiAobm9kZS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5DT01QTEVURUQpIHtcbiAgICAgICAgcmV0LnB1c2goYCAgJHtndihpZCwgeyBzdHlsZTogJ2ZpbGxlZCcsIGZpbGxjb2xvcjogJ3llbGxvdycsIGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkLCB7IGNvbW1lbnQ6IG5vZGUubm90ZSB9KX07YCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiBub2RlLmRlcGVuZGVuY2llcykge1xuICAgICAgICByZXQucHVzaChgICAke2d2KGlkKX0gLT4gJHtndihkZXApfTtgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSBhbGwgZGVwZW5kZW5jaWVzIGFjdHVhbGx5IGV4aXN0LiBUaGlzIHByb3RlY3RzIGFnYWluc3Qgc2NlbmFyaW9zIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzpcbiAgICogU3RhY2tBIGRlcGVuZHMgb24gU3RhY2tCLCBidXQgU3RhY2tCIGlzIG5vdCBzZWxlY3RlZCB0byBkZXBsb3kuIFRoZSBkZXBlbmRlbmN5IGlzIHJlZHVuZGFudFxuICAgKiBhbmQgd2lsbCBiZSBkcm9wcGVkLlxuICAgKiBUaGlzIGFzc3VtZXMgdGhlIG1hbmlmZXN0IGNvbWVzIHVuY29ycnVwdGVkIHNvIHdlIHdpbGwgbm90IGZhaWwgaWYgYSBkZXBlbmRlbmN5IGlzIG5vdCBmb3VuZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVVbmF2YWlsYWJsZURlcGVuZGVuY2llcygpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKSkge1xuICAgICAgY29uc3QgcmVtb3ZlRGVwcyA9IEFycmF5LmZyb20obm9kZS5kZXBlbmRlbmNpZXMpLmZpbHRlcigoZGVwKSA9PiB0aGlzLm5vZGVzW2RlcF0gPT09IHVuZGVmaW5lZCk7XG5cbiAgICAgIHJlbW92ZURlcHMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5kZWxldGUoZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBhc3NldCBwdWJsaXNoaW5nIHN0ZXBzIGZvciBhc3NldHMgdGhhdCBhcmUgYWxyZWFkeSBwdWJsaXNoZWQsIGFuZCB0aGVuIGJ1aWxkXG4gICAqIHRoYXQgYXJlbid0IHVzZWQgYW55bW9yZS5cbiAgICpcbiAgICogRG8gdGhpcyBpbiBwYXJhbGxlbCwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgYSBsb3Qgb2YgYXNzZXRzIGluIGFuIGFwcGxpY2F0aW9uIChzZWVuIGluIHByYWN0aWNlOiA+MTAwIGFzc2V0cylcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVVbm5lY2Vzc2FyeUFzc2V0cyhpc1VubmVjZXNzYXJ5OiAoeDogQXNzZXRQdWJsaXNoTm9kZSkgPT4gUHJvbWlzZTxib29sZWFuPikge1xuICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9ERUJVRy5tc2coJ0NoZWNraW5nIGZvciBwcmV2aW91c2x5IHB1Ymxpc2hlZCBhc3NldHMnKSk7XG5cbiAgICBjb25zdCBwdWJsaXNoZXMgPSB0aGlzLm5vZGVzT2ZUeXBlKCdhc3NldC1wdWJsaXNoJyk7XG5cbiAgICBjb25zdCBjbGFzc2lmaWVkTm9kZXMgPSBhd2FpdCBwYXJhbGxlbFByb21pc2VzKFxuICAgICAgOCxcbiAgICAgIHB1Ymxpc2hlcy5tYXAoKGFzc2V0Tm9kZSkgPT4gYXN5bmMoKSA9PiBbYXNzZXROb2RlLCBhd2FpdCBpc1VubmVjZXNzYXJ5KGFzc2V0Tm9kZSldIGFzIGNvbnN0KSk7XG5cbiAgICBjb25zdCBhbHJlYWR5UHVibGlzaGVkID0gY2xhc3NpZmllZE5vZGVzLmZpbHRlcigoW18sIHVubmVjZXNzYXJ5XSkgPT4gdW5uZWNlc3NhcnkpLm1hcCgoW2Fzc2V0Tm9kZSwgX10pID0+IGFzc2V0Tm9kZSk7XG4gICAgZm9yIChjb25zdCBhc3NldE5vZGUgb2YgYWxyZWFkeVB1Ymxpc2hlZCkge1xuICAgICAgdGhpcy5yZW1vdmVOb2RlKGFzc2V0Tm9kZSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtwdWJsaXNoZXMubGVuZ3RofSB0b3RhbCBhc3NldHMsICR7cHVibGlzaGVzLmxlbmd0aCAtIGFscmVhZHlQdWJsaXNoZWQubGVuZ3RofSBzdGlsbCBuZWVkIHRvIGJlIHB1Ymxpc2hlZGApKTtcblxuICAgIC8vIE5vdyBhbHNvIHJlbW92ZSBhbnkgYXNzZXQgYnVpbGQgc3RlcHMgdGhhdCBkb24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlbSBhbnltb3JlXG4gICAgY29uc3QgdW51c2VkQnVpbGRzID0gdGhpcy5ub2Rlc09mVHlwZSgnYXNzZXQtYnVpbGQnKS5maWx0ZXIoYnVpbGQgPT4gdGhpcy5kZXBlbmRlZXMoYnVpbGQpLmxlbmd0aCA9PT0gMCk7XG4gICAgZm9yIChjb25zdCB1bnVzZWRCdWlsZCBvZiB1bnVzZWRCdWlsZHMpIHtcbiAgICAgIHRoaXMucmVtb3ZlTm9kZSh1bnVzZWRCdWlsZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVSZWFkeVBvb2woKSB7XG4gICAgY29uc3QgYWN0aXZlQ291bnQgPSBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmZpbHRlcigoeCkgPT4geC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5ERVBMT1lJTkcpLmxlbmd0aDtcbiAgICBjb25zdCBwZW5kaW5nQ291bnQgPSBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpLmZpbHRlcigoeCkgPT4geC5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HKS5sZW5ndGg7XG5cbiAgICBjb25zdCBuZXdseVJlYWR5ID0gT2JqZWN0LnZhbHVlcyh0aGlzLm5vZGVzKS5maWx0ZXIoKHgpID0+XG4gICAgICB4LmRlcGxveW1lbnRTdGF0ZSA9PT0gRGVwbG95bWVudFN0YXRlLlBFTkRJTkcgJiZcbiAgICAgIEFycmF5LmZyb20oeC5kZXBlbmRlbmNpZXMpLmV2ZXJ5KChpZCkgPT4gdGhpcy5ub2RlKGlkKS5kZXBsb3ltZW50U3RhdGUgPT09IERlcGxveW1lbnRTdGF0ZS5DT01QTEVURUQpKTtcblxuICAgIC8vIEFkZCBuZXdseSBhdmFpbGFibGUgbm9kZXMgdG8gdGhlIHJlYWR5IHBvb2xcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbmV3bHlSZWFkeSkge1xuICAgICAgbm9kZS5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuUVVFVUVEO1xuICAgICAgdGhpcy5yZWFkeVBvb2wucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSB0aGUgcmVhZHkgcG9vbCB0aGF0IGhhdmUgYWxyZWFkeSBzdGFydGVkIGRlcGxveWluZ1xuICAgIHJldGFpbk9ubHkodGhpcy5yZWFkeVBvb2wsIChub2RlKSA9PiBub2RlLmRlcGxveW1lbnRTdGF0ZSA9PT0gRGVwbG95bWVudFN0YXRlLlFVRVVFRCk7XG5cbiAgICAvLyBTb3J0IGJ5IHJldmVyc2UgcHJpb3JpdHlcbiAgICB0aGlzLnJlYWR5UG9vbC5zb3J0KChhLCBiKSA9PiAoYi5wcmlvcml0eSA/PyAwKSAtIChhLnByaW9yaXR5ID8/IDApKTtcblxuICAgIGlmICh0aGlzLnJlYWR5UG9vbC5sZW5ndGggPT09IDAgJiYgYWN0aXZlQ291bnQgPT09IDAgJiYgcGVuZGluZ0NvdW50ID4gMCkge1xuICAgICAgY29uc3QgY3ljbGUgPSB0aGlzLmZpbmRDeWNsZSgpID8/IFsnTm8gY3ljbGUgZm91bmQhJ107XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfVFJBQ0UubXNnKGBDeWNsZSAke2N5Y2xlLmpvaW4oJyAtPiAnKX0gaW4gZ3JhcGggJHt0aGlzfWApKTtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYFVuYWJsZSB0byBtYWtlIHByb2dyZXNzIGFueW1vcmUsIGRlcGVuZGVuY3kgY3ljbGUgYmV0d2VlbiByZW1haW5pbmcgYXJ0aWZhY3RzOiAke2N5Y2xlLmpvaW4oJyAtPiAnKX0gKHJ1biB3aXRoIC12diBmb3IgZnVsbCBncmFwaClgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNraXBSZXN0KCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBPYmplY3QudmFsdWVzKHRoaXMubm9kZXMpKSB7XG4gICAgICBpZiAoW0RlcGxveW1lbnRTdGF0ZS5RVUVVRUQsIERlcGxveW1lbnRTdGF0ZS5QRU5ESU5HXS5pbmNsdWRlcyhub2RlLmRlcGxveW1lbnRTdGF0ZSkpIHtcbiAgICAgICAgbm9kZS5kZXBsb3ltZW50U3RhdGUgPSBEZXBsb3ltZW50U3RhdGUuU0tJUFBFRDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBjeWNsZXMgaW4gYSBncmFwaFxuICAgKlxuICAgKiBOb3QgdGhlIGZhc3Rlc3QsIGJ1dCBlZmZlY3RpdmUgYW5kIHNob3VsZCBiZSByYXJlXG4gICAqL1xuICBwdWJsaWMgZmluZEN5Y2xlKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgZm9yIChjb25zdCBub2RlSWQgb2YgT2JqZWN0LmtleXModGhpcy5ub2RlcykpIHtcbiAgICAgIGNvbnN0IGN5Y2xlID0gcmVjdXJzZShub2RlSWQsIFtub2RlSWRdKTtcbiAgICAgIGlmIChjeWNsZSkge1xuICAgICAgICByZXR1cm4gY3ljbGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNlKG5vZGVJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChzZWVuLmhhcyhub2RlSWQpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBzZWxmLm5vZGVzW25vZGVJZF0uZGVwZW5kZW5jaWVzID8/IFtdKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBwYXRoLmluZGV4T2YoZGVwKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5wYXRoLnNsaWNlKGluZGV4KSwgZGVwXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjeWNsZSA9IHJlY3Vyc2UoZGVwLCBbLi4ucGF0aCwgZGVwXSk7XG4gICAgICAgICAgaWYgKGN5Y2xlKSB7XG4gICAgICAgICAgICByZXR1cm4gY3ljbGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNlZW4uYWRkKG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBlbmRgIG5vZGUgaXMgcmVhY2hhYmxlIGZyb20gdGhlIGBzdGFydGAgbm9kZSwgZm9sbG93aW5nIHRoZSBkZXBlbmRlbmN5IGFycm93c1xuICAgKi9cbiAgcHVibGljIHJlYWNoYWJsZShzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gcmVjdXJzZShzdGFydCk7XG5cbiAgICBmdW5jdGlvbiByZWN1cnNlKGN1cnJlbnQ6IHN0cmluZykge1xuICAgICAgaWYgKHNlZW4uaGFzKGN1cnJlbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGN1cnJlbnQpO1xuXG4gICAgICBpZiAoY3VycmVudCA9PT0gZW5kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5ub2Rlc1tjdXJyZW50XS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgaWYgKHJlY3Vyc2UoZGVwKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya0dyYXBoQWN0aW9ucyB7XG4gIGRlcGxveVN0YWNrOiAoc3RhY2tOb2RlOiBTdGFja05vZGUpID0+IFByb21pc2U8dm9pZD47XG4gIGJ1aWxkQXNzZXQ6IChhc3NldE5vZGU6IEFzc2V0QnVpbGROb2RlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwdWJsaXNoQXNzZXQ6IChhc3NldE5vZGU6IEFzc2V0UHVibGlzaE5vZGUpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmZ1bmN0aW9uIHN1bSh4czogbnVtYmVyW10pIHtcbiAgbGV0IHJldCA9IDA7XG4gIGZvciAoY29uc3QgeCBvZiB4cykge1xuICAgIHJldCArPSB4O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHJldGFpbk9ubHk8QT4oeHM6IEFbXSwgcHJlZDogKHg6IEEpID0+IGJvb2xlYW4pIHtcbiAgeHMuc3BsaWNlKDAsIHhzLmxlbmd0aCwgLi4ueHMuZmlsdGVyKHByZWQpKTtcbn1cblxuZnVuY3Rpb24gZ3YoaWQ6IHN0cmluZywgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KSB7XG4gIGNvbnN0IGF0dHJTdHJpbmcgPSBPYmplY3QuZW50cmllcyhhdHRycyA/PyB7fSkuZmxhdE1hcCgoW2ssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQgPyBbYCR7a309XCIke3Z9XCJgXSA6IFtdKS5qb2luKCcsJyk7XG5cbiAgcmV0dXJuIGF0dHJTdHJpbmcgPyBgXCIke3NpbXBsaWZ5SWQoaWQpfVwiIFske2F0dHJTdHJpbmd9XWAgOiBgXCIke3NpbXBsaWZ5SWQoaWQpfVwiYDtcbn1cblxuZnVuY3Rpb24gc2ltcGxpZnlJZChpZDogc3RyaW5nKSB7XG4gIHJldHVybiBpZC5yZXBsYWNlKC8oWzAtOWEtZl17Nn0pWzAtOWEtZl17Nix9L2csICckMScpO1xufVxuIl19
@@ -1,50 +0,0 @@
1
- import type { CloudFormationStackArtifact } from '@aws-cdk/cx-api';
2
- import { type StackActivity, type StackProgress } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api';
3
- import type { IoMessage } from '../io-host/cli-io-host';
4
- export interface IActivityPrinter {
5
- notify(msg: IoMessage<unknown>): void;
6
- }
7
- export interface ActivityPrinterProps {
8
- /**
9
- * Stream to write to
10
- */
11
- readonly stream: NodeJS.WriteStream;
12
- }
13
- export declare abstract class ActivityPrinterBase implements IActivityPrinter {
14
- protected readonly props: ActivityPrinterProps;
15
- protected static readonly TIMESTAMP_WIDTH = 12;
16
- protected static readonly STATUS_WIDTH = 20;
17
- /**
18
- * Stream to write to
19
- */
20
- protected readonly stream: NodeJS.WriteStream;
21
- /**
22
- * The with of the "resource type" column.
23
- */
24
- protected resourceTypeColumnWidth: number;
25
- /**
26
- * A list of resource IDs which are currently being processed
27
- */
28
- protected resourcesInProgress: Record<string, StackActivity>;
29
- protected stackProgress?: StackProgress;
30
- protected rollingBack: boolean;
31
- protected readonly failures: StackActivity[];
32
- protected hookFailureMap: Map<string, Map<string, string>>;
33
- constructor(props: ActivityPrinterProps);
34
- protected abstract print(): void;
35
- /**
36
- * Receive a stack activity message
37
- */
38
- notify(msg: IoMessage<unknown>): void;
39
- start({ stack }: {
40
- stack: CloudFormationStackArtifact;
41
- }): void;
42
- activity(activity: StackActivity): void;
43
- stop(): void;
44
- protected addActivity(activity: StackActivity): void;
45
- protected failureReason(activity: StackActivity): string;
46
- /**
47
- * Is the activity a meta activity for the stack itself.
48
- */
49
- protected isActivityForTheStack(activity: StackActivity): boolean;
50
- }