@cdktn/cli-core 0.23.0-pre.4 → 0.23.0-pre.40
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.
- package/ambient.d.ts +0 -1
- package/build/lib/cdktf-config.d.ts.map +1 -0
- package/build/lib/cdktf-config.js +108 -0
- package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
- package/build/lib/cdktf-project-io-handler.js +84 -0
- package/build/lib/cdktf-project.d.ts.map +1 -0
- package/build/lib/cdktf-project.js +371 -0
- package/{src → build}/lib/cdktf-stack.d.ts +1 -0
- package/build/lib/cdktf-stack.d.ts.map +1 -0
- package/build/lib/cdktf-stack.js +386 -0
- package/build/lib/convert.d.ts.map +1 -0
- package/build/lib/convert.js +51 -0
- package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
- package/build/lib/dependencies/cdktf-config-manager.js +36 -0
- package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
- package/build/lib/dependencies/dependency-manager.js +393 -0
- package/build/lib/dependencies/package-manager.d.ts.map +1 -0
- package/build/lib/dependencies/package-manager.js +581 -0
- package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
- package/build/lib/dependencies/prebuilt-providers.js +221 -0
- package/build/lib/dependencies/registry-api.d.ts.map +1 -0
- package/build/lib/dependencies/registry-api.js +77 -0
- package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
- package/build/lib/dependencies/version-constraints.js +95 -0
- package/build/lib/error-reporting.d.ts.map +1 -0
- package/build/lib/error-reporting.js +133 -0
- package/build/lib/errors.d.ts.map +1 -0
- package/build/lib/errors.js +10 -0
- package/build/lib/execution-logs.d.ts.map +1 -0
- package/build/lib/execution-logs.js +47 -0
- package/build/lib/get.d.ts.map +1 -0
- package/build/lib/get.js +90 -0
- package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
- package/build/lib/helpers/stack-helpers.js +155 -0
- package/build/lib/index.d.ts.map +1 -0
- package/{src → build}/lib/index.js +1 -2
- package/build/lib/init.d.ts.map +1 -0
- package/build/lib/init.js +131 -0
- package/build/lib/local-provider-constraints.d.ts.map +1 -0
- package/build/lib/local-provider-constraints.js +95 -0
- package/build/lib/local-provider-versions.d.ts.map +1 -0
- package/build/lib/local-provider-versions.js +73 -0
- package/{src → build}/lib/models/deploy-machine.d.ts +3 -11
- package/build/lib/models/deploy-machine.d.ts.map +1 -0
- package/build/lib/models/deploy-machine.js +283 -0
- package/build/lib/models/interactive-process.d.ts +28 -0
- package/build/lib/models/interactive-process.d.ts.map +1 -0
- package/build/lib/models/interactive-process.js +59 -0
- package/{src → build}/lib/models/schema.d.ts.map +1 -1
- package/build/lib/models/schema.js +181 -0
- package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
- package/build/lib/models/terraform-cli.d.ts.map +1 -0
- package/build/lib/models/terraform-cli.js +355 -0
- package/build/lib/models/terraform.d.ts.map +1 -0
- package/build/lib/models/terraform.js +72 -0
- package/build/lib/output.d.ts.map +1 -0
- package/build/lib/output.js +211 -0
- package/build/lib/provider-add.d.ts.map +1 -0
- package/build/lib/provider-add.js +30 -0
- package/build/lib/server/terraform-logs.d.ts.map +1 -0
- package/build/lib/server/terraform-logs.js +19 -0
- package/{src → build}/lib/synth-stack.d.ts +1 -0
- package/build/lib/synth-stack.d.ts.map +1 -0
- package/build/lib/synth-stack.js +251 -0
- package/build/lib/synth.d.ts.map +1 -0
- package/build/lib/synth.js +67 -0
- package/{src → build}/lib/terraform-json.d.ts.map +1 -1
- package/build/lib/terraform-json.js +82 -0
- package/build/lib/terraform-provider-lock.d.ts.map +1 -0
- package/build/lib/terraform-provider-lock.js +95 -0
- package/{src → build}/lib/watch.d.ts +1 -0
- package/build/lib/watch.d.ts.map +1 -0
- package/build/lib/watch.js +155 -0
- package/eslint.config.mjs +2 -66
- package/package.json +32 -44
- package/templates/go/go.mod +1 -1
- package/templates/python/Pipfile +1 -1
- package/templates/typescript/.hooks.sscaff.js +1 -1
- package/src/lib/cdktf-config.d.ts.map +0 -1
- package/src/lib/cdktf-config.js +0 -108
- package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
- package/src/lib/cdktf-project-io-handler.js +0 -84
- package/src/lib/cdktf-project.d.ts.map +0 -1
- package/src/lib/cdktf-project.js +0 -371
- package/src/lib/cdktf-stack.d.ts.map +0 -1
- package/src/lib/cdktf-stack.js +0 -386
- package/src/lib/convert.d.ts.map +0 -1
- package/src/lib/convert.js +0 -51
- package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
- package/src/lib/dependencies/cdktf-config-manager.js +0 -36
- package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
- package/src/lib/dependencies/dependency-manager.js +0 -393
- package/src/lib/dependencies/package-manager.d.ts.map +0 -1
- package/src/lib/dependencies/package-manager.js +0 -581
- package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
- package/src/lib/dependencies/prebuilt-providers.js +0 -220
- package/src/lib/dependencies/registry-api.d.ts.map +0 -1
- package/src/lib/dependencies/registry-api.js +0 -77
- package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
- package/src/lib/dependencies/version-constraints.js +0 -95
- package/src/lib/error-reporting.d.ts.map +0 -1
- package/src/lib/error-reporting.js +0 -133
- package/src/lib/errors.d.ts.map +0 -1
- package/src/lib/errors.js +0 -10
- package/src/lib/execution-logs.d.ts.map +0 -1
- package/src/lib/execution-logs.js +0 -47
- package/src/lib/get.d.ts.map +0 -1
- package/src/lib/get.js +0 -90
- package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
- package/src/lib/helpers/stack-helpers.js +0 -155
- package/src/lib/index.d.ts.map +0 -1
- package/src/lib/init.d.ts.map +0 -1
- package/src/lib/init.js +0 -131
- package/src/lib/local-provider-constraints.d.ts.map +0 -1
- package/src/lib/local-provider-constraints.js +0 -95
- package/src/lib/local-provider-versions.d.ts.map +0 -1
- package/src/lib/local-provider-versions.js +0 -73
- package/src/lib/models/deploy-machine.d.ts.map +0 -1
- package/src/lib/models/deploy-machine.js +0 -280
- package/src/lib/models/pty-process.d.ts +0 -29
- package/src/lib/models/pty-process.d.ts.map +0 -1
- package/src/lib/models/pty-process.js +0 -132
- package/src/lib/models/schema.js +0 -181
- package/src/lib/models/terraform-cli.d.ts.map +0 -1
- package/src/lib/models/terraform-cli.js +0 -357
- package/src/lib/models/terraform.d.ts.map +0 -1
- package/src/lib/models/terraform.js +0 -72
- package/src/lib/output.d.ts.map +0 -1
- package/src/lib/output.js +0 -211
- package/src/lib/provider-add.d.ts.map +0 -1
- package/src/lib/provider-add.js +0 -30
- package/src/lib/server/terraform-logs.d.ts.map +0 -1
- package/src/lib/server/terraform-logs.js +0 -19
- package/src/lib/synth-stack.d.ts.map +0 -1
- package/src/lib/synth-stack.js +0 -251
- package/src/lib/synth.d.ts.map +0 -1
- package/src/lib/synth.js +0 -67
- package/src/lib/terraform-json.js +0 -82
- package/src/lib/terraform-provider-lock.d.ts.map +0 -1
- package/src/lib/terraform-provider-lock.js +0 -95
- package/src/lib/watch.d.ts.map +0 -1
- package/src/lib/watch.js +0 -155
- /package/{src → build}/lib/cdktf-config.d.ts +0 -0
- /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
- /package/{src → build}/lib/cdktf-project.d.ts +0 -0
- /package/{src → build}/lib/convert.d.ts +0 -0
- /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
- /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
- /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
- /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
- /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
- /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
- /package/{src → build}/lib/error-reporting.d.ts +0 -0
- /package/{src → build}/lib/errors.d.ts +0 -0
- /package/{src → build}/lib/execution-logs.d.ts +0 -0
- /package/{src → build}/lib/get.d.ts +0 -0
- /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
- /package/{src → build}/lib/index.d.ts +0 -0
- /package/{src → build}/lib/init.d.ts +0 -0
- /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
- /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
- /package/{src → build}/lib/models/schema.d.ts +0 -0
- /package/{src → build}/lib/models/terraform.d.ts +0 -0
- /package/{src → build}/lib/output.d.ts +0 -0
- /package/{src → build}/lib/provider-add.d.ts +0 -0
- /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
- /package/{src → build}/lib/synth.d.ts +0 -0
- /package/{src → build}/lib/terraform-json.d.ts +0 -0
- /package/{src → build}/lib/terraform-provider-lock.d.ts +0 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CdktfProject = exports.isWaitingForUserInputUpdate = void 0;
|
|
4
|
+
// Copyright (c) HashiCorp, Inc
|
|
5
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
6
|
+
const commons_1 = require("@cdktn/commons");
|
|
7
|
+
const synth_stack_1 = require("./synth-stack");
|
|
8
|
+
const synth_1 = require("./synth");
|
|
9
|
+
const cdktf_stack_1 = require("./cdktf-stack");
|
|
10
|
+
const execution_logs_1 = require("./execution-logs");
|
|
11
|
+
const stack_helpers_1 = require("./helpers/stack-helpers");
|
|
12
|
+
const cdktf_project_io_handler_1 = require("./cdktf-project-io-handler");
|
|
13
|
+
function isWaitingForUserInputUpdate(update) {
|
|
14
|
+
return ["waiting for approval", "waiting for sentinel override"].includes(update.type);
|
|
15
|
+
}
|
|
16
|
+
exports.isWaitingForUserInputUpdate = isWaitingForUserInputUpdate;
|
|
17
|
+
class CdktfProject {
|
|
18
|
+
constructor({ synthCommand, outDir, onUpdate, onLog, workingDirectory = process.cwd(), synthOrigin, hcl = false, }) {
|
|
19
|
+
// Set during deploy / destroy
|
|
20
|
+
this.stacksToRun = [];
|
|
21
|
+
// This means sth different in deploy / destroy
|
|
22
|
+
this.stopAllStacksThatCanNotRunWithout = () => { };
|
|
23
|
+
this.synthCommand = synthCommand;
|
|
24
|
+
this.outDir = outDir;
|
|
25
|
+
this.workingDirectory = workingDirectory;
|
|
26
|
+
this.onUpdate = onUpdate;
|
|
27
|
+
this.onLog = onLog;
|
|
28
|
+
const ac = new AbortController();
|
|
29
|
+
this.abortSignal = ac.signal;
|
|
30
|
+
this.synthOrigin = synthOrigin;
|
|
31
|
+
this.hcl =
|
|
32
|
+
process.env.SYNTH_HCL_OUTPUT === "true" ||
|
|
33
|
+
process.env.SYNTH_HCL_OUTPUT === "1" ||
|
|
34
|
+
hcl;
|
|
35
|
+
this.hardAbort = ac.abort.bind(ac);
|
|
36
|
+
this.ioHandler = new cdktf_project_io_handler_1.CdktfProjectIOHandler();
|
|
37
|
+
}
|
|
38
|
+
stopAllStacks() {
|
|
39
|
+
this.stacksToRun.forEach((stack) => stack.stop());
|
|
40
|
+
this.ioHandler.filterUserInputEventsFromBuffer();
|
|
41
|
+
}
|
|
42
|
+
handleUserUpdate(update, operations, originalCallback, eventType) {
|
|
43
|
+
const callbacks = (update) => Object.fromEntries(Object.entries(operations).map(([key, value]) => {
|
|
44
|
+
return [
|
|
45
|
+
key,
|
|
46
|
+
// This is passed in to make typescript happy only
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
48
|
+
(_) => {
|
|
49
|
+
value(update);
|
|
50
|
+
// We need to defer these calls for the case that approve() is instantly invoked
|
|
51
|
+
// in the listener that receives these callbacks as it otherwise would already
|
|
52
|
+
// remove the "waiting for stack approval" event from the buffer before we even
|
|
53
|
+
// set waitingForApproval to true (at the end of this if statement) which results
|
|
54
|
+
// in buffered updates which will never unblock
|
|
55
|
+
setTimeout(() => this.ioHandler.resumeAfterUserInput(update.stackName), 0);
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
}));
|
|
59
|
+
// always send to buffer, as resumeAfterUserInput() always expects a matching event
|
|
60
|
+
this.ioHandler.pushEvent({
|
|
61
|
+
cb: originalCallback,
|
|
62
|
+
value: {
|
|
63
|
+
type: eventType,
|
|
64
|
+
stackName: update.stackName,
|
|
65
|
+
...callbacks(update),
|
|
66
|
+
},
|
|
67
|
+
type: "projectUpdate",
|
|
68
|
+
});
|
|
69
|
+
// if we aren't already waiting, this needs to go to cb() too to arrive at the UI
|
|
70
|
+
if (!this.ioHandler.isWaitingForUserInput()) {
|
|
71
|
+
originalCallback({
|
|
72
|
+
type: eventType,
|
|
73
|
+
stackName: update.stackName,
|
|
74
|
+
...callbacks(update),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
handleUserInputProcess(cb) {
|
|
79
|
+
return (update) => {
|
|
80
|
+
if (update.type === "external stack approval reply") {
|
|
81
|
+
if (!update.approved) {
|
|
82
|
+
this.stopAllStacksThatCanNotRunWithout(update.stackName);
|
|
83
|
+
}
|
|
84
|
+
this.ioHandler.resumeAfterUserInput(update.stackName);
|
|
85
|
+
return; // aka don't send this event to any buffer
|
|
86
|
+
}
|
|
87
|
+
if (update.type === "external stack sentinel override reply") {
|
|
88
|
+
if (!update.overridden) {
|
|
89
|
+
this.stopAllStacksThatCanNotRunWithout(update.stackName);
|
|
90
|
+
}
|
|
91
|
+
this.ioHandler.resumeAfterUserInput(update.stackName);
|
|
92
|
+
return; // aka don't send this event to any buffer
|
|
93
|
+
}
|
|
94
|
+
if (update.type === "waiting for stack approval" ||
|
|
95
|
+
update.type === "waiting for stack sentinel override") {
|
|
96
|
+
if (update.type === "waiting for stack approval") {
|
|
97
|
+
this.handleUserUpdate(update, {
|
|
98
|
+
approve: (update) => update.approve(),
|
|
99
|
+
dismiss: (update) => {
|
|
100
|
+
update.reject();
|
|
101
|
+
this.stopAllStacksThatCanNotRunWithout(update.stackName);
|
|
102
|
+
},
|
|
103
|
+
stop: (update) => {
|
|
104
|
+
update.reject();
|
|
105
|
+
this.stopAllStacks();
|
|
106
|
+
},
|
|
107
|
+
}, cb, "waiting for approval");
|
|
108
|
+
}
|
|
109
|
+
else if (update.type === "waiting for stack sentinel override") {
|
|
110
|
+
this.handleUserUpdate(update, {
|
|
111
|
+
override: (update) => {
|
|
112
|
+
update.override();
|
|
113
|
+
},
|
|
114
|
+
reject: (update) => {
|
|
115
|
+
update.reject();
|
|
116
|
+
this.stopAllStacksThatCanNotRunWithout(update.stackName);
|
|
117
|
+
},
|
|
118
|
+
}, cb, "waiting for sentinel override");
|
|
119
|
+
}
|
|
120
|
+
this.ioHandler.awaitUserInput();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
if (this.ioHandler.isWaitingForUserInput()) {
|
|
124
|
+
this.ioHandler.pushEvent({
|
|
125
|
+
cb,
|
|
126
|
+
value: update,
|
|
127
|
+
type: "projectUpdate",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
cb(update);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
getStackExecutor(stack, opts = {}) {
|
|
137
|
+
const enhanceLogMessage = (0, execution_logs_1.createEnhanceLogMessage)(stack);
|
|
138
|
+
const onLog = this.ioHandler.bufferWhileAwaitingUserInput(this.onLog);
|
|
139
|
+
return new cdktf_stack_1.CdktfStack({
|
|
140
|
+
...opts,
|
|
141
|
+
stack,
|
|
142
|
+
onUpdate: this.handleUserInputProcess(this.onUpdate),
|
|
143
|
+
onLog: onLog
|
|
144
|
+
? ({ message }) => onLog({
|
|
145
|
+
stackName: stack.name,
|
|
146
|
+
message,
|
|
147
|
+
messageWithConstructPath: enhanceLogMessage(message),
|
|
148
|
+
})
|
|
149
|
+
: undefined,
|
|
150
|
+
abortSignal: this.abortSignal,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
get outputsByConstructId() {
|
|
154
|
+
return this.stacksToRun.reduce((acc, stack) => ({
|
|
155
|
+
...acc,
|
|
156
|
+
...stack.outputsByConstructId,
|
|
157
|
+
}), {});
|
|
158
|
+
}
|
|
159
|
+
async synth(noColor) {
|
|
160
|
+
this.onUpdate({
|
|
161
|
+
type: "synthesizing",
|
|
162
|
+
});
|
|
163
|
+
const stacks = await synth_stack_1.SynthStack.synth(this.abortSignal, this.synthCommand, this.outDir, this.workingDirectory, false, noColor, this.synthOrigin, this.hcl);
|
|
164
|
+
(0, synth_1.printAnnotations)(stacks);
|
|
165
|
+
this.onUpdate({
|
|
166
|
+
type: "synthesized",
|
|
167
|
+
stacks,
|
|
168
|
+
});
|
|
169
|
+
return stacks;
|
|
170
|
+
}
|
|
171
|
+
async readSynthesizedStacks() {
|
|
172
|
+
const stacks = await synth_stack_1.SynthStack.readSynthesizedStacks(this.outDir);
|
|
173
|
+
(0, synth_1.printAnnotations)(stacks);
|
|
174
|
+
this.onUpdate({
|
|
175
|
+
type: "synthesized",
|
|
176
|
+
stacks,
|
|
177
|
+
});
|
|
178
|
+
return stacks;
|
|
179
|
+
}
|
|
180
|
+
async diff(opts = {}) {
|
|
181
|
+
const stacks = opts.skipSynth
|
|
182
|
+
? await this.readSynthesizedStacks()
|
|
183
|
+
: await this.synth(opts.noColor);
|
|
184
|
+
const stack = this.getStackExecutor((0, stack_helpers_1.getSingleStack)(stacks, opts === null || opts === void 0 ? void 0 : opts.stackName, "diff"));
|
|
185
|
+
await stack.initalizeTerraform(opts.noColor, opts.skipProviderLock, opts.migrateState);
|
|
186
|
+
try {
|
|
187
|
+
await stack.diff(opts);
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
throw commons_1.Errors.External(`Stack failed to plan: ${stack.stack.name}. Please check the logs for more information.`, e);
|
|
191
|
+
}
|
|
192
|
+
if (stack.error) {
|
|
193
|
+
throw commons_1.Errors.External(`Stack failed to plan: ${stack.stack.name}. Please check the logs for more information.`, new Error(stack.error));
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
await this.projectTelemetry("diff", {
|
|
197
|
+
stackMetadata: stacks.map((stack) => JSON.parse(stack.content)["//"]
|
|
198
|
+
? JSON.parse(stack.content)["//"].metadata
|
|
199
|
+
: {}),
|
|
200
|
+
errors: stack.error,
|
|
201
|
+
requiredProviders: stacks.map((stack) => JSON.parse(stack.content)["terraform"]
|
|
202
|
+
? JSON.parse(stack.content)["terraform"].required_providers
|
|
203
|
+
: {}),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
commons_1.logger.debug("Failed to send telemetry", e);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
async execute(method, next, opts) {
|
|
211
|
+
// We only support refresh only on deploy, a bit of a leaky abstraction here
|
|
212
|
+
if (opts.refreshOnly && method !== "deploy") {
|
|
213
|
+
throw commons_1.Errors.Internal(`Refresh only is only supported on deploy`);
|
|
214
|
+
}
|
|
215
|
+
const maxParallelRuns = !opts.parallelism || opts.parallelism < 0 ? Infinity : opts.parallelism;
|
|
216
|
+
const allExecutions = [];
|
|
217
|
+
await this.initializeStacksToRunInSerial(opts.noColor, opts.skipProviderLock, opts.migrateState);
|
|
218
|
+
while (this.stacksToRun.filter((stack) => stack.isPending).length > 0) {
|
|
219
|
+
const runningStacks = this.stacksToRun.filter((stack) => stack.isRunning);
|
|
220
|
+
if (runningStacks.length >= maxParallelRuns) {
|
|
221
|
+
await Promise.race(runningStacks.map((s) => s.currentWorkPromise));
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const nextRunningExecutor = await next();
|
|
226
|
+
if (!nextRunningExecutor) {
|
|
227
|
+
// In this case we have no pending stacks, but we also can not find a new executor
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
const promise = method === "deploy"
|
|
231
|
+
? nextRunningExecutor.deploy(opts)
|
|
232
|
+
: nextRunningExecutor.destroy(opts);
|
|
233
|
+
allExecutions.push(promise);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
// await next() threw an error because a stack failed to apply/destroy
|
|
237
|
+
// wait for all other currently running stacks to complete before propagating that error
|
|
238
|
+
commons_1.logger.debug("Encountered an error while awaiting stack to finish", e);
|
|
239
|
+
const openStacks = this.stacksToRun.filter((ex) => ex.currentWorkPromise);
|
|
240
|
+
commons_1.logger.debug("Waiting for still running stacks to finish:", openStacks);
|
|
241
|
+
await Promise.allSettled(openStacks.map((ex) => ex.currentWorkPromise));
|
|
242
|
+
commons_1.logger.debug("Done waiting for still running stacks. All pending work finished");
|
|
243
|
+
throw e;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// We end the loop when all stacks are started, now we need to wait for them to be done
|
|
247
|
+
// We wait for all work to finish even if one of the promises threw an error.
|
|
248
|
+
await (0, commons_1.ensureAllSettledBeforeThrowing)(Promise.all(allExecutions), allExecutions);
|
|
249
|
+
}
|
|
250
|
+
async deploy(opts = {}) {
|
|
251
|
+
const stacks = opts.skipSynth
|
|
252
|
+
? await this.readSynthesizedStacks()
|
|
253
|
+
: await this.synth(opts.noColor);
|
|
254
|
+
const stacksToRun = (0, stack_helpers_1.getMultipleStacks)(stacks, opts.stackNames, "deploy");
|
|
255
|
+
if (!opts.ignoreMissingStackDependencies) {
|
|
256
|
+
(0, stack_helpers_1.checkIfAllDependenciesAreIncluded)(stacksToRun);
|
|
257
|
+
}
|
|
258
|
+
this.stopAllStacksThatCanNotRunWithout = (stackName) => {
|
|
259
|
+
(0, stack_helpers_1.findAllNestedDependantStacks)(this.stacksToRun, stackName).forEach((stack) => stack.stop());
|
|
260
|
+
};
|
|
261
|
+
this.stacksToRun = stacksToRun.map((stack) => this.getStackExecutor(stack, opts));
|
|
262
|
+
const next = opts.ignoreMissingStackDependencies
|
|
263
|
+
? () => Promise.resolve(this.stacksToRun.filter((stack) => stack.isPending)[0])
|
|
264
|
+
: () => (0, stack_helpers_1.getStackWithNoUnmetDependencies)(this.stacksToRun);
|
|
265
|
+
await this.execute("deploy", next, opts);
|
|
266
|
+
const unprocessedStacks = this.stacksToRun.filter((executor) => executor.isPending);
|
|
267
|
+
if (unprocessedStacks.length > 0) {
|
|
268
|
+
throw commons_1.Errors.External(`Some stacks failed to deploy: ${unprocessedStacks
|
|
269
|
+
.map((s) => s.stack.name)
|
|
270
|
+
.join(", ")}. Please check the logs for more information.`);
|
|
271
|
+
}
|
|
272
|
+
try {
|
|
273
|
+
await this.projectTelemetry("deploy", {
|
|
274
|
+
stackMetadata: stacksToRun.map((stack) => JSON.parse(stack.content)["//"]
|
|
275
|
+
? JSON.parse(stack.content)["//"].metadata
|
|
276
|
+
: {}),
|
|
277
|
+
failedStacks: unprocessedStacks.map((stack) => stack.error),
|
|
278
|
+
requiredProviders: stacksToRun.map((stack) => JSON.parse(stack.content)["terraform"]
|
|
279
|
+
? JSON.parse(stack.content)["terraform"].required_providers
|
|
280
|
+
: {}),
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
commons_1.logger.debug("Failed to send telemetry", e);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
async destroy(opts = {}) {
|
|
288
|
+
const stacks = opts.skipSynth
|
|
289
|
+
? await this.readSynthesizedStacks()
|
|
290
|
+
: await this.synth(opts.noColor);
|
|
291
|
+
const stacksToRun = (0, stack_helpers_1.getMultipleStacks)(stacks, opts.stackNames, "destroy");
|
|
292
|
+
if (!opts.ignoreMissingStackDependencies) {
|
|
293
|
+
(0, stack_helpers_1.checkIfAllDependantsAreIncluded)(stacksToRun, stacks);
|
|
294
|
+
}
|
|
295
|
+
this.stopAllStacksThatCanNotRunWithout = (stackName) => {
|
|
296
|
+
const stackExecutor = this.stacksToRun.find((s) => s.stack.name === stackName);
|
|
297
|
+
if (!stackExecutor) {
|
|
298
|
+
throw commons_1.Errors.Internal(`Could not find stack "${stackName}" that was stopped`);
|
|
299
|
+
}
|
|
300
|
+
stackExecutor.stack.dependencies.forEach((dependant) => {
|
|
301
|
+
this.stopAllStacksThatCanNotRunWithout(dependant);
|
|
302
|
+
const dependantStack = this.stacksToRun.find((s) => s.stack.name === dependant);
|
|
303
|
+
if (!dependantStack) {
|
|
304
|
+
throw commons_1.Errors.Internal(`Could not find stack "${dependant}" that was stopped`);
|
|
305
|
+
}
|
|
306
|
+
dependantStack.stop();
|
|
307
|
+
});
|
|
308
|
+
};
|
|
309
|
+
this.stacksToRun = stacksToRun.map((stack) => this.getStackExecutor(stack, opts));
|
|
310
|
+
const next = opts.ignoreMissingStackDependencies
|
|
311
|
+
? () => Promise.resolve(this.stacksToRun.filter((stack) => stack.currentState !== "done")[0])
|
|
312
|
+
: () => (0, stack_helpers_1.getStackWithNoUnmetDependants)(this.stacksToRun);
|
|
313
|
+
await this.execute("destroy", next, opts);
|
|
314
|
+
const unprocessedStacks = this.stacksToRun.filter((executor) => executor.isPending);
|
|
315
|
+
if (unprocessedStacks.length > 0) {
|
|
316
|
+
throw commons_1.Errors.External(`Some stacks failed to destroy: ${unprocessedStacks
|
|
317
|
+
.map((s) => s.stack.name)
|
|
318
|
+
.join(", ")}. Please check the logs for more information.`);
|
|
319
|
+
}
|
|
320
|
+
try {
|
|
321
|
+
await this.projectTelemetry("destroy", {
|
|
322
|
+
stackMetadata: stacksToRun.map((stack) => JSON.parse(stack.content)["//"]
|
|
323
|
+
? JSON.parse(stack.content)["//"].metadata
|
|
324
|
+
: {}),
|
|
325
|
+
failedStacks: unprocessedStacks.map((stack) => stack.error),
|
|
326
|
+
requiredProviders: stacksToRun.map((stack) => JSON.parse(stack.content)["terraform"]
|
|
327
|
+
? JSON.parse(stack.content)["terraform"].required_providers
|
|
328
|
+
: {}),
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
catch (e) {
|
|
332
|
+
commons_1.logger.debug("Failed to send telemetry", e);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
async projectTelemetry(command, payload) {
|
|
336
|
+
const config = (0, commons_1.readConfigSync)();
|
|
337
|
+
await (0, commons_1.sendTelemetry)(command, {
|
|
338
|
+
...payload,
|
|
339
|
+
language: config.language,
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
async fetchOutputs(opts) {
|
|
343
|
+
const stacks = opts.skipSynth
|
|
344
|
+
? await this.readSynthesizedStacks()
|
|
345
|
+
: await this.synth();
|
|
346
|
+
const stacksToRun = (0, stack_helpers_1.getMultipleStacks)(stacks, opts.stackNames || [], "deploy");
|
|
347
|
+
if (stacksToRun.length === 0) {
|
|
348
|
+
throw new Error("No stacks to fetch outputs for specified");
|
|
349
|
+
}
|
|
350
|
+
this.stacksToRun = stacksToRun.map((stack) =>
|
|
351
|
+
// Options are empty, because MultipleStackOptions doesn't have any relevant
|
|
352
|
+
// options for `getStackExecutor`, hence defaults are fine
|
|
353
|
+
this.getStackExecutor(stack, {}));
|
|
354
|
+
await this.initializeStacksToRunInSerial(undefined, opts.skipProviderLock);
|
|
355
|
+
const outputs = await Promise.all(this.stacksToRun.map(async (s) => {
|
|
356
|
+
const output = await s.fetchOutputs();
|
|
357
|
+
return {
|
|
358
|
+
[s.stack.name]: output,
|
|
359
|
+
};
|
|
360
|
+
}));
|
|
361
|
+
return outputs.reduce((acc, curr) => ({ ...acc, ...curr }), {});
|
|
362
|
+
}
|
|
363
|
+
// Serially run terraform init to prohibit text file busy errors for the cache files
|
|
364
|
+
async initializeStacksToRunInSerial(noColor, skipProviderLock, migrateState) {
|
|
365
|
+
for (const stack of this.stacksToRun) {
|
|
366
|
+
await stack.initalizeTerraform(noColor, skipProviderLock, migrateState);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
exports.CdktfProject = CdktfProject;
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2RrdGYtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDRDQU13QjtBQUN4QiwrQ0FBMEU7QUFDMUUsbUNBQTJDO0FBQzNDLCtDQVF1QjtBQUV2QixxREFBMkQ7QUFDM0QsMkRBUWlDO0FBQ2pDLHlFQUFtRTtBQStGbkUsU0FBZ0IsMkJBQTJCLENBQ3pDLE1BQW1DO0lBRW5DLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLFFBQVEsQ0FDdkUsTUFBTSxDQUFDLElBQUksQ0FDWixDQUFDO0FBQ0osQ0FBQztBQU5ELGtFQU1DO0FBY0QsTUFBYSxZQUFZO0lBcUJ2QixZQUFZLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFDaEMsV0FBVyxFQUNYLEdBQUcsR0FBRyxLQUFLLEdBQ1M7UUFoQnRCLDhCQUE4QjtRQUN2QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDdEMsK0NBQStDO1FBQ3ZDLHNDQUFpQyxHQUN2QyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFhVCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFD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NUUsS0FBSyxDQUFDLDZCQUE2QixDQUN6QyxPQUFpQixFQUNqQixnQkFBMEIsRUFDMUIsWUFBc0I7UUFFdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExaUJELG9DQTBpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHtcbiAgRXJyb3JzLFxuICBlbnN1cmVBbGxTZXR0bGVkQmVmb3JlVGhyb3dpbmcsXG4gIGxvZ2dlcixcbiAgcmVhZENvbmZpZ1N5bmMsXG4gIHNlbmRUZWxlbWV0cnksXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgU3ludGhlc2l6ZWRTdGFjaywgU3ludGhPcmlnaW4sIFN5bnRoU3RhY2sgfSBmcm9tIFwiLi9zeW50aC1zdGFja1wiO1xuaW1wb3J0IHsgcHJpbnRBbm5vdGF0aW9ucyB9IGZyb20gXCIuL3N5bnRoXCI7XG5pbXBvcnQge1xuICBDZGt0ZlN0YWNrLFxuICBFeHRlcm5hbFN0YWNrQXBwcm92YWxVcGRhdGUsXG4gIEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICBTdGFja0FwcHJvdmFsVXBkYXRlLFxuICBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gIFN0YWNrVXBkYXRlLFxuICBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbn0gZnJvbSBcIi4vY2RrdGYtc3RhY2tcIjtcbmltcG9ydCB7IE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgfSBmcm9tIFwiLi9vdXRwdXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVuaGFuY2VMb2dNZXNzYWdlIH0gZnJvbSBcIi4vZXhlY3V0aW9uLWxvZ3NcIjtcbmltcG9ydCB7XG4gIGNoZWNrSWZBbGxEZXBlbmRhbnRzQXJlSW5jbHVkZWQsXG4gIGNoZWNrSWZBbGxEZXBlbmRlbmNpZXNBcmVJbmNsdWRlZCxcbiAgZmluZEFsbE5lc3RlZERlcGVuZGFudFN0YWNrcyxcbiAgZ2V0TXVsdGlwbGVTdGFja3MsXG4gIGdldFNpbmdsZVN0YWNrLFxuICBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kYW50cyxcbiAgZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGVuY2llcyxcbn0gZnJvbSBcIi4vaGVscGVycy9zdGFjay1oZWxwZXJzXCI7XG5pbXBvcnQgeyBDZGt0ZlByb2plY3RJT0hhbmRsZXIgfSBmcm9tIFwiLi9jZGt0Zi1wcm9qZWN0LWlvLWhhbmRsZXJcIjtcblxudHlwZSBNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3IgYXBwcm92YWxcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGFwcHJvdmU6ICgpID0+IHZvaWQ7XG4gIGRpc21pc3M6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlID0ge1xuICB0eXBlOiBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBvdmVycmlkZTogKCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlTdGFja1VwZGF0ZSA9XG4gIHwgTXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlXG4gIHwgTXVsdGlTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFByb2plY3RVcGRhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6aW5nXCI7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIjtcbiAgICAgIHN0YWNrczogU3ludGhlc2l6ZWRTdGFja1tdO1xuICAgICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAgIH1cbiAgfCBTdGFja1VwZGF0ZVxuICB8IE11bHRpU3RhY2tVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2tOYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlwbGVTdGFja09wdGlvbnMgPSB7XG4gIHN0YWNrTmFtZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNraXBTeW50aE9wdGlvbnMgPSB7XG4gIHNraXBTeW50aD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyA9IHtcbiAgc2tpcFByb3ZpZGVyTG9jaz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGZXRjaE91dHB1dE9wdGlvbnMgPSBTa2lwU3ludGhPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBNdWx0aXBsZVN0YWNrT3B0aW9ucztcblxuZXhwb3J0IHR5cGUgQXV0b0FwcHJvdmVPcHRpb25zID0ge1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEaWZmT3B0aW9ucyA9IFNpbmdsZVN0YWNrT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgU2tpcFN5bnRoT3B0aW9ucyAmIHtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IHR5cGUgTXV0YXRpb25PcHRpb25zID0gTXVsdGlwbGVTdGFja09wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIFNraXBTeW50aE9wdGlvbnMgJlxuICBBdXRvQXBwcm92ZU9wdGlvbnMgJiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIGlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gICAgcGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IHR5cGUgTG9nTWVzc2FnZSA9IHtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2VXaXRoQ29uc3RydWN0UGF0aD86IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuLy8gU3RvcmVzIGEgbG9nIHZhbHVlIG9mIGEgY2VydGFpbiB0eXBlIHVudGlsIGl0IGNhbiBiZSBzZW50XG50eXBlIEJ1ZmZlcmVkPFQsIFY+ID0ge1xuICBjYjogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIHZhbHVlOiBUO1xuICB0eXBlOiBWO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2FpdGluZ0ZvclVzZXJJbnB1dFVwZGF0ZShcbiAgdXBkYXRlOiBQcm9qZWN0VXBkYXRlIHwgU3RhY2tVcGRhdGUsXG4pIHtcbiAgcmV0dXJuIFtcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsIFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIl0uaW5jbHVkZXMoXG4gICAgdXBkYXRlLnR5cGUsXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFByb2plY3RFdmVudCA9XG4gIHwgQnVmZmVyZWQ8UHJvamVjdFVwZGF0ZSwgXCJwcm9qZWN0VXBkYXRlXCI+XG4gIHwgQnVmZmVyZWQ8TG9nTWVzc2FnZSwgXCJsb2dNZXNzYWdlXCI+O1xuZXhwb3J0IHR5cGUgQ2RrdGZQcm9qZWN0T3B0aW9ucyA9IHtcbiAgc3ludGhDb21tYW5kOiBzdHJpbmc7XG4gIG91dERpcjogc3RyaW5nO1xuICBvblVwZGF0ZTogKHVwZGF0ZTogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZDtcbiAgb25Mb2c/OiAobG9nOiBMb2dNZXNzYWdlKSA9PiB2b2lkO1xuICB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuICBzeW50aE9yaWdpbj86IFN5bnRoT3JpZ2luO1xuICBoY2w/OiBib29sZWFuO1xufTtcbmV4cG9ydCBjbGFzcyBDZGt0ZlByb2plY3Qge1xuICBwdWJsaWMgc3RhY2tzPzogU3ludGhlc2l6ZWRTdGFja1tdO1xuICBwdWJsaWMgaGFyZEFib3J0OiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgc3ludGhDb21tYW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgb3V0RGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICBwcml2YXRlIG9uVXBkYXRlOiAodXBkYXRlOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uTG9nPzogKGxvZzogTG9nTWVzc2FnZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHByaXZhdGUgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbjtcbiAgcHJpdmF0ZSBoY2w/OiBib29sZWFuO1xuXG4gIC8vIFNldCBkdXJpbmcgZGVwbG95IC8gZGVzdHJveVxuICBwdWJsaWMgc3RhY2tzVG9SdW46IENka3RmU3RhY2tbXSA9IFtdO1xuICAvLyBUaGlzIG1lYW5zIHN0aCBkaWZmZXJlbnQgaW4gZGVwbG95IC8gZGVzdHJveVxuICBwcml2YXRlIHN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dDogKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB2b2lkID1cbiAgICAoKSA9PiB7fTtcblxuICBwcml2YXRlIGlvSGFuZGxlcjogQ2RrdGZQcm9qZWN0SU9IYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzeW50aENvbW1hbmQsXG4gICAgb3V0RGlyLFxuICAgIG9uVXBkYXRlLFxuICAgIG9uTG9nLFxuICAgIHdvcmtpbmdEaXJlY3RvcnkgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIHN5bnRoT3JpZ2luLFxuICAgIGhjbCA9IGZhbHNlLFxuICB9OiBDZGt0ZlByb2plY3RPcHRpb25zKSB7XG4gICAgdGhpcy5zeW50aENvbW1hbmQgPSBzeW50aENvbW1hbmQ7XG4gICAgdGhpcy5vdXREaXIgPSBvdXREaXI7XG4gICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTtcbiAgICB0aGlzLm9uVXBkYXRlID0gb25VcGRhdGU7XG4gICAgdGhpcy5vbkxvZyA9IG9uTG9nO1xuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBhYy5zaWduYWw7XG4gICAgdGhpcy5zeW50aE9yaWdpbiA9IHN5bnRoT3JpZ2luO1xuICAgIHRoaXMuaGNsID1cbiAgICAgIHByb2Nlc3MuZW52LlNZTlRIX0hDTF9PVVRQVVQgPT09IFwidHJ1ZVwiIHx8XG4gICAgICBwcm9jZXNzLmVudi5TWU5USF9IQ0xfT1VUUFVUID09PSBcIjFcIiB8fFxuICAgICAgaGNsO1xuXG4gICAgdGhpcy5oYXJkQWJvcnQgPSBhYy5hYm9ydC5iaW5kKGFjKTtcbiAgICB0aGlzLmlvSGFuZGxlciA9IG5ldyBDZGt0ZlByb2plY3RJT0hhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEFsbFN0YWNrcygpIHtcbiAgICB0aGlzLnN0YWNrc1RvUnVuLmZvckVhY2goKHN0YWNrKSA9PiBzdGFjay5zdG9wKCkpO1xuICAgIHRoaXMuaW9IYW5kbGVyLmZpbHRlclVzZXJJbnB1dEV2ZW50c0Zyb21CdWZmZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVXNlclVwZGF0ZTxcbiAgICBUIGV4dGVuZHMgTXVsdGlTdGFja1VwZGF0ZSxcbiAgICBWIGV4dGVuZHMgU3RhY2tVc2VySW5wdXRVcGRhdGUsXG4gID4oXG4gICAgdXBkYXRlOiBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbiAgICBvcGVyYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCAodXBkYXRlOiBWKSA9PiB2b2lkPixcbiAgICBvcmlnaW5hbENhbGxiYWNrOiAodXBkYXRlVG9TZW5kOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkLFxuICAgIGV2ZW50VHlwZTogVFtcInR5cGVcIl0sXG4gICkge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9ICh1cGRhdGU6IFYpID0+XG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG9wZXJhdGlvbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgcGFzc2VkIGluIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweSBvbmx5XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAoXzogVikgPT4ge1xuICAgICAgICAgICAgICB2YWx1ZSh1cGRhdGUpO1xuXG4gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdGhlc2UgY2FsbHMgZm9yIHRoZSBjYXNlIHRoYXQgYXBwcm92ZSgpIGlzIGluc3RhbnRseSBpbnZva2VkXG4gICAgICAgICAgICAgIC8vIGluIHRoZSBsaXN0ZW5lciB0aGF0IHJlY2VpdmVzIHRoZXNlIGNhbGxiYWNrcyBhcyBpdCBvdGhlcndpc2Ugd291bGQgYWxyZWFkeVxuICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIiBldmVudCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHdlIGV2ZW5cbiAgICAgICAgICAgICAgLy8gc2V0IHdhaXRpbmdGb3JBcHByb3ZhbCB0byB0cnVlIChhdCB0aGUgZW5kIG9mIHRoaXMgaWYgc3RhdGVtZW50KSB3aGljaCByZXN1bHRzXG4gICAgICAgICAgICAgIC8vIGluIGJ1ZmZlcmVkIHVwZGF0ZXMgd2hpY2ggd2lsbCBuZXZlciB1bmJsb2NrXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgLy8gYWx3YXlzIHNlbmQgdG8gYnVmZmVyLCBhcyByZXN1bWVBZnRlclVzZXJJbnB1dCgpIGFsd2F5cyBleHBlY3RzIGEgbWF0Y2hpbmcgZXZlbnRcbiAgICB0aGlzLmlvSGFuZGxlci5wdXNoRXZlbnQoe1xuICAgICAgY2I6IG9yaWdpbmFsQ2FsbGJhY2ssXG4gICAgICB2YWx1ZToge1xuICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgIHN0YWNrTmFtZTogdXBkYXRlLnN0YWNrTmFtZSxcbiAgICAgICAgLi4uY2FsbGJhY2tzKHVwZGF0ZSBhcyBWKSxcbiAgICAgIH0gYXMgVCxcbiAgICAgIHR5cGU6IFwicHJvamVjdFVwZGF0ZVwiLFxuICAgIH0pO1xuXG4gICAgLy8gaWYgd2UgYXJlbid0IGFscmVhZHkgd2FpdGluZywgdGhpcyBuZWVkcyB0byBnbyB0byBjYigpIHRvbyB0byBhcnJpdmUgYXQgdGhlIFVJXG4gICAgaWYgKCF0aGlzLmlvSGFuZGxlci5pc1dhaXRpbmdGb3JVc2VySW5wdXQoKSkge1xuICAgICAgb3JpZ2luYWxDYWxsYmFjayh7XG4gICAgICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgc3RhY2tOYW1lOiB1cGRhdGUuc3RhY2tOYW1lLFxuICAgICAgICAuLi5jYWxsYmFja3ModXBkYXRlIGFzIFYpLFxuICAgICAgfSBhcyBUKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVzZXJJbnB1dFByb2Nlc3MoY2I6ICh1cGRhdGVUb1NlbmQ6IFByb2plY3RVcGRhdGUpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdXBkYXRlOlxuICAgICAgICB8IFN0YWNrVXBkYXRlXG4gICAgICAgIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgICB8IEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgICB8IFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZVxuICAgICAgICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICAgICkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCIpIHtcbiAgICAgICAgaWYgKCF1cGRhdGUuYXBwcm92ZWQpIHtcbiAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgcmV0dXJuOyAvLyBha2EgZG9uJ3Qgc2VuZCB0aGlzIGV2ZW50IHRvIGFueSBidWZmZXJcbiAgICAgIH1cbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgIGlmICghdXBkYXRlLm92ZXJyaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgcmV0dXJuOyAvLyBha2EgZG9uJ3Qgc2VuZCB0aGlzIGV2ZW50IHRvIGFueSBidWZmZXJcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiIHx8XG4gICAgICAgIHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCJcbiAgICAgICkge1xuICAgICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVXNlclVwZGF0ZTxNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGUsIFN0YWNrQXBwcm92YWxVcGRhdGU+KFxuICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcHByb3ZlOiAodXBkYXRlKSA9PiB1cGRhdGUuYXBwcm92ZSgpLFxuICAgICAgICAgICAgICBkaXNtaXNzOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdG9wOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrcygpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVXNlclVwZGF0ZTxcbiAgICAgICAgICAgIE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICAgICAgICAgICAgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICAgICAgPihcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3ZlcnJpZGU6ICh1cGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUub3ZlcnJpZGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlvSGFuZGxlci5hd2FpdFVzZXJJbnB1dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW9IYW5kbGVyLmlzV2FpdGluZ0ZvclVzZXJJbnB1dCgpKSB7XG4gICAgICAgICAgdGhpcy5pb0hhbmRsZXIucHVzaEV2ZW50KHtcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgdmFsdWU6IHVwZGF0ZSxcbiAgICAgICAgICAgIHR5cGU6IFwicHJvamVjdFVwZGF0ZVwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKHVwZGF0ZSBhcyBQcm9qZWN0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhY2tFeGVjdXRvcihcbiAgICBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBvcHRzOiBBdXRvQXBwcm92ZU9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgZW5oYW5jZUxvZ01lc3NhZ2UgPSBjcmVhdGVFbmhhbmNlTG9nTWVzc2FnZShzdGFjayk7XG4gICAgY29uc3Qgb25Mb2cgPSB0aGlzLmlvSGFuZGxlci5idWZmZXJXaGlsZUF3YWl0aW5nVXNlcklucHV0KHRoaXMub25Mb2cpO1xuICAgIHJldHVybiBuZXcgQ2RrdGZTdGFjayh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgc3RhY2ssXG4gICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVVc2VySW5wdXRQcm9jZXNzKHRoaXMub25VcGRhdGUpLFxuICAgICAgb25Mb2c6IG9uTG9nXG4gICAgICAgID8gKHsgbWVzc2FnZSB9KSA9PlxuICAgICAgICAgICAgb25Mb2coe1xuICAgICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2VXaXRoQ29uc3RydWN0UGF0aDogZW5oYW5jZUxvZ01lc3NhZ2UobWVzc2FnZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRwdXRzQnlDb25zdHJ1Y3RJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja3NUb1J1bi5yZWR1Y2UoXG4gICAgICAoYWNjLCBzdGFjaykgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICAuLi5zdGFjay5vdXRwdXRzQnlDb25zdHJ1Y3RJZCxcbiAgICAgIH0pLFxuICAgICAge30gYXMgTmVzdGVkVGVycmFmb3JtT3V0cHV0cyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN5bnRoKG5vQ29sb3I/OiBib29sZWFuKSB7XG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemluZ1wiLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5zeW50aChcbiAgICAgIHRoaXMuYWJvcnRTaWduYWwgYXMgYW55LFxuICAgICAgdGhpcy5zeW50aENvbW1hbmQsXG4gICAgICB0aGlzLm91dERpcixcbiAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIGZhbHNlLFxuICAgICAgbm9Db2xvcixcbiAgICAgIHRoaXMuc3ludGhPcmlnaW4sXG4gICAgICB0aGlzLmhjbCxcbiAgICApO1xuXG4gICAgcHJpbnRBbm5vdGF0aW9ucyhzdGFja3MpO1xuXG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCIsXG4gICAgICBzdGFja3MsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRTeW50aGVzaXplZFN0YWNrcygpIHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBTeW50aFN0YWNrLnJlYWRTeW50aGVzaXplZFN0YWNrcyh0aGlzLm91dERpcik7XG5cbiAgICBwcmludEFubm90YXRpb25zKHN0YWNrcyk7XG5cbiAgICB0aGlzLm9uVXBkYXRlKHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIixcbiAgICAgIHN0YWNrcyxcbiAgICB9KTtcbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpZmYob3B0czogRGlmZk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5nZXRTdGFja0V4ZWN1dG9yKFxuICAgICAgZ2V0U2luZ2xlU3RhY2soc3RhY2tzLCBvcHRzPy5zdGFja05hbWUsIFwiZGlmZlwiKSxcbiAgICApO1xuICAgIGF3YWl0IHN0YWNrLmluaXRhbGl6ZVRlcnJhZm9ybShcbiAgICAgIG9wdHMubm9Db2xvcixcbiAgICAgIG9wdHMuc2tpcFByb3ZpZGVyTG9jayxcbiAgICAgIG9wdHMubWlncmF0ZVN0YXRlLFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhY2suZGlmZihvcHRzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFN0YWNrIGZhaWxlZCB0byBwbGFuOiAke3N0YWNrLnN0YWNrLm5hbWV9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgZSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGFjay5lcnJvcikge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU3RhY2sgZmFpbGVkIHRvIHBsYW46ICR7c3RhY2suc3RhY2submFtZX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgICBuZXcgRXJyb3Ioc3RhY2suZXJyb3IpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGlmZlwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrcy5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGVycm9yczogc3RhY2suZXJyb3IsXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3MubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlKFxuICAgIG1ldGhvZDogXCJkZXBsb3lcIiB8IFwiZGVzdHJveVwiLFxuICAgIG5leHQ6ICgpID0+IFByb21pc2U8Q2RrdGZTdGFjayB8IHVuZGVmaW5lZD4sXG4gICAgb3B0czogTXV0YXRpb25PcHRpb25zLFxuICApIHtcbiAgICAvLyBXZSBvbmx5IHN1cHBvcnQgcmVmcmVzaCBvbmx5IG9uIGRlcGxveSwgYSBiaXQgb2YgYSBsZWFreSBhYnN0cmFjdGlvbiBoZXJlXG4gICAgaWYgKG9wdHMucmVmcmVzaE9ubHkgJiYgbWV0aG9kICE9PSBcImRlcGxveVwiKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoYFJlZnJlc2ggb25seSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBkZXBsb3lgKTtcbiAgICB9XG4gICAgY29uc3QgbWF4UGFyYWxsZWxSdW5zID1cbiAgICAgICFvcHRzLnBhcmFsbGVsaXNtIHx8IG9wdHMucGFyYWxsZWxpc20gPCAwID8gSW5maW5pdHkgOiBvcHRzLnBhcmFsbGVsaXNtO1xuICAgIGNvbnN0IGFsbEV4ZWN1dGlvbnMgPSBbXTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwoXG4gICAgICBvcHRzLm5vQ29sb3IsXG4gICAgICBvcHRzLnNraXBQcm92aWRlckxvY2ssXG4gICAgICBvcHRzLm1pZ3JhdGVTdGF0ZSxcbiAgICApO1xuICAgIHdoaWxlICh0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUGVuZGluZykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcnVubmluZ1N0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNSdW5uaW5nKTtcbiAgICAgIGlmIChydW5uaW5nU3RhY2tzLmxlbmd0aCA+PSBtYXhQYXJhbGxlbFJ1bnMpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKHJ1bm5pbmdTdGFja3MubWFwKChzKSA9PiBzLmN1cnJlbnRXb3JrUHJvbWlzZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5leHRSdW5uaW5nRXhlY3V0b3IgPSBhd2FpdCBuZXh0KCk7XG4gICAgICAgIGlmICghbmV4dFJ1bm5pbmdFeGVjdXRvcikge1xuICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIHBlbmRpbmcgc3RhY2tzLCBidXQgd2UgYWxzbyBjYW4gbm90IGZpbmQgYSBuZXcgZXhlY3V0b3JcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID1cbiAgICAgICAgICBtZXRob2QgPT09IFwiZGVwbG95XCJcbiAgICAgICAgICAgID8gbmV4dFJ1bm5pbmdFeGVjdXRvci5kZXBsb3kob3B0cylcbiAgICAgICAgICAgIDogbmV4dFJ1bm5pbmdFeGVjdXRvci5kZXN0cm95KG9wdHMpO1xuXG4gICAgICAgIGFsbEV4ZWN1dGlvbnMucHVzaChwcm9taXNlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gYXdhaXQgbmV4dCgpIHRocmV3IGFuIGVycm9yIGJlY2F1c2UgYSBzdGFjayBmYWlsZWQgdG8gYXBwbHkvZGVzdHJveVxuICAgICAgICAvLyB3YWl0IGZvciBhbGwgb3RoZXIgY3VycmVudGx5IHJ1bm5pbmcgc3RhY2tzIHRvIGNvbXBsZXRlIGJlZm9yZSBwcm9wYWdhdGluZyB0aGF0IGVycm9yXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIGF3YWl0aW5nIHN0YWNrIHRvIGZpbmlzaFwiLCBlKTtcbiAgICAgICAgY29uc3Qgb3BlblN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgICAgIChleCkgPT4gZXguY3VycmVudFdvcmtQcm9taXNlLFxuICAgICAgICApO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJXYWl0aW5nIGZvciBzdGlsbCBydW5uaW5nIHN0YWNrcyB0byBmaW5pc2g6XCIsIG9wZW5TdGFja3MpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQob3BlblN0YWNrcy5tYXAoKGV4KSA9PiBleC5jdXJyZW50V29ya1Byb21pc2UpKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIFwiRG9uZSB3YWl0aW5nIGZvciBzdGlsbCBydW5uaW5nIHN0YWNrcy4gQWxsIHBlbmRpbmcgd29yayBmaW5pc2hlZFwiLFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBlbmQgdGhlIGxvb3Agd2hlbiBhbGwgc3RhY2tzIGFyZSBzdGFydGVkLCBub3cgd2UgbmVlZCB0byB3YWl0IGZvciB0aGVtIHRvIGJlIGRvbmVcbiAgICAvLyBXZSB3YWl0IGZvciBhbGwgd29yayB0byBmaW5pc2ggZXZlbiBpZiBvbmUgb2YgdGhlIHByb21pc2VzIHRocmV3IGFuIGVycm9yLlxuICAgIGF3YWl0IGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyhcbiAgICAgIFByb21pc2UuYWxsKGFsbEV4ZWN1dGlvbnMpLFxuICAgICAgYWxsRXhlY3V0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShvcHRzOiBNdXRhdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3Moc3RhY2tzLCBvcHRzLnN0YWNrTmFtZXMsIFwiZGVwbG95XCIpO1xuICAgIGlmICghb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNoZWNrSWZBbGxEZXBlbmRlbmNpZXNBcmVJbmNsdWRlZChzdGFja3NUb1J1bik7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGZpbmRBbGxOZXN0ZWREZXBlbmRhbnRTdGFja3ModGhpcy5zdGFja3NUb1J1biwgc3RhY2tOYW1lKS5mb3JFYWNoKFxuICAgICAgICAoc3RhY2spID0+IHN0YWNrLnN0b3AoKSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCBvcHRzKSxcbiAgICApO1xuXG4gICAgY29uc3QgbmV4dCA9IG9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzXG4gICAgICA/ICgpID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1BlbmRpbmcpWzBdLFxuICAgICAgICAgIClcbiAgICAgIDogKCkgPT4gZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGVuY2llcyh0aGlzLnN0YWNrc1RvUnVuKTtcblxuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShcImRlcGxveVwiLCBuZXh0LCBvcHRzKTtcblxuICAgIGNvbnN0IHVucHJvY2Vzc2VkU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAoZXhlY3V0b3IpID0+IGV4ZWN1dG9yLmlzUGVuZGluZyxcbiAgICApO1xuICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTb21lIHN0YWNrcyBmYWlsZWQgdG8gZGVwbG95OiAke3VucHJvY2Vzc2VkU3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFjay5uYW1lKVxuICAgICAgICAgIC5qb2luKFwiLCBcIil9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRlcGxveVwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZmFpbGVkU3RhY2tzOiB1bnByb2Nlc3NlZFN0YWNrcy5tYXAoKHN0YWNrKSA9PiBzdGFjay5lcnJvciksXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShvcHRzOiBNdXRhdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3Moc3RhY2tzLCBvcHRzLnN0YWNrTmFtZXMsIFwiZGVzdHJveVwiKTtcblxuICAgIGlmICghb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNoZWNrSWZBbGxEZXBlbmRhbnRzQXJlSW5jbHVkZWQoc3RhY2tzVG9SdW4sIHN0YWNrcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YWNrRXhlY3V0b3IgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbmQoXG4gICAgICAgIChzKSA9PiBzLnN0YWNrLm5hbWUgPT09IHN0YWNrTmFtZSxcbiAgICAgICk7XG4gICAgICBpZiAoIXN0YWNrRXhlY3V0b3IpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBzdGFjayBcIiR7c3RhY2tOYW1lfVwiIHRoYXQgd2FzIHN0b3BwZWRgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdGFja0V4ZWN1dG9yLnN0YWNrLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXBlbmRhbnQpID0+IHtcbiAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQoZGVwZW5kYW50KTtcblxuICAgICAgICBjb25zdCBkZXBlbmRhbnRTdGFjayA9IHRoaXMuc3RhY2tzVG9SdW4uZmluZChcbiAgICAgICAgICAocykgPT4gcy5zdGFjay5uYW1lID09PSBkZXBlbmRhbnQsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGVwZW5kYW50U3RhY2spIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc3RhY2sgXCIke2RlcGVuZGFudH1cIiB0aGF0IHdhcyBzdG9wcGVkYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kYW50U3RhY2suc3RvcCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywgb3B0cyksXG4gICAgKTtcbiAgICBjb25zdCBuZXh0ID0gb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXNcbiAgICAgID8gKCkgPT5cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgICAgICAgICAgKHN0YWNrKSA9PiBzdGFjay5jdXJyZW50U3RhdGUgIT09IFwiZG9uZVwiLFxuICAgICAgICAgICAgKVswXSxcbiAgICAgICAgICApXG4gICAgICA6ICgpID0+IGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRhbnRzKHRoaXMuc3RhY2tzVG9SdW4pO1xuXG4gICAgYXdhaXQgdGhpcy5leGVjdXRlKFwiZGVzdHJveVwiLCBuZXh0LCBvcHRzKTtcblxuICAgIGNvbnN0IHVucHJvY2Vzc2VkU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAoZXhlY3V0b3IpID0+IGV4ZWN1dG9yLmlzUGVuZGluZyxcbiAgICApO1xuICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTb21lIHN0YWNrcyBmYWlsZWQgdG8gZGVzdHJveTogJHt1bnByb2Nlc3NlZFN0YWNrc1xuICAgICAgICAgIC5tYXAoKHMpID0+IHMuc3RhY2submFtZSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkZXN0cm95XCIsIHtcbiAgICAgICAgc3RhY2tNZXRhZGF0YTogc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBmYWlsZWRTdGFja3M6IHVucHJvY2Vzc2VkU3RhY2tzLm1hcCgoc3RhY2spID0+IHN0YWNrLmVycm9yKSxcbiAgICAgICAgcmVxdWlyZWRQcm92aWRlcnM6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm9qZWN0VGVsZW1ldHJ5KGNvbW1hbmQ6IHN0cmluZywgcGF5bG9hZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gcmVhZENvbmZpZ1N5bmMoKTtcbiAgICBhd2FpdCBzZW5kVGVsZW1ldHJ5KGNvbW1hbmQsIHtcbiAgICAgIC4uLnBheWxvYWQsXG4gICAgICBsYW5ndWFnZTogY29uZmlnLmxhbmd1YWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoT3V0cHV0cyhvcHRzOiBGZXRjaE91dHB1dE9wdGlvbnMpIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgoKTtcblxuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3MoXG4gICAgICBzdGFja3MsXG4gICAgICBvcHRzLnN0YWNrTmFtZXMgfHwgW10sXG4gICAgICBcImRlcGxveVwiLFxuICAgICk7XG5cbiAgICBpZiAoc3RhY2tzVG9SdW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFja3MgdG8gZmV0Y2ggb3V0cHV0cyBmb3Igc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgLy8gT3B0aW9ucyBhcmUgZW1wdHksIGJlY2F1c2UgTXVsdGlwbGVTdGFja09wdGlvbnMgZG9lc24ndCBoYXZlIGFueSByZWxldmFudFxuICAgICAgLy8gb3B0aW9ucyBmb3IgYGdldFN0YWNrRXhlY3V0b3JgLCBoZW5jZSBkZWZhdWx0cyBhcmUgZmluZVxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCB7fSksXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwodW5kZWZpbmVkLCBvcHRzLnNraXBQcm92aWRlckxvY2spO1xuICAgIGNvbnN0IG91dHB1dHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuc3RhY2tzVG9SdW4ubWFwKGFzeW5jIChzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHMuZmV0Y2hPdXRwdXRzKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW3Muc3RhY2submFtZV06IG91dHB1dCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3V0cHV0cy5yZWR1Y2UoXG4gICAgICAoYWNjLCBjdXJyKSA9PiAoeyAuLi5hY2MsIC4uLmN1cnIgfSksXG4gICAgICB7fSxcbiAgICApIGFzIE5lc3RlZFRlcnJhZm9ybU91dHB1dHM7XG4gIH1cblxuICAvLyBTZXJpYWxseSBydW4gdGVycmFmb3JtIGluaXQgdG8gcHJvaGliaXQgdGV4dCBmaWxlIGJ1c3kgZXJyb3JzIGZvciB0aGUgY2FjaGUgZmlsZXNcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplU3RhY2tzVG9SdW5JblNlcmlhbChcbiAgICBub0NvbG9yPzogYm9vbGVhbixcbiAgICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbixcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHRoaXMuc3RhY2tzVG9SdW4pIHtcbiAgICAgIGF3YWl0IHN0YWNrLmluaXRhbGl6ZVRlcnJhZm9ybShub0NvbG9yLCBza2lwUHJvdmlkZXJMb2NrLCBtaWdyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdktf-stack.d.ts","sourceRoot":"","sources":["../../src/lib/cdktf-stack.ts"],"names":[],"mappings":"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"}
|