@aws-cdk/toolkit-lib 1.29.0 → 1.30.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 (41) hide show
  1. package/build-info.json +2 -2
  2. package/lib/actions/diagnose/index.d.ts +28 -0
  3. package/lib/actions/diagnose/index.js +1 -1
  4. package/lib/actions/validate/index.d.ts +2 -0
  5. package/lib/actions/validate/index.js +1 -1
  6. package/lib/api/aws-auth/sdk.d.ts +5 -1
  7. package/lib/api/aws-auth/sdk.js +5 -1
  8. package/lib/api/cloud-assembly/environment.js +4 -1
  9. package/lib/api/cloud-assembly/stack-collection.d.ts +2 -0
  10. package/lib/api/cloud-assembly/stack-collection.js +3 -1
  11. package/lib/api/deployments/deploy-stack.js +4 -2
  12. package/lib/api/deployments/deployments.js +3 -1
  13. package/lib/api/diagnosing/diagnosis-formatting.js +54 -13
  14. package/lib/api/diagnosing/format-utils.d.ts +3 -0
  15. package/lib/api/diagnosing/format-utils.js +36 -0
  16. package/lib/api/diagnosing/resource-investigation.d.ts +41 -0
  17. package/lib/api/diagnosing/resource-investigation.js +302 -0
  18. package/lib/api/diagnosing/stack-diagnoser.d.ts +39 -3
  19. package/lib/api/diagnosing/stack-diagnoser.js +71 -30
  20. package/lib/api/hotswap/hotswap-deployments.js +3 -1
  21. package/lib/api/io/private/messages.js +2 -2
  22. package/lib/api/validate/validate-formatting.d.ts +9 -2
  23. package/lib/api/validate/validate-formatting.js +117 -69
  24. package/lib/payloads/hotswap.d.ts +8 -1
  25. package/lib/payloads/hotswap.js +1 -1
  26. package/lib/private/tools.js +26 -24
  27. package/lib/toolkit/private/collect-annotation-report.d.ts +12 -0
  28. package/lib/toolkit/private/collect-annotation-report.js +85 -0
  29. package/lib/toolkit/private/validation-report.d.ts +32 -0
  30. package/lib/toolkit/private/validation-report.js +119 -0
  31. package/lib/toolkit/toolkit.d.ts +4 -7
  32. package/lib/toolkit/toolkit.js +24 -67
  33. package/lib/toolkit/types.d.ts +1 -0
  34. package/lib/toolkit/types.js +1 -1
  35. package/lib/util/glob-matcher.d.ts +19 -7
  36. package/lib/util/glob-matcher.js +63 -14
  37. package/package.json +5 -5
  38. package/lib/api/diagnosing/tree-builder.d.ts +0 -13
  39. package/lib/api/diagnosing/tree-builder.js +0 -86
  40. package/lib/api/diagnosing/tree.d.ts +0 -19
  41. package/lib/api/diagnosing/tree.js +0 -72
@@ -2,85 +2,84 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hostMessageFromValidation = hostMessageFromValidation;
4
4
  exports.formatValidateResult = formatValidateResult;
5
+ exports.formatValidationReports = formatValidationReports;
6
+ exports.humanFriendlyFilename = humanFriendlyFilename;
5
7
  const path = require("node:path");
6
8
  const chalk = require("chalk");
7
9
  const private_1 = require("../io/private");
