@cdktn/cli-core 0.23.0-pre.36 → 0.23.0-pre.39

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 (163) hide show
  1. package/build/lib/cdktf-config.d.ts.map +1 -0
  2. package/build/lib/cdktf-config.js +108 -0
  3. package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
  4. package/build/lib/cdktf-project-io-handler.js +84 -0
  5. package/build/lib/cdktf-project.d.ts.map +1 -0
  6. package/build/lib/cdktf-project.js +371 -0
  7. package/{src → build}/lib/cdktf-stack.d.ts +1 -0
  8. package/build/lib/cdktf-stack.d.ts.map +1 -0
  9. package/build/lib/cdktf-stack.js +386 -0
  10. package/build/lib/convert.d.ts.map +1 -0
  11. package/build/lib/convert.js +51 -0
  12. package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
  13. package/build/lib/dependencies/cdktf-config-manager.js +36 -0
  14. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
  15. package/build/lib/dependencies/dependency-manager.js +393 -0
  16. package/build/lib/dependencies/package-manager.d.ts.map +1 -0
  17. package/build/lib/dependencies/package-manager.js +581 -0
  18. package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
  19. package/build/lib/dependencies/prebuilt-providers.js +221 -0
  20. package/build/lib/dependencies/registry-api.d.ts.map +1 -0
  21. package/build/lib/dependencies/registry-api.js +77 -0
  22. package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
  23. package/build/lib/dependencies/version-constraints.js +95 -0
  24. package/build/lib/error-reporting.d.ts.map +1 -0
  25. package/build/lib/error-reporting.js +133 -0
  26. package/build/lib/errors.d.ts.map +1 -0
  27. package/build/lib/errors.js +10 -0
  28. package/build/lib/execution-logs.d.ts.map +1 -0
  29. package/build/lib/execution-logs.js +47 -0
  30. package/build/lib/get.d.ts.map +1 -0
  31. package/build/lib/get.js +90 -0
  32. package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
  33. package/build/lib/helpers/stack-helpers.js +155 -0
  34. package/build/lib/index.d.ts.map +1 -0
  35. package/{src → build}/lib/index.js +1 -1
  36. package/build/lib/init.d.ts.map +1 -0
  37. package/build/lib/init.js +131 -0
  38. package/build/lib/local-provider-constraints.d.ts.map +1 -0
  39. package/build/lib/local-provider-constraints.js +95 -0
  40. package/build/lib/local-provider-versions.d.ts.map +1 -0
  41. package/build/lib/local-provider-versions.js +73 -0
  42. package/build/lib/models/deploy-machine.d.ts.map +1 -0
  43. package/build/lib/models/deploy-machine.js +283 -0
  44. package/build/lib/models/interactive-process.d.ts.map +1 -0
  45. package/build/lib/models/interactive-process.js +59 -0
  46. package/{src → build}/lib/models/schema.d.ts.map +1 -1
  47. package/build/lib/models/schema.js +181 -0
  48. package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
  49. package/build/lib/models/terraform-cli.d.ts.map +1 -0
  50. package/build/lib/models/terraform-cli.js +355 -0
  51. package/build/lib/models/terraform.d.ts.map +1 -0
  52. package/build/lib/models/terraform.js +72 -0
  53. package/build/lib/output.d.ts.map +1 -0
  54. package/build/lib/output.js +211 -0
  55. package/build/lib/provider-add.d.ts.map +1 -0
  56. package/build/lib/provider-add.js +30 -0
  57. package/build/lib/server/terraform-logs.d.ts.map +1 -0
  58. package/build/lib/server/terraform-logs.js +19 -0
  59. package/{src → build}/lib/synth-stack.d.ts +1 -0
  60. package/build/lib/synth-stack.d.ts.map +1 -0
  61. package/build/lib/synth-stack.js +251 -0
  62. package/build/lib/synth.d.ts.map +1 -0
  63. package/build/lib/synth.js +67 -0
  64. package/{src → build}/lib/terraform-json.d.ts.map +1 -1
  65. package/build/lib/terraform-json.js +82 -0
  66. package/build/lib/terraform-provider-lock.d.ts.map +1 -0
  67. package/build/lib/terraform-provider-lock.js +95 -0
  68. package/{src → build}/lib/watch.d.ts +1 -0
  69. package/build/lib/watch.d.ts.map +1 -0
  70. package/build/lib/watch.js +155 -0
  71. package/package.json +12 -12
  72. package/src/lib/cdktf-config.d.ts.map +0 -1
  73. package/src/lib/cdktf-config.js +0 -108
  74. package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
  75. package/src/lib/cdktf-project-io-handler.js +0 -84
  76. package/src/lib/cdktf-project.d.ts.map +0 -1
  77. package/src/lib/cdktf-project.js +0 -371
  78. package/src/lib/cdktf-stack.d.ts.map +0 -1
  79. package/src/lib/cdktf-stack.js +0 -386
  80. package/src/lib/convert.d.ts.map +0 -1
  81. package/src/lib/convert.js +0 -51
  82. package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
  83. package/src/lib/dependencies/cdktf-config-manager.js +0 -36
  84. package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
  85. package/src/lib/dependencies/dependency-manager.js +0 -393
  86. package/src/lib/dependencies/package-manager.d.ts.map +0 -1
  87. package/src/lib/dependencies/package-manager.js +0 -581
  88. package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
  89. package/src/lib/dependencies/prebuilt-providers.js +0 -221
  90. package/src/lib/dependencies/registry-api.d.ts.map +0 -1
  91. package/src/lib/dependencies/registry-api.js +0 -77
  92. package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
  93. package/src/lib/dependencies/version-constraints.js +0 -95
  94. package/src/lib/error-reporting.d.ts.map +0 -1
  95. package/src/lib/error-reporting.js +0 -133
  96. package/src/lib/errors.d.ts.map +0 -1
  97. package/src/lib/errors.js +0 -10
  98. package/src/lib/execution-logs.d.ts.map +0 -1
  99. package/src/lib/execution-logs.js +0 -47
  100. package/src/lib/get.d.ts.map +0 -1
  101. package/src/lib/get.js +0 -90
  102. package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
  103. package/src/lib/helpers/stack-helpers.js +0 -155
  104. package/src/lib/index.d.ts.map +0 -1
  105. package/src/lib/init.d.ts.map +0 -1
  106. package/src/lib/init.js +0 -131
  107. package/src/lib/local-provider-constraints.d.ts.map +0 -1
  108. package/src/lib/local-provider-constraints.js +0 -95
  109. package/src/lib/local-provider-versions.d.ts.map +0 -1
  110. package/src/lib/local-provider-versions.js +0 -73
  111. package/src/lib/models/deploy-machine.d.ts.map +0 -1
  112. package/src/lib/models/deploy-machine.js +0 -283
  113. package/src/lib/models/interactive-process.d.ts.map +0 -1
  114. package/src/lib/models/interactive-process.js +0 -59
  115. package/src/lib/models/schema.js +0 -181
  116. package/src/lib/models/terraform-cli.d.ts.map +0 -1
  117. package/src/lib/models/terraform-cli.js +0 -355
  118. package/src/lib/models/terraform.d.ts.map +0 -1
  119. package/src/lib/models/terraform.js +0 -72
  120. package/src/lib/output.d.ts.map +0 -1
  121. package/src/lib/output.js +0 -211
  122. package/src/lib/provider-add.d.ts.map +0 -1
  123. package/src/lib/provider-add.js +0 -30
  124. package/src/lib/server/terraform-logs.d.ts.map +0 -1
  125. package/src/lib/server/terraform-logs.js +0 -19
  126. package/src/lib/synth-stack.d.ts.map +0 -1
  127. package/src/lib/synth-stack.js +0 -251
  128. package/src/lib/synth.d.ts.map +0 -1
  129. package/src/lib/synth.js +0 -67
  130. package/src/lib/terraform-json.js +0 -82
  131. package/src/lib/terraform-provider-lock.d.ts.map +0 -1
  132. package/src/lib/terraform-provider-lock.js +0 -95
  133. package/src/lib/watch.d.ts.map +0 -1
  134. package/src/lib/watch.js +0 -155
  135. /package/{src → build}/lib/cdktf-config.d.ts +0 -0
  136. /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
  137. /package/{src → build}/lib/cdktf-project.d.ts +0 -0
  138. /package/{src → build}/lib/convert.d.ts +0 -0
  139. /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
  140. /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
  141. /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
  142. /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
  143. /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
  144. /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
  145. /package/{src → build}/lib/error-reporting.d.ts +0 -0
  146. /package/{src → build}/lib/errors.d.ts +0 -0
  147. /package/{src → build}/lib/execution-logs.d.ts +0 -0
  148. /package/{src → build}/lib/get.d.ts +0 -0
  149. /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
  150. /package/{src → build}/lib/index.d.ts +0 -0
  151. /package/{src → build}/lib/init.d.ts +0 -0
  152. /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
  153. /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
  154. /package/{src → build}/lib/models/deploy-machine.d.ts +0 -0
  155. /package/{src → build}/lib/models/interactive-process.d.ts +0 -0
  156. /package/{src → build}/lib/models/schema.d.ts +0 -0
  157. /package/{src → build}/lib/models/terraform.d.ts +0 -0
  158. /package/{src → build}/lib/output.d.ts +0 -0
  159. /package/{src → build}/lib/provider-add.d.ts +0 -0
  160. /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
  161. /package/{src → build}/lib/synth.d.ts +0 -0
  162. /package/{src → build}/lib/terraform-json.d.ts +0 -0
  163. /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 = () => { };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNka3RmLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsK0NBQTBFO0FBQzFFLG1DQUEyQztBQUMzQywrQ0FRdUI7QUFFdkIscURBQTJEO0FBQzNELDJEQVFpQztBQUNqQyx5RUFBbUU7QUErRm5FLFNBQWdCLDJCQUEyQixDQUN6QyxNQUFtQztJQUVuQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsK0JBQStCLENBQUMsQ0FBQyxRQUFRLENBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztBQUNKLENBQUM7QUFORCxrRUFNQztBQWNELE1BQWEsWUFBWTtJQXFCdkIsWUFBWSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ2hDLFdBQVcsRUFDWCxHQUFHLEdBQUcsS0FBSyxHQUNTO1FBaEJ0Qiw4QkFBOEI7UUFDdkIsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ3RDLCtDQUErQztRQUN2QyxzQ0FBaUMsR0FDdkMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBYVQsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sRUFBRSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FB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QkFBNkIsQ0FDekMsT0FBaUIsRUFDakIsZ0JBQTBCLEVBQzFCLFlBQXNCO1FBRXRCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMWlCRCxvQ0EwaUJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIEVycm9ycyxcbiAgZW5zdXJlQWxsU2V0dGxlZEJlZm9yZVRocm93aW5nLFxuICBsb2dnZXIsXG4gIHJlYWRDb25maWdTeW5jLFxuICBzZW5kVGVsZW1ldHJ5LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFN5bnRoZXNpemVkU3RhY2ssIFN5bnRoT3JpZ2luLCBTeW50aFN0YWNrIH0gZnJvbSBcIi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7IHByaW50QW5ub3RhdGlvbnMgfSBmcm9tIFwiLi9zeW50aFwiO1xuaW1wb3J0IHtcbiAgQ2RrdGZTdGFjayxcbiAgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlLFxuICBFeHRlcm5hbFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgU3RhY2tBcHByb3ZhbFVwZGF0ZSxcbiAgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICBTdGFja1VwZGF0ZSxcbiAgU3RhY2tVc2VySW5wdXRVcGRhdGUsXG59IGZyb20gXCIuL2Nka3RmLXN0YWNrXCI7XG5pbXBvcnQgeyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzIH0gZnJvbSBcIi4vb3V0cHV0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbmhhbmNlTG9nTWVzc2FnZSB9IGZyb20gXCIuL2V4ZWN1dGlvbi1sb2dzXCI7XG5pbXBvcnQge1xuICBjaGVja0lmQWxsRGVwZW5kYW50c0FyZUluY2x1ZGVkLFxuICBjaGVja0lmQWxsRGVwZW5kZW5jaWVzQXJlSW5jbHVkZWQsXG4gIGZpbmRBbGxOZXN0ZWREZXBlbmRhbnRTdGFja3MsXG4gIGdldE11bHRpcGxlU3RhY2tzLFxuICBnZXRTaW5nbGVTdGFjayxcbiAgZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGFudHMsXG4gIGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRlbmNpZXMsXG59IGZyb20gXCIuL2hlbHBlcnMvc3RhY2staGVscGVyc1wiO1xuaW1wb3J0IHsgQ2RrdGZQcm9qZWN0SU9IYW5kbGVyIH0gZnJvbSBcIi4vY2RrdGYtcHJvamVjdC1pby1oYW5kbGVyXCI7XG5cbnR5cGUgTXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlID0ge1xuICB0eXBlOiBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBhcHByb3ZlOiAoKSA9PiB2b2lkO1xuICBkaXNtaXNzOiAoKSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSA9IHtcbiAgdHlwZTogXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiO1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgb3ZlcnJpZGU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE11bHRpU3RhY2tVcGRhdGUgPVxuICB8IE11bHRpU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICB8IE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlO1xuXG5leHBvcnQgdHlwZSBQcm9qZWN0VXBkYXRlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemluZ1wiO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCI7XG4gICAgICBzdGFja3M6IFN5bnRoZXNpemVkU3RhY2tbXTtcbiAgICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICB9XG4gIHwgU3RhY2tVcGRhdGVcbiAgfCBNdWx0aVN0YWNrVXBkYXRlO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVTdGFja09wdGlvbnMgPSB7XG4gIHN0YWNrTmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE11bHRpcGxlU3RhY2tPcHRpb25zID0ge1xuICBzdGFja05hbWVzPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBTa2lwU3ludGhPcHRpb25zID0ge1xuICBza2lwU3ludGg/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgPSB7XG4gIHNraXBQcm92aWRlckxvY2s/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRmV0Y2hPdXRwdXRPcHRpb25zID0gU2tpcFN5bnRoT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgTXVsdGlwbGVTdGFja09wdGlvbnM7XG5cbmV4cG9ydCB0eXBlIEF1dG9BcHByb3ZlT3B0aW9ucyA9IHtcbiAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGlmZk9wdGlvbnMgPSBTaW5nbGVTdGFja09wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIFNraXBTeW50aE9wdGlvbnMgJiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uT3B0aW9ucyA9IE11bHRpcGxlU3RhY2tPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBTa2lwU3ludGhPcHRpb25zICZcbiAgQXV0b0FwcHJvdmVPcHRpb25zICYge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICBpZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCB0eXBlIExvZ01lc3NhZ2UgPSB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBtZXNzYWdlV2l0aENvbnN0cnVjdFBhdGg/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbi8vIFN0b3JlcyBhIGxvZyB2YWx1ZSBvZiBhIGNlcnRhaW4gdHlwZSB1bnRpbCBpdCBjYW4gYmUgc2VudFxudHlwZSBCdWZmZXJlZDxULCBWPiA9IHtcbiAgY2I6IChpdGVtOiBUKSA9PiB2b2lkO1xuICB2YWx1ZTogVDtcbiAgdHlwZTogVjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dhaXRpbmdGb3JVc2VySW5wdXRVcGRhdGUoXG4gIHVwZGF0ZTogUHJvamVjdFVwZGF0ZSB8IFN0YWNrVXBkYXRlLFxuKSB7XG4gIHJldHVybiBbXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLCBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCJdLmluY2x1ZGVzKFxuICAgIHVwZGF0ZS50eXBlLFxuICApO1xufVxuXG5leHBvcnQgdHlwZSBQcm9qZWN0RXZlbnQgPVxuICB8IEJ1ZmZlcmVkPFByb2plY3RVcGRhdGUsIFwicHJvamVjdFVwZGF0ZVwiPlxuICB8IEJ1ZmZlcmVkPExvZ01lc3NhZ2UsIFwibG9nTWVzc2FnZVwiPjtcbmV4cG9ydCB0eXBlIENka3RmUHJvamVjdE9wdGlvbnMgPSB7XG4gIHN5bnRoQ29tbWFuZDogc3RyaW5nO1xuICBvdXREaXI6IHN0cmluZztcbiAgb25VcGRhdGU6ICh1cGRhdGU6IFByb2plY3RVcGRhdGUpID0+IHZvaWQ7XG4gIG9uTG9nPzogKGxvZzogTG9nTWVzc2FnZSkgPT4gdm9pZDtcbiAgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbiAgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbjtcbiAgaGNsPzogYm9vbGVhbjtcbn07XG5leHBvcnQgY2xhc3MgQ2RrdGZQcm9qZWN0IHtcbiAgcHVibGljIHN0YWNrcz86IFN5bnRoZXNpemVkU3RhY2tbXTtcbiAgcHVibGljIGhhcmRBYm9ydDogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHN5bnRoQ29tbWFuZDogc3RyaW5nO1xuICBwcml2YXRlIG91dERpcjogc3RyaW5nO1xuICBwcml2YXRlIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSBvblVwZGF0ZTogKHVwZGF0ZTogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvbkxvZz86IChsb2c6IExvZ01lc3NhZ2UpID0+IHZvaWQ7XG4gIHByaXZhdGUgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICBwcml2YXRlIHN5bnRoT3JpZ2luPzogU3ludGhPcmlnaW47XG4gIHByaXZhdGUgaGNsPzogYm9vbGVhbjtcblxuICAvLyBTZXQgZHVyaW5nIGRlcGxveSAvIGRlc3Ryb3lcbiAgcHVibGljIHN0YWNrc1RvUnVuOiBDZGt0ZlN0YWNrW10gPSBbXTtcbiAgLy8gVGhpcyBtZWFucyBzdGggZGlmZmVyZW50IGluIGRlcGxveSAvIGRlc3Ryb3lcbiAgcHJpdmF0ZSBzdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQ6IChzdGFja05hbWU6IHN0cmluZykgPT4gdm9pZCA9XG4gICAgKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBpb0hhbmRsZXI6IENka3RmUHJvamVjdElPSGFuZGxlcjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3ludGhDb21tYW5kLFxuICAgIG91dERpcixcbiAgICBvblVwZGF0ZSxcbiAgICBvbkxvZyxcbiAgICB3b3JraW5nRGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzeW50aE9yaWdpbixcbiAgICBoY2wgPSBmYWxzZSxcbiAgfTogQ2RrdGZQcm9qZWN0T3B0aW9ucykge1xuICAgIHRoaXMuc3ludGhDb21tYW5kID0gc3ludGhDb21tYW5kO1xuICAgIHRoaXMub3V0RGlyID0gb3V0RGlyO1xuICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IHdvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblVwZGF0ZSA9IG9uVXBkYXRlO1xuICAgIHRoaXMub25Mb2cgPSBvbkxvZztcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsID0gYWMuc2lnbmFsO1xuICAgIHRoaXMuc3ludGhPcmlnaW4gPSBzeW50aE9yaWdpbjtcbiAgICB0aGlzLmhjbCA9XG4gICAgICBwcm9jZXNzLmVudi5TWU5USF9IQ0xfT1VUUFVUID09PSBcInRydWVcIiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuU1lOVEhfSENMX09VVFBVVCA9PT0gXCIxXCIgfHxcbiAgICAgIGhjbDtcblxuICAgIHRoaXMuaGFyZEFib3J0ID0gYWMuYWJvcnQuYmluZChhYyk7XG4gICAgdGhpcy5pb0hhbmRsZXIgPSBuZXcgQ2RrdGZQcm9qZWN0SU9IYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BBbGxTdGFja3MoKSB7XG4gICAgdGhpcy5zdGFja3NUb1J1bi5mb3JFYWNoKChzdGFjaykgPT4gc3RhY2suc3RvcCgpKTtcbiAgICB0aGlzLmlvSGFuZGxlci5maWx0ZXJVc2VySW5wdXRFdmVudHNGcm9tQnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVzZXJVcGRhdGU8XG4gICAgVCBleHRlbmRzIE11bHRpU3RhY2tVcGRhdGUsXG4gICAgViBleHRlbmRzIFN0YWNrVXNlcklucHV0VXBkYXRlLFxuICA+KFxuICAgIHVwZGF0ZTogU3RhY2tVc2VySW5wdXRVcGRhdGUsXG4gICAgb3BlcmF0aW9uczogUmVjb3JkPHN0cmluZywgKHVwZGF0ZTogVikgPT4gdm9pZD4sXG4gICAgb3JpZ2luYWxDYWxsYmFjazogKHVwZGF0ZVRvU2VuZDogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZCxcbiAgICBldmVudFR5cGU6IFRbXCJ0eXBlXCJdLFxuICApIHtcbiAgICBjb25zdCBjYWxsYmFja3MgPSAodXBkYXRlOiBWKSA9PlxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhvcGVyYXRpb25zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHBhc3NlZCBpbiB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHkgb25seVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgKF86IFYpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWUodXBkYXRlKTtcblxuICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZmVyIHRoZXNlIGNhbGxzIGZvciB0aGUgY2FzZSB0aGF0IGFwcHJvdmUoKSBpcyBpbnN0YW50bHkgaW52b2tlZFxuICAgICAgICAgICAgICAvLyBpbiB0aGUgbGlzdGVuZXIgdGhhdCByZWNlaXZlcyB0aGVzZSBjYWxsYmFja3MgYXMgaXQgb3RoZXJ3aXNlIHdvdWxkIGFscmVhZHlcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIgZXZlbnQgZnJvbSB0aGUgYnVmZmVyIGJlZm9yZSB3ZSBldmVuXG4gICAgICAgICAgICAgIC8vIHNldCB3YWl0aW5nRm9yQXBwcm92YWwgdG8gdHJ1ZSAoYXQgdGhlIGVuZCBvZiB0aGlzIGlmIHN0YXRlbWVudCkgd2hpY2ggcmVzdWx0c1xuICAgICAgICAgICAgICAvLyBpbiBidWZmZXJlZCB1cGRhdGVzIHdoaWNoIHdpbGwgbmV2ZXIgdW5ibG9ja1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaW9IYW5kbGVyLnJlc3VtZUFmdGVyVXNlcklucHV0KHVwZGF0ZS5zdGFja05hbWUpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIGFsd2F5cyBzZW5kIHRvIGJ1ZmZlciwgYXMgcmVzdW1lQWZ0ZXJVc2VySW5wdXQoKSBhbHdheXMgZXhwZWN0cyBhIG1hdGNoaW5nIGV2ZW50XG4gICAgdGhpcy5pb0hhbmRsZXIucHVzaEV2ZW50KHtcbiAgICAgIGNiOiBvcmlnaW5hbENhbGxiYWNrLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICBzdGFja05hbWU6IHVwZGF0ZS5zdGFja05hbWUsXG4gICAgICAgIC4uLmNhbGxiYWNrcyh1cGRhdGUgYXMgViksXG4gICAgICB9IGFzIFQsXG4gICAgICB0eXBlOiBcInByb2plY3RVcGRhdGVcIixcbiAgICB9KTtcblxuICAgIC8vIGlmIHdlIGFyZW4ndCBhbHJlYWR5IHdhaXRpbmcsIHRoaXMgbmVlZHMgdG8gZ28gdG8gY2IoKSB0b28gdG8gYXJyaXZlIGF0IHRoZSBVSVxuICAgIGlmICghdGhpcy5pb0hhbmRsZXIuaXNXYWl0aW5nRm9yVXNlcklucHV0KCkpIHtcbiAgICAgIG9yaWdpbmFsQ2FsbGJhY2soe1xuICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgIHN0YWNrTmFtZTogdXBkYXRlLnN0YWNrTmFtZSxcbiAgICAgICAgLi4uY2FsbGJhY2tzKHVwZGF0ZSBhcyBWKSxcbiAgICAgIH0gYXMgVCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVc2VySW5wdXRQcm9jZXNzKGNiOiAodXBkYXRlVG9TZW5kOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHVwZGF0ZTpcbiAgICAgICAgfCBTdGFja1VwZGF0ZVxuICAgICAgICB8IFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgICAgICAgfCBFeHRlcm5hbFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgICAgfCBFeHRlcm5hbFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgICApID0+IHtcbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzdGFjayBhcHByb3ZhbCByZXBseVwiKSB7XG4gICAgICAgIGlmICghdXBkYXRlLmFwcHJvdmVkKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIHJldHVybjsgLy8gYWthIGRvbid0IHNlbmQgdGhpcyBldmVudCB0byBhbnkgYnVmZmVyXG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgc3RhY2sgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIikge1xuICAgICAgICBpZiAoIXVwZGF0ZS5vdmVycmlkZGVuKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIHJldHVybjsgLy8gYWthIGRvbid0IHNlbmQgdGhpcyBldmVudCB0byBhbnkgYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIiB8fFxuICAgICAgICB1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBzZW50aW5lbCBvdmVycmlkZVwiXG4gICAgICApIHtcbiAgICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJVcGRhdGU8TXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlLCBTdGFja0FwcHJvdmFsVXBkYXRlPihcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBwcm92ZTogKHVwZGF0ZSkgPT4gdXBkYXRlLmFwcHJvdmUoKSxcbiAgICAgICAgICAgICAgZGlzbWlzczogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RvcDogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3MoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIFwid2FpdGluZyBmb3IgYXBwcm92YWxcIixcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJVcGRhdGU8XG4gICAgICAgICAgICBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgICAgICAgICAgIFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZVxuICAgICAgICAgID4oXG4gICAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG92ZXJyaWRlOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLm92ZXJyaWRlKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlamVjdDogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIuYXdhaXRVc2VySW5wdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlvSGFuZGxlci5pc1dhaXRpbmdGb3JVc2VySW5wdXQoKSkge1xuICAgICAgICAgIHRoaXMuaW9IYW5kbGVyLnB1c2hFdmVudCh7XG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIHZhbHVlOiB1cGRhdGUsXG4gICAgICAgICAgICB0eXBlOiBcInByb2plY3RVcGRhdGVcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYih1cGRhdGUgYXMgUHJvamVjdFVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldFN0YWNrRXhlY3V0b3IoXG4gICAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2ssXG4gICAgb3B0czogQXV0b0FwcHJvdmVPcHRpb25zID0ge30sXG4gICkge1xuICAgIGNvbnN0IGVuaGFuY2VMb2dNZXNzYWdlID0gY3JlYXRlRW5oYW5jZUxvZ01lc3NhZ2Uoc3RhY2spO1xuICAgIGNvbnN0IG9uTG9nID0gdGhpcy5pb0hhbmRsZXIuYnVmZmVyV2hpbGVBd2FpdGluZ1VzZXJJbnB1dCh0aGlzLm9uTG9nKTtcbiAgICByZXR1cm4gbmV3IENka3RmU3RhY2soe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHN0YWNrLFxuICAgICAgb25VcGRhdGU6IHRoaXMuaGFuZGxlVXNlcklucHV0UHJvY2Vzcyh0aGlzLm9uVXBkYXRlKSxcbiAgICAgIG9uTG9nOiBvbkxvZ1xuICAgICAgICA/ICh7IG1lc3NhZ2UgfSkgPT5cbiAgICAgICAgICAgIG9uTG9nKHtcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiBzdGFjay5uYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICBtZXNzYWdlV2l0aENvbnN0cnVjdFBhdGg6IGVuaGFuY2VMb2dNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhYm9ydFNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3V0cHV0c0J5Q29uc3RydWN0SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzVG9SdW4ucmVkdWNlKFxuICAgICAgKGFjYywgc3RhY2spID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgLi4uc3RhY2sub3V0cHV0c0J5Q29uc3RydWN0SWQsXG4gICAgICB9KSxcbiAgICAgIHt9IGFzIE5lc3RlZFRlcnJhZm9ybU91dHB1dHMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzeW50aChub0NvbG9yPzogYm9vbGVhbikge1xuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXppbmdcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IFN5bnRoU3RhY2suc3ludGgoXG4gICAgICB0aGlzLmFib3J0U2lnbmFsIGFzIGFueSxcbiAgICAgIHRoaXMuc3ludGhDb21tYW5kLFxuICAgICAgdGhpcy5vdXREaXIsXG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBmYWxzZSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICB0aGlzLnN5bnRoT3JpZ2luLFxuICAgICAgdGhpcy5oY2wsXG4gICAgKTtcblxuICAgIHByaW50QW5ub3RhdGlvbnMoc3RhY2tzKTtcblxuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXplZFwiLFxuICAgICAgc3RhY2tzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkU3ludGhlc2l6ZWRTdGFja3MoKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5yZWFkU3ludGhlc2l6ZWRTdGFja3ModGhpcy5vdXREaXIpO1xuXG4gICAgcHJpbnRBbm5vdGF0aW9ucyhzdGFja3MpO1xuXG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCIsXG4gICAgICBzdGFja3MsXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaWZmKG9wdHM6IERpZmZPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihcbiAgICAgIGdldFNpbmdsZVN0YWNrKHN0YWNrcywgb3B0cz8uc3RhY2tOYW1lLCBcImRpZmZcIiksXG4gICAgKTtcbiAgICBhd2FpdCBzdGFjay5pbml0YWxpemVUZXJyYWZvcm0oXG4gICAgICBvcHRzLm5vQ29sb3IsXG4gICAgICBvcHRzLnNraXBQcm92aWRlckxvY2ssXG4gICAgICBvcHRzLm1pZ3JhdGVTdGF0ZSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YWNrLmRpZmYob3B0cyk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTdGFjayBmYWlsZWQgdG8gcGxhbjogJHtzdGFjay5zdGFjay5uYW1lfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICAgIGUsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RhY2suZXJyb3IpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFN0YWNrIGZhaWxlZCB0byBwbGFuOiAke3N0YWNrLnN0YWNrLm5hbWV9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgbmV3IEVycm9yKHN0YWNrLmVycm9yKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRpZmZcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3MubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBlcnJvcnM6IHN0YWNrLmVycm9yLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShcbiAgICBtZXRob2Q6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBuZXh0OiAoKSA9PiBQcm9taXNlPENka3RmU3RhY2sgfCB1bmRlZmluZWQ+LFxuICAgIG9wdHM6IE11dGF0aW9uT3B0aW9ucyxcbiAgKSB7XG4gICAgLy8gV2Ugb25seSBzdXBwb3J0IHJlZnJlc2ggb25seSBvbiBkZXBsb3ksIGEgYml0IG9mIGEgbGVha3kgYWJzdHJhY3Rpb24gaGVyZVxuICAgIGlmIChvcHRzLnJlZnJlc2hPbmx5ICYmIG1ldGhvZCAhPT0gXCJkZXBsb3lcIikge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBSZWZyZXNoIG9ubHkgaXMgb25seSBzdXBwb3J0ZWQgb24gZGVwbG95YCk7XG4gICAgfVxuICAgIGNvbnN0IG1heFBhcmFsbGVsUnVucyA9XG4gICAgICAhb3B0cy5wYXJhbGxlbGlzbSB8fCBvcHRzLnBhcmFsbGVsaXNtIDwgMCA/IEluZmluaXR5IDogb3B0cy5wYXJhbGxlbGlzbTtcbiAgICBjb25zdCBhbGxFeGVjdXRpb25zID0gW107XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKFxuICAgICAgb3B0cy5ub0NvbG9yLFxuICAgICAgb3B0cy5za2lwUHJvdmlkZXJMb2NrLFxuICAgICAgb3B0cy5taWdyYXRlU3RhdGUsXG4gICAgKTtcbiAgICB3aGlsZSAodGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1BlbmRpbmcpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bm5pbmdTdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUnVubmluZyk7XG4gICAgICBpZiAocnVubmluZ1N0YWNrcy5sZW5ndGggPj0gbWF4UGFyYWxsZWxSdW5zKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmFjZShydW5uaW5nU3RhY2tzLm1hcCgocykgPT4gcy5jdXJyZW50V29ya1Byb21pc2UpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXh0UnVubmluZ0V4ZWN1dG9yID0gYXdhaXQgbmV4dCgpO1xuICAgICAgICBpZiAoIW5leHRSdW5uaW5nRXhlY3V0b3IpIHtcbiAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSBubyBwZW5kaW5nIHN0YWNrcywgYnV0IHdlIGFsc28gY2FuIG5vdCBmaW5kIGEgbmV3IGV4ZWN1dG9yXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9XG4gICAgICAgICAgbWV0aG9kID09PSBcImRlcGxveVwiXG4gICAgICAgICAgICA/IG5leHRSdW5uaW5nRXhlY3V0b3IuZGVwbG95KG9wdHMpXG4gICAgICAgICAgICA6IG5leHRSdW5uaW5nRXhlY3V0b3IuZGVzdHJveShvcHRzKTtcblxuICAgICAgICBhbGxFeGVjdXRpb25zLnB1c2gocHJvbWlzZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGF3YWl0IG5leHQoKSB0aHJldyBhbiBlcnJvciBiZWNhdXNlIGEgc3RhY2sgZmFpbGVkIHRvIGFwcGx5L2Rlc3Ryb3lcbiAgICAgICAgLy8gd2FpdCBmb3IgYWxsIG90aGVyIGN1cnJlbnRseSBydW5uaW5nIHN0YWNrcyB0byBjb21wbGV0ZSBiZWZvcmUgcHJvcGFnYXRpbmcgdGhhdCBlcnJvclxuICAgICAgICBsb2dnZXIuZGVidWcoXCJFbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBhd2FpdGluZyBzdGFjayB0byBmaW5pc2hcIiwgZSk7XG4gICAgICAgIGNvbnN0IG9wZW5TdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgICAgICAoZXgpID0+IGV4LmN1cnJlbnRXb3JrUHJvbWlzZSxcbiAgICAgICAgKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiV2FpdGluZyBmb3Igc3RpbGwgcnVubmluZyBzdGFja3MgdG8gZmluaXNoOlwiLCBvcGVuU3RhY2tzKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG9wZW5TdGFja3MubWFwKChleCkgPT4gZXguY3VycmVudFdvcmtQcm9taXNlKSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBcIkRvbmUgd2FpdGluZyBmb3Igc3RpbGwgcnVubmluZyBzdGFja3MuIEFsbCBwZW5kaW5nIHdvcmsgZmluaXNoZWRcIixcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gV2UgZW5kIHRoZSBsb29wIHdoZW4gYWxsIHN0YWNrcyBhcmUgc3RhcnRlZCwgbm93IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlbSB0byBiZSBkb25lXG4gICAgLy8gV2Ugd2FpdCBmb3IgYWxsIHdvcmsgdG8gZmluaXNoIGV2ZW4gaWYgb25lIG9mIHRoZSBwcm9taXNlcyB0aHJldyBhbiBlcnJvci5cbiAgICBhd2FpdCBlbnN1cmVBbGxTZXR0bGVkQmVmb3JlVGhyb3dpbmcoXG4gICAgICBQcm9taXNlLmFsbChhbGxFeGVjdXRpb25zKSxcbiAgICAgIGFsbEV4ZWN1dGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0czogTXV0YXRpb25PcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKHN0YWNrcywgb3B0cy5zdGFja05hbWVzLCBcImRlcGxveVwiKTtcbiAgICBpZiAoIW9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjaGVja0lmQWxsRGVwZW5kZW5jaWVzQXJlSW5jbHVkZWQoc3RhY2tzVG9SdW4pO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBmaW5kQWxsTmVzdGVkRGVwZW5kYW50U3RhY2tzKHRoaXMuc3RhY2tzVG9SdW4sIHN0YWNrTmFtZSkuZm9yRWFjaChcbiAgICAgICAgKHN0YWNrKSA9PiBzdGFjay5zdG9wKCksXG4gICAgICApO1xuICAgIH07XG5cbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywgb3B0cyksXG4gICAgKTtcblxuICAgIGNvbnN0IG5leHQgPSBvcHRzLmlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llc1xuICAgICAgPyAoKSA9PlxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNQZW5kaW5nKVswXSxcbiAgICAgICAgICApXG4gICAgICA6ICgpID0+IGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRlbmNpZXModGhpcy5zdGFja3NUb1J1bik7XG5cbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoXCJkZXBsb3lcIiwgbmV4dCwgb3B0cyk7XG5cbiAgICBjb25zdCB1bnByb2Nlc3NlZFN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgKGV4ZWN1dG9yKSA9PiBleGVjdXRvci5pc1BlbmRpbmcsXG4gICAgKTtcbiAgICBpZiAodW5wcm9jZXNzZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU29tZSBzdGFja3MgZmFpbGVkIHRvIGRlcGxveTogJHt1bnByb2Nlc3NlZFN0YWNrc1xuICAgICAgICAgIC5tYXAoKHMpID0+IHMuc3RhY2submFtZSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkZXBsb3lcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGZhaWxlZFN0YWNrczogdW5wcm9jZXNzZWRTdGFja3MubWFwKChzdGFjaykgPT4gc3RhY2suZXJyb3IpLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzVG9SdW4ubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0czogTXV0YXRpb25PcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKHN0YWNrcywgb3B0cy5zdGFja05hbWVzLCBcImRlc3Ryb3lcIik7XG5cbiAgICBpZiAoIW9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjaGVja0lmQWxsRGVwZW5kYW50c0FyZUluY2x1ZGVkKHN0YWNrc1RvUnVuLCBzdGFja3MpO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdGFja0V4ZWN1dG9yID0gdGhpcy5zdGFja3NUb1J1bi5maW5kKFxuICAgICAgICAocykgPT4gcy5zdGFjay5uYW1lID09PSBzdGFja05hbWUsXG4gICAgICApO1xuICAgICAgaWYgKCFzdGFja0V4ZWN1dG9yKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc3RhY2sgXCIke3N0YWNrTmFtZX1cIiB0aGF0IHdhcyBzdG9wcGVkYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc3RhY2tFeGVjdXRvci5zdGFjay5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwZW5kYW50KSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KGRlcGVuZGFudCk7XG5cbiAgICAgICAgY29uc3QgZGVwZW5kYW50U3RhY2sgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbmQoXG4gICAgICAgICAgKHMpID0+IHMuc3RhY2submFtZSA9PT0gZGVwZW5kYW50LFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRlcGVuZGFudFN0YWNrKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHN0YWNrIFwiJHtkZXBlbmRhbnR9XCIgdGhhdCB3YXMgc3RvcHBlZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGFudFN0YWNrLnN0b3AoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5zdGFja3NUb1J1biA9IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICB0aGlzLmdldFN0YWNrRXhlY3V0b3Ioc3RhY2ssIG9wdHMpLFxuICAgICk7XG4gICAgY29uc3QgbmV4dCA9IG9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzXG4gICAgICA/ICgpID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAgICAgICAgIChzdGFjaykgPT4gc3RhY2suY3VycmVudFN0YXRlICE9PSBcImRvbmVcIixcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgKVxuICAgICAgOiAoKSA9PiBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kYW50cyh0aGlzLnN0YWNrc1RvUnVuKTtcblxuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShcImRlc3Ryb3lcIiwgbmV4dCwgb3B0cyk7XG5cbiAgICBjb25zdCB1bnByb2Nlc3NlZFN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgKGV4ZWN1dG9yKSA9PiBleGVjdXRvci5pc1BlbmRpbmcsXG4gICAgKTtcbiAgICBpZiAodW5wcm9jZXNzZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU29tZSBzdGFja3MgZmFpbGVkIHRvIGRlc3Ryb3k6ICR7dW5wcm9jZXNzZWRTdGFja3NcbiAgICAgICAgICAubWFwKChzKSA9PiBzLnN0YWNrLm5hbWUpXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGVzdHJveVwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZmFpbGVkU3RhY2tzOiB1bnByb2Nlc3NlZFN0YWNrcy5tYXAoKHN0YWNrKSA9PiBzdGFjay5lcnJvciksXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJvamVjdFRlbGVtZXRyeShjb21tYW5kOiBzdHJpbmcsIHBheWxvYWQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlYWRDb25maWdTeW5jKCk7XG4gICAgYXdhaXQgc2VuZFRlbGVtZXRyeShjb21tYW5kLCB7XG4gICAgICAuLi5wYXlsb2FkLFxuICAgICAgbGFuZ3VhZ2U6IGNvbmZpZy5sYW5ndWFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaE91dHB1dHMob3B0czogRmV0Y2hPdXRwdXRPcHRpb25zKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gb3B0cy5za2lwU3ludGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkU3ludGhlc2l6ZWRTdGFja3MoKVxuICAgICAgOiBhd2FpdCB0aGlzLnN5bnRoKCk7XG5cbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKFxuICAgICAgc3RhY2tzLFxuICAgICAgb3B0cy5zdGFja05hbWVzIHx8IFtdLFxuICAgICAgXCJkZXBsb3lcIixcbiAgICApO1xuXG4gICAgaWYgKHN0YWNrc1RvUnVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RhY2tzIHRvIGZldGNoIG91dHB1dHMgZm9yIHNwZWNpZmllZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIC8vIE9wdGlvbnMgYXJlIGVtcHR5LCBiZWNhdXNlIE11bHRpcGxlU3RhY2tPcHRpb25zIGRvZXNuJ3QgaGF2ZSBhbnkgcmVsZXZhbnRcbiAgICAgIC8vIG9wdGlvbnMgZm9yIGBnZXRTdGFja0V4ZWN1dG9yYCwgaGVuY2UgZGVmYXVsdHMgYXJlIGZpbmVcbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywge30pLFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKHVuZGVmaW5lZCwgb3B0cy5za2lwUHJvdmlkZXJMb2NrKTtcbiAgICBjb25zdCBvdXRwdXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aGlzLnN0YWNrc1RvUnVuLm1hcChhc3luYyAocykgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBzLmZldGNoT3V0cHV0cygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtzLnN0YWNrLm5hbWVdOiBvdXRwdXQsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIG91dHB1dHMucmVkdWNlKFxuICAgICAgKGFjYywgY3VycikgPT4gKHsgLi4uYWNjLCAuLi5jdXJyIH0pLFxuICAgICAge30sXG4gICAgKSBhcyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzO1xuICB9XG5cbiAgLy8gU2VyaWFsbHkgcnVuIHRlcnJhZm9ybSBpbml0IHRvIHByb2hpYml0IHRleHQgZmlsZSBidXN5IGVycm9ycyBmb3IgdGhlIGNhY2hlIGZpbGVzXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwoXG4gICAgbm9Db2xvcj86IGJvb2xlYW4sXG4gICAgc2tpcFByb3ZpZGVyTG9jaz86IGJvb2xlYW4sXG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrc1RvUnVuKSB7XG4gICAgICBhd2FpdCBzdGFjay5pbml0YWxpemVUZXJyYWZvcm0obm9Db2xvciwgc2tpcFByb3ZpZGVyTG9jaywgbWlncmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdktf-stack.d.ts","sourceRoot":"","sources":["cdktf-stack.ts"],"names":[],"mappings":"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"}