@aws-cdk/toolkit-lib 1.25.0 → 1.25.2

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 (34) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/diff/private/helpers.js +3 -3
  4. package/lib/api/aws-auth/sdk.d.ts +16 -0
  5. package/lib/api/aws-auth/sdk.js +22 -3
  6. package/lib/api/deployments/cfn-api.d.ts +10 -10
  7. package/lib/api/deployments/cfn-api.js +51 -43
  8. package/lib/api/deployments/deploy-stack.js +51 -48
  9. package/lib/api/deployments/deployments.d.ts +9 -1
  10. package/lib/api/deployments/deployments.js +20 -12
  11. package/lib/api/diagnosing/{early-validation.d.ts → changeset-error-fetcher.d.ts} +10 -8
  12. package/lib/api/diagnosing/changeset-error-fetcher.js +83 -0
  13. package/lib/api/diagnosing/diagnosis-formatting.js +7 -6
  14. package/lib/api/diagnosing/stack-diagnoser.d.ts +7 -0
  15. package/lib/api/diagnosing/stack-diagnoser.js +64 -48
  16. package/lib/api/diagnosing/tree-builder.d.ts +2 -1
  17. package/lib/api/diagnosing/tree-builder.js +5 -5
  18. package/lib/api/diagnosing/tree.d.ts +10 -4
  19. package/lib/api/diagnosing/tree.js +23 -12
  20. package/lib/api/io/private/span.d.ts +1 -1
  21. package/lib/api/io/private/span.js +3 -3
  22. package/lib/api/logs-monitor/logs-monitor.js +4 -4
  23. package/lib/api/stack-events/stack-activity-monitor.d.ts +4 -4
  24. package/lib/api/stack-events/stack-activity-monitor.js +14 -13
  25. package/lib/api/stack-events/stack-event-poller.d.ts +1 -1
  26. package/lib/api/stack-events/stack-event-poller.js +5 -4
  27. package/lib/api/stack-events/stack-progress-monitor.d.ts +2 -2
  28. package/lib/api/stack-events/stack-progress-monitor.js +8 -2
  29. package/lib/index_bg.wasm +0 -0
  30. package/lib/toolkit/toolkit.js +2 -2
  31. package/lib/util/cloudformation.d.ts +14 -0
  32. package/lib/util/cloudformation.js +27 -1
  33. package/package.json +11 -12
  34. package/lib/api/diagnosing/early-validation.js +0 -81
@@ -31,4 +31,18 @@ export declare function isRootStackEvent(event: StackEvent): boolean;
31
31
  * @returns the determined width
32
32
  */
33
33
  export declare function maxResourceTypeLength(template: any, startWidth?: number): number;
34
+ /**
35
+ * Extract the stack name from a CloudFormation stack ARN.
36
+ * If the input is already a stack name (not an ARN), returns it as-is.
37
+ *
38
+ * ARN format: arn:<partition>:cloudformation:<region>:<account>:stack/<stack-name>/<unique-id>
39
+ */
40
+ export declare function stackNameFromArn(stackNameOrArn: string): string;
41
+ /**
42
+ * Extract the change set name from a CloudFormation change set ARN.
43
+ * If the input is already a change set name (not an ARN), returns it as-is.
44
+ *
45
+ * ARN format: arn:<partition>:cloudformation:<region>:<account>:changeSet/<changeset-name>/<unique-id>
46
+ */
47
+ export declare function changeSetNameFromArn(changeSetNameOrArn: string): string;
34
48
  //# sourceMappingURL=cloudformation.d.ts.map
@@ -6,6 +6,8 @@ exports.isCancellationEvent = isCancellationEvent;
6
6
  exports.isRegularResourceEvent = isRegularResourceEvent;
7
7
  exports.isRootStackEvent = isRootStackEvent;
8
8
  exports.maxResourceTypeLength = maxResourceTypeLength;
9
+ exports.stackNameFromArn = stackNameFromArn;
10
+ exports.changeSetNameFromArn = changeSetNameFromArn;
9
11
  /**
10
12
  * Validate SNS topic arn
11
13
  */
@@ -59,4 +61,28 @@ function maxResourceTypeLength(template, startWidth = 'AWS::CloudFormation::Stac
59
61
  }
60
62
  return maxWidth;