8
- // Matches C0 control chars (except \t and \n), DEL, and CSI (8-bit mode).
9
- // Strips ANSI escape sequences, carriage returns, backspaces, BEL, and
10
- // bidirectional overrides that could spoof terminal output.
11
- const CONTROL_CHARS = /[\x00-\x08\x0B-\x1F\x7F\x9B]/g;
12
- function sanitize(s) {
13
- return (s ?? '').replace(CONTROL_CHARS, '�');
14
- }
15
- const SEVERITY_ORDER = {
16
- fatal: 0,
17
- error: 1,
18
- warning: 2,
19
- info: 3,
20
- };
21
- function hostMessageFromValidation(result) {
10
+ function hostMessageFromValidation(fileRoot, result) {
22
11
  // Always emit at info level so the CLI IoHost doesn't wrap the entire output
23
12
  // in a single color. The formatter handles per-severity coloring internally.
24
13
  // Consumers detect failure via the structured `data.conclusion` field or exit code.
25
- return private_1.IO.CDK_TOOLKIT_I9600.msg(formatValidateResult(result), result);
14
+ return private_1.IO.CDK_TOOLKIT_E9600.msg(formatValidateResult(fileRoot, result), result);
26
15
  }
27
- function formatValidateResult(result) {
28
- const violations = flattenViolations(result.pluginReports);
29
- if (violations.length === 0) {
30
- return '\nPolicy validation passed. No problems found.';
31
- }
16
+ function formatValidateResult(fileRoot, result) {
17
+ return formatValidationReports(fileRoot, result.pluginReports).join('\n\n');
18
+ }
19
+ function formatValidationReports(fileRoot, reports) {
20
+ const successfullyExecutedPlugins = reports.filter((r) => isPluginFailure(r) === undefined);
21
+ const pluginFailures = reports.map(isPluginFailure).filter((e) => e !== undefined);
22
+ const violations = flattenViolations(successfullyExecutedPlugins);
32
23
  violations.sort((a, b) => {
33
24
  const aOrder = SEVERITY_ORDER[a.severity.toLowerCase()] ?? 4;
34
25
  const bOrder = SEVERITY_ORDER[b.severity.toLowerCase()] ?? 4;
35
26
  return aOrder - bOrder;
36
27
  });
37
- const title = result.title ?? 'Validation Report';
38
- const blocks = violations.map((v) => formatViolationBlock(v));
39
- return `\n${title}\n${'-'.repeat(title.length)}\n\n${blocks.join('\n\n')}`;
28
+ return [
29
+ ...pluginFailures.map(formatPluginFailure),
30
+ ...violations.map((v) => formatViolationBlock(fileRoot, v)),
31
+ ];
40
32
  }
41
- function flattenViolations(pluginReports) {
42
- const result = [];
43
- for (const report of pluginReports) {
33
+ function flattenViolations(reports) {
34
+ return reports.flatMap((report) => {
44
35
  const pluginName = report.pluginName;
45
- for (const violation of report.violations) {
46
- const severity = normalizeSeverity(violation.severity);
47
- for (const construct of violation.violatingConstructs) {
48
- result.push({ severity, description: violation.description, ruleName: violation.ruleName, pluginName, construct });
49
- }
50
- }
36
+ return report.violations.flatMap((violation) => {
37
+ return violation.violatingConstructs.map((construct) => ({
38
+ severity: normalizeSeverity(violation.severity),
39
+ description: violation.description,
40
+ ruleName: violation.ruleName,
41
+ pluginName,
42
+ construct,
43
+ suggestedFix: violation.suggestedFix,
44
+ ruleMetadata: violation.ruleMetadata,
45
+ }));
46
+ });
47
+ });
48
+ }
49
+ function normalizeSeverity(severity, customSeverity) {
50
+ switch (severity) {
51
+ case 'fatal':
52
+ case 'error':
53
+ case 'warning':
54
+ case 'info':
55
+ return severity.toUpperCase();
56
+ case 'custom':
57
+ return customSeverity ?? 'INFO';
51
58
  }
52
- return result;
53
- }
54
- function normalizeSeverity(severity) {
55
- if (!severity)
56
- return 'Warning';
57
- const lower = severity.toLowerCase();
58
- if (lower === 'fatal')
59
- return 'Fatal';
60
- if (lower === 'error')
61
- return 'Error';
62
- if (lower === 'warning')
63
- return 'Warning';
64
- if (lower === 'info')
65
- return 'Info';
66
- const safe = sanitize(severity);
67
- return safe.charAt(0).toUpperCase() + safe.slice(1);
68
- }
69
- function formatViolationBlock(v) {
59
+ }
60
+ function formatViolationBlock(fileRoot, v) {
70
61
  const lines = [];
71
- const location = getLeafLocation(v.construct.stackTraces);
62
+ const location = sourceLocation(fileRoot, v.construct.stackTraces);
72
63
  if (location) {
73
64
  lines.push(chalk.underline(sanitize(location)));
74
65
  }
75
- const severityColor = getSeverityColor(v.severity);
76
- const description = stripAckTag(sanitize(v.description));
77
- const severityAndDesc = severityColor(chalk.bold(`${v.severity}: ${description}`));
78
- lines.push(`${severityAndDesc} ${sanitize(v.pluginName)}`);
79
- const constructInfo = formatConstructInfo(v.construct);
66
+ lines.push([
67
+ chalk.bold(getSeverityColor(v.severity)(sanitize(v.severity))),
68
+ chalk.bold(stripAckTag(sanitize(v.description))),
69
+ chalk.grey(`(${sanitize(v.pluginName)})`),
70
+ ].join(' '));
71
+ const constructInfo = formatConstructInfo(fileRoot, v.construct);
80
72
  lines.push(` ${constructInfo}`);
81
- if (v.severity.toLowerCase() !== 'fatal') {
73
+ if (v.suggestedFix) {
74
+ lines.push(` Suggested fix: ${sanitize(v.suggestedFix).replace(/\n/g, '\n ')}`);
75
+ }
76
+ if (isSuppressibleViolation(v)) {
82
77
  const ackId = `${sanitize(v.pluginName)}::${sanitize(v.ruleName)}`.replace(/ /g, '-');
83
- lines.push(` Acknowledge '${ackId}'`);
78
+ lines.push(` ${chalk.grey(`Acknowledge with '${ackId}'`)}`);
79
+ }
80
+ else {
81
+ // If not acknowledgeable, we should still show the rule name for reference.
82
+ lines.push(` ${chalk.grey(`Rule ${sanitize(v.ruleName)}`)}`);
84
83
  }
85
84
  return lines.join('\n');
86
85
  }
@@ -92,29 +91,44 @@ function getSeverityColor(severity) {
92
91
  default: return chalk.blue;
93
92
  }
94
93
  }
95
- function formatConstructInfo(construct) {
94
+ function formatPluginFailure(f) {
95
+ return `${chalk.ansi256(208)('ERROR')} ${sanitize(f.error)}`;
96
+ }
97
+ function formatConstructInfo(fileRoot, construct) {
96
98
  const parts = [];
97
99
  const logicalId = sanitize(construct.cloudFormationResource?.logicalId);
98
100
  if (construct.constructPath) {
99
101
  const cPath = sanitize(construct.constructPath);
100
102
  parts.push(logicalId ? `${chalk.bold(cPath)} (${logicalId})` : chalk.bold(cPath));
101
103
  }
102
- else if (logicalId) {
103
- parts.push(chalk.bold(logicalId));
104
+ else {
105
+ // No construct information, show template path and logical ID
106
+ if (construct.cloudFormationResource?.templatePath) {
107
+ parts.push(humanFriendlyFilename(fileRoot, sanitize(construct.cloudFormationResource.templatePath)));
108
+ }
109
+ if (logicalId) {
110
+ parts.push(chalk.bold(logicalId));
111
+ }
104
112
  }
105
113
  if (construct.constructFqn) {
106
- parts.push(sanitize(construct.constructFqn));
114
+ parts.push(chalk.grey(sanitize(construct.constructFqn)));
107
115
  }
108
116
  return parts.join(' ');
109
117
  }
110
118
  function stripAckTag(description) {
111
119
  return description.replace(/\s*\[ack:\s*[^\]]+\]\s*/g, '').trim();
112
120
  }
113
- function getLeafLocation(stackTraces) {
114
- if (!stackTraces || stackTraces.length === 0)
115
- return undefined;
116
- const lastTrace = stackTraces[stackTraces.length - 1];
117
- const frames = lastTrace.split('\n');
121
+ function sourceLocation(fileRoot, stackTraces) {
122
+ for (const trace of stackTraces ?? []) {
123
+ const frame = getLeafLocation(trace);
124
+ if (frame && frame.fileName) {
125
+ return `${humanFriendlyFilename(fileRoot, frame.fileName)}:${frame.sourceLocation}`;
126
+ }
127
+ }
128
+ return undefined;
129
+ }
130
+ function getLeafLocation(stackTrace) {
131
+ const frames = stackTrace.split('\n');
118
132
  if (frames.length === 0)
119
133
  return undefined;
120
134
  // Find the first frame that's user code (not in node_modules or aws-cdk-lib)
@@ -122,6 +136,40 @@ function getLeafLocation(stackTraces) {
122
136
  const frame = (userFrame ?? frames[0]).trim();
123
137
  const match = frame.match(/\((.+)\)$/) || frame.match(/at\s+(.+)$/);
124
138
  const location = match ? match[1] : frame;
125
- return path.isAbsolute(location.split(':')[0]) ? path.relative(process.cwd(), location) : location;
139
+ return { fileName: location.split(':')[0], sourceLocation: location.split(':').slice(1).join(':') };
140
+ }
141
+ // Matches C0 control chars (except \t and \n), DEL, and CSI (8-bit mode).
142
+ // Strips ANSI escape sequences, carriage returns, backspaces, BEL, and
143
+ // bidirectional overrides that could spoof terminal output.
144
+ const CONTROL_CHARS = /[\x00-\x08\x0B-\x1F\x7F\x9B]/g;
145
+ function sanitize(s) {
146
+ return (s ?? '').replace(CONTROL_CHARS, '�');
147
+ }
148
+ const SEVERITY_ORDER = {
149
+ fatal: 0,
150
+ error: 1,
151
+ warning: 2,
152
+ info: 3,
153
+ };
154
+ function humanFriendlyFilename(root, filename) {
155
+ const absPath = filename;
156
+ const relPath = path.relative(root, filename);
157
+ return relPath.length < absPath.length ? relPath : absPath;
158
+ }
159
+ function isPluginFailure(r) {
160
+ if (r.conclusion === 'success' || r.violations.length > 0 || !r.metadata?.error) {
161
+ return undefined;
162
+ }
163
+ return { error: r.metadata.error };
164
+ }
165
+ /**
166
+ * Report whether it is possible to suppress this violation.
167
+ *
168
+ * Violations that are reported as "fatal", or that have been converted from annotations, cannot be suppressed.
169
+ */
170
+ function isSuppressibleViolation(violation) {
171
+ const isFatal = violation.severity?.toLowerCase() === 'fatal';
172
+ const isErrorAnnotation = violation.ruleMetadata?.['cdk:annotation'] && violation.severity?.toLowerCase() === 'error';
173
+ return !isFatal && !isErrorAnnotation;
126
174
  }
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZm9ybWF0dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZhbGlkYXRlLWZvcm1hdHRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsOERBS0M7QUFFRCxvREFnQkM7QUFyREQsa0NBQWtDO0FBRWxDLCtCQUErQjtBQUcvQiwyQ0FBbUM7QUFFbkMsMEVBQTBFO0FBQzFFLHVFQUF1RTtBQUN2RSw0REFBNEQ7QUFDNUQsTUFBTSxhQUFhLEdBQUcsK0JBQStCLENBQUM7QUFDdEQsU0FBUyxRQUFRLENBQUMsQ0FBcUI7SUFDckMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFVRCxNQUFNLGNBQWMsR0FBMkI7SUFDN0MsS0FBSyxFQUFFLENBQUM7SUFDUixLQUFLLEVBQUUsQ0FBQztJQUNSLE9BQU8sRUFBRSxDQUFDO0lBQ1YsSUFBSSxFQUFFLENBQUM7Q0FDUixDQUFDO0FBRUYsU0FBZ0IseUJBQXlCLENBQUMsTUFBc0I7SUFDOUQsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSxvRkFBb0Y7SUFDcEYsT0FBTyxZQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxNQUFzQjtJQUN6RCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFM0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sZ0RBQWdELENBQUM7SUFDMUQsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkIsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFD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RyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFMUMsNkVBQTZFO0lBQzdFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDOUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFOUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNyRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5SZXBvcnRKc29uLCBWaW9sYXRpbmdDb25zdHJ1Y3RKc29uIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGVSZXN1bHQgfSBmcm9tICcuLi8uLi9hY3Rpb25zL3ZhbGlkYXRlJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uTGVzc01lc3NhZ2UgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IElPIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5cbi8vIE1hdGNoZXMgQzAgY29udHJvbCBjaGFycyAoZXhjZXB0IFxcdCBhbmQgXFxuKSwgREVMLCBhbmQgQ1NJICg4LWJpdCBtb2RlKS5cbi8vIFN0cmlwcyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMsIGNhcnJpYWdlIHJldHVybnMsIGJhY2tzcGFjZXMsIEJFTCwgYW5kXG4vLyBiaWRpcmVjdGlvbmFsIG92ZXJyaWRlcyB0aGF0IGNvdWxkIHNwb29mIHRlcm1pbmFsIG91dHB1dC5cbmNvbnN0IENPTlRST0xfQ0hBUlMgPSAvW1xceDAwLVxceDA4XFx4MEItXFx4MUZcXHg3RlxceDlCXS9nO1xuZnVuY3Rpb24gc2FuaXRpemUoczogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIChzID8/ICcnKS5yZXBsYWNlKENPTlRST0xfQ0hBUlMsICfvv70nKTtcbn1cblxuaW50ZXJmYWNlIEZsYXR0ZW5lZFZpb2xhdGlvbiB7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29uc3RydWN0OiBWaW9sYXRpbmdDb25zdHJ1Y3RKc29uO1xufVxuXG5jb25zdCBTRVZFUklUWV9PUkRFUjogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgZmF0YWw6IDAsXG4gIGVycm9yOiAxLFxuICB3YXJuaW5nOiAyLFxuICBpbmZvOiAzLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RNZXNzYWdlRnJvbVZhbGlkYXRpb24ocmVzdWx0OiBWYWxpZGF0ZVJlc3VsdCk6IEFjdGlvbkxlc3NNZXNzYWdlPGFueT4ge1xuICAvLyBBbHdheXMgZW1pdCBhdCBpbmZvIGxldmVsIHNvIHRoZSBDTEkgSW9Ib3N0IGRvZXNuJ3Qgd3JhcCB0aGUgZW50aXJlIG91dHB1dFxuICAvLyBpbiBhIHNpbmdsZSBjb2xvci4gVGhlIGZvcm1hdHRlciBoYW5kbGVzIHBlci1zZXZlcml0eSBjb2xvcmluZyBpbnRlcm5hbGx5LlxuICAvLyBDb25zdW1lcnMgZGV0ZWN0IGZhaWx1cmUgdmlhIHRoZSBzdHJ1Y3R1cmVkIGBkYXRhLmNvbmNsdXNpb25gIGZpZWxkIG9yIGV4aXQgY29kZS5cbiAgcmV0dXJuIElPLkNES19UT09MS0lUX0k5NjAwLm1zZyhmb3JtYXRWYWxpZGF0ZVJlc3VsdChyZXN1bHQpLCByZXN1bHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VmFsaWRhdGVSZXN1bHQocmVzdWx0OiBWYWxpZGF0ZVJlc3VsdCk6IHN0cmluZyB7XG4gIGNvbnN0IHZpb2xhdGlvbnMgPSBmbGF0dGVuVmlvbGF0aW9ucyhyZXN1bHQucGx1Z2luUmVwb3J0cyk7XG5cbiAgaWYgKHZpb2xhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdcXG5Qb2xpY3kgdmFsaWRhdGlvbiBwYXNzZWQuIE5vIHByb2JsZW1zIGZvdW5kLic7XG4gIH1cblxuICB2aW9sYXRpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhT3JkZXIgPSBTRVZFUklUWV9PUkRFUlthLnNldmVyaXR5LnRvTG93ZXJDYXNlKCldID8/IDQ7XG4gICAgY29uc3QgYk9yZGVyID0gU0VWRVJJVFlfT1JERVJbYi5zZXZlcml0eS50b0xvd2VyQ2FzZSgpXSA/PyA0O1xuICAgIHJldHVybiBhT3JkZXIgLSBiT3JkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IHRpdGxlID0gcmVzdWx0LnRpdGxlID8/ICdWYWxpZGF0aW9uIFJlcG9ydCc7XG4gIGNvbnN0IGJsb2NrcyA9IHZpb2xhdGlvbnMubWFwKCh2KSA9PiBmb3JtYXRWaW9sYXRpb25CbG9jayh2KSk7XG4gIHJldHVybiBgXFxuJHt0aXRsZX1cXG4keyctJy5yZXBlYXQodGl0bGUubGVuZ3RoKX1cXG5cXG4ke2Jsb2Nrcy5qb2luKCdcXG5cXG4nKX1gO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuVmlvbGF0aW9ucyhwbHVnaW5SZXBvcnRzOiBQbHVnaW5SZXBvcnRKc29uW10pOiBGbGF0dGVuZWRWaW9sYXRpb25bXSB7XG4gIGNvbnN0IHJlc3VsdDogRmxhdHRlbmVkVmlvbGF0aW9uW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJlcG9ydCBvZiBwbHVnaW5SZXBvcnRzKSB7XG4gICAgY29uc3QgcGx1Z2luTmFtZSA9IHJlcG9ydC5wbHVnaW5OYW1lO1xuXG4gICAgZm9yIChjb25zdCB2aW9sYXRpb24gb2YgcmVwb3J0LnZpb2xhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNldmVyaXR5ID0gbm9ybWFsaXplU2V2ZXJpdHkodmlvbGF0aW9uLnNldmVyaXR5KTtcblxuICAgICAgZm9yIChjb25zdCBjb25zdHJ1Y3Qgb2YgdmlvbGF0aW9uLnZpb2xhdGluZ0NvbnN0cnVjdHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBzZXZlcml0eSwgZGVzY3JpcHRpb246IHZpb2xhdGlvbi5kZXNjcmlwdGlvbiwgcnVsZU5hbWU6IHZpb2xhdGlvbi5ydWxlTmFtZSwgcGx1Z2luTmFtZSwgY29uc3RydWN0IH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNldmVyaXR5KHNldmVyaXR5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBpZiAoIXNldmVyaXR5KSByZXR1cm4gJ1dhcm5pbmcnO1xuICBjb25zdCBsb3dlciA9IHNldmVyaXR5LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsb3dlciA9PT0gJ2ZhdGFsJykgcmV0dXJuICdGYXRhbCc7XG4gIGlmIChsb3dlciA9PT0gJ2Vycm9yJykgcmV0dXJuICdFcnJvcic7XG4gIGlmIChsb3dlciA9PT0gJ3dhcm5pbmcnKSByZXR1cm4gJ1dhcm5pbmcnO1xuICBpZiAobG93ZXIgPT09ICdpbmZvJykgcmV0dXJuICdJbmZvJztcbiAgY29uc3Qgc2FmZSA9IHNhbml0aXplKHNldmVyaXR5KTtcbiAgcmV0dXJuIHNhZmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzYWZlLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRWaW9sYXRpb25CbG9jayh2OiBGbGF0dGVuZWRWaW9sYXRpb24pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBsb2NhdGlvbiA9IGdldExlYWZMb2NhdGlvbih2LmNvbnN0cnVjdC5zdGFja1RyYWNlcyk7XG4gIGlmIChsb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goY2hhbGsudW5kZXJsaW5lKHNhbml0aXplKGxvY2F0aW9uKSkpO1xuICB9XG5cbiAgY29uc3Qgc2V2ZXJpdHlDb2xvciA9IGdldFNldmVyaXR5Q29sb3Iodi5zZXZlcml0eSk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gc3RyaXBBY2tUYWcoc2FuaXRpemUodi5kZXNjcmlwdGlvbikpO1xuICBjb25zdCBzZXZlcml0eUFuZERlc2MgPSBzZXZlcml0eUNvbG9yKGNoYWxrLmJvbGQoYCR7di5zZXZlcml0eX06ICR7ZGVzY3JpcHRpb259YCkpO1xuICBsaW5lcy5wdXNoKGAke3NldmVyaXR5QW5kRGVzY30gJHtzYW5pdGl6ZSh2LnBsdWdpbk5hbWUpfWApO1xuXG4gIGNvbnN0IGNvbnN0cnVjdEluZm8gPSBmb3JtYXRDb25zdHJ1Y3RJbmZvKHYuY29uc3RydWN0KTtcbiAgbGluZXMucHVzaChgICAgJHtjb25zdHJ1Y3RJbmZvfWApO1xuXG4gIGlmICh2LnNldmVyaXR5LnRvTG93ZXJDYXNlKCkgIT09ICdmYXRhbCcpIHtcbiAgICBjb25zdCBhY2tJZCA9IGAke3Nhbml0aXplKHYucGx1Z2luTmFtZSl9Ojoke3Nhbml0aXplKHYucnVsZU5hbWUpfWAucmVwbGFjZSgvIC9nLCAnLScpO1xuICAgIGxpbmVzLnB1c2goYCAgIEFja25vd2xlZGdlICcke2Fja0lkfSdgKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2V2ZXJpdHlDb2xvcihzZXZlcml0eTogc3RyaW5nKTogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcge1xuICBzd2l0Y2ggKHNldmVyaXR5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmYXRhbCc6IHJldHVybiBjaGFsay5yZWQ7XG4gICAgY2FzZSAnZXJyb3InOiByZXR1cm4gY2hhbGsuYW5zaTI1NigyMDgpO1xuICAgIGNhc2UgJ3dhcm5pbmcnOiByZXR1cm4gY2hhbGsueWVsbG93O1xuICAgIGRlZmF1bHQ6IHJldHVybiBjaGFsay5ibHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdENvbnN0cnVjdEluZm8oY29uc3RydWN0OiBWaW9sYXRpbmdDb25zdHJ1Y3RKc29uKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGxvZ2ljYWxJZCA9IHNhbml0aXplKGNvbnN0cnVjdC5jbG91ZEZvcm1hdGlvblJlc291cmNlPy5sb2dpY2FsSWQpO1xuXG4gIGlmIChjb25zdHJ1Y3QuY29uc3RydWN0UGF0aCkge1xuICAgIGNvbnN0IGNQYXRoID0gc2FuaXRpemUoY29uc3RydWN0LmNvbnN0cnVjdFBhdGgpO1xuICAgIHBhcnRzLnB1c2gobG9naWNhbElkID8gYCR7Y2hhbGsuYm9sZChjUGF0aCl9ICgke2xvZ2ljYWxJZH0pYCA6IGNoYWxrLmJvbGQoY1BhdGgpKTtcbiAgfSBlbHNlIGlmIChsb2dpY2FsSWQpIHtcbiAgICBwYXJ0cy5wdXNoKGNoYWxrLmJvbGQobG9naWNhbElkKSk7XG4gIH1cblxuICBpZiAoY29uc3RydWN0LmNvbnN0cnVjdEZxbikge1xuICAgIHBhcnRzLnB1c2goc2FuaXRpemUoY29uc3RydWN0LmNvbnN0cnVjdEZxbikpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gc3RyaXBBY2tUYWcoZGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBkZXNjcmlwdGlvbi5yZXBsYWNlKC9cXHMqXFxbYWNrOlxccypbXlxcXV0rXFxdXFxzKi9nLCAnJykudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBnZXRMZWFmTG9jYXRpb24oc3RhY2tUcmFjZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzdGFja1RyYWNlcyB8fCBzdGFja1RyYWNlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxhc3RUcmFjZSA9IHN0YWNrVHJhY2VzW3N0YWNrVHJhY2VzLmxlbmd0aCAtIDFdO1xuICBjb25zdCBmcmFtZXMgPSBsYXN0VHJhY2Uuc3BsaXQoJ1xcbicpO1xuICBpZiAoZnJhbWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBGaW5kIHRoZSBmaXJzdCBmcmFtZSB0aGF0J3MgdXNlciBjb2RlIChub3QgaW4gbm9kZV9tb2R1bGVzIG9yIGF3cy1jZGstbGliKVxuICBjb25zdCB1c2VyRnJhbWUgPSBmcmFtZXMuZmluZChmID0+ICFmLmluY2x1ZGVzKCdub2RlX21vZHVsZXMnKSAmJiAhZi5pbmNsdWRlcygnYXdzLWNkay1saWInKSk7XG4gIGNvbnN0IGZyYW1lID0gKHVzZXJGcmFtZSA/PyBmcmFtZXNbMF0pLnRyaW0oKTtcblxuICBjb25zdCBtYXRjaCA9IGZyYW1lLm1hdGNoKC9cXCgoLispXFwpJC8pIHx8IGZyYW1lLm1hdGNoKC9hdFxccysoLispJC8pO1xuICBjb25zdCBsb2NhdGlvbiA9IG1hdGNoID8gbWF0Y2hbMV0gOiBmcmFtZTtcbiAgcmV0dXJuIHBhdGguaXNBYnNvbHV0ZShsb2NhdGlvbi5zcGxpdCgnOicpWzBdKSA/IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgbG9jYXRpb24pIDogbG9jYXRpb247XG59XG4iXX0=
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZm9ybWF0dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZhbGlkYXRlLWZvcm1hdHRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSw4REFLQztBQUVELG9EQUVDO0FBRUQsMERBZ0JDO0FBbUpELHNEQUlDO0FBekxELGtDQUFrQztBQUVsQywrQkFBK0I7QUFHL0IsMkNBQW1DO0FBRW5DLFNBQWdCLHlCQUF5QixDQUFDLFFBQWdCLEVBQUUsTUFBc0I7SUFDaEYsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSxvRkFBb0Y7SUFDcEYsT0FBTyxZQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsUUFBZ0IsRUFBRSxNQUFzQjtJQUMzRSxPQUFPLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLE9BQTJCO0lBQ25GLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7SUFFbkYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUVsRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FB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QVEsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUM3RCxDQUFDO0FBTUQsU0FBUyxlQUFlLENBQUMsQ0FBbUI7SUFDMUMsSUFBSSxDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2hGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFNBQTBFO0lBQ3pHLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDO0lBQzlELE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUM7SUFDdEgsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblJlcG9ydEpzb24sIFBvbGljeVZpb2xhdGlvbkpzb24sIFBvbGljeVZpb2xhdGlvblNldmVyaXR5LCBWaW9sYXRpbmdDb25zdHJ1Y3RKc29uIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGVSZXN1bHQgfSBmcm9tICcuLi8uLi9hY3Rpb25zL3ZhbGlkYXRlJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uTGVzc01lc3NhZ2UgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IElPIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBob3N0TWVzc2FnZUZyb21WYWxpZGF0aW9uKGZpbGVSb290OiBzdHJpbmcsIHJlc3VsdDogVmFsaWRhdGVSZXN1bHQpOiBBY3Rpb25MZXNzTWVzc2FnZTxhbnk+IHtcbiAgLy8gQWx3YXlzIGVtaXQgYXQgaW5mbyBsZXZlbCBzbyB0aGUgQ0xJIElvSG9zdCBkb2Vzbid0IHdyYXAgdGhlIGVudGlyZSBvdXRwdXRcbiAgLy8gaW4gYSBzaW5nbGUgY29sb3IuIFRoZSBmb3JtYXR0ZXIgaGFuZGxlcyBwZXItc2V2ZXJpdHkgY29sb3JpbmcgaW50ZXJuYWxseS5cbiAgLy8gQ29uc3VtZXJzIGRldGVjdCBmYWlsdXJlIHZpYSB0aGUgc3RydWN0dXJlZCBgZGF0YS5jb25jbHVzaW9uYCBmaWVsZCBvciBleGl0IGNvZGUuXG4gIHJldHVybiBJTy5DREtfVE9PTEtJVF9FOTYwMC5tc2coZm9ybWF0VmFsaWRhdGVSZXN1bHQoZmlsZVJvb3QsIHJlc3VsdCksIHJlc3VsdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWYWxpZGF0ZVJlc3VsdChmaWxlUm9vdDogc3RyaW5nLCByZXN1bHQ6IFZhbGlkYXRlUmVzdWx0KTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdFZhbGlkYXRpb25SZXBvcnRzKGZpbGVSb290LCByZXN1bHQucGx1Z2luUmVwb3J0cykuam9pbignXFxuXFxuJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWYWxpZGF0aW9uUmVwb3J0cyhmaWxlUm9vdDogc3RyaW5nLCByZXBvcnRzOiBQbHVnaW5SZXBvcnRKc29uW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHN1Y2Nlc3NmdWxseUV4ZWN1dGVkUGx1Z2lucyA9IHJlcG9ydHMuZmlsdGVyKChyKSA9PiBpc1BsdWdpbkZhaWx1cmUocikgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHBsdWdpbkZhaWx1cmVzID0gcmVwb3J0cy5tYXAoaXNQbHVnaW5GYWlsdXJlKS5maWx0ZXIoKGUpID0+IGUgIT09IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgdmlvbGF0aW9ucyA9IGZsYXR0ZW5WaW9sYXRpb25zKHN1Y2Nlc3NmdWxseUV4ZWN1dGVkUGx1Z2lucyk7XG5cbiAgdmlvbGF0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYU9yZGVyID0gU0VWRVJJVFlfT1JERVJbYS5zZXZlcml0eS50b0xvd2VyQ2FzZSgpXSA/PyA0O1xuICAgIGNvbnN0IGJPcmRlciA9IFNFVkVSSVRZX09SREVSW2Iuc2V2ZXJpdHkudG9Mb3dlckNhc2UoKV0gPz8gNDtcbiAgICByZXR1cm4gYU9yZGVyIC0gYk9yZGVyO1xuICB9KTtcblxuICByZXR1cm4gW1xuICAgIC4uLnBsdWdpbkZhaWx1cmVzLm1hcChmb3JtYXRQbHVnaW5GYWlsdXJlKSxcbiAgICAuLi52aW9sYXRpb25zLm1hcCgodikgPT4gZm9ybWF0VmlvbGF0aW9uQmxvY2soZmlsZVJvb3QsIHYpKSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gZmxhdHRlblZpb2xhdGlvbnMocmVwb3J0czogUGx1Z2luUmVwb3J0SnNvbltdKTogRmxhdHRlbmVkVmlvbGF0aW9uW10ge1xuICByZXR1cm4gcmVwb3J0cy5mbGF0TWFwKChyZXBvcnQpID0+IHtcbiAgICBjb25zdCBwbHVnaW5OYW1lID0gcmVwb3J0LnBsdWdpbk5hbWU7XG4gICAgcmV0dXJuIHJlcG9ydC52aW9sYXRpb25zLmZsYXRNYXAoKHZpb2xhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHZpb2xhdGlvbi52aW9sYXRpbmdDb25zdHJ1Y3RzLm1hcCgoY29uc3RydWN0KSA9PiAoe1xuICAgICAgICBzZXZlcml0eTogbm9ybWFsaXplU2V2ZXJpdHkodmlvbGF0aW9uLnNldmVyaXR5KSxcbiAgICAgICAgZGVzY3JpcHRpb246IHZpb2xhdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgcnVsZU5hbWU6IHZpb2xhdGlvbi5ydWxlTmFtZSxcbiAgICAgICAgcGx1Z2luTmFtZSxcbiAgICAgICAgY29uc3RydWN0LFxuICAgICAgICBzdWdnZXN0ZWRGaXg6IHZpb2xhdGlvbi5zdWdnZXN0ZWRGaXgsXG4gICAgICAgIHJ1bGVNZXRhZGF0YTogdmlvbGF0aW9uLnJ1bGVNZXRhZGF0YSxcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNldmVyaXR5KHNldmVyaXR5OiBQb2xpY3lWaW9sYXRpb25TZXZlcml0eSwgY3VzdG9tU2V2ZXJpdHk/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHNldmVyaXR5KSB7XG4gICAgY2FzZSAnZmF0YWwnOlxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICBjYXNlICd3YXJuaW5nJzpcbiAgICBjYXNlICdpbmZvJzpcbiAgICAgIHJldHVybiBzZXZlcml0eS50b1VwcGVyQ2FzZSgpO1xuICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICByZXR1cm4gY3VzdG9tU2V2ZXJpdHkgPz8gJ0lORk8nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFZpb2xhdGlvbkJsb2NrKGZpbGVSb290OiBzdHJpbmcsIHY6IEZsYXR0ZW5lZFZpb2xhdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0IGxvY2F0aW9uID0gc291cmNlTG9jYXRpb24oZmlsZVJvb3QsIHYuY29uc3RydWN0LnN0YWNrVHJhY2VzKTtcbiAgaWYgKGxvY2F0aW9uKSB7XG4gICAgbGluZXMucHVzaChjaGFsay51bmRlcmxpbmUoc2FuaXRpemUobG9jYXRpb24pKSk7XG4gIH1cblxuICBsaW5lcy5wdXNoKFtcbiAgICBjaGFsay5ib2xkKGdldFNldmVyaXR5Q29sb3Iodi5zZXZlcml0eSkoc2FuaXRpemUodi5zZXZlcml0eSkpKSxcbiAgICBjaGFsay5ib2xkKHN0cmlwQWNrVGFnKHNhbml0aXplKHYuZGVzY3JpcHRpb24pKSksXG4gICAgY2hhbGsuZ3JleShgKCR7c2FuaXRpemUodi5wbHVnaW5OYW1lKX0pYCksXG4gIF0uam9pbignICcpKTtcblxuICBjb25zdCBjb25zdHJ1Y3RJbmZvID0gZm9ybWF0Q29uc3RydWN0SW5mbyhmaWxlUm9vdCwgdi5jb25zdHJ1Y3QpO1xuICBsaW5lcy5wdXNoKGAgICAke2NvbnN0cnVjdEluZm99YCk7XG5cbiAgaWYgKHYuc3VnZ2VzdGVkRml4KSB7XG4gICAgbGluZXMucHVzaChgICAgU3VnZ2VzdGVkIGZpeDogJHtzYW5pdGl6ZSh2LnN1Z2dlc3RlZEZpeCkucmVwbGFjZSgvXFxuL2csICdcXG4gICAnKX1gKTtcbiAgfVxuXG4gIGlmIChpc1N1cHByZXNzaWJsZVZpb2xhdGlvbih2KSkge1xuICAgIGNvbnN0IGFja0lkID0gYCR7c2FuaXRpemUodi5wbHVnaW5OYW1lKX06OiR7c2FuaXRpemUodi5ydWxlTmFtZSl9YC5yZXBsYWNlKC8gL2csICctJyk7XG4gICAgbGluZXMucHVzaChgICAgJHtjaGFsay5ncmV5KGBBY2tub3dsZWRnZSB3aXRoICcke2Fja0lkfSdgKX1gKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBub3QgYWNrbm93bGVkZ2VhYmxlLCB3ZSBzaG91bGQgc3RpbGwgc2hvdyB0aGUgcnVsZSBuYW1lIGZvciByZWZlcmVuY2UuXG4gICAgbGluZXMucHVzaChgICAgJHtjaGFsay5ncmV5KGBSdWxlICR7c2FuaXRpemUodi5ydWxlTmFtZSl9YCl9YCk7XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNldmVyaXR5Q29sb3Ioc2V2ZXJpdHk6IHN0cmluZyk6IChzdHI6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgc3dpdGNoIChzZXZlcml0eS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnZmF0YWwnOiByZXR1cm4gY2hhbGsucmVkO1xuICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuIGNoYWxrLmFuc2kyNTYoMjA4KTtcbiAgICBjYXNlICd3YXJuaW5nJzogcmV0dXJuIGNoYWxrLnllbGxvdztcbiAgICBkZWZhdWx0OiByZXR1cm4gY2hhbGsuYmx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRQbHVnaW5GYWlsdXJlKGY6IFBsdWdpbkVycm9yKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NoYWxrLmFuc2kyNTYoMjA4KSgnRVJST1InKX0gJHtzYW5pdGl6ZShmLmVycm9yKX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRDb25zdHJ1Y3RJbmZvKGZpbGVSb290OiBzdHJpbmcsIGNvbnN0cnVjdDogVmlvbGF0aW5nQ29uc3RydWN0SnNvbik6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBsb2dpY2FsSWQgPSBzYW5pdGl6ZShjb25zdHJ1Y3QuY2xvdWRGb3JtYXRpb25SZXNvdXJjZT8ubG9naWNhbElkKTtcblxuICBpZiAoY29uc3RydWN0LmNvbnN0cnVjdFBhdGgpIHtcbiAgICBjb25zdCBjUGF0aCA9IHNhbml0aXplKGNvbnN0cnVjdC5jb25zdHJ1Y3RQYXRoKTtcbiAgICBwYXJ0cy5wdXNoKGxvZ2ljYWxJZCA/IGAke2NoYWxrLmJvbGQoY1BhdGgpfSAoJHtsb2dpY2FsSWR9KWAgOiBjaGFsay5ib2xkKGNQYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gY29uc3RydWN0IGluZm9ybWF0aW9uLCBzaG93IHRlbXBsYXRlIHBhdGggYW5kIGxvZ2ljYWwgSURcbiAgICBpZiAoY29uc3RydWN0LmNsb3VkRm9ybWF0aW9uUmVzb3VyY2U/LnRlbXBsYXRlUGF0aCkge1xuICAgICAgcGFydHMucHVzaChodW1hbkZyaWVuZGx5RmlsZW5hbWUoZmlsZVJvb3QsIHNhbml0aXplKGNvbnN0cnVjdC5jbG91ZEZvcm1hdGlvblJlc291cmNlLnRlbXBsYXRlUGF0aCkpKTtcbiAgICB9XG4gICAgaWYgKGxvZ2ljYWxJZCkge1xuICAgICAgcGFydHMucHVzaChjaGFsay5ib2xkKGxvZ2ljYWxJZCkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb25zdHJ1Y3QuY29uc3RydWN0RnFuKSB7XG4gICAgcGFydHMucHVzaChjaGFsay5ncmV5KHNhbml0aXplKGNvbnN0cnVjdC5jb25zdHJ1Y3RGcW4pKSk7XG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuXG5mdW5jdGlvbiBzdHJpcEFja1RhZyhkZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGRlc2NyaXB0aW9uLnJlcGxhY2UoL1xccypcXFthY2s6XFxzKlteXFxdXStcXF1cXHMqL2csICcnKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUxvY2F0aW9uKGZpbGVSb290OiBzdHJpbmcsIHN0YWNrVHJhY2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgdHJhY2Ugb2Ygc3RhY2tUcmFjZXMgPz8gW10pIHtcbiAgICBjb25zdCBmcmFtZSA9IGdldExlYWZMb2NhdGlvbih0cmFjZSk7XG4gICAgaWYgKGZyYW1lICYmIGZyYW1lLmZpbGVOYW1lKSB7XG4gICAgICByZXR1cm4gYCR7aHVtYW5GcmllbmRseUZpbGVuYW1lKGZpbGVSb290LCBmcmFtZS5maWxlTmFtZSl9OiR7ZnJhbWUuc291cmNlTG9jYXRpb259YDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TGVhZkxvY2F0aW9uKHN0YWNrVHJhY2U6IHN0cmluZykge1xuICBjb25zdCBmcmFtZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgaWYgKGZyYW1lcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gRmluZCB0aGUgZmlyc3QgZnJhbWUgdGhhdCdzIHVzZXIgY29kZSAobm90IGluIG5vZGVfbW9kdWxlcyBvciBhd3MtY2RrLWxpYilcbiAgY29uc3QgdXNlckZyYW1lID0gZnJhbWVzLmZpbmQoZiA9PiAhZi5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykgJiYgIWYuaW5jbHVkZXMoJ2F3cy1jZGstbGliJykpO1xuICBjb25zdCBmcmFtZSA9ICh1c2VyRnJhbWUgPz8gZnJhbWVzWzBdKS50cmltKCk7XG5cbiAgY29uc3QgbWF0Y2ggPSBmcmFtZS5tYXRjaCgvXFwoKC4rKVxcKSQvKSB8fCBmcmFtZS5tYXRjaCgvYXRcXHMrKC4rKSQvKTtcbiAgY29uc3QgbG9jYXRpb24gPSBtYXRjaCA/IG1hdGNoWzFdIDogZnJhbWU7XG4gIHJldHVybiB7IGZpbGVOYW1lOiBsb2NhdGlvbi5zcGxpdCgnOicpWzBdLCBzb3VyY2VMb2NhdGlvbjogbG9jYXRpb24uc3BsaXQoJzonKS5zbGljZSgxKS5qb2luKCc6JykgfTtcbn1cblxuLy8gTWF0Y2hlcyBDMCBjb250cm9sIGNoYXJzIChleGNlcHQgXFx0IGFuZCBcXG4pLCBERUwsIGFuZCBDU0kgKDgtYml0IG1vZGUpLlxuLy8gU3RyaXBzIEFOU0kgZXNjYXBlIHNlcXVlbmNlcywgY2FycmlhZ2UgcmV0dXJucywgYmFja3NwYWNlcywgQkVMLCBhbmRcbi8vIGJpZGlyZWN0aW9uYWwgb3ZlcnJpZGVzIHRoYXQgY291bGQgc3Bvb2YgdGVybWluYWwgb3V0cHV0LlxuY29uc3QgQ09OVFJPTF9DSEFSUyA9IC9bXFx4MDAtXFx4MDhcXHgwQi1cXHgxRlxceDdGXFx4OUJdL2c7XG5mdW5jdGlvbiBzYW5pdGl6ZShzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gKHMgPz8gJycpLnJlcGxhY2UoQ09OVFJPTF9DSEFSUywgJ++/vScpO1xufVxuXG5leHBvcnQgdHlwZSBGbGF0dGVuZWRWaW9sYXRpb24gPVxuICAmIFBpY2s8UGx1Z2luUmVwb3J0SnNvbiwgJ3BsdWdpbk5hbWUnPlxuICAmIFBpY2s8UG9saWN5VmlvbGF0aW9uSnNvbiwgJ2Rlc2NyaXB0aW9uJyB8ICdydWxlTmFtZScgfCAnc3VnZ2VzdGVkRml4JyB8ICdydWxlTWV0YWRhdGEnPlxuICAmIHsgc2V2ZXJpdHk6IHN0cmluZzsgY29uc3RydWN0OiBWaW9sYXRpbmdDb25zdHJ1Y3RKc29uIH07XG5cbmNvbnN0IFNFVkVSSVRZX09SREVSOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICBmYXRhbDogMCxcbiAgZXJyb3I6IDEsXG4gIHdhcm5pbmc6IDIsXG4gIGluZm86IDMsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaHVtYW5GcmllbmRseUZpbGVuYW1lKHJvb3Q6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGFic1BhdGggPSBmaWxlbmFtZTtcbiAgY29uc3QgcmVsUGF0aCA9IHBhdGgucmVsYXRpdmUocm9vdCwgZmlsZW5hbWUpO1xuICByZXR1cm4gcmVsUGF0aC5sZW5ndGggPCBhYnNQYXRoLmxlbmd0aCA/IHJlbFBhdGggOiBhYnNQYXRoO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luRXJyb3Ige1xuICByZWFkb25seSBlcnJvcjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc1BsdWdpbkZhaWx1cmUocjogUGx1Z2luUmVwb3J0SnNvbik6IFBsdWdpbkVycm9yIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHIuY29uY2x1c2lvbiA9PT0gJ3N1Y2Nlc3MnIHx8IHIudmlvbGF0aW9ucy5sZW5ndGggPiAwIHx8ICFyLm1ldGFkYXRhPy5lcnJvcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHsgZXJyb3I6IHIubWV0YWRhdGEuZXJyb3IgfTtcbn1cblxuLyoqXG4gKiBSZXBvcnQgd2hldGhlciBpdCBpcyBwb3NzaWJsZSB0byBzdXBwcmVzcyB0aGlzIHZpb2xhdGlvbi5cbiAqXG4gKiBWaW9sYXRpb25zIHRoYXQgYXJlIHJlcG9ydGVkIGFzIFwiZmF0YWxcIiwgb3IgdGhhdCBoYXZlIGJlZW4gY29udmVydGVkIGZyb20gYW5ub3RhdGlvbnMsIGNhbm5vdCBiZSBzdXBwcmVzc2VkLlxuICovXG5mdW5jdGlvbiBpc1N1cHByZXNzaWJsZVZpb2xhdGlvbih2aW9sYXRpb246IHsgc2V2ZXJpdHk/OiBzdHJpbmc7IHJ1bGVNZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSk6IGJvb2xlYW4ge1xuICBjb25zdCBpc0ZhdGFsID0gdmlvbGF0aW9uLnNldmVyaXR5Py50b0xvd2VyQ2FzZSgpID09PSAnZmF0YWwnO1xuICBjb25zdCBpc0Vycm9yQW5ub3RhdGlvbiA9IHZpb2xhdGlvbi5ydWxlTWV0YWRhdGE/LlsnY2RrOmFubm90YXRpb24nXSAmJiB2aW9sYXRpb24uc2V2ZXJpdHk/LnRvTG93ZXJDYXNlKCkgPT09ICdlcnJvcic7XG4gIHJldHVybiAhaXNGYXRhbCAmJiAhaXNFcnJvckFubm90YXRpb247XG59XG4iXX0=
@@ -206,9 +206,16 @@ export interface HotswapResult extends Duration, HotswapDeploymentDetails {
206
206
  /**
207
207
  * Whether hotswapping happened or not.
208
208
  *
209
- * `false` indicates that the deployment could not be hotswapped and full deployment may be attempted as fallback.
209
+ * `false` indicates that the deployment failed during the hotswap step or that the deployment
210
+ * could not be hotswapped and full deployment may be attempted as fallback.
210
211
  */
211
212
  readonly hotswapped: boolean;
213
+ /**
214
+ * Whether a hotswap fallback deployment is being completed
215
+ *
216
+ * `true` indicates a full deployment is being attempted
217
+ */
218
+ readonly hotswapFallback: boolean;
212
219
  /**
213
220
  * An error that occurred during the hotswap deployment, if any.
214
221
  *
@@ -40,4 +40,4 @@ var NonHotswappableReason;
40
40
  */
41
41
  NonHotswappableReason["NESTED_STACK_CREATION"] = "nested-stack-creation";
42
42
  })(NonHotswappableReason || (exports.NonHotswappableReason = NonHotswappableReason = {}));
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUZBLElBQVkscUJBcUNYO0FBckNELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsc0NBQWEsQ0FBQTtJQUNiOztPQUVHO0lBQ0gsa0RBQXlCLENBQUE7SUFDekI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBFQUFpRCxDQUFBO0lBQ2pEOztPQUVHO0lBQ0gsc0VBQTZDLENBQUE7SUFDN0M7O09BRUc7SUFDSCxnRUFBdUMsQ0FBQTtJQUN2Qzs7T0FFRztJQUNILGdFQUF1QyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0gsd0VBQStDLENBQUE7SUFDL0M7O09BRUc7SUFDSCx3RUFBK0MsQ0FBQTtBQUNqRCxDQUFDLEVBckNXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBcUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEaWZmZXJlbmNlLCBSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBEdXJhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSAnLi4vYXBpL3Jlc291cmNlLW1ldGFkYXRhL3Jlc291cmNlLW1ldGFkYXRhJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2VNZXRhZGF0YSB9IGZyb20gJy4uL2FwaS9yZXNvdXJjZS1tZXRhZGF0YS9yZXNvdXJjZS1tZXRhZGF0YSc7XG5cbi8qKlxuICogQSByZXNvdXJjZSBhZmZlY3RlZCBieSBhIGNoYW5nZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFmZmVjdGVkUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICogVGhpcyBjb3VsZCBiZSBhIGN1c3RvbSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZnJpZW5kbHkgZGVzY3JpcHRpb24gb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSByZXNvdXJjZSB3aGVuIGRlcGxveWVkLlxuICAgKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgaXMgbm90IGFsd2F5cyBhdmFpbGFibGUsIGUuZy4gbmV3IHJlc291cmNlcyB3aWxsIG5vdCBoYXZlIG9uZSB1bnRpbCBhZnRlciB0aGUgZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNoYW5nZSBpbiBhIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoaWNoIGlzIGJlaW5nIGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSByZXNvdXJjZSBpcyBiZWluZyB1cGRhdGVkIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBSZXNvdXJjZTtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUgcmVzb3VyY2UgaXMgYmVpbmcgdXBkYXRlZCB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbmV3VmFsdWU6IFJlc291cmNlO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydHlVcGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eURpZmZlcmVuY2U8dW5rbm93bj4+O1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogQSBjaGFuZ2UgdGhhdCBjYW4gYmUgaG90c3dhcHBlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBwYWJsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgY2hhbmdlIHRoYXQgaXMgY2F1c2luZyB0aGUgaG90c3dhcC5cbiAgICovXG4gIHJlYWRvbmx5IGNhdXNlOiBSZXNvdXJjZUNoYW5nZTtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgYmVpbmcgaG90c3dhcHBlZCBhcyBwYXJ0IG9mIHRoZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlczogQWZmZWN0ZWRSZXNvdXJjZVtdO1xufVxuXG5leHBvcnQgZW51bSBOb25Ib3Rzd2FwcGFibGVSZWFzb24ge1xuICAvKipcbiAgICogVGFncyBhcmUgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgVEFHUyA9ICd0YWdzJyxcbiAgLyoqXG4gICAqIENoYW5nZWQgcmVzb3VyY2UgcHJvcGVydGllcyBhcmUgbm90IGhvdHN3YXBwYWJsZSBvbiB0aGlzIHJlc291cmNlIHR5cGVcbiAgICovXG4gIFBST1BFUlRJRVMgPSAncHJvcGVydGllcycsXG4gIC8qKlxuICAgKiBBIHN0YWNrIG91dHB1dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgT1VUUFVUID0gJ291dHB1dCcsXG4gIC8qKlxuICAgKiBBIGRlcGVuZGFudCByZXNvdXJjZSBpcyBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICBERVBFTkRFTkNZX1VOU1VQUE9SVEVEID0gJ2RlcGVuZGVuY3ktdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIHR5cGUgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgUkVTT1VSQ0VfVU5TVVBQT1JURUQgPSAncmVzb3VyY2UtdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIFJFU09VUkNFX0NSRUFUSU9OID0gJ3Jlc291cmNlLWNyZWF0aW9uJyxcbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBpcyByZW1vdmVkIGluIHRoZSBkZXBsb3ltZW50XG4gICAqL1xuICBSRVNPVVJDRV9ERUxFVElPTiA9ICdyZXNvdXJjZS1kZWxldGlvbicsXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgaWRlbnRpZmllZCBieSB0aGUgbG9naWNhbCBpZCBoYXMgaXRzIHR5cGUgY2hhbmdlZFxuICAgKi9cbiAgUkVTT1VSQ0VfVFlQRV9DSEFOR0VEID0gJ3Jlc291cmNlLXR5cGUtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBUaGUgbmVzdGVkIHN0YWNrIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIE5FU1RFRF9TVEFDS19DUkVBVElPTiA9ICduZXN0ZWQtc3RhY2stY3JlYXRpb24nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHJlamVjdGlvbiBzdWJqZWN0LCBlLmcuIFJlc291cmNlIG9yIE91dHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBvZiB0aGUgY2hhbmdlIHRoYXQgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgbG9naWNhbCBpZCBmcm9tIHRoZSBjbG91ZCBhc3NlbWJseVxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgcmVzb3VyY2UgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBDbG91ZCBBc3NlbWJseSxcbiAgICogaS5lLiByZXNvdXJjZSBkZWxldGlvbnMgd2lsbCBub3QgaGF2ZSBtZXRhZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVzb3VyY2VNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVN1YmplY3QgZXh0ZW5kcyBSZWplY3Rpb25TdWJqZWN0IHtcbiAgLyoqXG4gICAqIEEgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdSZXNvdXJjZSc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IGFyZSBjYXVzZSBmb3IgdGhlIHJlamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVqZWN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0U3ViamVjdCBleHRlbmRzIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogQSByZWplY3RlZCBvdXRwdXRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdPdXRwdXQnO1xufVxuXG4vKipcbiAqIEEgY2hhbmdlIHRoYXQgY2FuIG5vdCBiZSBob3Rzd2FwcGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uSG90c3dhcHBhYmxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJqZWN0IG9mIHRoZSBjaGFuZ2UgdGhhdCB3YXMgcmVqZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1YmplY3Q6IFJlc291cmNlU3ViamVjdCB8IE91dHB1dFN1YmplY3Q7XG4gIC8qKlxuICAgKiBXaHkgd2FzIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbm9uLWhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb247XG4gIC8qKlxuICAgKiBUZWxscyB0aGUgdXNlciBleGFjdGx5IHdoeSB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5vbi1ob3Rzd2FwcGFibGUgYW5kIHdoYXQgaXRzIGxvZ2ljYWwgSUQgaXMuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGBkaXNwbGF5UmVhc29uYCBkZWZhdWx0IHRvIHN0YXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgbGlzdGVkIGluIGByZWplY3RlZENoYW5nZXNgIGFyZSBub3QgaG90c3dhcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwRGVwbG95bWVudEF0dGVtcHQge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlIHRoZSBob3Rzd2FwIGRlcGxveW1lbnQgd2FzIGluaXRpYXRlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogJ2hvdHN3YXAtb25seScgfCAnZmFsbC1iYWNrJztcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhvdHN3YXAgZGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgdGhlIGhvdHN3YXAgZGVwbG95bWVudCB3YXMgaW5pdGlhdGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBtb2RlOiAnaG90c3dhcC1vbmx5JyB8ICdmYWxsLWJhY2snO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBwYWJsZUNoYW5nZVtdO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICByZWFkb25seSBub25Ib3Rzd2FwcGFibGVDaGFuZ2VzOiBOb25Ib3Rzd2FwcGFibGVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGF0dGVtcHRlZCBob3Rzd2FwIGRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwUmVzdWx0IGV4dGVuZHMgRHVyYXRpb24sIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGhvdHN3YXBwaW5nIGhhcHBlbmVkIG9yIG5vdC5cbiAgICpcbiAgICogYGZhbHNlYCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVwbG95bWVudCBjb3VsZCBub3QgYmUgaG90c3dhcHBlZCBhbmQgZnVsbCBkZXBsb3ltZW50IG1heSBiZSBhdHRlbXB0ZWQgYXMgZmFsbGJhY2suXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwcGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgaG90c3dhcCBkZXBsb3ltZW50LCBpZiBhbnkuXG4gICAqXG4gICAqIFdoZW4gc2V0LCBgaG90c3dhcHBlZGAgd2lsbCBiZSBgZmFsc2VgLiBUaGUgZXJyb3IgaXMgY2FwdHVyZWQgc28gdGhhdFxuICAgKiB0aGUgaG90c3dhcCBzcGFuIGNhbiBiZSBlbmRlZCB3aXRoIGZ1bGwgY29udGV4dCBiZWZvcmUgcmUtdGhyb3dpbmcuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuIl19
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhvdHN3YXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUZBLElBQVkscUJBcUNYO0FBckNELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsc0NBQWEsQ0FBQTtJQUNiOztPQUVHO0lBQ0gsa0RBQXlCLENBQUE7SUFDekI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBFQUFpRCxDQUFBO0lBQ2pEOztPQUVHO0lBQ0gsc0VBQTZDLENBQUE7SUFDN0M7O09BRUc7SUFDSCxnRUFBdUMsQ0FBQTtJQUN2Qzs7T0FFRztJQUNILGdFQUF1QyxDQUFBO0lBQ3ZDOztPQUVHO0lBQ0gsd0VBQStDLENBQUE7SUFDL0M7O09BRUc7SUFDSCx3RUFBK0MsQ0FBQTtBQUNqRCxDQUFDLEVBckNXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBcUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlEaWZmZXJlbmNlLCBSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBEdXJhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZU1ldGFkYXRhIH0gZnJvbSAnLi4vYXBpL3Jlc291cmNlLW1ldGFkYXRhL3Jlc291cmNlLW1ldGFkYXRhJztcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2VNZXRhZGF0YSB9IGZyb20gJy4uL2FwaS9yZXNvdXJjZS1tZXRhZGF0YS9yZXNvdXJjZS1tZXRhZGF0YSc7XG5cbi8qKlxuICogQSByZXNvdXJjZSBhZmZlY3RlZCBieSBhIGNoYW5nZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFmZmVjdGVkUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlIGluIHRoZSB0ZW1wbGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICogVGhpcyBjb3VsZCBiZSBhIGN1c3RvbSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZnJpZW5kbHkgZGVzY3JpcHRpb24gb2YgdGhlIGFmZmVjdGVkIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSByZXNvdXJjZSB3aGVuIGRlcGxveWVkLlxuICAgKlxuICAgKiBBIHBoeXNpY2FsIG5hbWUgaXMgbm90IGFsd2F5cyBhdmFpbGFibGUsIGUuZy4gbmV3IHJlc291cmNlcyB3aWxsIG5vdCBoYXZlIG9uZSB1bnRpbCBhZnRlciB0aGUgZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNoYW5nZSBpbiBhIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoaWNoIGlzIGJlaW5nIGNoYW5nZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2ljYWxJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSByZXNvdXJjZSBpcyBiZWluZyB1cGRhdGVkIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBSZXNvdXJjZTtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0aGUgcmVzb3VyY2UgaXMgYmVpbmcgdXBkYXRlZCB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbmV3VmFsdWU6IFJlc291cmNlO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGVydHlVcGRhdGVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eURpZmZlcmVuY2U8dW5rbm93bj4+O1xuICAvKipcbiAgICogUmVzb3VyY2UgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIGxvZ2ljYWwgaWQgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHlcbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IHByZXNlbnQgaWYgdGhlIHJlc291cmNlIGlzIHByZXNlbnQgaW4gdGhlIGN1cnJlbnQgQ2xvdWQgQXNzZW1ibHksXG4gICAqIGkuZS4gcmVzb3VyY2UgZGVsZXRpb25zIHdpbGwgbm90IGhhdmUgbWV0YWRhdGEuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlc291cmNlTWV0YWRhdGE7XG59XG5cbi8qKlxuICogQSBjaGFuZ2UgdGhhdCBjYW4gYmUgaG90c3dhcHBlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBwYWJsZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgY2hhbmdlIHRoYXQgaXMgY2F1c2luZyB0aGUgaG90c3dhcC5cbiAgICovXG4gIHJlYWRvbmx5IGNhdXNlOiBSZXNvdXJjZUNoYW5nZTtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgYmVpbmcgaG90c3dhcHBlZCBhcyBwYXJ0IG9mIHRoZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlczogQWZmZWN0ZWRSZXNvdXJjZVtdO1xufVxuXG5leHBvcnQgZW51bSBOb25Ib3Rzd2FwcGFibGVSZWFzb24ge1xuICAvKipcbiAgICogVGFncyBhcmUgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgVEFHUyA9ICd0YWdzJyxcbiAgLyoqXG4gICAqIENoYW5nZWQgcmVzb3VyY2UgcHJvcGVydGllcyBhcmUgbm90IGhvdHN3YXBwYWJsZSBvbiB0aGlzIHJlc291cmNlIHR5cGVcbiAgICovXG4gIFBST1BFUlRJRVMgPSAncHJvcGVydGllcycsXG4gIC8qKlxuICAgKiBBIHN0YWNrIG91dHB1dCBoYXMgY2hhbmdlZFxuICAgKi9cbiAgT1VUUFVUID0gJ291dHB1dCcsXG4gIC8qKlxuICAgKiBBIGRlcGVuZGFudCByZXNvdXJjZSBpcyBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICBERVBFTkRFTkNZX1VOU1VQUE9SVEVEID0gJ2RlcGVuZGVuY3ktdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIHR5cGUgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgUkVTT1VSQ0VfVU5TVVBQT1JURUQgPSAncmVzb3VyY2UtdW5zdXBwb3J0ZWQnLFxuICAvKipcbiAgICogVGhlIHJlc291cmNlIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIFJFU09VUkNFX0NSRUFUSU9OID0gJ3Jlc291cmNlLWNyZWF0aW9uJyxcbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBpcyByZW1vdmVkIGluIHRoZSBkZXBsb3ltZW50XG4gICAqL1xuICBSRVNPVVJDRV9ERUxFVElPTiA9ICdyZXNvdXJjZS1kZWxldGlvbicsXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgaWRlbnRpZmllZCBieSB0aGUgbG9naWNhbCBpZCBoYXMgaXRzIHR5cGUgY2hhbmdlZFxuICAgKi9cbiAgUkVTT1VSQ0VfVFlQRV9DSEFOR0VEID0gJ3Jlc291cmNlLXR5cGUtY2hhbmdlZCcsXG4gIC8qKlxuICAgKiBUaGUgbmVzdGVkIHN0YWNrIGlzIGNyZWF0ZWQgaW4gdGhlIGRlcGxveW1lbnRcbiAgICovXG4gIE5FU1RFRF9TVEFDS19DUkVBVElPTiA9ICduZXN0ZWQtc3RhY2stY3JlYXRpb24nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHJlamVjdGlvbiBzdWJqZWN0LCBlLmcuIFJlc291cmNlIG9yIE91dHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9naWNhbCBJRCBvZiB0aGUgY2hhbmdlIHRoYXQgaXMgbm90IGhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXNvdXJjZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgbG9naWNhbCBpZCBmcm9tIHRoZSBjbG91ZCBhc3NlbWJseVxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgcHJlc2VudCBpZiB0aGUgcmVzb3VyY2UgaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudCBDbG91ZCBBc3NlbWJseSxcbiAgICogaS5lLiByZXNvdXJjZSBkZWxldGlvbnMgd2lsbCBub3QgaGF2ZSBtZXRhZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVzb3VyY2VNZXRhZGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVN1YmplY3QgZXh0ZW5kcyBSZWplY3Rpb25TdWJqZWN0IHtcbiAgLyoqXG4gICAqIEEgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdSZXNvdXJjZSc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVqZWN0ZWQgcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0aGF0IGFyZSBjYXVzZSBmb3IgdGhlIHJlamVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVqZWN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0U3ViamVjdCBleHRlbmRzIFJlamVjdGlvblN1YmplY3Qge1xuICAvKipcbiAgICogQSByZWplY3RlZCBvdXRwdXRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6ICdPdXRwdXQnO1xufVxuXG4vKipcbiAqIEEgY2hhbmdlIHRoYXQgY2FuIG5vdCBiZSBob3Rzd2FwcGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9uSG90c3dhcHBhYmxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJqZWN0IG9mIHRoZSBjaGFuZ2UgdGhhdCB3YXMgcmVqZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1YmplY3Q6IFJlc291cmNlU3ViamVjdCB8IE91dHB1dFN1YmplY3Q7XG4gIC8qKlxuICAgKiBXaHkgd2FzIHRoaXMgY2hhbmdlIHdhcyBkZWVtZWQgbm9uLWhvdHN3YXBwYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBOb25Ib3Rzd2FwcGFibGVSZWFzb247XG4gIC8qKlxuICAgKiBUZWxscyB0aGUgdXNlciBleGFjdGx5IHdoeSB0aGlzIGNoYW5nZSB3YXMgZGVlbWVkIG5vbi1ob3Rzd2FwcGFibGUgYW5kIHdoYXQgaXRzIGxvZ2ljYWwgSUQgaXMuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGBkaXNwbGF5UmVhc29uYCBkZWZhdWx0IHRvIHN0YXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgbGlzdGVkIGluIGByZWplY3RlZENoYW5nZXNgIGFyZSBub3QgaG90c3dhcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwRGVwbG95bWVudEF0dGVtcHQge1xuICAvKipcbiAgICogVGhlIHN0YWNrIHRoYXQncyBjdXJyZW50bHkgYmVpbmcgZGVwbG95ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlIHRoZSBob3Rzd2FwIGRlcGxveW1lbnQgd2FzIGluaXRpYXRlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogJ2hvdHN3YXAtb25seScgfCAnZmFsbC1iYWNrJztcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCBhIGhvdHN3YXAgZGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBkZXBsb3llZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIG1vZGUgdGhlIGhvdHN3YXAgZGVwbG95bWVudCB3YXMgaW5pdGlhdGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBtb2RlOiAnaG90c3dhcC1vbmx5JyB8ICdmYWxsLWJhY2snO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBob3Rzd2FwcGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGhvdHN3YXBwYWJsZUNoYW5nZXM6IEhvdHN3YXBwYWJsZUNoYW5nZVtdO1xuICAvKipcbiAgICogVGhlIGNoYW5nZXMgdGhhdCB3ZXJlIGRlZW1lZCBub3QgaG90c3dhcHBhYmxlXG4gICAqL1xuICByZWFkb25seSBub25Ib3Rzd2FwcGFibGVDaGFuZ2VzOiBOb25Ib3Rzd2FwcGFibGVDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGFuIGF0dGVtcHRlZCBob3Rzd2FwIGRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3Rzd2FwUmVzdWx0IGV4dGVuZHMgRHVyYXRpb24sIEhvdHN3YXBEZXBsb3ltZW50RGV0YWlscyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGhvdHN3YXBwaW5nIGhhcHBlbmVkIG9yIG5vdC5cbiAgICpcbiAgICogYGZhbHNlYCBpbmRpY2F0ZXMgdGhhdCB0aGUgZGVwbG95bWVudCBmYWlsZWQgZHVyaW5nIHRoZSBob3Rzd2FwIHN0ZXAgb3IgdGhhdCB0aGUgZGVwbG95bWVudFxuICAgKiBjb3VsZCBub3QgYmUgaG90c3dhcHBlZCBhbmQgZnVsbCBkZXBsb3ltZW50IG1heSBiZSBhdHRlbXB0ZWQgYXMgZmFsbGJhY2suXG4gICAqL1xuICByZWFkb25seSBob3Rzd2FwcGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgaG90c3dhcCBmYWxsYmFjayBkZXBsb3ltZW50IGlzIGJlaW5nIGNvbXBsZXRlZFxuICAgKlxuICAgKiBgdHJ1ZWAgaW5kaWNhdGVzIGEgZnVsbCBkZXBsb3ltZW50IGlzIGJlaW5nIGF0dGVtcHRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaG90c3dhcEZhbGxiYWNrOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyB0aGUgaG90c3dhcCBkZXBsb3ltZW50LCBpZiBhbnkuXG4gICAqXG4gICAqIFdoZW4gc2V0LCBgaG90c3dhcHBlZGAgd2lsbCBiZSBgZmFsc2VgLiBUaGUgZXJyb3IgaXMgY2FwdHVyZWQgc28gdGhhdFxuICAgKiB0aGUgaG90c3dhcCBzcGFuIGNhbiBiZSBlbmRlZCB3aXRoIGZ1bGwgY29udGV4dCBiZWZvcmUgcmUtdGhyb3dpbmcuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuIl19
@@ -17,9 +17,11 @@ var require_zip = __commonJS({
17
17
  exports2.zipString = zipString;
18
18
  var fs_1 = require("fs");
19
19
  var path = require("path");
20
- var stream_1 = require("stream");
21
20
  var fast_glob_1 = require("fast-glob");
22
- var archiver = require("archiver");
21
+ var yazl_1 = require("yazl");
22
+ function epoch() {
23
+ return new Date(1980, 0, 1, 0, 0, 0);
24
+ }
23
25
  async function zipDirectory(directory, outputFile, eventEmitter = () => {
24
26
  }) {
25
27
  const temporaryOutputFile = `${outputFile}.${randomString()}._tmp`;
@@ -29,20 +31,18 @@ var require_zip = __commonJS({
29
31
  function zipString(fileName, rawString) {
30
32
  return new Promise((resolve, reject) => {
31
33
  const buffers = [];
32
- const converter = new stream_1.Writable();
33
- converter._write = (chunk, _, callback) => {
34
- buffers.push(chunk);
35
- process.nextTick(callback);
36
- };
37
- converter.on("finish", () => resolve(Buffer.concat(buffers)));
38
- const archive = archiver("zip");
39
- archive.on("error", reject);
40
- archive.pipe(converter);
41
- archive.append(rawString, {
42
- name: fileName,
43
- date: /* @__PURE__ */ new Date("1980-01-01T00:00:00.000Z")
34
+ const zip = new yazl_1.ZipFile();
35
+ zip.outputStream.on("data", (chunk) => buffers.push(chunk));
36
+ zip.outputStream.on("error", reject);
37
+ zip.outputStream.on("end", () => resolve(Buffer.concat(buffers)));
38
+ zip.addBuffer(Buffer.from(rawString), fileName, {
39
+ mtime: epoch(),
40
+ // reset date to get the same hash for the same content
41
+ // Only emit the DOS timestamp (no UTC "universal time" extended field),
42
+ // so the archive bytes do not depend on the machine's timezone.
43
+ forceDosTimestamp: true
44
44
  });
45
- void archive.finalize();
45
+ zip.end();
46
46
  });
47
47
  }
48
48
  function writeZipFile(directory, outputFile) {
@@ -54,23 +54,25 @@ var require_zip = __commonJS({
54
54
  cwd: directory
55
55
  };
56
56
  const files = (0, fast_glob_1.globSync)("**", globOptions);
57
+ const zip = new yazl_1.ZipFile();
58
+ zip.outputStream.on("error", fail);
57
59
  const output = (0, fs_1.createWriteStream)(outputFile);
58
- const archive = archiver("zip");
59
- archive.on("warning", fail);
60
- archive.on("error", fail);
60
+ output.on("error", fail);
61
61
  output.once("close", ok);
62
- archive.pipe(output);
62
+ zip.outputStream.pipe(output);
63
63
  for (const file of files) {
64
64
  const fullPath = path.resolve(directory, file);
65
65
  const [data, stat] = await Promise.all([fs_1.promises.readFile(fullPath), fs_1.promises.stat(fullPath)]);
66
- archive.append(data, {
67
- name: file,
68
- date: /* @__PURE__ */ new Date("1980-01-01T00:00:00.000Z"),
66
+ zip.addBuffer(data, file, {
67
+ mtime: epoch(),
69
68
  // reset dates to get the same hash for the same content
70
- mode: stat.mode
69
+ mode: stat.mode,
70
+ // Only emit the DOS timestamp (no UTC "universal time" extended field),
71
+ // so the archive bytes do not depend on the machine's timezone.
72
+ forceDosTimestamp: true
71
73
  });
72
74
  }
73
- await archive.finalize();
75
+ zip.end();
74
76
  });
75
77
  }
76
78
  async function moveIntoPlace(source, target, eventEmitter) {
@@ -0,0 +1,12 @@
1
+ import type * as cxschema from '@aws-cdk/cloud-assembly-schema';
2
+ import type { StackCollection } from '../../api/cloud-assembly/stack-collection';
3
+ /**
4
+ * Collect annotation metadata (warnings and errors) from the construct tree
5
+ * and convert them into a NamedValidationPluginReport that can be merged
6
+ * into the same report pipeline as plugin violations.
7
+ *
8
+ * Effectively the same as what happens here:
9
+ * <https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/core/lib/private/collect-annotation-report.ts>
10
+ */
11
+ export declare function collectAnnotationReport(stacks: StackCollection): cxschema.PluginReportJson;
12
+ //# sourceMappingURL=collect-annotation-report.d.ts.map
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collectAnnotationReport = collectAnnotationReport;
4
+ const cxapi = require("@aws-cdk/cloud-assembly-api");
5
+ const ANNOTATION_PLUGIN_NAME = 'Construct Annotations';
6
+ /**
7
+ * Collect annotation metadata (warnings and errors) from the construct tree
8
+ * and convert them into a NamedValidationPluginReport that can be merged
9
+ * into the same report pipeline as plugin violations.
10
+ *
11
+ * Effectively the same as what happens here:
12
+ * <https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/core/lib/private/collect-annotation-report.ts>
13
+ */
14
+ function collectAnnotationReport(stacks) {
15
+ // The return type requires that we combine violations by rule, so we have to group them first here.
16
+ const ruleMap = new Map();
17
+ for (const stack of stacks.stackArtifacts) {
18
+ for (const entry of stack.messages) {
19
+ let severity;
20
+ switch (entry.level) {
21
+ case cxapi.SynthesisMessageLevel.WARNING:
22
+ severity = 'warning';
23
+ break;
24
+ case cxapi.SynthesisMessageLevel.ERROR:
25
+ severity = 'error';
26
+ break;
27
+ case cxapi.SynthesisMessageLevel.INFO:
28
+ severity = 'info';
29
+ break;
30
+ }
31
+ const { message, ruleName } = splitDescriptionAndId(String(entry.entry.data));
32
+ const ruleKey = `${ruleName}|${severity}|${message}`;
33
+ let violation = ruleMap.get(ruleKey);
34
+ if (!violation) {
35
+ violation = {
36
+ ruleName: ruleName ?? `${severity}-annotation`,
37
+ description: message,
38
+ severity,
39
+ violatingConstructs: [],
40
+ ruleMetadata: {
41
+ 'cdk:annotation': 'true',
42
+ },
43
+ };
44
+ ruleMap.set(ruleKey, violation);
45
+ }
46
+ violation.violatingConstructs.push({
47
+ constructPath: entry.id.replace(/^\//, ''), // remove leading slash
48
+ // TODO: see if this information can be obtained from tree.json
49
+ // cloudFormationResource
50
+ // constructFqn:
51
+ // libraryVersion
52
+ // TODO: see if we can get this from metadata stack traces. We may need to re-enable them for
53
+ // annotations in the core library. Otherwise we should probably get a stack trace to the resource itself.
54
+ // stackTraces
55
+ });
56
+ }
57
+ }
58
+ const violations = Array.from(ruleMap.values());
59
+ const hasErrors = violations.some(v => v.severity === 'error');
60
+ return {
61
+ pluginName: ANNOTATION_PLUGIN_NAME,
62
+ conclusion: hasErrors ? 'failure' : 'success',
63
+ violations,
64
+ };
65
+ }
66
+ /**
67
+ * Annotations have IDs in two places:
68
+ *
69
+ * - Warnings have `[ack:<id>]` in the message.
70
+ * - Errors have `(<namespace>::<id>)` in the message.
71
+ *
72
+ * Separate the rule name from the rest of the description.
73
+ */
74
+ function splitDescriptionAndId(message) {
75
+ const ackMatch = message.match(/\[ack: ([^\]]+)\]/);
76
+ if (ackMatch) {
77
+ return { message: message.replace(ackMatch[0], '').trim(), ruleName: ackMatch[1] };
78
+ }
79
+ const idMatch = message.match(/\(([^()]+::[^()]+)\)$/);
80
+ if (idMatch) {
81
+ return { message: message.replace(idMatch[0], '').trim(), ruleName: idMatch[1] };
82
+ }
83
+ return { message };
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdC1hbm5vdGF0aW9uLXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbGxlY3QtYW5ub3RhdGlvbi1yZXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSwwREEwREM7QUF4RUQscURBQXFEO0FBSXJELE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7QUFFdkQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLE1BQXVCO0lBQzdELG9HQUFvRztJQUNwRyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBd0MsQ0FBQztJQUVoRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLFFBQXNELENBQUM7WUFFM0QsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU87b0JBQ3RDLFFBQVEsR0FBRyxTQUFTLENBQUM7b0JBQ3JCLE1BQU07Z0JBQ1IsS0FBSyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSztvQkFDcEMsUUFBUSxHQUFHLE9BQU8sQ0FBQztvQkFDbkIsTUFBTTtnQkFDUixLQUFLLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO29CQUNuQyxRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixNQUFNO1lBQ1YsQ0FBQztZQUVELE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RSxNQUFNLE9BQU8sR0FBRyxHQUFHLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7WUFDckQsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxHQUFHO29CQUNWLFFBQVEsRUFBRSxRQUFRLElBQUksR0FBRyxRQUFRLGFBQWE7b0JBQzlDLFdBQVcsRUFBRSxPQUFPO29CQUNwQixRQUFRO29CQUNSLG1CQUFtQixFQUFFLEVBQUU7b0JBQ3ZCLFlBQVksRUFBRTt3QkFDWixnQkFBZ0IsRUFBRSxNQUFNO3FCQUN6QjtpQkFDRixDQUFDO2dCQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFFRCxTQUFTLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtnQkFFbkUsK0RBQStEO2dCQUMvRCx5QkFBeUI7Z0JBQ3pCLGdCQUFnQjtnQkFDaEIsaUJBQWlCO2dCQUVqQiw2RkFBNkY7Z0JBQzdGLDBHQUEwRztnQkFDMUcsY0FBYzthQUNmLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztJQUMvRCxPQUFPO1FBQ0wsVUFBVSxFQUFFLHNCQUFzQjtRQUNsQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDN0MsVUFBVTtLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMscUJBQXFCLENBQUMsT0FBZTtJQUM1QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEQsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdkQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL2FwaS9jbG91ZC1hc3NlbWJseS9zdGFjay1jb2xsZWN0aW9uJztcblxuY29uc3QgQU5OT1RBVElPTl9QTFVHSU5fTkFNRSA9ICdDb25zdHJ1Y3QgQW5ub3RhdGlvbnMnO1xuXG4vKipcbiAqIENvbGxlY3QgYW5ub3RhdGlvbiBtZXRhZGF0YSAod2FybmluZ3MgYW5kIGVycm9ycykgZnJvbSB0aGUgY29uc3RydWN0IHRyZWVcbiAqIGFuZCBjb252ZXJ0IHRoZW0gaW50byBhIE5hbWVkVmFsaWRhdGlvblBsdWdpblJlcG9ydCB0aGF0IGNhbiBiZSBtZXJnZWRcbiAqIGludG8gdGhlIHNhbWUgcmVwb3J0IHBpcGVsaW5lIGFzIHBsdWdpbiB2aW9sYXRpb25zLlxuICpcbiAqIEVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIHdoYXQgaGFwcGVucyBoZXJlOlxuICogPGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvcHJpdmF0ZS9jb2xsZWN0LWFubm90YXRpb24tcmVwb3J0LnRzPlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEFubm90YXRpb25SZXBvcnQoc3RhY2tzOiBTdGFja0NvbGxlY3Rpb24pOiBjeHNjaGVtYS5QbHVnaW5SZXBvcnRKc29uIHtcbiAgLy8gVGhlIHJldHVybiB0eXBlIHJlcXVpcmVzIHRoYXQgd2UgY29tYmluZSB2aW9sYXRpb25zIGJ5IHJ1bGUsIHNvIHdlIGhhdmUgdG8gZ3JvdXAgdGhlbSBmaXJzdCBoZXJlLlxuICBjb25zdCBydWxlTWFwID0gbmV3IE1hcDxzdHJpbmcsIGN4c2NoZW1hLlBvbGljeVZpb2xhdGlvbkpzb24+KCk7XG5cbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3Muc3RhY2tBcnRpZmFjdHMpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHN0YWNrLm1lc3NhZ2VzKSB7XG4gICAgICBsZXQgc2V2ZXJpdHk6IGN4c2NoZW1hLlBvbGljeVZpb2xhdGlvblNldmVyaXR5IHwgdW5kZWZpbmVkO1xuXG4gICAgICBzd2l0Y2ggKGVudHJ5LmxldmVsKSB7XG4gICAgICAgIGNhc2UgY3hhcGkuU3ludGhlc2lzTWVzc2FnZUxldmVsLldBUk5JTkc6XG4gICAgICAgICAgc2V2ZXJpdHkgPSAnd2FybmluZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY3hhcGkuU3ludGhlc2lzTWVzc2FnZUxldmVsLkVSUk9SOlxuICAgICAgICAgIHNldmVyaXR5ID0gJ2Vycm9yJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjeGFwaS5TeW50aGVzaXNNZXNzYWdlTGV2ZWwuSU5GTzpcbiAgICAgICAgICBzZXZlcml0eSA9ICdpbmZvJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlLCBydWxlTmFtZSB9ID0gc3BsaXREZXNjcmlwdGlvbkFuZElkKFN0cmluZyhlbnRyeS5lbnRyeS5kYXRhKSk7XG4gICAgICBjb25zdCBydWxlS2V5ID0gYCR7cnVsZU5hbWV9fCR7c2V2ZXJpdHl9fCR7bWVzc2FnZX1gO1xuICAgICAgbGV0IHZpb2xhdGlvbiA9IHJ1bGVNYXAuZ2V0KHJ1bGVLZXkpO1xuICAgICAgaWYgKCF2aW9sYXRpb24pIHtcbiAgICAgICAgdmlvbGF0aW9uID0ge1xuICAgICAgICAgIHJ1bGVOYW1lOiBydWxlTmFtZSA/PyBgJHtzZXZlcml0eX0tYW5ub3RhdGlvbmAsXG4gICAgICAgICAgZGVzY3JpcHRpb246IG1lc3NhZ2UsXG4gICAgICAgICAgc2V2ZXJpdHksXG4gICAgICAgICAgdmlvbGF0aW5nQ29uc3RydWN0czogW10sXG4gICAgICAgICAgcnVsZU1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnY2RrOmFubm90YXRpb24nOiAndHJ1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcnVsZU1hcC5zZXQocnVsZUtleSwgdmlvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdmlvbGF0aW9uLnZpb2xhdGluZ0NvbnN0cnVjdHMucHVzaCh7XG4gICAgICAgIGNvbnN0cnVjdFBhdGg6IGVudHJ5LmlkLnJlcGxhY2UoL15cXC8vLCAnJyksIC8vIHJlbW92ZSBsZWFkaW5nIHNsYXNoXG5cbiAgICAgICAgLy8gVE9ETzogc2VlIGlmIHRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdHJlZS5qc29uXG4gICAgICAgIC8vIGNsb3VkRm9ybWF0aW9uUmVzb3VyY2VcbiAgICAgICAgLy8gY29uc3RydWN0RnFuOlxuICAgICAgICAvLyBsaWJyYXJ5VmVyc2lvblxuXG4gICAgICAgIC8vIFRPRE86IHNlZSBpZiB3ZSBjYW4gZ2V0IHRoaXMgZnJvbSBtZXRhZGF0YSBzdGFjayB0cmFjZXMuIFdlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIGZvclxuICAgICAgICAvLyBhbm5vdGF0aW9ucyBpbiB0aGUgY29yZSBsaWJyYXJ5LiBPdGhlcndpc2Ugd2Ugc2hvdWxkIHByb2JhYmx5IGdldCBhIHN0YWNrIHRyYWNlIHRvIHRoZSByZXNvdXJjZSBpdHNlbGYuXG4gICAgICAgIC8vIHN0YWNrVHJhY2VzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB2aW9sYXRpb25zID0gQXJyYXkuZnJvbShydWxlTWFwLnZhbHVlcygpKTtcbiAgY29uc3QgaGFzRXJyb3JzID0gdmlvbGF0aW9ucy5zb21lKHYgPT4gdi5zZXZlcml0eSA9PT0gJ2Vycm9yJyk7XG4gIHJldHVybiB7XG4gICAgcGx1Z2luTmFtZTogQU5OT1RBVElPTl9QTFVHSU5fTkFNRSxcbiAgICBjb25jbHVzaW9uOiBoYXNFcnJvcnMgPyAnZmFpbHVyZScgOiAnc3VjY2VzcycsXG4gICAgdmlvbGF0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBBbm5vdGF0aW9ucyBoYXZlIElEcyBpbiB0d28gcGxhY2VzOlxuICpcbiAqIC0gV2FybmluZ3MgaGF2ZSBgW2Fjazo8aWQ+XWAgaW4gdGhlIG1lc3NhZ2UuXG4gKiAtIEVycm9ycyBoYXZlIGAoPG5hbWVzcGFjZT46OjxpZD4pYCBpbiB0aGUgbWVzc2FnZS5cbiAqXG4gKiBTZXBhcmF0ZSB0aGUgcnVsZSBuYW1lIGZyb20gdGhlIHJlc3Qgb2YgdGhlIGRlc2NyaXB0aW9uLlxuICovXG5mdW5jdGlvbiBzcGxpdERlc2NyaXB0aW9uQW5kSWQobWVzc2FnZTogc3RyaW5nKTogeyBtZXNzYWdlOiBzdHJpbmc7IHJ1bGVOYW1lPzogc3RyaW5nIH0ge1xuICBjb25zdCBhY2tNYXRjaCA9IG1lc3NhZ2UubWF0Y2goL1xcW2FjazogKFteXFxdXSspXFxdLyk7XG4gIGlmIChhY2tNYXRjaCkge1xuICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UucmVwbGFjZShhY2tNYXRjaFswXSwgJycpLnRyaW0oKSwgcnVsZU5hbWU6IGFja01hdGNoWzFdIH07XG4gIH1cblxuICBjb25zdCBpZE1hdGNoID0gbWVzc2FnZS5tYXRjaCgvXFwoKFteKCldKzo6W14oKV0rKVxcKSQvKTtcbiAgaWYgKGlkTWF0Y2gpIHtcbiAgICByZXR1cm4geyBtZXNzYWdlOiBtZXNzYWdlLnJlcGxhY2UoaWRNYXRjaFswXSwgJycpLnRyaW0oKSwgcnVsZU5hbWU6IGlkTWF0Y2hbMV0gfTtcbiAgfVxuXG4gIHJldHVybiB7IG1lc3NhZ2UgfTtcbn1cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import type { PluginReportJson, PolicyValidationReportConclusion } from '@aws-cdk/cloud-assembly-schema';
2
+ import type { StackCollection } from '../../api/cloud-assembly/stack-collection';
3
+ import type { IoHelper } from '../../api/io/private/io-helper';
4
+ import type { MinimumSeverity } from '../types';
5
+ interface AssemblyLike {
6
+ readonly directory: string;
7
+ }
8
+ /**
9
+ * Return a validation report that contains the validation report that the CDK app has written, as well as any Construct Metadata annotations in the manifest.
10
+ *
11
+ * This function takes into account the CDK app can already have written the
12
+ * construct annotations into the validation report, or not, depending on the
13
+ * setting of a deprecated feature flag. If the annotations are already in the report,
14
+ * they are not copied.
15
+ *
16
+ * Afterwards, the list of violations is filtered to only include those that are relevant to the stacks selected for validation.
17
+ *
18
+ * Returns whether an explicit report file was found or not.
19
+ */
20
+ export declare function obtainUnifiedValidationReport(assembly: AssemblyLike, stacks: StackCollection): Promise<PluginReportJson[]>;
21
+ /**
22
+ * Return a success/failure conclusion from the given report
23
+ */
24
+ export declare function combineConclusions(reports: PluginReportJson[]): PolicyValidationReportConclusion;
25
+ /**
26
+ * For operations that are NOT `cdk validate`, read the validation report and produce a failure if validation failed.
27
+ *
28
+ * Validation failed if there are any plugin reports with a failure conclusion, or if there are any warnings and the assembly is in strict mode.
29
+ */
30
+ export declare function throwIfValidationFailures(assembly: AssemblyLike, stacks: StackCollection, failAt: MinimumSeverity, ioHelper: IoHelper): Promise<void>;
31
+ export {};
32
+ //# sourceMappingURL=validation-report.d.ts.map