@aws-cdk/toolkit-lib 1.1.0 → 1.1.1

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 (59) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/bootstrap/index.d.ts +1 -1
  4. package/lib/actions/bootstrap/index.js +1 -1
  5. package/lib/actions/deploy/index.d.ts +4 -4
  6. package/lib/actions/deploy/index.js +1 -1
  7. package/lib/actions/deploy/private/deploy-options.js +1 -1
  8. package/lib/actions/destroy/index.d.ts +1 -1
  9. package/lib/actions/destroy/index.js +1 -1
  10. package/lib/actions/diff/index.d.ts +2 -2
  11. package/lib/actions/diff/index.js +1 -1
  12. package/lib/actions/drift/index.d.ts +1 -1
  13. package/lib/actions/drift/index.js +1 -1
  14. package/lib/actions/refactor/index.d.ts +1 -1
  15. package/lib/actions/refactor/index.js +1 -1
  16. package/lib/actions/rollback/index.d.ts +1 -1
  17. package/lib/actions/rollback/index.js +1 -1
  18. package/lib/actions/watch/index.d.ts +3 -3
  19. package/lib/actions/watch/index.js +1 -1
  20. package/lib/api/aws-auth/types.d.ts +1 -1
  21. package/lib/api/aws-auth/types.js +1 -1
  22. package/lib/api/bootstrap/bootstrap-props.d.ts +8 -8
  23. package/lib/api/bootstrap/bootstrap-props.js +1 -1
  24. package/lib/api/cloud-assembly/source-builder.d.ts +2 -2
  25. package/lib/api/cloud-assembly/source-builder.js +1 -1
  26. package/lib/api/deployments/deploy-stack.d.ts +3 -3
  27. package/lib/api/deployments/deploy-stack.js +1 -1
  28. package/lib/api/deployments/deployments.d.ts +3 -3
  29. package/lib/api/deployments/deployments.js +1 -1
  30. package/lib/api/logs-monitor/logs-monitor.d.ts +1 -1
  31. package/lib/api/logs-monitor/logs-monitor.js +1 -1
  32. package/lib/api/notices/filter.js +1 -1
  33. package/lib/api/notices/notices.d.ts +1 -1
  34. package/lib/api/notices/notices.js +1 -1
  35. package/lib/api/notices/web-data-source.d.ts +2 -2
  36. package/lib/api/notices/web-data-source.js +3 -3
  37. package/lib/api/refactoring/cloudformation.d.ts +1 -0
  38. package/lib/api/refactoring/cloudformation.js +1 -1
  39. package/lib/api/refactoring/{execution.d.ts → stack-definitions.d.ts} +0 -4
  40. package/lib/api/refactoring/stack-definitions.js +451 -0
  41. package/lib/api/stack-events/stack-activity-monitor.d.ts +2 -2
  42. package/lib/api/stack-events/stack-activity-monitor.js +1 -1
  43. package/lib/api/tags/index.d.ts +1 -0
  44. package/lib/api/tags/index.js +18 -0
  45. package/lib/api/tags/private/index.d.ts +1 -0
  46. package/lib/api/tags/private/index.js +18 -0
  47. package/lib/api/{tags.d.ts → tags/private/util.d.ts} +1 -4
  48. package/lib/api/{tags.js → tags/private/util.js} +1 -1
  49. package/lib/api/tags/tags.d.ts +4 -0
  50. package/lib/api/tags/tags.js +3 -0
  51. package/lib/index_bg.wasm +0 -0
  52. package/lib/payloads/types.d.ts +1 -1
  53. package/lib/payloads/types.js +1 -1
  54. package/lib/toolkit/non-interactive-io-host.d.ts +2 -2
  55. package/lib/toolkit/non-interactive-io-host.js +1 -1
  56. package/lib/toolkit/toolkit.d.ts +1 -1
  57. package/lib/toolkit/toolkit.js +3 -3
  58. package/package.json +8 -8
  59. package/lib/api/refactoring/execution.js +0 -68
package/package.json CHANGED
@@ -34,7 +34,7 @@
34
34
  "organization": true
35
35
  },