61
63
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtEQUVDO0FBS0Qsb0NBR0M7QUFTRCxrREFFQztBQUtELHdEQUVDO0FBS0QsNENBRUM7QUFTRCxzREFVQztBQXpERDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEdBQVc7SUFDN0MsT0FBTyxpREFBaUQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEtBQWlCO0lBQzVDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO0lBQzFDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLEtBQUssc0JBQXNCLElBQUksTUFBTSxLQUFLLDZCQUE2QixDQUFDO0FBQ3JILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFpQjtJQUNuRCxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxLQUFpQjtJQUN0RCxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssNEJBQTRCLENBQUM7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBaUI7SUFDaEQsT0FBTyxLQUFLLENBQUMsWUFBWSxLQUFLLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQzNHLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFhLEVBQUUsVUFBVSxHQUFHLDRCQUE0QixDQUFDLE1BQU07SUFDbkcsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6RCxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDMUIsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzNCLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3RhY2tFdmVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5cbi8qKlxuICogVmFsaWRhdGUgU05TIHRvcGljIGFyblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTbnNUb3BpY0Fybihhcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15hcm46YXdzOnNuczpbYS16MC05XFwtXSs6WzAtOV0rOlthLXowLTlcXC1cXF9dKyQvaS50ZXN0KGFybik7XG59XG5cbi8qKlxuICogRG9lcyBhIFN0YWNrIEV2ZW50IGhhdmUgYW4gZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiB0aGUgc3RhdHVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvckV2ZW50KGV2ZW50OiBTdGFja0V2ZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHN0YXR1cyA9IGV2ZW50LlJlc291cmNlU3RhdHVzID8/ICcnO1xuICByZXR1cm4gc3RhdHVzLmVuZHNXaXRoKCdfRkFJTEVEJykgfHwgc3RhdHVzID09PSAnUk9MTEJBQ0tfSU5fUFJPR1JFU1MnIHx8IHN0YXR1cyA9PT0gJ1VQREFURV9ST0xMQkFDS19JTl9QUk9HUkVTUyc7XG59XG5cbi8qKlxuICogSXMgdGhpcyBhIGZhaWx1cmUgY2F1c2VkIGJ5IENsb3VkRm9ybWF0aW9uIGNhbmNlbGxpbmcgdGhlIGRlcGxveW1lbnQ/XG4gKlxuICogVGhpcyBoYXBwZW5zIGJlY2F1c2Ugc29tZSBvdGhlciByZXNvdXJjZSBmYWlsZWQgYW5kIENsb3VkRm9ybWF0aW9uIGRlY2lkZWQgdG8gc3RvcCB3YWl0aW5nIGZvciB0aGlzIG9uZS5cbiAqXG4gKiBOZXZlciByZXR1cm5zIHRydWUgZm9yIHRoZSBzdGFjayBldmVudCBpdHNlbGYsIG9ubHkgZm9yIHJlc291cmNlIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGF0aW9uRXZlbnQoZXZlbnQ6IFN0YWNrRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChldmVudC5SZXNvdXJjZVN0YXR1c1JlYXNvbiA/PyAnJykuaW5kZXhPZignY2FuY2VsbGVkJykgPiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBldmVudCBpcyBhYm91dCBhIHJlZ3VsYXIgcmVzb3VyY2UgKG5vdCB0aGUgcm9vdCBzdGFjayBhbmQgbm90IGEgbmVzdGVkIHN0YWNrIHJlc291cmNlKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWd1bGFyUmVzb3VyY2VFdmVudChldmVudDogU3RhY2tFdmVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXZlbnQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciB0aGlzIGV2ZW50IGlzIGFib3V0IHRoZSByb290IHN0YWNrIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUm9vdFN0YWNrRXZlbnQoZXZlbnQ6IFN0YWNrRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGV2ZW50LlJlc291cmNlVHlwZSA9PT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJyAmJiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgPT09IGV2ZW50LlN0YWNrSWQ7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBtYXhpbWFsIGxlbmd0aCBvZiBhbGwgcmVzb3VyY2UgdHlwZXMgZm9yIGEgZ2l2ZW4gdGVtcGxhdGUuXG4gKlxuICogQHBhcmFtIHRlbXBsYXRlIC0gdGhlIHN0YWNrIHRlbXBsYXRlIHRvIGFuYWx5emVcbiAqIEBwYXJhbSBzdGFydFdpZHRoIC0gdGhlIGluaXRpYWwgd2lkdGggdG8gc3RhcnQgd2l0aC4gRGVmYXVsdHMgdG8gdGhlIGxlbmd0aCBvZiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snLlxuICogQHJldHVybnMgdGhlIGRldGVybWluZWQgd2lkdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heFJlc291cmNlVHlwZUxlbmd0aCh0ZW1wbGF0ZTogYW55LCBzdGFydFdpZHRoID0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJy5sZW5ndGgpOiBudW1iZXIge1xuICBjb25zdCByZXNvdXJjZXMgPSAodGVtcGxhdGUgJiYgdGVtcGxhdGUuUmVzb3VyY2VzKSB8fCB7fTtcbiAgbGV0IG1heFdpZHRoID0gc3RhcnRXaWR0aDtcbiAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhyZXNvdXJjZXMpKSB7XG4gICAgY29uc3QgdHlwZSA9IHJlc291cmNlc1tpZF0uVHlwZSB8fCAnJztcbiAgICBpZiAodHlwZS5sZW5ndGggPiBtYXhXaWR0aCkge1xuICAgICAgbWF4V2lkdGggPSB0eXBlLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1heFdpZHRoO1xufVxuIl19
64
+ /**
65
+ * Extract the stack name from a CloudFormation stack ARN.
66
+ * If the input is already a stack name (not an ARN), returns it as-is.
67
+ *
68
+ * ARN format: arn:<partition>:cloudformation:<region>:<account>:stack/<stack-name>/<unique-id>
69
+ */
70
+ function stackNameFromArn(stackNameOrArn) {
71
+ if (!stackNameOrArn.startsWith('arn:')) {
72
+ return stackNameOrArn;
73
+ }
74
+ return stackNameOrArn.slice(stackNameOrArn.indexOf('/') + 1, stackNameOrArn.lastIndexOf('/'));
75
+ }
76
+ /**
77
+ * Extract the change set name from a CloudFormation change set ARN.
78
+ * If the input is already a change set name (not an ARN), returns it as-is.
79
+ *
80
+ * ARN format: arn:<partition>:cloudformation:<region>:<account>:changeSet/<changeset-name>/<unique-id>
81
+ */
82
+ function changeSetNameFromArn(changeSetNameOrArn) {
83
+ if (!changeSetNameOrArn.startsWith('arn:')) {
84
+ return changeSetNameOrArn;
85
+ }
86
+ return changeSetNameOrArn.slice(changeSetNameOrArn.indexOf('/') + 1, changeSetNameOrArn.lastIndexOf('/'));
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRmb3JtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtEQUVDO0FBS0Qsb0NBR0M7QUFTRCxrREFFQztBQUtELHdEQUVDO0FBS0QsNENBRUM7QUFTRCxzREFVQztBQVFELDRDQUtDO0FBUUQsb0RBS0M7QUFuRkQ7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFXO0lBQzdDLE9BQU8saURBQWlELENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUFpQjtJQUM1QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxLQUFLLHNCQUFzQixJQUFJLE1BQU0sS0FBSyw2QkFBNkIsQ0FBQztBQUNySCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsS0FBaUI7SUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsS0FBaUI7SUFDdEQsT0FBTyxLQUFLLENBQUMsWUFBWSxLQUFLLDRCQUE0QixDQUFDO0FBQzdELENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEtBQWlCO0lBQ2hELE9BQU8sS0FBSyxDQUFDLFlBQVksS0FBSyw0QkFBNEIsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUMzRyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsUUFBYSxFQUFFLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxNQUFNO0lBQ25HLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekQsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzFCLEtBQUssTUFBTSxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMzQixRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLGNBQXNCO0lBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdkMsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsa0JBQTBCO0lBQzdELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0YWNrRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuXG4vKipcbiAqIFZhbGlkYXRlIFNOUyB0b3BpYyBhcm5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU25zVG9waWNBcm4oYXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eYXJuOmF3czpzbnM6W2EtejAtOVxcLV0rOlswLTldKzpbYS16MC05XFwtXFxfXSskL2kudGVzdChhcm4pO1xufVxuXG4vKipcbiAqIERvZXMgYSBTdGFjayBFdmVudCBoYXZlIGFuIGVycm9yIG1lc3NhZ2UgYmFzZWQgb24gdGhlIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3JFdmVudChldmVudDogU3RhY2tFdmVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBzdGF0dXMgPSBldmVudC5SZXNvdXJjZVN0YXR1cyA/PyAnJztcbiAgcmV0dXJuIHN0YXR1cy5lbmRzV2l0aCgnX0ZBSUxFRCcpIHx8IHN0YXR1cyA9PT0gJ1JPTExCQUNLX0lOX1BST0dSRVNTJyB8fCBzdGF0dXMgPT09ICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnO1xufVxuXG4vKipcbiAqIElzIHRoaXMgYSBmYWlsdXJlIGNhdXNlZCBieSBDbG91ZEZvcm1hdGlvbiBjYW5jZWxsaW5nIHRoZSBkZXBsb3ltZW50P1xuICpcbiAqIFRoaXMgaGFwcGVucyBiZWNhdXNlIHNvbWUgb3RoZXIgcmVzb3VyY2UgZmFpbGVkIGFuZCBDbG91ZEZvcm1hdGlvbiBkZWNpZGVkIHRvIHN0b3Agd2FpdGluZyBmb3IgdGhpcyBvbmUuXG4gKlxuICogTmV2ZXIgcmV0dXJucyB0cnVlIGZvciB0aGUgc3RhY2sgZXZlbnQgaXRzZWxmLCBvbmx5IGZvciByZXNvdXJjZSBldmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbmNlbGxhdGlvbkV2ZW50KGV2ZW50OiBTdGFja0V2ZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAoZXZlbnQuUmVzb3VyY2VTdGF0dXNSZWFzb24gPz8gJycpLmluZGV4T2YoJ2NhbmNlbGxlZCcpID4gLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZXZlbnQgaXMgYWJvdXQgYSByZWd1bGFyIHJlc291cmNlIChub3QgdGhlIHJvb3Qgc3RhY2sgYW5kIG5vdCBhIG5lc3RlZCBzdGFjayByZXNvdXJjZSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVndWxhclJlc291cmNlRXZlbnQoZXZlbnQ6IFN0YWNrRXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGV2ZW50LlJlc291cmNlVHlwZSAhPT0gJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBldmVudCBpcyBhYm91dCB0aGUgcm9vdCBzdGFjayBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Jvb3RTdGFja0V2ZW50KGV2ZW50OiBTdGFja0V2ZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiBldmVudC5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycgJiYgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID09PSBldmVudC5TdGFja0lkO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbWF4aW1hbCBsZW5ndGggb2YgYWxsIHJlc291cmNlIHR5cGVzIGZvciBhIGdpdmVuIHRlbXBsYXRlLlxuICpcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSBzdGFjayB0ZW1wbGF0ZSB0byBhbmFseXplXG4gKiBAcGFyYW0gc3RhcnRXaWR0aCAtIHRoZSBpbml0aWFsIHdpZHRoIHRvIHN0YXJ0IHdpdGguIERlZmF1bHRzIHRvIHRoZSBsZW5ndGggb2YgJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlN0YWNrJy5cbiAqIEByZXR1cm5zIHRoZSBkZXRlcm1pbmVkIHdpZHRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhSZXNvdXJjZVR5cGVMZW5ndGgodGVtcGxhdGU6IGFueSwgc3RhcnRXaWR0aCA9ICdBV1M6OkNsb3VkRm9ybWF0aW9uOjpTdGFjaycubGVuZ3RoKTogbnVtYmVyIHtcbiAgY29uc3QgcmVzb3VyY2VzID0gKHRlbXBsYXRlICYmIHRlbXBsYXRlLlJlc291cmNlcykgfHwge307XG4gIGxldCBtYXhXaWR0aCA9IHN0YXJ0V2lkdGg7XG4gIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMocmVzb3VyY2VzKSkge1xuICAgIGNvbnN0IHR5cGUgPSByZXNvdXJjZXNbaWRdLlR5cGUgfHwgJyc7XG4gICAgaWYgKHR5cGUubGVuZ3RoID4gbWF4V2lkdGgpIHtcbiAgICAgIG1heFdpZHRoID0gdHlwZS5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXhXaWR0aDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBzdGFjayBuYW1lIGZyb20gYSBDbG91ZEZvcm1hdGlvbiBzdGFjayBBUk4uXG4gKiBJZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBhIHN0YWNrIG5hbWUgKG5vdCBhbiBBUk4pLCByZXR1cm5zIGl0IGFzLWlzLlxuICpcbiAqIEFSTiBmb3JtYXQ6IGFybjo8cGFydGl0aW9uPjpjbG91ZGZvcm1hdGlvbjo8cmVnaW9uPjo8YWNjb3VudD46c3RhY2svPHN0YWNrLW5hbWU+Lzx1bmlxdWUtaWQ+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFja05hbWVGcm9tQXJuKHN0YWNrTmFtZU9yQXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXN0YWNrTmFtZU9yQXJuLnN0YXJ0c1dpdGgoJ2FybjonKSkge1xuICAgIHJldHVybiBzdGFja05hbWVPckFybjtcbiAgfVxuICByZXR1cm4gc3RhY2tOYW1lT3JBcm4uc2xpY2Uoc3RhY2tOYW1lT3JBcm4uaW5kZXhPZignLycpICsgMSwgc3RhY2tOYW1lT3JBcm4ubGFzdEluZGV4T2YoJy8nKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgY2hhbmdlIHNldCBuYW1lIGZyb20gYSBDbG91ZEZvcm1hdGlvbiBjaGFuZ2Ugc2V0IEFSTi5cbiAqIElmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGEgY2hhbmdlIHNldCBuYW1lIChub3QgYW4gQVJOKSwgcmV0dXJucyBpdCBhcy1pcy5cbiAqXG4gKiBBUk4gZm9ybWF0OiBhcm46PHBhcnRpdGlvbj46Y2xvdWRmb3JtYXRpb246PHJlZ2lvbj46PGFjY291bnQ+OmNoYW5nZVNldC88Y2hhbmdlc2V0LW5hbWU+Lzx1bmlxdWUtaWQ+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VTZXROYW1lRnJvbUFybihjaGFuZ2VTZXROYW1lT3JBcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghY2hhbmdlU2V0TmFtZU9yQXJuLnN0YXJ0c1dpdGgoJ2FybjonKSkge1xuICAgIHJldHVybiBjaGFuZ2VTZXROYW1lT3JBcm47XG4gIH1cbiAgcmV0dXJuIGNoYW5nZVNldE5hbWVPckFybi5zbGljZShjaGFuZ2VTZXROYW1lT3JBcm4uaW5kZXhPZignLycpICsgMSwgY2hhbmdlU2V0TmFtZU9yQXJuLmxhc3RJbmRleE9mKCcvJykpO1xufVxuIl19
package/package.json CHANGED
@@ -35,14 +35,14 @@
35
35
  "organization": true
36
36
  },
