@cdktn/cli-core 0.22.0-pre.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/ambient.d.ts +13 -0
- package/eslint.config.mjs +82 -0
- package/jest.config.js +20 -0
- package/package.json +139 -0
- package/src/lib/cdktf-config.d.ts +16 -0
- package/src/lib/cdktf-config.d.ts.map +1 -0
- package/src/lib/cdktf-config.js +108 -0
- package/src/lib/cdktf-project-io-handler.d.ts +20 -0
- package/src/lib/cdktf-project-io-handler.d.ts.map +1 -0
- package/src/lib/cdktf-project-io-handler.js +84 -0
- package/src/lib/cdktf-project.d.ts +111 -0
- package/src/lib/cdktf-project.d.ts.map +1 -0
- package/src/lib/cdktf-project.js +371 -0
- package/src/lib/cdktf-stack.d.ts +134 -0
- package/src/lib/cdktf-stack.d.ts.map +1 -0
- package/src/lib/cdktf-stack.js +386 -0
- package/src/lib/convert.d.ts +6 -0
- package/src/lib/convert.d.ts.map +1 -0
- package/src/lib/convert.js +51 -0
- package/src/lib/dependencies/cdktf-config-manager.d.ts +12 -0
- package/src/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
- package/src/lib/dependencies/cdktf-config-manager.js +36 -0
- package/src/lib/dependencies/dependency-manager.d.ts +84 -0
- package/src/lib/dependencies/dependency-manager.d.ts.map +1 -0
- package/src/lib/dependencies/dependency-manager.js +365 -0
- package/src/lib/dependencies/package-manager.d.ts +18 -0
- package/src/lib/dependencies/package-manager.d.ts.map +1 -0
- package/src/lib/dependencies/package-manager.js +574 -0
- package/src/lib/dependencies/prebuilt-providers.d.ts +18 -0
- package/src/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
- package/src/lib/dependencies/prebuilt-providers.js +204 -0
- package/src/lib/dependencies/registry-api.d.ts +8 -0
- package/src/lib/dependencies/registry-api.d.ts.map +1 -0
- package/src/lib/dependencies/registry-api.js +77 -0
- package/src/lib/dependencies/version-constraints.d.ts +8 -0
- package/src/lib/dependencies/version-constraints.d.ts.map +1 -0
- package/src/lib/dependencies/version-constraints.js +95 -0
- package/src/lib/error-reporting.d.ts +10 -0
- package/src/lib/error-reporting.d.ts.map +1 -0
- package/src/lib/error-reporting.js +133 -0
- package/src/lib/errors.d.ts +6 -0
- package/src/lib/errors.d.ts.map +1 -0
- package/src/lib/errors.js +10 -0
- package/src/lib/execution-logs.d.ts +3 -0
- package/src/lib/execution-logs.d.ts.map +1 -0
- package/src/lib/execution-logs.js +47 -0
- package/src/lib/get.d.ts +25 -0
- package/src/lib/get.d.ts.map +1 -0
- package/src/lib/get.js +90 -0
- package/src/lib/helpers/stack-helpers.d.ts +16 -0
- package/src/lib/helpers/stack-helpers.d.ts.map +1 -0
- package/src/lib/helpers/stack-helpers.js +155 -0
- package/src/lib/index.d.ts +15 -0
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/index.js +44 -0
- package/src/lib/init.d.ts +37 -0
- package/src/lib/init.d.ts.map +1 -0
- package/src/lib/init.js +131 -0
- package/src/lib/local-provider-constraints.d.ts +28 -0
- package/src/lib/local-provider-constraints.d.ts.map +1 -0
- package/src/lib/local-provider-constraints.js +95 -0
- package/src/lib/local-provider-versions.d.ts +12 -0
- package/src/lib/local-provider-versions.d.ts.map +1 -0
- package/src/lib/local-provider-versions.js +73 -0
- package/src/lib/models/deploy-machine.d.ts +128 -0
- package/src/lib/models/deploy-machine.d.ts.map +1 -0
- package/src/lib/models/deploy-machine.js +280 -0
- package/src/lib/models/pty-process.d.ts +29 -0
- package/src/lib/models/pty-process.d.ts.map +1 -0
- package/src/lib/models/pty-process.js +132 -0
- package/src/lib/models/schema.d.ts +2307 -0
- package/src/lib/models/schema.d.ts.map +1 -0
- package/src/lib/models/schema.js +181 -0
- package/src/lib/models/terraform-cli.d.ts +72 -0
- package/src/lib/models/terraform-cli.d.ts.map +1 -0
- package/src/lib/models/terraform-cli.js +357 -0
- package/src/lib/models/terraform.d.ts +125 -0
- package/src/lib/models/terraform.d.ts.map +1 -0
- package/src/lib/models/terraform.js +72 -0
- package/src/lib/output.d.ts +23 -0
- package/src/lib/output.d.ts.map +1 -0
- package/src/lib/output.js +211 -0
- package/src/lib/provider-add.d.ts +15 -0
- package/src/lib/provider-add.d.ts.map +1 -0
- package/src/lib/provider-add.js +30 -0
- package/src/lib/server/terraform-logs.d.ts +2 -0
- package/src/lib/server/terraform-logs.d.ts.map +1 -0
- package/src/lib/server/terraform-logs.js +19 -0
- package/src/lib/synth-stack.d.ts +29 -0
- package/src/lib/synth-stack.d.ts.map +1 -0
- package/src/lib/synth-stack.js +251 -0
- package/src/lib/synth.d.ts +7 -0
- package/src/lib/synth.d.ts.map +1 -0
- package/src/lib/synth.js +67 -0
- package/src/lib/terraform-json.d.ts +1015 -0
- package/src/lib/terraform-json.d.ts.map +1 -0
- package/src/lib/terraform-json.js +82 -0
- package/src/lib/terraform-provider-lock.d.ts +25 -0
- package/src/lib/terraform-provider-lock.d.ts.map +1 -0
- package/src/lib/terraform-provider-lock.js +95 -0
- package/src/lib/watch.d.ts +16 -0
- package/src/lib/watch.d.ts.map +1 -0
- package/src/lib/watch.js +155 -0
- package/templates/csharp/.hooks.sscaff.js +63 -0
- package/templates/csharp/MainStack.cs +15 -0
- package/templates/csharp/MyTerraformStack.csproj +13 -0
- package/templates/csharp/Program.cs +17 -0
- package/templates/csharp/TestProgram.cs +42 -0
- package/templates/csharp/cdktf.json +11 -0
- package/templates/csharp/help +42 -0
- package/templates/csharp/{{}}.gitignore +345 -0
- package/templates/go/.hooks.sscaff.js +70 -0
- package/templates/go/cdktf.json +12 -0
- package/templates/go/go.mod +8 -0
- package/templates/go/help +32 -0
- package/templates/go/main.go +22 -0
- package/templates/go/main_test.go +42 -0
- package/templates/go/{{}}.gitignore +21 -0
- package/templates/java/.hooks.sscaff.js +64 -0
- package/templates/java/build.gradle +55 -0
- package/templates/java/cdktf.json +12 -0
- package/templates/java/gradle.properties +1 -0
- package/templates/java/gradlew +248 -0
- package/templates/java/gradlew.bat +92 -0
- package/templates/java/help +35 -0
- package/templates/java/settings.gradle +5 -0
- package/templates/java/src/main/java/com/mycompany/app/Main.java +16 -0
- package/templates/java/src/main/java/com/mycompany/app/MainStack.java +14 -0
- package/templates/java/src/test/java/com/company/app/MainTest.java +38 -0
- package/templates/java/{{}}.gitignore +14 -0
- package/templates/python/.hooks.sscaff.js +59 -0
- package/templates/python/Pipfile +7 -0
- package/templates/python/cdktf.json +12 -0
- package/templates/python/help +42 -0
- package/templates/python/main-test.py +26 -0
- package/templates/python/main.py +16 -0
- package/templates/python/{{}}.gitignore +7 -0
- package/templates/python-pip/.hooks.sscaff.js +63 -0
- package/templates/python-pip/cdktf.json +12 -0
- package/templates/python-pip/help +35 -0
- package/templates/python-pip/main-test.py +23 -0
- package/templates/python-pip/main.py +16 -0
- package/templates/python-pip/{{}}.gitignore +7 -0
- package/templates/typescript/.hooks.sscaff.js +78 -0
- package/templates/typescript/__tests__/main-test.ts +89 -0
- package/templates/typescript/cdktf.json +11 -0
- package/templates/typescript/help +51 -0
- package/templates/typescript/jest.config.js +187 -0
- package/templates/typescript/main.ts +14 -0
- package/templates/typescript/package.json +22 -0
- package/templates/typescript/setup.js +2 -0
- package/templates/typescript/tsconfig.json +35 -0
- package/templates/typescript/{{}}.gitignore +11 -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 = () => { }; // eslint-disable-line @typescript-eslint/no-empty-function
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNka3RmLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsK0NBQTBFO0FBQzFFLG1DQUEyQztBQUMzQywrQ0FRdUI7QUFFdkIscURBQTJEO0FBQzNELDJEQVFpQztBQUNqQyx5RUFBbUU7QUErRm5FLFNBQWdCLDJCQUEyQixDQUN6QyxNQUFtQztJQUVuQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsK0JBQStCLENBQUMsQ0FBQyxRQUFRLENBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztBQUNKLENBQUM7QUFORCxrRUFNQztBQWNELE1BQWEsWUFBWTtJQXFCdkIsWUFBWSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2hDLFdBQVcsRUFDWCxHQUFHLEdBQUcsS0FBSyxHQUNTO1FBaEJ0Qiw4QkFBOEI7UUFDdkIsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ3RDLCtDQUErQztRQUN2QyxzQ0FBaUMsR0FDdkMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsMkRBQTJEO1FBYXJFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMs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RSxLQUFLLENBQUMsNkJBQTZCLENBQ3pDLE9BQWlCLEVBQ2pCLGdCQUEwQixFQUMxQixZQUFzQjtRQUV0QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTFpQkQsb0NBMGlCQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyxcbiAgbG9nZ2VyLFxuICByZWFkQ29uZmlnU3luYyxcbiAgc2VuZFRlbGVtZXRyeSxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBTeW50aGVzaXplZFN0YWNrLCBTeW50aE9yaWdpbiwgU3ludGhTdGFjayB9IGZyb20gXCIuL3N5bnRoLXN0YWNrXCI7XG5pbXBvcnQgeyBwcmludEFubm90YXRpb25zIH0gZnJvbSBcIi4vc3ludGhcIjtcbmltcG9ydCB7XG4gIENka3RmU3RhY2ssXG4gIEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZSxcbiAgRXh0ZXJuYWxTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gIFN0YWNrQXBwcm92YWxVcGRhdGUsXG4gIFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgU3RhY2tVcGRhdGUsXG4gIFN0YWNrVXNlcklucHV0VXBkYXRlLFxufSBmcm9tIFwiLi9jZGt0Zi1zdGFja1wiO1xuaW1wb3J0IHsgTmVzdGVkVGVycmFmb3JtT3V0cHV0cyB9IGZyb20gXCIuL291dHB1dFwiO1xuaW1wb3J0IHsgY3JlYXRlRW5oYW5jZUxvZ01lc3NhZ2UgfSBmcm9tIFwiLi9leGVjdXRpb24tbG9nc1wiO1xuaW1wb3J0IHtcbiAgY2hlY2tJZkFsbERlcGVuZGFudHNBcmVJbmNsdWRlZCxcbiAgY2hlY2tJZkFsbERlcGVuZGVuY2llc0FyZUluY2x1ZGVkLFxuICBmaW5kQWxsTmVzdGVkRGVwZW5kYW50U3RhY2tzLFxuICBnZXRNdWx0aXBsZVN0YWNrcyxcbiAgZ2V0U2luZ2xlU3RhY2ssXG4gIGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRhbnRzLFxuICBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kZW5jaWVzLFxufSBmcm9tIFwiLi9oZWxwZXJzL3N0YWNrLWhlbHBlcnNcIjtcbmltcG9ydCB7IENka3RmUHJvamVjdElPSGFuZGxlciB9IGZyb20gXCIuL2Nka3RmLXByb2plY3QtaW8taGFuZGxlclwiO1xuXG50eXBlIE11bHRpU3RhY2tBcHByb3ZhbFVwZGF0ZSA9IHtcbiAgdHlwZTogXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiO1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgYXBwcm92ZTogKCkgPT4gdm9pZDtcbiAgZGlzbWlzczogKCkgPT4gdm9pZDtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbn07XG5cbnR5cGUgTXVsdGlTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG92ZXJyaWRlOiAoKSA9PiB2b2lkO1xuICByZWplY3Q6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgdHlwZSBNdWx0aVN0YWNrVXBkYXRlID1cbiAgfCBNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGVcbiAgfCBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZTtcblxuZXhwb3J0IHR5cGUgUHJvamVjdFVwZGF0ZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJzeW50aGVzaXppbmdcIjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJzeW50aGVzaXplZFwiO1xuICAgICAgc3RhY2tzOiBTeW50aGVzaXplZFN0YWNrW107XG4gICAgICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgfVxuICB8IFN0YWNrVXBkYXRlXG4gIHwgTXVsdGlTdGFja1VwZGF0ZTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlU3RhY2tPcHRpb25zID0ge1xuICBzdGFja05hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBNdWx0aXBsZVN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2tOYW1lcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU2tpcFN5bnRoT3B0aW9ucyA9IHtcbiAgc2tpcFN5bnRoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNraXBQcm92aWRlckxvY2tPcHRpb25zID0ge1xuICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEZldGNoT3V0cHV0T3B0aW9ucyA9IFNraXBTeW50aE9wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIE11bHRpcGxlU3RhY2tPcHRpb25zO1xuXG5leHBvcnQgdHlwZSBBdXRvQXBwcm92ZU9wdGlvbnMgPSB7XG4gIGF1dG9BcHByb3ZlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERpZmZPcHRpb25zID0gU2luZ2xlU3RhY2tPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBTa2lwU3ludGhPcHRpb25zICYge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuO1xuICB9O1xuXG5leHBvcnQgdHlwZSBNdXRhdGlvbk9wdGlvbnMgPSBNdWx0aXBsZVN0YWNrT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgU2tpcFN5bnRoT3B0aW9ucyAmXG4gIEF1dG9BcHByb3ZlT3B0aW9ucyAmIHtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcbiAgICBwYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuO1xuICB9O1xuXG5leHBvcnQgdHlwZSBMb2dNZXNzYWdlID0ge1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgbWVzc2FnZVdpdGhDb25zdHJ1Y3RQYXRoPzogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG4vLyBTdG9yZXMgYSBsb2cgdmFsdWUgb2YgYSBjZXJ0YWluIHR5cGUgdW50aWwgaXQgY2FuIGJlIHNlbnRcbnR5cGUgQnVmZmVyZWQ8VCwgVj4gPSB7XG4gIGNiOiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgdmFsdWU6IFQ7XG4gIHR5cGU6IFY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXYWl0aW5nRm9yVXNlcklucHV0VXBkYXRlKFxuICB1cGRhdGU6IFByb2plY3RVcGRhdGUgfCBTdGFja1VwZGF0ZSxcbikge1xuICByZXR1cm4gW1wid2FpdGluZyBmb3IgYXBwcm92YWxcIiwgXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiXS5pbmNsdWRlcyhcbiAgICB1cGRhdGUudHlwZSxcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgUHJvamVjdEV2ZW50ID1cbiAgfCBCdWZmZXJlZDxQcm9qZWN0VXBkYXRlLCBcInByb2plY3RVcGRhdGVcIj5cbiAgfCBCdWZmZXJlZDxMb2dNZXNzYWdlLCBcImxvZ01lc3NhZ2VcIj47XG5leHBvcnQgdHlwZSBDZGt0ZlByb2plY3RPcHRpb25zID0ge1xuICBzeW50aENvbW1hbmQ6IHN0cmluZztcbiAgb3V0RGlyOiBzdHJpbmc7XG4gIG9uVXBkYXRlOiAodXBkYXRlOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkO1xuICBvbkxvZz86IChsb2c6IExvZ01lc3NhZ2UpID0+IHZvaWQ7XG4gIHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIHN5bnRoT3JpZ2luPzogU3ludGhPcmlnaW47XG4gIGhjbD86IGJvb2xlYW47XG59O1xuZXhwb3J0IGNsYXNzIENka3RmUHJvamVjdCB7XG4gIHB1YmxpYyBzdGFja3M/OiBTeW50aGVzaXplZFN0YWNrW107XG4gIHB1YmxpYyBoYXJkQWJvcnQ6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBzeW50aENvbW1hbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSBvdXREaXI6IHN0cmluZztcbiAgcHJpdmF0ZSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgb25VcGRhdGU6ICh1cGRhdGU6IFByb2plY3RVcGRhdGUpID0+IHZvaWQ7XG4gIHByaXZhdGUgb25Mb2c/OiAobG9nOiBMb2dNZXNzYWdlKSA9PiB2b2lkO1xuICBwcml2YXRlIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgcHJpdmF0ZSBzeW50aE9yaWdpbj86IFN5bnRoT3JpZ2luO1xuICBwcml2YXRlIGhjbD86IGJvb2xlYW47XG5cbiAgLy8gU2V0IGR1cmluZyBkZXBsb3kgLyBkZXN0cm95XG4gIHB1YmxpYyBzdGFja3NUb1J1bjogQ2RrdGZTdGFja1tdID0gW107XG4gIC8vIFRoaXMgbWVhbnMgc3RoIGRpZmZlcmVudCBpbiBkZXBsb3kgLyBkZXN0cm95XG4gIHByaXZhdGUgc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0OiAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHZvaWQgPVxuICAgICgpID0+IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuXG4gIHByaXZhdGUgaW9IYW5kbGVyOiBDZGt0ZlByb2plY3RJT0hhbmRsZXI7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN5bnRoQ29tbWFuZCxcbiAgICBvdXREaXIsXG4gICAgb25VcGRhdGUsXG4gICAgb25Mb2csXG4gICAgd29ya2luZ0RpcmVjdG9yeSA9IHByb2Nlc3MuY3dkKCksXG4gICAgc3ludGhPcmlnaW4sXG4gICAgaGNsID0gZmFsc2UsXG4gIH06IENka3RmUHJvamVjdE9wdGlvbnMpIHtcbiAgICB0aGlzLnN5bnRoQ29tbWFuZCA9IHN5bnRoQ29tbWFuZDtcbiAgICB0aGlzLm91dERpciA9IG91dERpcjtcbiAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSB3b3JraW5nRGlyZWN0b3J5O1xuICAgIHRoaXMub25VcGRhdGUgPSBvblVwZGF0ZTtcbiAgICB0aGlzLm9uTG9nID0gb25Mb2c7XG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5hYm9ydFNpZ25hbCA9IGFjLnNpZ25hbDtcbiAgICB0aGlzLnN5bnRoT3JpZ2luID0gc3ludGhPcmlnaW47XG4gICAgdGhpcy5oY2wgPVxuICAgICAgcHJvY2Vzcy5lbnYuU1lOVEhfSENMX09VVFBVVCA9PT0gXCJ0cnVlXCIgfHxcbiAgICAgIHByb2Nlc3MuZW52LlNZTlRIX0hDTF9PVVRQVVQgPT09IFwiMVwiIHx8XG4gICAgICBoY2w7XG5cbiAgICB0aGlzLmhhcmRBYm9ydCA9IGFjLmFib3J0LmJpbmQoYWMpO1xuICAgIHRoaXMuaW9IYW5kbGVyID0gbmV3IENka3RmUHJvamVjdElPSGFuZGxlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQWxsU3RhY2tzKCkge1xuICAgIHRoaXMuc3RhY2tzVG9SdW4uZm9yRWFjaCgoc3RhY2spID0+IHN0YWNrLnN0b3AoKSk7XG4gICAgdGhpcy5pb0hhbmRsZXIuZmlsdGVyVXNlcklucHV0RXZlbnRzRnJvbUJ1ZmZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVc2VyVXBkYXRlPFxuICAgIFQgZXh0ZW5kcyBNdWx0aVN0YWNrVXBkYXRlLFxuICAgIFYgZXh0ZW5kcyBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbiAgPihcbiAgICB1cGRhdGU6IFN0YWNrVXNlcklucHV0VXBkYXRlLFxuICAgIG9wZXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsICh1cGRhdGU6IFYpID0+IHZvaWQ+LFxuICAgIG9yaWdpbmFsQ2FsbGJhY2s6ICh1cGRhdGVUb1NlbmQ6IFByb2plY3RVcGRhdGUpID0+IHZvaWQsXG4gICAgZXZlbnRUeXBlOiBUW1widHlwZVwiXSxcbiAgKSB7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gKHVwZGF0ZTogVikgPT5cbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMob3BlcmF0aW9ucykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBwYXNzZWQgaW4gdG8gbWFrZSB0eXBlc2NyaXB0IGhhcHB5IG9ubHlcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIChfOiBWKSA9PiB7XG4gICAgICAgICAgICAgIHZhbHVlKHVwZGF0ZSk7XG5cbiAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWZlciB0aGVzZSBjYWxscyBmb3IgdGhlIGNhc2UgdGhhdCBhcHByb3ZlKCkgaXMgaW5zdGFudGx5IGludm9rZWRcbiAgICAgICAgICAgICAgLy8gaW4gdGhlIGxpc3RlbmVyIHRoYXQgcmVjZWl2ZXMgdGhlc2UgY2FsbGJhY2tzIGFzIGl0IG90aGVyd2lzZSB3b3VsZCBhbHJlYWR5XG4gICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiIGV2ZW50IGZyb20gdGhlIGJ1ZmZlciBiZWZvcmUgd2UgZXZlblxuICAgICAgICAgICAgICAvLyBzZXQgd2FpdGluZ0ZvckFwcHJvdmFsIHRvIHRydWUgKGF0IHRoZSBlbmQgb2YgdGhpcyBpZiBzdGF0ZW1lbnQpIHdoaWNoIHJlc3VsdHNcbiAgICAgICAgICAgICAgLy8gaW4gYnVmZmVyZWQgdXBkYXRlcyB3aGljaCB3aWxsIG5ldmVyIHVuYmxvY2tcbiAgICAgICAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAvLyBhbHdheXMgc2VuZCB0byBidWZmZXIsIGFzIHJlc3VtZUFmdGVyVXNlcklucHV0KCkgYWx3YXlzIGV4cGVjdHMgYSBtYXRjaGluZyBldmVudFxuICAgIHRoaXMuaW9IYW5kbGVyLnB1c2hFdmVudCh7XG4gICAgICBjYjogb3JpZ2luYWxDYWxsYmFjayxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgc3RhY2tOYW1lOiB1cGRhdGUuc3RhY2tOYW1lLFxuICAgICAgICAuLi5jYWxsYmFja3ModXBkYXRlIGFzIFYpLFxuICAgICAgfSBhcyBULFxuICAgICAgdHlwZTogXCJwcm9qZWN0VXBkYXRlXCIsXG4gICAgfSk7XG5cbiAgICAvLyBpZiB3ZSBhcmVuJ3QgYWxyZWFkeSB3YWl0aW5nLCB0aGlzIG5lZWRzIHRvIGdvIHRvIGNiKCkgdG9vIHRvIGFycml2ZSBhdCB0aGUgVUlcbiAgICBpZiAoIXRoaXMuaW9IYW5kbGVyLmlzV2FpdGluZ0ZvclVzZXJJbnB1dCgpKSB7XG4gICAgICBvcmlnaW5hbENhbGxiYWNrKHtcbiAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICBzdGFja05hbWU6IHVwZGF0ZS5zdGFja05hbWUsXG4gICAgICAgIC4uLmNhbGxiYWNrcyh1cGRhdGUgYXMgViksXG4gICAgICB9IGFzIFQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVXNlcklucHV0UHJvY2VzcyhjYjogKHVwZGF0ZVRvU2VuZDogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZCkge1xuICAgIHJldHVybiAoXG4gICAgICB1cGRhdGU6XG4gICAgICAgIHwgU3RhY2tVcGRhdGVcbiAgICAgICAgfCBTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICAgIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICAgIHwgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICAgIHwgRXh0ZXJuYWxTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gICAgKSA9PiB7XG4gICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgc3RhY2sgYXBwcm92YWwgcmVwbHlcIikge1xuICAgICAgICBpZiAoIXVwZGF0ZS5hcHByb3ZlZCkge1xuICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW9IYW5kbGVyLnJlc3VtZUFmdGVyVXNlcklucHV0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICByZXR1cm47IC8vIGFrYSBkb24ndCBzZW5kIHRoaXMgZXZlbnQgdG8gYW55IGJ1ZmZlclxuICAgICAgfVxuICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcImV4dGVybmFsIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlIHJlcGx5XCIpIHtcbiAgICAgICAgaWYgKCF1cGRhdGUub3ZlcnJpZGRlbikge1xuICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW9IYW5kbGVyLnJlc3VtZUFmdGVyVXNlcklucHV0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICByZXR1cm47IC8vIGFrYSBkb24ndCBzZW5kIHRoaXMgZXZlbnQgdG8gYW55IGJ1ZmZlclxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIgfHxcbiAgICAgICAgdXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIlxuICAgICAgKSB7XG4gICAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVVc2VyVXBkYXRlPE11bHRpU3RhY2tBcHByb3ZhbFVwZGF0ZSwgU3RhY2tBcHByb3ZhbFVwZGF0ZT4oXG4gICAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFwcHJvdmU6ICh1cGRhdGUpID0+IHVwZGF0ZS5hcHByb3ZlKCksXG4gICAgICAgICAgICAgIGRpc21pc3M6ICh1cGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN0b3A6ICh1cGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2IsXG4gICAgICAgICAgICBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBzZW50aW5lbCBvdmVycmlkZVwiKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVVc2VyVXBkYXRlPFxuICAgICAgICAgICAgTXVsdGlTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gICAgICAgICAgICBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgICAgICA+KFxuICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvdmVycmlkZTogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5vdmVycmlkZSgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZWplY3Q6ICh1cGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2IsXG4gICAgICAgICAgICBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW9IYW5kbGVyLmF3YWl0VXNlcklucHV0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pb0hhbmRsZXIuaXNXYWl0aW5nRm9yVXNlcklucHV0KCkpIHtcbiAgICAgICAgICB0aGlzLmlvSGFuZGxlci5wdXNoRXZlbnQoe1xuICAgICAgICAgICAgY2IsXG4gICAgICAgICAgICB2YWx1ZTogdXBkYXRlLFxuICAgICAgICAgICAgdHlwZTogXCJwcm9qZWN0VXBkYXRlXCIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IodXBkYXRlIGFzIFByb2plY3RVcGRhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGFja0V4ZWN1dG9yKFxuICAgIHN0YWNrOiBTeW50aGVzaXplZFN0YWNrLFxuICAgIG9wdHM6IEF1dG9BcHByb3ZlT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBjb25zdCBlbmhhbmNlTG9nTWVzc2FnZSA9IGNyZWF0ZUVuaGFuY2VMb2dNZXNzYWdlKHN0YWNrKTtcbiAgICBjb25zdCBvbkxvZyA9IHRoaXMuaW9IYW5kbGVyLmJ1ZmZlcldoaWxlQXdhaXRpbmdVc2VySW5wdXQodGhpcy5vbkxvZyk7XG4gICAgcmV0dXJuIG5ldyBDZGt0ZlN0YWNrKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBzdGFjayxcbiAgICAgIG9uVXBkYXRlOiB0aGlzLmhhbmRsZVVzZXJJbnB1dFByb2Nlc3ModGhpcy5vblVwZGF0ZSksXG4gICAgICBvbkxvZzogb25Mb2dcbiAgICAgICAgPyAoeyBtZXNzYWdlIH0pID0+XG4gICAgICAgICAgICBvbkxvZyh7XG4gICAgICAgICAgICAgIHN0YWNrTmFtZTogc3RhY2submFtZSxcbiAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgbWVzc2FnZVdpdGhDb25zdHJ1Y3RQYXRoOiBlbmhhbmNlTG9nTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgYWJvcnRTaWduYWw6IHRoaXMuYWJvcnRTaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dHB1dHNCeUNvbnN0cnVjdElkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrc1RvUnVuLnJlZHVjZShcbiAgICAgIChhY2MsIHN0YWNrKSA9PiAoe1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIC4uLnN0YWNrLm91dHB1dHNCeUNvbnN0cnVjdElkLFxuICAgICAgfSksXG4gICAgICB7fSBhcyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3ludGgobm9Db2xvcj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9uVXBkYXRlKHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6aW5nXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBTeW50aFN0YWNrLnN5bnRoKFxuICAgICAgdGhpcy5hYm9ydFNpZ25hbCBhcyBhbnksXG4gICAgICB0aGlzLnN5bnRoQ29tbWFuZCxcbiAgICAgIHRoaXMub3V0RGlyLFxuICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgZmFsc2UsXG4gICAgICBub0NvbG9yLFxuICAgICAgdGhpcy5zeW50aE9yaWdpbixcbiAgICAgIHRoaXMuaGNsLFxuICAgICk7XG5cbiAgICBwcmludEFubm90YXRpb25zKHN0YWNrcyk7XG5cbiAgICB0aGlzLm9uVXBkYXRlKHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIixcbiAgICAgIHN0YWNrcyxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGFja3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVhZFN5bnRoZXNpemVkU3RhY2tzKCkge1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IFN5bnRoU3RhY2sucmVhZFN5bnRoZXNpemVkU3RhY2tzKHRoaXMub3V0RGlyKTtcblxuICAgIHByaW50QW5ub3RhdGlvbnMoc3RhY2tzKTtcblxuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXplZFwiLFxuICAgICAgc3RhY2tzLFxuICAgIH0pO1xuICAgIHJldHVybiBzdGFja3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGlmZihvcHRzOiBEaWZmT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhY2tzID0gb3B0cy5za2lwU3ludGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkU3ludGhlc2l6ZWRTdGFja3MoKVxuICAgICAgOiBhd2FpdCB0aGlzLnN5bnRoKG9wdHMubm9Db2xvcik7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmdldFN0YWNrRXhlY3V0b3IoXG4gICAgICBnZXRTaW5nbGVTdGFjayhzdGFja3MsIG9wdHM/LnN0YWNrTmFtZSwgXCJkaWZmXCIpLFxuICAgICk7XG4gICAgYXdhaXQgc3RhY2suaW5pdGFsaXplVGVycmFmb3JtKFxuICAgICAgb3B0cy5ub0NvbG9yLFxuICAgICAgb3B0cy5za2lwUHJvdmlkZXJMb2NrLFxuICAgICAgb3B0cy5taWdyYXRlU3RhdGUsXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFjay5kaWZmKG9wdHMpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU3RhY2sgZmFpbGVkIHRvIHBsYW46ICR7c3RhY2suc3RhY2submFtZX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgICBlLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YWNrLmVycm9yKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTdGFjayBmYWlsZWQgdG8gcGxhbjogJHtzdGFjay5zdGFjay5uYW1lfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICAgIG5ldyBFcnJvcihzdGFjay5lcnJvciksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkaWZmXCIsIHtcbiAgICAgICAgc3RhY2tNZXRhZGF0YTogc3RhY2tzLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZXJyb3JzOiBzdGFjay5lcnJvcixcbiAgICAgICAgcmVxdWlyZWRQcm92aWRlcnM6IHN0YWNrcy5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGUoXG4gICAgbWV0aG9kOiBcImRlcGxveVwiIHwgXCJkZXN0cm95XCIsXG4gICAgbmV4dDogKCkgPT4gUHJvbWlzZTxDZGt0ZlN0YWNrIHwgdW5kZWZpbmVkPixcbiAgICBvcHRzOiBNdXRhdGlvbk9wdGlvbnMsXG4gICkge1xuICAgIC8vIFdlIG9ubHkgc3VwcG9ydCByZWZyZXNoIG9ubHkgb24gZGVwbG95LCBhIGJpdCBvZiBhIGxlYWt5IGFic3RyYWN0aW9uIGhlcmVcbiAgICBpZiAob3B0cy5yZWZyZXNoT25seSAmJiBtZXRob2QgIT09IFwiZGVwbG95XCIpIHtcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChgUmVmcmVzaCBvbmx5IGlzIG9ubHkgc3VwcG9ydGVkIG9uIGRlcGxveWApO1xuICAgIH1cbiAgICBjb25zdCBtYXhQYXJhbGxlbFJ1bnMgPVxuICAgICAgIW9wdHMucGFyYWxsZWxpc20gfHwgb3B0cy5wYXJhbGxlbGlzbSA8IDAgPyBJbmZpbml0eSA6IG9wdHMucGFyYWxsZWxpc207XG4gICAgY29uc3QgYWxsRXhlY3V0aW9ucyA9IFtdO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplU3RhY2tzVG9SdW5JblNlcmlhbChcbiAgICAgIG9wdHMubm9Db2xvcixcbiAgICAgIG9wdHMuc2tpcFByb3ZpZGVyTG9jayxcbiAgICAgIG9wdHMubWlncmF0ZVN0YXRlLFxuICAgICk7XG4gICAgd2hpbGUgKHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNQZW5kaW5nKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBydW5uaW5nU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1J1bm5pbmcpO1xuICAgICAgaWYgKHJ1bm5pbmdTdGFja3MubGVuZ3RoID49IG1heFBhcmFsbGVsUnVucykge1xuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UocnVubmluZ1N0YWNrcy5tYXAoKHMpID0+IHMuY3VycmVudFdvcmtQcm9taXNlKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV4dFJ1bm5pbmdFeGVjdXRvciA9IGF3YWl0IG5leHQoKTtcbiAgICAgICAgaWYgKCFuZXh0UnVubmluZ0V4ZWN1dG9yKSB7XG4gICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGhhdmUgbm8gcGVuZGluZyBzdGFja3MsIGJ1dCB3ZSBhbHNvIGNhbiBub3QgZmluZCBhIG5ldyBleGVjdXRvclxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2UgPVxuICAgICAgICAgIG1ldGhvZCA9PT0gXCJkZXBsb3lcIlxuICAgICAgICAgICAgPyBuZXh0UnVubmluZ0V4ZWN1dG9yLmRlcGxveShvcHRzKVxuICAgICAgICAgICAgOiBuZXh0UnVubmluZ0V4ZWN1dG9yLmRlc3Ryb3kob3B0cyk7XG5cbiAgICAgICAgYWxsRXhlY3V0aW9ucy5wdXNoKHByb21pc2UpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBhd2FpdCBuZXh0KCkgdGhyZXcgYW4gZXJyb3IgYmVjYXVzZSBhIHN0YWNrIGZhaWxlZCB0byBhcHBseS9kZXN0cm95XG4gICAgICAgIC8vIHdhaXQgZm9yIGFsbCBvdGhlciBjdXJyZW50bHkgcnVubmluZyBzdGFja3MgdG8gY29tcGxldGUgYmVmb3JlIHByb3BhZ2F0aW5nIHRoYXQgZXJyb3JcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiRW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgYXdhaXRpbmcgc3RhY2sgdG8gZmluaXNoXCIsIGUpO1xuICAgICAgICBjb25zdCBvcGVuU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAgICAgKGV4KSA9PiBleC5jdXJyZW50V29ya1Byb21pc2UsXG4gICAgICAgICk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIldhaXRpbmcgZm9yIHN0aWxsIHJ1bm5pbmcgc3RhY2tzIHRvIGZpbmlzaDpcIiwgb3BlblN0YWNrcyk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChvcGVuU3RhY2tzLm1hcCgoZXgpID0+IGV4LmN1cnJlbnRXb3JrUHJvbWlzZSkpO1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgXCJEb25lIHdhaXRpbmcgZm9yIHN0aWxsIHJ1bm5pbmcgc3RhY2tzLiBBbGwgcGVuZGluZyB3b3JrIGZpbmlzaGVkXCIsXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlIGVuZCB0aGUgbG9vcCB3aGVuIGFsbCBzdGFja3MgYXJlIHN0YXJ0ZWQsIG5vdyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZW0gdG8gYmUgZG9uZVxuICAgIC8vIFdlIHdhaXQgZm9yIGFsbCB3b3JrIHRvIGZpbmlzaCBldmVuIGlmIG9uZSBvZiB0aGUgcHJvbWlzZXMgdGhyZXcgYW4gZXJyb3IuXG4gICAgYXdhaXQgZW5zdXJlQWxsU2V0dGxlZEJlZm9yZVRocm93aW5nKFxuICAgICAgUHJvbWlzZS5hbGwoYWxsRXhlY3V0aW9ucyksXG4gICAgICBhbGxFeGVjdXRpb25zLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVwbG95KG9wdHM6IE11dGF0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhY2tzID0gb3B0cy5za2lwU3ludGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkU3ludGhlc2l6ZWRTdGFja3MoKVxuICAgICAgOiBhd2FpdCB0aGlzLnN5bnRoKG9wdHMubm9Db2xvcik7XG4gICAgY29uc3Qgc3RhY2tzVG9SdW4gPSBnZXRNdWx0aXBsZVN0YWNrcyhzdGFja3MsIG9wdHMuc3RhY2tOYW1lcywgXCJkZXBsb3lcIik7XG4gICAgaWYgKCFvcHRzLmlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llcykge1xuICAgICAgY2hlY2tJZkFsbERlcGVuZGVuY2llc0FyZUluY2x1ZGVkKHN0YWNrc1RvUnVuKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCA9IChzdGFja05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgZmluZEFsbE5lc3RlZERlcGVuZGFudFN0YWNrcyh0aGlzLnN0YWNrc1RvUnVuLCBzdGFja05hbWUpLmZvckVhY2goXG4gICAgICAgIChzdGFjaykgPT4gc3RhY2suc3RvcCgpLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdGFja3NUb1J1biA9IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICB0aGlzLmdldFN0YWNrRXhlY3V0b3Ioc3RhY2ssIG9wdHMpLFxuICAgICk7XG5cbiAgICBjb25zdCBuZXh0ID0gb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXNcbiAgICAgID8gKCkgPT5cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUGVuZGluZylbMF0sXG4gICAgICAgICAgKVxuICAgICAgOiAoKSA9PiBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kZW5jaWVzKHRoaXMuc3RhY2tzVG9SdW4pO1xuXG4gICAgYXdhaXQgdGhpcy5leGVjdXRlKFwiZGVwbG95XCIsIG5leHQsIG9wdHMpO1xuXG4gICAgY29uc3QgdW5wcm9jZXNzZWRTdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgIChleGVjdXRvcikgPT4gZXhlY3V0b3IuaXNQZW5kaW5nLFxuICAgICk7XG4gICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFNvbWUgc3RhY2tzIGZhaWxlZCB0byBkZXBsb3k6ICR7dW5wcm9jZXNzZWRTdGFja3NcbiAgICAgICAgICAubWFwKChzKSA9PiBzLnN0YWNrLm5hbWUpXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGVwbG95XCIsIHtcbiAgICAgICAgc3RhY2tNZXRhZGF0YTogc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBmYWlsZWRTdGFja3M6IHVucHJvY2Vzc2VkU3RhY2tzLm1hcCgoc3RhY2spID0+IHN0YWNrLmVycm9yKSxcbiAgICAgICAgcmVxdWlyZWRQcm92aWRlcnM6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXN0cm95KG9wdHM6IE11dGF0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgc3RhY2tzID0gb3B0cy5za2lwU3ludGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkU3ludGhlc2l6ZWRTdGFja3MoKVxuICAgICAgOiBhd2FpdCB0aGlzLnN5bnRoKG9wdHMubm9Db2xvcik7XG4gICAgY29uc3Qgc3RhY2tzVG9SdW4gPSBnZXRNdWx0aXBsZVN0YWNrcyhzdGFja3MsIG9wdHMuc3RhY2tOYW1lcywgXCJkZXN0cm95XCIpO1xuXG4gICAgaWYgKCFvcHRzLmlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llcykge1xuICAgICAgY2hlY2tJZkFsbERlcGVuZGFudHNBcmVJbmNsdWRlZChzdGFja3NUb1J1biwgc3RhY2tzKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCA9IChzdGFja05hbWU6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3RhY2tFeGVjdXRvciA9IHRoaXMuc3RhY2tzVG9SdW4uZmluZChcbiAgICAgICAgKHMpID0+IHMuc3RhY2submFtZSA9PT0gc3RhY2tOYW1lLFxuICAgICAgKTtcbiAgICAgIGlmICghc3RhY2tFeGVjdXRvcikge1xuICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHN0YWNrIFwiJHtzdGFja05hbWV9XCIgdGhhdCB3YXMgc3RvcHBlZGAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHN0YWNrRXhlY3V0b3Iuc3RhY2suZGVwZW5kZW5jaWVzLmZvckVhY2goKGRlcGVuZGFudCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dChkZXBlbmRhbnQpO1xuXG4gICAgICAgIGNvbnN0IGRlcGVuZGFudFN0YWNrID0gdGhpcy5zdGFja3NUb1J1bi5maW5kKFxuICAgICAgICAgIChzKSA9PiBzLnN0YWNrLm5hbWUgPT09IGRlcGVuZGFudCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFkZXBlbmRhbnRTdGFjaykge1xuICAgICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBzdGFjayBcIiR7ZGVwZW5kYW50fVwiIHRoYXQgd2FzIHN0b3BwZWRgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXBlbmRhbnRTdGFjay5zdG9wKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCBvcHRzKSxcbiAgICApO1xuICAgIGNvbnN0IG5leHQgPSBvcHRzLmlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llc1xuICAgICAgPyAoKSA9PlxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgICAgICAgICAoc3RhY2spID0+IHN0YWNrLmN1cnJlbnRTdGF0ZSAhPT0gXCJkb25lXCIsXG4gICAgICAgICAgICApWzBdLFxuICAgICAgICAgIClcbiAgICAgIDogKCkgPT4gZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGFudHModGhpcy5zdGFja3NUb1J1bik7XG5cbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoXCJkZXN0cm95XCIsIG5leHQsIG9wdHMpO1xuXG4gICAgY29uc3QgdW5wcm9jZXNzZWRTdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgIChleGVjdXRvcikgPT4gZXhlY3V0b3IuaXNQZW5kaW5nLFxuICAgICk7XG4gICAgaWYgKHVucHJvY2Vzc2VkU3RhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFNvbWUgc3RhY2tzIGZhaWxlZCB0byBkZXN0cm95OiAke3VucHJvY2Vzc2VkU3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFjay5uYW1lKVxuICAgICAgICAgIC5qb2luKFwiLCBcIil9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRlc3Ryb3lcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGZhaWxlZFN0YWNrczogdW5wcm9jZXNzZWRTdGFja3MubWFwKChzdGFjaykgPT4gc3RhY2suZXJyb3IpLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzVG9SdW4ubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHByb2plY3RUZWxlbWV0cnkoY29tbWFuZDogc3RyaW5nLCBwYXlsb2FkOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWcgPSByZWFkQ29uZmlnU3luYygpO1xuICAgIGF3YWl0IHNlbmRUZWxlbWV0cnkoY29tbWFuZCwge1xuICAgICAgLi4ucGF5bG9hZCxcbiAgICAgIGxhbmd1YWdlOiBjb25maWcubGFuZ3VhZ2UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmV0Y2hPdXRwdXRzKG9wdHM6IEZldGNoT3V0cHV0T3B0aW9ucykge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aCgpO1xuXG4gICAgY29uc3Qgc3RhY2tzVG9SdW4gPSBnZXRNdWx0aXBsZVN0YWNrcyhcbiAgICAgIHN0YWNrcyxcbiAgICAgIG9wdHMuc3RhY2tOYW1lcyB8fCBbXSxcbiAgICAgIFwiZGVwbG95XCIsXG4gICAgKTtcblxuICAgIGlmIChzdGFja3NUb1J1bi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0YWNrcyB0byBmZXRjaCBvdXRwdXRzIGZvciBzcGVjaWZpZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFja3NUb1J1biA9IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAvLyBPcHRpb25zIGFyZSBlbXB0eSwgYmVjYXVzZSBNdWx0aXBsZVN0YWNrT3B0aW9ucyBkb2Vzbid0IGhhdmUgYW55IHJlbGV2YW50XG4gICAgICAvLyBvcHRpb25zIGZvciBgZ2V0U3RhY2tFeGVjdXRvcmAsIGhlbmNlIGRlZmF1bHRzIGFyZSBmaW5lXG4gICAgICB0aGlzLmdldFN0YWNrRXhlY3V0b3Ioc3RhY2ssIHt9KSxcbiAgICApO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplU3RhY2tzVG9SdW5JblNlcmlhbCh1bmRlZmluZWQsIG9wdHMuc2tpcFByb3ZpZGVyTG9jayk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGhpcy5zdGFja3NUb1J1bi5tYXAoYXN5bmMgKHMpID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcy5mZXRjaE91dHB1dHMoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbcy5zdGFjay5uYW1lXTogb3V0cHV0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBvdXRwdXRzLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+ICh7IC4uLmFjYywgLi4uY3VyciB9KSxcbiAgICAgIHt9LFxuICAgICkgYXMgTmVzdGVkVGVycmFmb3JtT3V0cHV0cztcbiAgfVxuXG4gIC8vIFNlcmlhbGx5IHJ1biB0ZXJyYWZvcm0gaW5pdCB0byBwcm9oaWJpdCB0ZXh0IGZpbGUgYnVzeSBlcnJvcnMgZm9yIHRoZSBjYWNoZSBmaWxlc1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKFxuICAgIG5vQ29sb3I/OiBib29sZWFuLFxuICAgIHNraXBQcm92aWRlckxvY2s/OiBib29sZWFuLFxuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgdGhpcy5zdGFja3NUb1J1bikge1xuICAgICAgYXdhaXQgc3RhY2suaW5pdGFsaXplVGVycmFmb3JtKG5vQ29sb3IsIHNraXBQcm92aWRlckxvY2ssIG1pZ3JhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { SynthesizedStack } from "./synth-stack";
|
|
2
|
+
import { Terraform } from "./models/terraform";
|
|
3
|
+
import { NestedTerraformOutputs } from "./output";
|
|
4
|
+
export type StackUpdate = {
|
|
5
|
+
type: "planning";
|
|
6
|
+
stackName: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "planned";
|
|
9
|
+
stackName: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: "deploying";
|
|
12
|
+
stackName: string;
|
|
13
|
+
} | {
|
|
14
|
+
type: "deploy update";
|
|
15
|
+
stackName: string;
|
|
16
|
+
deployOutput: string;
|
|
17
|
+
} | {
|
|
18
|
+
type: "deployed";
|
|
19
|
+
stackName: string;
|
|
20
|
+
outputsByConstructId: NestedTerraformOutputs;
|
|
21
|
+
outputs: Record<string, any>;
|
|
22
|
+
} | {
|
|
23
|
+
type: "destroying";
|
|
24
|
+
stackName: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: "destroy update";
|
|
27
|
+
stackName: string;
|
|
28
|
+
destroyOutput: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: "destroyed";
|
|
31
|
+
stackName: string;
|
|
32
|
+
} | {
|
|
33
|
+
type: "outputs fetched";
|
|
34
|
+
stackName: string;
|
|
35
|
+
outputsByConstructId: NestedTerraformOutputs;
|
|
36
|
+
outputs: Record<string, any>;
|
|
37
|
+
} | {
|
|
38
|
+
type: "errored";
|
|
39
|
+
stackName: string;
|
|
40
|
+
error: string;
|
|
41
|
+
} | {
|
|
42
|
+
type: "dismissed";
|
|
43
|
+
stackName: string;
|
|
44
|
+
} | {
|
|
45
|
+
type: "import with configuration detected";
|
|
46
|
+
stackName: string;
|
|
47
|
+
configuration: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: "import with configuration converted";
|
|
50
|
+
stackName: string;
|
|
51
|
+
configuration: string;
|
|
52
|
+
};
|
|
53
|
+
export type StackUserInputUpdate = StackApprovalUpdate | StackSentinelOverrideUpdate;
|
|
54
|
+
export type StackApprovalUpdate = {
|
|
55
|
+
type: "waiting for stack approval";
|
|
56
|
+
stackName: string;
|
|
57
|
+
approve: () => void;
|
|
58
|
+
reject: () => void;
|
|
59
|
+
};
|
|
60
|
+
export type StackSentinelOverrideUpdate = {
|
|
61
|
+
type: "waiting for stack sentinel override";
|
|
62
|
+
stackName: string;
|
|
63
|
+
override: () => void;
|
|
64
|
+
reject: () => void;
|
|
65
|
+
};
|
|
66
|
+
export type ExternalStackApprovalUpdate = {
|
|
67
|
+
type: "external stack approval reply";
|
|
68
|
+
stackName: string;
|
|
69
|
+
approved: boolean;
|
|
70
|
+
};
|
|
71
|
+
export type ExternalStackSentinelOverrideUpdate = {
|
|
72
|
+
type: "external stack sentinel override reply";
|
|
73
|
+
stackName: string;
|
|
74
|
+
overridden: boolean;
|
|
75
|
+
};
|
|
76
|
+
type CdktfStackOptions = {
|
|
77
|
+
stack: SynthesizedStack;
|
|
78
|
+
onUpdate: (update: StackUpdate | StackApprovalUpdate | ExternalStackApprovalUpdate | StackSentinelOverrideUpdate | ExternalStackSentinelOverrideUpdate) => void;
|
|
79
|
+
onLog?: (log: {
|
|
80
|
+
message: string;
|
|
81
|
+
isError: boolean;
|
|
82
|
+
}) => void;
|
|
83
|
+
autoApprove?: boolean;
|
|
84
|
+
migrateState?: boolean;
|
|
85
|
+
abortSignal: AbortSignal;
|
|
86
|
+
};
|
|
87
|
+
type CdktfStackStates = StackUpdate["type"] | StackApprovalUpdate["type"] | StackSentinelOverrideUpdate["type"] | ExternalStackApprovalUpdate["type"] | ExternalStackSentinelOverrideUpdate["type"] | "idle" | "done";
|
|
88
|
+
export declare class CdktfStack {
|
|
89
|
+
options: CdktfStackOptions;
|
|
90
|
+
stack: SynthesizedStack;
|
|
91
|
+
outputs?: Record<string, any>;
|
|
92
|
+
outputsByConstructId?: NestedTerraformOutputs;
|
|
93
|
+
stopped: boolean;
|
|
94
|
+
currentWorkPromise: Promise<void> | undefined;
|
|
95
|
+
readonly currentState: CdktfStackStates;
|
|
96
|
+
error?: string;
|
|
97
|
+
private readonly parsedContent;
|
|
98
|
+
constructor(options: CdktfStackOptions);
|
|
99
|
+
get isPending(): boolean;
|
|
100
|
+
get isDone(): boolean;
|
|
101
|
+
get isRunning(): boolean;
|
|
102
|
+
private updateState;
|
|
103
|
+
private createTerraformLogHandler;
|
|
104
|
+
private terraformClient;
|
|
105
|
+
initalizeTerraform(noColor?: boolean, skipProviderLock?: boolean, migrateState?: boolean): Promise<Terraform>;
|
|
106
|
+
private requiredProviders;
|
|
107
|
+
private checkNeedsLockfileUpdate;
|
|
108
|
+
private checkNeedsUpgrade;
|
|
109
|
+
private run;
|
|
110
|
+
diff({ refreshOnly, terraformParallelism, vars, varFiles, noColor, }: {
|
|
111
|
+
refreshOnly?: boolean;
|
|
112
|
+
terraformParallelism?: number;
|
|
113
|
+
vars?: string[];
|
|
114
|
+
varFiles?: string[];
|
|
115
|
+
noColor?: boolean;
|
|
116
|
+
}): Promise<void>;
|
|
117
|
+
deploy(opts: {
|
|
118
|
+
refreshOnly?: boolean;
|
|
119
|
+
terraformParallelism?: number;
|
|
120
|
+
noColor?: boolean;
|
|
121
|
+
vars?: string[];
|
|
122
|
+
varFiles?: string[];
|
|
123
|
+
}): Promise<void>;
|
|
124
|
+
destroy(opts: {
|
|
125
|
+
terraformParallelism?: number;
|
|
126
|
+
vars?: string[];
|
|
127
|
+
varFiles?: string[];
|
|
128
|
+
noColor?: boolean;
|
|
129
|
+
}): Promise<void>;
|
|
130
|
+
fetchOutputs(): Promise<Record<string, any> | undefined>;
|
|
131
|
+
stop(): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
export {};
|
|
134
|
+
//# sourceMappingURL=cdktf-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdktf-stack.d.ts","sourceRoot":"","sources":["cdktf-stack.ts"],"names":[],"mappings":"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"}
|