36
36
  "devDependencies": {
37
- "@aws-cdk/aws-service-spec": "^0.1.79",
37
+ "@aws-cdk/aws-service-spec": "^0.1.80",
38
38
  "@aws-cdk/cli-plugin-contract": "2.181.0",
39
39
  "@cdklabs/eslint-plugin": "^1.3.2",
40
40
  "@jest/environment": "^29.7.0",
@@ -50,7 +50,7 @@
50
50
  "@types/split2": "^4.2.3",
51
51
  "@typescript-eslint/eslint-plugin": "^8",
52
52
  "@typescript-eslint/parser": "^8",
53
- "aws-cdk-lib": "^2.199.0",
53
+ "aws-cdk-lib": "^2.200.1",
54
54
  "aws-sdk-client-mock": "^4.1.0",
55
55
  "aws-sdk-client-mock-jest": "^4.1.0",
56
56
  "commit-and-tag-version": "^12",
@@ -59,7 +59,7 @@
59
59
  "eslint-config-prettier": "^10.1.5",
60
60
  "eslint-import-resolver-typescript": "^3.10.1",
61
61
  "eslint-plugin-import": "^2.31.0",
62
- "eslint-plugin-jest": "^28.12.0",
62
+ "eslint-plugin-jest": "^28.13.0",
63
63
  "eslint-plugin-jsdoc": "^50.7.1",
64
64
  "eslint-plugin-prettier": "^5.4.1",
65
65
  "fast-check": "^4.1.1",
@@ -78,7 +78,7 @@
78
78
  "@aws-cdk/cli-plugin-contract": "^2"
79
79
  },