37
37
  "devDependencies": {
38
- "@aws-cdk/aws-service-spec": "^0.1.175",
38
+ "@aws-cdk/aws-service-spec": "^0.1.180",
39
39
  "@aws-cdk/cli-plugin-contract": "2.182.2",
40
- "@cdklabs/eslint-plugin": "^2.0.2",
40
+ "@cdklabs/eslint-plugin": "^2.0.4",
41
41
  "@jest/environment": "^29.7.0",
42
42
  "@jest/globals": "^29.7.0",
43
43
  "@jest/types": "^29.6.3",
44
44
  "@microsoft/api-extractor": "^7.58.7",
45
- "@smithy/util-stream": "^4.5.25",
45
+ "@smithy/util-stream": "^4.6.0",
46
46
  "@stylistic/eslint-plugin": "^3",
47
47
  "@types/fs-extra": "^11",
48
48
  "@types/jest": "^29.5.14",
@@ -52,7 +52,7 @@
52
52
  "@types/split2": "^4.2.3",
53
53
  "@typescript-eslint/eslint-plugin": "^8",
54
54
  "@typescript-eslint/parser": "^8",
55
- "aws-cdk-lib": "2.250.0",
55
+ "aws-cdk-lib": "2.253.1",
56
56
  "aws-sdk-client-mock": "^4.1.0",
57
57
  "aws-sdk-client-mock-jest": "^4.1.0",
58
58
  "commit-and-tag-version": "^12",
@@ -71,9 +71,9 @@
71
71
  "jest-when": "^3.7.0",
72
72
  "license-checker": "^25.0.1",
73
73
  "nock": "13",
74
- "nx": "^22.6.5",
74
+ "nx": "^22.7.1",
75
75
  "prettier": "^2.8",
76
- "projen": "^0.99.52",
76
+ "projen": "^0.99.61",
77
77
  "ts-jest": "^29.4.9",
78
78
  "tsx": "^4.21.0",
79
79
  "typescript": "5.9"
@@ -83,8 +83,8 @@
83
83
  },
