@cdktn/cli-core 0.23.0-pre.8 → 0.24.0-pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/ambient.d.ts +0 -1
  2. package/build/lib/cdktf-config.d.ts.map +1 -0
  3. package/build/lib/cdktf-config.js +108 -0
  4. package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
  5. package/build/lib/cdktf-project-io-handler.js +84 -0
  6. package/build/lib/cdktf-project.d.ts.map +1 -0
  7. package/build/lib/cdktf-project.js +370 -0
  8. package/{src → build}/lib/cdktf-stack.d.ts +1 -0
  9. package/build/lib/cdktf-stack.d.ts.map +1 -0
  10. package/build/lib/cdktf-stack.js +386 -0
  11. package/build/lib/convert.d.ts.map +1 -0
  12. package/build/lib/convert.js +51 -0
  13. package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
  14. package/build/lib/dependencies/cdktf-config-manager.js +36 -0
  15. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
  16. package/build/lib/dependencies/dependency-manager.js +393 -0
  17. package/build/lib/dependencies/package-manager.d.ts.map +1 -0
  18. package/build/lib/dependencies/package-manager.js +581 -0
  19. package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
  20. package/build/lib/dependencies/prebuilt-providers.js +221 -0
  21. package/build/lib/dependencies/registry-api.d.ts.map +1 -0
  22. package/build/lib/dependencies/registry-api.js +77 -0
  23. package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
  24. package/build/lib/dependencies/version-constraints.js +95 -0
  25. package/build/lib/error-reporting.d.ts.map +1 -0
  26. package/build/lib/error-reporting.js +133 -0
  27. package/build/lib/errors.d.ts.map +1 -0
  28. package/build/lib/errors.js +10 -0
  29. package/build/lib/execution-logs.d.ts.map +1 -0
  30. package/build/lib/execution-logs.js +47 -0
  31. package/build/lib/get.d.ts.map +1 -0
  32. package/build/lib/get.js +90 -0
  33. package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
  34. package/build/lib/helpers/stack-helpers.js +155 -0
  35. package/build/lib/index.d.ts.map +1 -0
  36. package/{src → build}/lib/index.js +1 -2
  37. package/build/lib/init.d.ts.map +1 -0
  38. package/build/lib/init.js +131 -0
  39. package/build/lib/local-provider-constraints.d.ts.map +1 -0
  40. package/build/lib/local-provider-constraints.js +95 -0
  41. package/build/lib/local-provider-versions.d.ts.map +1 -0
  42. package/build/lib/local-provider-versions.js +73 -0
  43. package/{src → build}/lib/models/deploy-machine.d.ts +3 -11
  44. package/build/lib/models/deploy-machine.d.ts.map +1 -0
  45. package/build/lib/models/deploy-machine.js +283 -0
  46. package/build/lib/models/interactive-process.d.ts +28 -0
  47. package/build/lib/models/interactive-process.d.ts.map +1 -0
  48. package/build/lib/models/interactive-process.js +59 -0
  49. package/{src → build}/lib/models/schema.d.ts.map +1 -1
  50. package/build/lib/models/schema.js +181 -0
  51. package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
  52. package/build/lib/models/terraform-cli.d.ts.map +1 -0
  53. package/build/lib/models/terraform-cli.js +355 -0
  54. package/build/lib/models/terraform.d.ts.map +1 -0
  55. package/build/lib/models/terraform.js +72 -0
  56. package/build/lib/output.d.ts.map +1 -0
  57. package/build/lib/output.js +211 -0
  58. package/build/lib/provider-add.d.ts.map +1 -0
  59. package/build/lib/provider-add.js +30 -0
  60. package/build/lib/server/terraform-logs.d.ts.map +1 -0
  61. package/build/lib/server/terraform-logs.js +19 -0
  62. package/{src → build}/lib/synth-stack.d.ts +1 -0
  63. package/build/lib/synth-stack.d.ts.map +1 -0
  64. package/build/lib/synth-stack.js +251 -0
  65. package/build/lib/synth.d.ts.map +1 -0
  66. package/build/lib/synth.js +67 -0
  67. package/{src → build}/lib/terraform-json.d.ts.map +1 -1
  68. package/build/lib/terraform-json.js +82 -0
  69. package/build/lib/terraform-provider-lock.d.ts.map +1 -0
  70. package/{src → build}/lib/terraform-provider-lock.js +2 -2
  71. package/{src → build}/lib/watch.d.ts +1 -0
  72. package/build/lib/watch.d.ts.map +1 -0
  73. package/build/lib/watch.js +155 -0
  74. package/eslint.config.mjs +2 -70
  75. package/package.json +22 -33
  76. package/templates/go/go.mod +1 -1
  77. package/templates/python/Pipfile +1 -1
  78. package/templates/typescript/.hooks.sscaff.js +1 -1
  79. package/templates/typescript/jest.config.js +1 -1
  80. package/src/lib/cdktf-config.d.ts.map +0 -1
  81. package/src/lib/cdktf-config.js +0 -108
  82. package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
  83. package/src/lib/cdktf-project-io-handler.js +0 -84
  84. package/src/lib/cdktf-project.d.ts.map +0 -1
  85. package/src/lib/cdktf-project.js +0 -371
  86. package/src/lib/cdktf-stack.d.ts.map +0 -1
  87. package/src/lib/cdktf-stack.js +0 -386
  88. package/src/lib/convert.d.ts.map +0 -1
  89. package/src/lib/convert.js +0 -51
  90. package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
  91. package/src/lib/dependencies/cdktf-config-manager.js +0 -36
  92. package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
  93. package/src/lib/dependencies/dependency-manager.js +0 -393
  94. package/src/lib/dependencies/package-manager.d.ts.map +0 -1
  95. package/src/lib/dependencies/package-manager.js +0 -581
  96. package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
  97. package/src/lib/dependencies/prebuilt-providers.js +0 -220
  98. package/src/lib/dependencies/registry-api.d.ts.map +0 -1
  99. package/src/lib/dependencies/registry-api.js +0 -77
  100. package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
  101. package/src/lib/dependencies/version-constraints.js +0 -95
  102. package/src/lib/error-reporting.d.ts.map +0 -1
  103. package/src/lib/error-reporting.js +0 -133
  104. package/src/lib/errors.d.ts.map +0 -1
  105. package/src/lib/errors.js +0 -10
  106. package/src/lib/execution-logs.d.ts.map +0 -1
  107. package/src/lib/execution-logs.js +0 -47
  108. package/src/lib/get.d.ts.map +0 -1
  109. package/src/lib/get.js +0 -90
  110. package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
  111. package/src/lib/helpers/stack-helpers.js +0 -155
  112. package/src/lib/index.d.ts.map +0 -1
  113. package/src/lib/init.d.ts.map +0 -1
  114. package/src/lib/init.js +0 -131
  115. package/src/lib/local-provider-constraints.d.ts.map +0 -1
  116. package/src/lib/local-provider-constraints.js +0 -95
  117. package/src/lib/local-provider-versions.d.ts.map +0 -1
  118. package/src/lib/local-provider-versions.js +0 -73
  119. package/src/lib/models/deploy-machine.d.ts.map +0 -1
  120. package/src/lib/models/deploy-machine.js +0 -280
  121. package/src/lib/models/pty-process.d.ts +0 -29
  122. package/src/lib/models/pty-process.d.ts.map +0 -1
  123. package/src/lib/models/pty-process.js +0 -132
  124. package/src/lib/models/schema.js +0 -181
  125. package/src/lib/models/terraform-cli.d.ts.map +0 -1
  126. package/src/lib/models/terraform-cli.js +0 -357
  127. package/src/lib/models/terraform.d.ts.map +0 -1
  128. package/src/lib/models/terraform.js +0 -72
  129. package/src/lib/output.d.ts.map +0 -1
  130. package/src/lib/output.js +0 -211
  131. package/src/lib/provider-add.d.ts.map +0 -1
  132. package/src/lib/provider-add.js +0 -30
  133. package/src/lib/server/terraform-logs.d.ts.map +0 -1
  134. package/src/lib/server/terraform-logs.js +0 -19
  135. package/src/lib/synth-stack.d.ts.map +0 -1
  136. package/src/lib/synth-stack.js +0 -251
  137. package/src/lib/synth.d.ts.map +0 -1
  138. package/src/lib/synth.js +0 -67
  139. package/src/lib/terraform-json.js +0 -82
  140. package/src/lib/terraform-provider-lock.d.ts.map +0 -1
  141. package/src/lib/watch.d.ts.map +0 -1
  142. package/src/lib/watch.js +0 -155
  143. /package/{src → build}/lib/cdktf-config.d.ts +0 -0
  144. /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
  145. /package/{src → build}/lib/cdktf-project.d.ts +0 -0
  146. /package/{src → build}/lib/convert.d.ts +0 -0
  147. /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
  148. /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
  149. /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
  150. /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
  151. /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
  152. /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
  153. /package/{src → build}/lib/error-reporting.d.ts +0 -0
  154. /package/{src → build}/lib/errors.d.ts +0 -0
  155. /package/{src → build}/lib/execution-logs.d.ts +0 -0
  156. /package/{src → build}/lib/get.d.ts +0 -0
  157. /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
  158. /package/{src → build}/lib/index.d.ts +0 -0
  159. /package/{src → build}/lib/init.d.ts +0 -0
  160. /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
  161. /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
  162. /package/{src → build}/lib/models/schema.d.ts +0 -0
  163. /package/{src → build}/lib/models/terraform.d.ts +0 -0
  164. /package/{src → build}/lib/output.d.ts +0 -0
  165. /package/{src → build}/lib/provider-add.d.ts +0 -0
  166. /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
  167. /package/{src → build}/lib/synth.d.ts +0 -0
  168. /package/{src → build}/lib/terraform-json.d.ts +0 -0
  169. /package/{src → build}/lib/terraform-provider-lock.d.ts +0 -0
@@ -1,371 +0,0 @@
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=
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdktf-stack.d.ts","sourceRoot":"","sources":["cdktf-stack.ts"],"names":[],"mappings":"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"}