80
80
  "dependencies": {
81
- "@aws-cdk/cloud-assembly-schema": ">=44.2.0",
81
+ "@aws-cdk/cloud-assembly-schema": ">=44.4.0",
82
82
  "@aws-cdk/cloudformation-diff": "^2",
83
83
  "@aws-cdk/cx-api": "^2",
84
84
  "@aws-sdk/client-appsync": "^3",
@@ -102,19 +102,19 @@
102
102
  "@aws-sdk/credential-providers": "^3",
103
103
  "@aws-sdk/ec2-metadata-service": "^3",
104
104
  "@aws-sdk/lib-storage": "^3",
105
- "@smithy/middleware-endpoint": "^4.1.9",
105
+ "@smithy/middleware-endpoint": "^4.1.11",
106
106
  "@smithy/property-provider": "^4.0.4",
107
107
  "@smithy/shared-ini-file-loader": "^4.0.4",
108
108
  "@smithy/util-retry": "^4.0.5",
109
109
  "@smithy/util-waiter": "^4.0.5",
110
110
  "archiver": "^7.0.1",
111
111
  "cdk-assets": "^3",
112
- "cdk-from-cfn": "^0.219.0",
112
+ "cdk-from-cfn": "^0.220.0",
113
113
  "chalk": "^4",
114
114
  "chokidar": "^3",
115
115
  "fs-extra": "^9",
116
116
  "glob": "^11.0.2",
117
- "minimatch": "^10.0.1",
117
+ "minimatch": "10.0.1",
118
118
  "p-limit": "^3",
119
119
  "semver": "^7.7.2",
120
120
  "split2": "^4.2.0",
@@ -135,7 +135,7 @@
135
135
  "publishConfig": {
136
136
  "access": "public"
137
137
  },
138
- "version": "1.1.0",
138
+ "version": "1.1.1",
139
139
  "types": "lib/index.d.ts",
140
140
  "exports": {
141
141
  ".": {
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateStackDefinitions = generateStackDefinitions;
4
- const toolkit_error_1 = require("../../toolkit/toolkit-error");
5
- /**
6
- * Generates a list of stack definitions to be sent to the CloudFormation API
7
- * by applying each mapping to the corresponding stack template(s).
8
- */
9
- function generateStackDefinitions(mappings, deployedStacks, localStacks) {
10
- const localTemplates = Object.fromEntries(localStacks.map((s) => [s.stackName, JSON.parse(JSON.stringify(s.template))]));
11
- const deployedTemplates = Object.fromEntries(deployedStacks.map((s) => [s.stackName, JSON.parse(JSON.stringify(s.template))]));
12
- // First, remove from the local templates any resources that are not in the deployed templates
13
- iterate(localTemplates, (stackName, logicalResourceId) => {
14
- const location = searchLocation(stackName, logicalResourceId, 'destination', 'source');
15
- const deployedResource = deployedStacks.find((s) => s.stackName === location.stackName)?.template
16
- .Resources?.[location.logicalResourceId];
17
- if (deployedResource == null) {
18
- delete localTemplates[stackName].Resources?.[logicalResourceId];
19
- }
20
- });
21
- // Now do the opposite: add to the local templates any resources that are in the deployed templates
22
- iterate(deployedTemplates, (stackName, logicalResourceId, deployedResource) => {
23
- const location = searchLocation(stackName, logicalResourceId, 'source', 'destination');
24
- const resources = Object
25
- .entries(localTemplates)
26
- .find(([name, _]) => name === location.stackName)?.[1].Resources;
27
- const localResource = resources?.[location.logicalResourceId];
28
- if (localResource == null) {
29
- if (localTemplates[stackName]?.Resources) {
30
- localTemplates[stackName].Resources[logicalResourceId] = deployedResource;
31
- }
32
- }
33
- else {
34
- // This is temporary, until CloudFormation supports CDK construct path updates in the refactor API
35
- if (localResource.Metadata != null) {
36
- localResource.Metadata['aws:cdk:path'] = deployedResource.Metadata?.['aws:cdk:path'];
37
- }
38
- }
39
- });
40
- function searchLocation(stackName, logicalResourceId, from, to) {
41
- const mapping = mappings.find((m) => m[from].stack.stackName === stackName && m[from].logicalResourceId === logicalResourceId);
42
- return mapping != null
43
- ? { stackName: mapping[to].stack.stackName, logicalResourceId: mapping[to].logicalResourceId }
44
- : { stackName, logicalResourceId };
45
- }
46
- function iterate(templates, cb) {
47
- Object.entries(templates).forEach(([stackName, template]) => {
48
- Object.entries(template.Resources ?? {}).forEach(([logicalResourceId, resource]) => {
49
- cb(stackName, logicalResourceId, resource);
50
- });
51
- });
52
- }
53
- for (const [stackName, template] of Object.entries(localTemplates)) {
54
- if (Object.keys(template.Resources ?? {}).length === 0) {
55
- throw new toolkit_error_1.ToolkitError(`Stack ${stackName} has no resources after refactor. You must add a resource to this stack. This resource can be a simple one, like a waitCondition resource type.`);
56
- }
57
- }
58
- return Object.entries(localTemplates)
59
- .filter(([stackName, _]) => mappings.some((m) => {
60
- // Only send templates for stacks that are part of the mappings
61
- return m.source.stack.stackName === stackName || m.destination.stack.stackName === stackName;
62
- }))
63
- .map(([stackName, template]) => ({
64
- StackName: stackName,
65
- TemplateBody: JSON.stringify(template),
66
- }));
67
- }
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXhlY3V0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBYUEsNERBb0ZDO0FBMUZELCtEQUEyRDtBQUUzRDs7O0dBR0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsUUFBMkIsRUFDM0IsY0FBcUMsRUFDckMsV0FBa0M7SUFFbEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDdkMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQTJCLENBQUMsQ0FBQyxDQUN4RyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUMxQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBMkIsQ0FBQyxDQUFDLENBQzNHLENBQUM7SUFFRiw4RkFBOEY7SUFDOUYsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXZGLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUTthQUM5RixTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENB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Q25FLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksNEJBQVksQ0FDcEIsU0FBUyxTQUFTLGlKQUFpSixDQUNwSyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2xCLCtEQUErRDtRQUMvRCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUMvRixDQUFDLENBQUMsQ0FDSDtTQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztLQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0YWNrRGVmaW5pdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7XG4gIENsb3VkRm9ybWF0aW9uUmVzb3VyY2UsXG4gIENsb3VkRm9ybWF0aW9uU3RhY2ssXG4gIENsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4gIFJlc291cmNlTWFwcGluZyxcbn0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGxpc3Qgb2Ygc3RhY2sgZGVmaW5pdGlvbnMgdG8gYmUgc2VudCB0byB0aGUgQ2xvdWRGb3JtYXRpb24gQVBJXG4gKiBieSBhcHBseWluZyBlYWNoIG1hcHBpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RhY2sgdGVtcGxhdGUocykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YWNrRGVmaW5pdGlvbnMoXG4gIG1hcHBpbmdzOiBSZXNvdXJjZU1hcHBpbmdbXSxcbiAgZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbik6IFN0YWNrRGVmaW5pdGlvbltdIHtcbiAgY29uc3QgbG9jYWxUZW1wbGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgbG9jYWxTdGFja3MubWFwKChzKSA9PiBbcy5zdGFja05hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocy50ZW1wbGF0ZSkpIGFzIENsb3VkRm9ybWF0aW9uVGVtcGxhdGVdKSxcbiAgKTtcbiAgY29uc3QgZGVwbG95ZWRUZW1wbGF0ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgZGVwbG95ZWRTdGFja3MubWFwKChzKSA9PiBbcy5zdGFja05hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocy50ZW1wbGF0ZSkpIGFzIENsb3VkRm9ybWF0aW9uVGVtcGxhdGVdKSxcbiAgKTtcblxuICAvLyBGaXJzdCwgcmVtb3ZlIGZyb20gdGhlIGxvY2FsIHRlbXBsYXRlcyBhbnkgcmVzb3VyY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZGVwbG95ZWQgdGVtcGxhdGVzXG4gIGl0ZXJhdGUobG9jYWxUZW1wbGF0ZXMsIChzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBzZWFyY2hMb2NhdGlvbihzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkLCAnZGVzdGluYXRpb24nLCAnc291cmNlJyk7XG5cbiAgICBjb25zdCBkZXBsb3llZFJlc291cmNlID0gZGVwbG95ZWRTdGFja3MuZmluZCgocykgPT4gcy5zdGFja05hbWUgPT09IGxvY2F0aW9uLnN0YWNrTmFtZSk/LnRlbXBsYXRlXG4gICAgICAuUmVzb3VyY2VzPy5bbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWRdO1xuXG4gICAgaWYgKGRlcGxveWVkUmVzb3VyY2UgPT0gbnVsbCkge1xuICAgICAgZGVsZXRlIGxvY2FsVGVtcGxhdGVzW3N0YWNrTmFtZV0uUmVzb3VyY2VzPy5bbG9naWNhbFJlc291cmNlSWRdO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IGRvIHRoZSBvcHBvc2l0ZTogYWRkIHRvIHRoZSBsb2NhbCB0ZW1wbGF0ZXMgYW55IHJlc291cmNlcyB0aGF0IGFyZSBpbiB0aGUgZGVwbG95ZWQgdGVtcGxhdGVzXG4gIGl0ZXJhdGUoZGVwbG95ZWRUZW1wbGF0ZXMsIChzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkLCBkZXBsb3llZFJlc291cmNlKSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSBzZWFyY2hMb2NhdGlvbihzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkLCAnc291cmNlJywgJ2Rlc3RpbmF0aW9uJyk7XG5cbiAgICBjb25zdCByZXNvdXJjZXMgPSBPYmplY3RcbiAgICAgIC5lbnRyaWVzKGxvY2FsVGVtcGxhdGVzKVxuICAgICAgLmZpbmQoKFtuYW1lLCBfXSkgPT4gbmFtZSA9PT0gbG9jYXRpb24uc3RhY2tOYW1lKT8uWzFdLlJlc291cmNlcztcbiAgICBjb25zdCBsb2NhbFJlc291cmNlID0gcmVzb3VyY2VzPy5bbG9jYXRpb24ubG9naWNhbFJlc291cmNlSWRdO1xuXG4gICAgaWYgKGxvY2FsUmVzb3VyY2UgPT0gbnVsbCkge1xuICAgICAgaWYgKGxvY2FsVGVtcGxhdGVzW3N0YWNrTmFtZV0/LlJlc291cmNlcykge1xuICAgICAgICBsb2NhbFRlbXBsYXRlc1tzdGFja05hbWVdLlJlc291cmNlc1tsb2dpY2FsUmVzb3VyY2VJZF0gPSBkZXBsb3llZFJlc291cmNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSwgdW50aWwgQ2xvdWRGb3JtYXRpb24gc3VwcG9ydHMgQ0RLIGNvbnN0cnVjdCBwYXRoIHVwZGF0ZXMgaW4gdGhlIHJlZmFjdG9yIEFQSVxuICAgICAgaWYgKGxvY2FsUmVzb3VyY2UuTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgICAgICBsb2NhbFJlc291cmNlLk1ldGFkYXRhWydhd3M6Y2RrOnBhdGgnXSA9IGRlcGxveWVkUmVzb3VyY2UuTWV0YWRhdGE/LlsnYXdzOmNkazpwYXRoJ107XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBzZWFyY2hMb2NhdGlvbihzdGFja05hbWU6IHN0cmluZywgbG9naWNhbFJlc291cmNlSWQ6IHN0cmluZywgZnJvbTogJ3NvdXJjZScgfCAnZGVzdGluYXRpb24nLCB0bzogJ3NvdXJjZScgfCAnZGVzdGluYXRpb24nKSB7XG4gICAgY29uc3QgbWFwcGluZyA9IG1hcHBpbmdzLmZpbmQoXG4gICAgICAobSkgPT4gbVtmcm9tXS5zdGFjay5zdGFja05hbWUgPT09IHN0YWNrTmFtZSAmJiBtW2Zyb21dLmxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsUmVzb3VyY2VJZCxcbiAgICApO1xuICAgIHJldHVybiBtYXBwaW5nICE9IG51bGxcbiAgICAgID8geyBzdGFja05hbWU6IG1hcHBpbmdbdG9dLnN0YWNrLnN0YWNrTmFtZSwgbG9naWNhbFJlc291cmNlSWQ6IG1hcHBpbmdbdG9dLmxvZ2ljYWxSZXNvdXJjZUlkIH1cbiAgICAgIDogeyBzdGFja05hbWUsIGxvZ2ljYWxSZXNvdXJjZUlkIH07XG4gIH1cblxuICBmdW5jdGlvbiBpdGVyYXRlKFxuICAgIHRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZT4sXG4gICAgY2I6IChzdGFja05hbWU6IHN0cmluZywgbG9naWNhbFJlc291cmNlSWQ6IHN0cmluZywgcmVzb3VyY2U6IENsb3VkRm9ybWF0aW9uUmVzb3VyY2UpID0+IHZvaWQsXG4gICkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlcykuZm9yRWFjaCgoW3N0YWNrTmFtZSwgdGVtcGxhdGVdKSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZS5SZXNvdXJjZXMgPz8ge30pLmZvckVhY2goKFtsb2dpY2FsUmVzb3VyY2VJZCwgcmVzb3VyY2VdKSA9PiB7XG4gICAgICAgIGNiKHN0YWNrTmFtZSwgbG9naWNhbFJlc291cmNlSWQsIHJlc291cmNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBbc3RhY2tOYW1lLCB0ZW1wbGF0ZV0gb2YgT2JqZWN0LmVudHJpZXMobG9jYWxUZW1wbGF0ZXMpKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICBgU3RhY2sgJHtzdGFja05hbWV9IGhhcyBubyByZXNvdXJjZXMgYWZ0ZXIgcmVmYWN0b3IuIFlvdSBtdXN0IGFkZCBhIHJlc291cmNlIHRvIHRoaXMgc3RhY2suIFRoaXMgcmVzb3VyY2UgY2FuIGJlIGEgc2ltcGxlIG9uZSwgbGlrZSBhIHdhaXRDb25kaXRpb24gcmVzb3VyY2UgdHlwZS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMobG9jYWxUZW1wbGF0ZXMpXG4gICAgLmZpbHRlcigoW3N0YWNrTmFtZSwgX10pID0+XG4gICAgICBtYXBwaW5ncy5zb21lKChtKSA9PiB7XG4gICAgICAgIC8vIE9ubHkgc2VuZCB0ZW1wbGF0ZXMgZm9yIHN0YWNrcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBtYXBwaW5nc1xuICAgICAgICByZXR1cm4gbS5zb3VyY2Uuc3RhY2suc3RhY2tOYW1lID09PSBzdGFja05hbWUgfHwgbS5kZXN0aW5hdGlvbi5zdGFjay5zdGFja05hbWUgPT09IHN0YWNrTmFtZTtcbiAgICAgIH0pLFxuICAgIClcbiAgICAubWFwKChbc3RhY2tOYW1lLCB0ZW1wbGF0ZV0pID0+ICh7XG4gICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICAgIH0pKTtcbn1cbiJdfQ==