84
84
  "dependencies": {
85
85
  "@aws-cdk/cdk-assets-lib": "^1",
86
- "@aws-cdk/cloud-assembly-api": "2.2.2",
87
- "@aws-cdk/cloud-assembly-schema": ">=53.19.0",
86
+ "@aws-cdk/cloud-assembly-api": "2.2.3",
87
+ "@aws-cdk/cloud-assembly-schema": ">=53.24.0",
88
88
  "@aws-cdk/cloudformation-diff": "^2",
89
89
  "@aws-cdk/cx-api": "^2",
90
90
  "@aws-sdk/client-appsync": "^3",
@@ -115,7 +115,7 @@
115
115
  "@smithy/util-retry": "^4",
116
116
  "@smithy/util-waiter": "^4",
117
117
  "archiver": "^7.0.1",
118
- "cdk-from-cfn": "^0.297.0",
118
+ "cdk-from-cfn": "^0.299.0",
119
119
  "chalk": "^4",
120
120
  "chokidar": "^4",
121
121
  "fast-deep-equal": "^3.1.3",
@@ -123,9 +123,8 @@
123
123
  "fs-extra": "^11",
124
124
  "p-limit": "^3",
125
125
  "picomatch": "^4",
126
- "semver": "^7.7.4",
126
+ "semver": "^7.8.0",
127
127
  "split2": "^4.2.0",
128
- "uuid": "^11.1.0",
129
128
  "wrap-ansi": "^7",
130
129
  "yaml": "^1"
131
130
  },
@@ -149,7 +148,7 @@
149
148
  "publishConfig": {
150
149
  "access": "public"
151
150
  },
152
- "version": "1.25.0",
151
+ "version": "1.25.2",
153
152
  "packageManager": "yarn@4.13.0",
154
153
  "types": "lib/index.d.ts",
155
154
  "exports": {
@@ -1,81 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EarlyValidationReporter = void 0;
4
- /**
5
- * A ValidationReporter that checks for early validation errors right after
6
- * creating the change set.
7
- */
8
- class EarlyValidationReporter {
9
- sdk;
10
- envResources;
11
- constructor(sdk, envResources) {
12
- this.sdk = sdk;
13
- this.envResources = envResources;
14
- }
15
- /**
16
- * Fetch the details and return them as a string.
17
- *
18
- * If the details could not be fetched, log that as a warning using the IoHelper.
19
- */
20
- async fetchDetailsString(changeSetName, stackName, ioHelper) {
21
- const summary = `Early validation failed for stack '${stackName}' (ChangeSet '${changeSetName}')`;
22
- const result = await this.fetchDetailsStructured(changeSetName, stackName);
23
- switch (result.type) {
24
- case 'could-not-check':
25
- await ioHelper.defaults.warn(result.message);
26
- return summary;
27
- case 'resource-errors':
28
- if (result.errors.length === 0) {
29
- return summary;
30
- }
31
- return [
32
- `${summary}:`,
33
- ...result.errors.map(e => ` - ${e.message} (at ${e.documentPath})`),
34
- ].join('\n');
35
- }
36
- }
37
- /**
38
- * Fetch the details and return them in structured form.
39
- */
40
- async fetchDetailsStructured(changeSetName, stackName) {
41
- let operationEvents = [];
42
- try {
43
- operationEvents = await this.getFailedEvents(stackName, changeSetName);
44
- }
45
- catch (error) {
46
- let currentVersion = undefined;
47
- try {
48
- currentVersion = (await this.envResources?.lookupToolkit())?.version;
49
- }
50
- catch (e) {
51
- }
52
- return {
53
- type: 'could-not-check',
54
- message: `Could not retrieve additional details about early validation errors (${error}). Make sure you have permissions to call the DescribeEvents API, or re-bootstrap your environment by running 'cdk bootstrap' to update the Bootstrap CDK Toolkit stack. Bootstrap toolkit stack version 30 or later is needed; current version: ${currentVersion ?? 'unknown'}.`,
55
- };
56
- }
57
- return {
58
- type: 'resource-errors',
59
- errors: operationEvents.map((ev) => ({
60
- eventType: ev.EventType ?? '',
61
- logicalId: ev.LogicalResourceId ?? '',
62
- message: ev.ValidationStatusReason ?? '',
63
- physicalId: ev.PhysicalResourceId ? ev.PhysicalResourceId : undefined,
64
- validationName: ev.ValidationName ?? '',
65
- documentPath: ev.ValidationPath ?? '',
66
- resourceType: ev.ResourceType,
67
- })),
68
- };
69
- }
70
- async getFailedEvents(stackName, changeSetName) {
71
- return this.sdk.cloudFormation().paginatedDescribeEvents({
72
- StackName: stackName,
73
- ChangeSetName: changeSetName,
74
- Filters: {
75
- FailedEvents: true,
76
- },
77
- });
78
- }
79
- }
80
- exports.EarlyValidationReporter = EarlyValidationReporter;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybHktdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVhcmx5LXZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0E7OztHQUdHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDTDtJQUEyQjtJQUF4RCxZQUE2QixHQUFRLEVBQW1CLFlBQW1DO1FBQTlELFFBQUcsR0FBSCxHQUFHLENBQUs7UUFBbUIsaUJBQVksR0FBWixZQUFZLENBQXVCO0lBQzNGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLGtCQUFrQixDQUFDLGFBQXFCLEVBQUUsU0FBaUIsRUFBRSxRQUFrQjtRQUMxRixNQUFNLE9BQU8sR0FBRyxzQ0FBc0MsU0FBUyxpQkFBaUIsYUFBYSxJQUFJLENBQUM7UUFDbEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTNFLFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssaUJBQWlCO2dCQUNwQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxPQUFPLENBQUM7WUFFakIsS0FBSyxpQkFBaUI7Z0JBQ3BCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQy9CLE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDO2dCQUNELE9BQU87b0JBQ0wsR0FBRyxPQUFPLEdBQUc7b0JBQ2IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUM7aUJBQ3JFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsYUFBcUIsRUFBRSxTQUFpQjtRQUMxRSxJQUFJLGVBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQztZQUNILGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxjQUFjLEdBQXVCLFNBQVMsQ0FBQztZQUNuRCxJQUFJLENBQUM7Z0JBQ0gsY0FBYyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQ3ZFLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2IsQ0FBQztZQUVELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsT0FBTyxFQUFFLHdFQUF3RSxLQUFLLG9QQUFvUCxjQUFjLElBQUksU0FBUyxHQUFHO2FBQ3pXLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsTUFBTSxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQzdCLFNBQVMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLElBQUksRUFBRTtnQkFDckMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsSUFBSSxFQUFFO2dCQUN4QyxVQUFVLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3JFLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxJQUFJLEVBQUU7Z0JBQ3ZDLFlBQVksRUFBRSxFQUFFLENBQUMsY0FBYyxJQUFJLEVBQUU7Z0JBQ3JDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWTthQUNFLENBQUEsQ0FBQztTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBaUIsRUFBRSxhQUFxQjtRQUNwRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUMsdUJBQXVCLENBQUM7WUFDdkQsU0FBUyxFQUFFLFNBQVM7WUFDcEIsYUFBYSxFQUFFLGFBQWE7WUFDNUIsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxJQUFJO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBeEVELDBEQXdFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT3BlcmF0aW9uRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBTREsgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGsnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudFJlc291cmNlcyB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlL2lvLWhlbHBlcic7XG5cbi8qKlxuICogQSBWYWxpZGF0aW9uUmVwb3J0ZXIgdGhhdCBjaGVja3MgZm9yIGVhcmx5IHZhbGlkYXRpb24gZXJyb3JzIHJpZ2h0IGFmdGVyXG4gKiBjcmVhdGluZyB0aGUgY2hhbmdlIHNldC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVhcmx5VmFsaWRhdGlvblJlcG9ydGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzZGs6IFNESywgcHJpdmF0ZSByZWFkb25seSBlbnZSZXNvdXJjZXM/OiBFbnZpcm9ubWVudFJlc291cmNlcykge1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBkZXRhaWxzIGFuZCByZXR1cm4gdGhlbSBhcyBhIHN0cmluZy5cbiAgICpcbiAgICogSWYgdGhlIGRldGFpbHMgY291bGQgbm90IGJlIGZldGNoZWQsIGxvZyB0aGF0IGFzIGEgd2FybmluZyB1c2luZyB0aGUgSW9IZWxwZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmV0Y2hEZXRhaWxzU3RyaW5nKGNoYW5nZVNldE5hbWU6IHN0cmluZywgc3RhY2tOYW1lOiBzdHJpbmcsIGlvSGVscGVyOiBJb0hlbHBlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGBFYXJseSB2YWxpZGF0aW9uIGZhaWxlZCBmb3Igc3RhY2sgJyR7c3RhY2tOYW1lfScgKENoYW5nZVNldCAnJHtjaGFuZ2VTZXROYW1lfScpYDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZldGNoRGV0YWlsc1N0cnVjdHVyZWQoY2hhbmdlU2V0TmFtZSwgc3RhY2tOYW1lKTtcblxuICAgIHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvdWxkLW5vdC1jaGVjayc6XG4gICAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLndhcm4ocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gc3VtbWFyeTtcblxuICAgICAgY2FzZSAncmVzb3VyY2UtZXJyb3JzJzpcbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHN1bW1hcnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgJHtzdW1tYXJ5fTpgLFxuICAgICAgICAgIC4uLnJlc3VsdC5lcnJvcnMubWFwKGUgPT4gYCAgLSAke2UubWVzc2FnZX0gKGF0ICR7ZS5kb2N1bWVudFBhdGh9KWApLFxuICAgICAgICBdLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZGV0YWlscyBhbmQgcmV0dXJuIHRoZW0gaW4gc3RydWN0dXJlZCBmb3JtLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGV0YWlsc1N0cnVjdHVyZWQoY2hhbmdlU2V0TmFtZTogc3RyaW5nLCBzdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8RWFybHlWYWxpZGF0aW9uQ2hlY2tSZXN1bHQ+IHtcbiAgICBsZXQgb3BlcmF0aW9uRXZlbnRzOiBPcGVyYXRpb25FdmVudFtdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIG9wZXJhdGlvbkV2ZW50cyA9IGF3YWl0IHRoaXMuZ2V0RmFpbGVkRXZlbnRzKHN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxldCBjdXJyZW50VmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudFZlcnNpb24gPSAoYXdhaXQgdGhpcy5lbnZSZXNvdXJjZXM/Lmxvb2t1cFRvb2xraXQoKSk/LnZlcnNpb247XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdjb3VsZC1ub3QtY2hlY2snLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHJldHJpZXZlIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCBlYXJseSB2YWxpZGF0aW9uIGVycm9ycyAoJHtlcnJvcn0pLiBNYWtlIHN1cmUgeW91IGhhdmUgcGVybWlzc2lvbnMgdG8gY2FsbCB0aGUgRGVzY3JpYmVFdmVudHMgQVBJLCBvciByZS1ib290c3RyYXAgeW91ciBlbnZpcm9ubWVudCBieSBydW5uaW5nICdjZGsgYm9vdHN0cmFwJyB0byB1cGRhdGUgdGhlIEJvb3RzdHJhcCBDREsgVG9vbGtpdCBzdGFjay4gQm9vdHN0cmFwIHRvb2xraXQgc3RhY2sgdmVyc2lvbiAzMCBvciBsYXRlciBpcyBuZWVkZWQ7IGN1cnJlbnQgdmVyc2lvbjogJHtjdXJyZW50VmVyc2lvbiA/PyAndW5rbm93bid9LmAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncmVzb3VyY2UtZXJyb3JzJyxcbiAgICAgIGVycm9yczogb3BlcmF0aW9uRXZlbnRzLm1hcCgoZXYpID0+ICh7XG4gICAgICAgIGV2ZW50VHlwZTogZXYuRXZlbnRUeXBlID8/ICcnLFxuICAgICAgICBsb2dpY2FsSWQ6IGV2LkxvZ2ljYWxSZXNvdXJjZUlkID8/ICcnLFxuICAgICAgICBtZXNzYWdlOiBldi5WYWxpZGF0aW9uU3RhdHVzUmVhc29uID8/ICcnLFxuICAgICAgICBwaHlzaWNhbElkOiBldi5QaHlzaWNhbFJlc291cmNlSWQgPyBldi5QaHlzaWNhbFJlc291cmNlSWQgOiB1bmRlZmluZWQsXG4gICAgICAgIHZhbGlkYXRpb25OYW1lOiBldi5WYWxpZGF0aW9uTmFtZSA/PyAnJyxcbiAgICAgICAgZG9jdW1lbnRQYXRoOiBldi5WYWxpZGF0aW9uUGF0aCA/PyAnJyxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBldi5SZXNvdXJjZVR5cGUsXG4gICAgICB9IHNhdGlzZmllcyBFYXJseVZhbGlkYXRpb25FcnJvcikpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEZhaWxlZEV2ZW50cyhzdGFja05hbWU6IHN0cmluZywgY2hhbmdlU2V0TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc2RrLmNsb3VkRm9ybWF0aW9uKCkucGFnaW5hdGVkRGVzY3JpYmVFdmVudHMoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICBDaGFuZ2VTZXROYW1lOiBjaGFuZ2VTZXROYW1lLFxuICAgICAgRmlsdGVyczoge1xuICAgICAgICBGYWlsZWRFdmVudHM6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEVhcmx5VmFsaWRhdGlvbkNoZWNrUmVzdWx0ID1cbiAgfCB7IHR5cGU6ICdjb3VsZC1ub3QtY2hlY2snOyBtZXNzYWdlOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3Jlc291cmNlLWVycm9ycyc7IGVycm9yczogRWFybHlWYWxpZGF0aW9uRXJyb3JbXSB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEVhcmx5VmFsaWRhdGlvbkVycm9yIHtcbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBoeXNpY2FsSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICByZWFkb25seSByZXNvdXJjZVR5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4YW1wbGU6IGBWQUxJREFUSU9OX0VSUk9SYFxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4YW1wbGU6IGBOQU1FX0NPTkZMSUNUX1ZBTElEQVRJT05gXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeGFtcGxlOiBgL1Jlc291cmNlcy9Tb21lQnVja2V0RDVCNzA3MDRgXG4gICAqL1xuICByZWFkb25seSBkb2N1bWVudFBhdGg6IHN0cmluZztcbn1cbiJdfQ==