@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
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.SynthStack = exports.StackDependencies = void 0;
30
+ // Copyright (c) HashiCorp, Inc
31
+ // SPDX-License-Identifier: MPL-2.0
32
+ const fs = __importStar(require("fs-extra"));
33
+ const path = __importStar(require("path"));
34
+ const chalk = __importStar(require("chalk"));
35
+ const indent_string_1 = __importDefault(require("indent-string"));
36
+ const cdktn_1 = require("cdktn");
37
+ const perf_hooks_1 = require("perf_hooks");
38
+ const commons_1 = require("@cdktn/commons");
39
+ const cdktf_config_1 = require("./cdktf-config");
40
+ const hcl_tools_1 = require("@cdktn/hcl-tools");
41
+ const chalkColour = new chalk.Instance();
42
+ class StackDependencies {
43
+ constructor(stacks) {
44
+ this.stacks = stacks;
45
+ this.pendingStacks = [];
46
+ this.inflightStacks = [];
47
+ this.deployedStacks = [];
48
+ this.pendingStacks = [...this.stacks];
49
+ }
50
+ startRun(stack) {
51
+ this.pendingStacks = this.pendingStacks.filter((item) => item.name !== stack.name);
52
+ this.inflightStacks.push(stack);
53
+ }
54
+ finishRun(stack) {
55
+ this.inflightStacks = this.inflightStacks.filter((item) => item.name !== stack.name);
56
+ this.deployedStacks.push(stack);
57
+ }
58
+ get pendingDeployableStacks() {
59
+ return this.pendingStacks.filter((pendingStack) => {
60
+ const unmetDependencies = pendingStack.dependencies.filter((dependency) => {
61
+ return !this.deployedStacks.some((deployedStack) => {
62
+ return deployedStack.name === dependency;
63
+ });
64
+ });
65
+ return unmetDependencies.length === 0;
66
+ });
67
+ }
68
+ }
69
+ exports.StackDependencies = StackDependencies;
70
+ class SynthStack {
71
+ static async synth(abortSignal, command, outdir, workingDirectory = process.cwd(), graceful = false, // will not exit the process but rethrow the error instead
72
+ noColor = false, synthOrigin, hcl = false) {
73
+ // start performance timer
74
+ const startTime = perf_hooks_1.performance.now();
75
+ const isDirectory = (source) => fs.lstatSync(source).isDirectory();
76
+ const getDirectories = (source) => {
77
+ if (!fs.existsSync(source))
78
+ return [];
79
+ return fs
80
+ .readdirSync(source)
81
+ .map((name) => path.join(source, name))
82
+ .filter(isDirectory);
83
+ };
84
+ const existingDirectories = getDirectories(path.join(outdir, cdktn_1.Manifest.stacksFolder));
85
+ const env = Object.fromEntries(Object.entries(process.env).filter(
86
+ // We don't want to pass Terraform variables to the synth command since they should only be used at execution time
87
+ ([key]) => !key.startsWith("TF_VAR_")));
88
+ // Increases the default memory available to Node.js when synthesizing a TypeScript CDK project.
89
+ const nodeOptsSwitch = "--max-old-space-size";
90
+ const nodeOptsSetting = `${nodeOptsSwitch}=4096`;
91
+ if (env.NODE_OPTIONS && !env.NODE_OPTIONS.includes(nodeOptsSwitch)) {
92
+ commons_1.logger.warn(`WARNING: Found NODE_OPTIONS environment variable without a setting for ${nodeOptsSwitch}
93
+ The synthesizing step for TypeScript may need an increased amount of memory if multiple large providers
94
+ are used with locally generated bindings. You can ignore this if you don't use CDKTN with TypeScript.
95
+ If not present, the cdktn-cli sets it to NODE_OPTIONS="${nodeOptsSetting}" by default. But as
96
+ your environment already contains a NODE_OPTIONS variable, we won't override it. Hence, the app command
97
+ might fail while synthesizing with an out of memory error.`);
98
+ }
99
+ else if (!env.NODE_OPTIONS) {
100
+ // increase memory to allow ts-node (when using TypeScript) to handle large amounts of generated code in memory
101
+ env.NODE_OPTIONS = `${env.NODE_OPTIONS || ""} ${nodeOptsSetting}`.trim();
102
+ }
103
+ const currentContext = process.env[cdktn_1.CONTEXT_ENV]
104
+ ? JSON.parse(process.env.CDKTF_CONTEXT_JSON)
105
+ : {};
106
+ const relativeModules = getRelativeTerraformModules();
107
+ try {
108
+ await (0, commons_1.shell)(command, [], {
109
+ shell: true,
110
+ env: {
111
+ ...env,
112
+ CDKTF_OUTDIR: outdir,
113
+ CDKTF_CONTINUE_SYNTH_ON_ERROR_ANNOTATIONS: "true", // we want to display the errors ourselves
114
+ [cdktn_1.CONTEXT_ENV]: JSON.stringify({
115
+ ...currentContext,
116
+ cdktfRelativeModules: relativeModules,
117
+ }),
118
+ SYNTH_HCL_OUTPUT: hcl.toString(),
119
+ },
120
+ cwd: workingDirectory,
121
+ signal: abortSignal,
122
+ noColor: noColor,
123
+ });
124
+ }
125
+ catch (e) {
126
+ const errorOutput = chalkColour `{redBright cdktn encountered an error while synthesizing}
127
+
128
+ Synth command: {blue ${command}}
129
+ Error: {redBright ${e.message}}
130
+ ${e.stderr
131
+ ? chalkColour `
132
+ Command output on stderr:
133
+
134
+ {dim ${(0, indent_string_1.default)(e.stderr, 4)}}
135
+ `
136
+ : ""}
137
+ ${e.stdout
138
+ ? chalkColour `
139
+ Command output on stdout:
140
+
141
+ {dim ${(0, indent_string_1.default)(e.stdout, 4)}}
142
+ `
143
+ : ""}`;
144
+ await this.synthErrorTelemetry(synthOrigin);
145
+ if (graceful) {
146
+ e.errorOutput = errorOutput;
147
+ throw e;
148
+ }
149
+ console.error(`ERROR: ${errorOutput}`);
150
+ process.exit(1);
151
+ }
152
+ // Apply formatting to HCL files if hcl output was selected
153
+ if (hcl) {
154
+ await SynthStack.formatHclFiles(outdir);
155
+ }
156
+ // end performance timer
157
+ const endTime = perf_hooks_1.performance.now();
158
+ let stacks = [];
159
+ try {
160
+ stacks = await SynthStack.readSynthesizedStacks(outdir);
161
+ }
162
+ catch (e) {
163
+ const errorMessage = `ERROR: synthesis failed, because app was expected to call 'synth()', but didn't. Thus "${outdir}/${cdktn_1.Manifest.fileName}" was not created: ${e}`;
164
+ if (graceful) {
165
+ throw new Error(errorMessage);
166
+ }
167
+ commons_1.logger.error(errorMessage);
168
+ process.exit(1);
169
+ }
170
+ await this.synthTelemetry(endTime - startTime, stacks, synthOrigin);
171
+ if (stacks.length === 0) {
172
+ commons_1.logger.error("ERROR: No Terraform code synthesized.");
173
+ }
174
+ const stackNames = stacks.map((s) => s.name);
175
+ const orphanedDirectories = existingDirectories.filter((e) => !stackNames.includes(path.basename(e)));
176
+ for (const orphanedDirectory of orphanedDirectories) {
177
+ fs.rmSync(orphanedDirectory, { recursive: true });
178
+ }
179
+ return stacks;
180
+ }
181
+ static async formatHclFiles(outDir) {
182
+ const manifestPath = path.join(outDir, cdktn_1.Manifest.fileName);
183
+ if (!(await fs.pathExists(manifestPath))) {
184
+ throw new Error(`Could not find manifest file at ${manifestPath}. In case --skip-synth was passed, please try again without the flag.`);
185
+ }
186
+ const manifest = JSON.parse(fs.readFileSync(manifestPath).toString());
187
+ for (const stackName in manifest.stacks) {
188
+ const stack = manifest.stacks[stackName];
189
+ const filePath = path.join(outDir, stack.synthesizedStackPath);
190
+ const hclContent = fs.readFileSync(filePath).toString();
191
+ const formattedHcl = await (0, hcl_tools_1.format)(hclContent);
192
+ fs.writeFileSync(filePath, formattedHcl);
193
+ }
194
+ }
195
+ static async readSynthesizedStacks(outdir) {
196
+ const manifestPath = path.join(outdir, cdktn_1.Manifest.fileName);
197
+ if (!(await fs.pathExists(manifestPath))) {
198
+ throw new Error(`Could not find manifest file at ${manifestPath}. In case --skip-synth was passed, please try again without the flag.`);
199
+ }
200
+ const stacks = [];
201
+ const manifest = JSON.parse(fs.readFileSync(manifestPath).toString());
202
+ for (const stackName in manifest.stacks) {
203
+ const stack = manifest.stacks[stackName];
204
+ const filePath = path.join(outdir, stack.synthesizedStackPath);
205
+ let jsonContent = {};
206
+ if (filePath.endsWith(".tf.json")) {
207
+ jsonContent = JSON.parse(fs.readFileSync(filePath).toString());
208
+ }
209
+ else {
210
+ const metadataPath = path.join(outdir, stack.stackMetadataPath);
211
+ jsonContent = JSON.parse(fs.readFileSync(metadataPath).toString());
212
+ }
213
+ stacks.push({
214
+ ...stack,
215
+ workingDirectory: path.join(outdir, stack.workingDirectory),
216
+ content: JSON.stringify(jsonContent, null, 2),
217
+ });
218
+ }
219
+ return stacks;
220
+ }
221
+ static async synthTelemetry(totalTime, stacks, synthOrigin) {
222
+ const config = (0, commons_1.readConfigSync)();
223
+ await (0, commons_1.sendTelemetry)("synth", {
224
+ totalTime: totalTime,
225
+ language: config.language,
226
+ synthOrigin,
227
+ stackMetadata: stacks.map((stack) => JSON.parse(stack.content)["//"].metadata),
228
+ requiredProviders: stacks.map((stack) => JSON.parse(stack.content)["terraform"].required_providers),
229
+ });
230
+ }
231
+ static async synthErrorTelemetry(synthOrigin) {
232
+ await (0, commons_1.sendTelemetry)("synth", { error: true, synthOrigin });
233
+ }
234
+ }
235
+ exports.SynthStack = SynthStack;
236
+ function getRelativeTerraformModules() {
237
+ let cfg;
238
+ try {
239
+ cfg = cdktf_config_1.CdktfConfig.read();
240
+ }
241
+ catch (e) {
242
+ commons_1.logger.trace("Could not read cdktf.json: " + e);
243
+ return [];
244
+ }
245
+ return cfg.terraformModules.filter((mod) => {
246
+ return typeof mod === "string"
247
+ ? mod.startsWith("./") || mod.startsWith("../")
248
+ : mod.source.startsWith("./") || mod.source.startsWith("../");
249
+ });
250
+ }
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGgtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N5bnRoLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw2Q0FBK0I7QUFDL0IsMkNBQTZCO0FBQzdCLDZDQUErQjtBQUMvQixrRUFBeUM7QUFDekMsaUNBS2U7QUFDZiwyQ0FBeUM7QUFDekMsNENBQThFO0FBQzlFLGlEQUE2QztBQUM3QyxnREFBMEM7QUFFMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFVekMsTUFBYSxpQkFBaUI7SUFLNUIsWUFBNkIsTUFBMEI7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFKaEQsa0JBQWEsR0FBdUIsRUFBRSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQXVCLEVBQUUsQ0FBQztRQUN4QyxtQkFBYyxHQUF1QixFQUFFLENBQUM7UUFHN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBdUI7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FDbkMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBdUI7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFD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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBpbmRlbnRTdHJpbmcgZnJvbSBcImluZGVudC1zdHJpbmdcIjtcbmltcG9ydCB7XG4gIENPTlRFWFRfRU5WLFxuICBNYW5pZmVzdCxcbiAgU3RhY2tNYW5pZmVzdCxcbiAgVGVycmFmb3JtU3RhY2tNZXRhZGF0YSxcbn0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gXCJwZXJmX2hvb2tzXCI7XG5pbXBvcnQgeyBsb2dnZXIsIHJlYWRDb25maWdTeW5jLCBzZW5kVGVsZW1ldHJ5LCBzaGVsbCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWcgfSBmcm9tIFwiLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJAY2RrdG4vaGNsLXRvb2xzXCI7XG5cbmNvbnN0IGNoYWxrQ29sb3VyID0gbmV3IGNoYWxrLkluc3RhbmNlKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ludGhlc2l6ZWRTdGFja01ldGFkYXRhIHtcbiAgXCIvL1wiPzogeyBba2V5OiBzdHJpbmddOiBUZXJyYWZvcm1TdGFja01ldGFkYXRhIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ludGhlc2l6ZWRTdGFjayBleHRlbmRzIFN0YWNrTWFuaWZlc3Qge1xuICBjb250ZW50OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFja0RlcGVuZGVuY2llcyB7XG4gIHB1YmxpYyBwZW5kaW5nU3RhY2tzOiBTeW50aGVzaXplZFN0YWNrW10gPSBbXTtcbiAgcHVibGljIGluZmxpZ2h0U3RhY2tzOiBTeW50aGVzaXplZFN0YWNrW10gPSBbXTtcbiAgcHVibGljIGRlcGxveWVkU3RhY2tzOiBTeW50aGVzaXplZFN0YWNrW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0YWNrczogU3ludGhlc2l6ZWRTdGFja1tdKSB7XG4gICAgdGhpcy5wZW5kaW5nU3RhY2tzID0gWy4uLnRoaXMuc3RhY2tzXTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydFJ1bihzdGFjazogU3ludGhlc2l6ZWRTdGFjayk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1N0YWNrcyA9IHRoaXMucGVuZGluZ1N0YWNrcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lICE9PSBzdGFjay5uYW1lLFxuICAgICk7XG4gICAgdGhpcy5pbmZsaWdodFN0YWNrcy5wdXNoKHN0YWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2hSdW4oc3RhY2s6IFN5bnRoZXNpemVkU3RhY2spOiB2b2lkIHtcbiAgICB0aGlzLmluZmxpZ2h0U3RhY2tzID0gdGhpcy5pbmZsaWdodFN0YWNrcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5uYW1lICE9PSBzdGFjay5uYW1lLFxuICAgICk7XG4gICAgdGhpcy5kZXBsb3llZFN0YWNrcy5wdXNoKHN0YWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGVuZGluZ0RlcGxveWFibGVTdGFja3MoKTogU3ludGhlc2l6ZWRTdGFja1tdIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nU3RhY2tzLmZpbHRlcigocGVuZGluZ1N0YWNrKSA9PiB7XG4gICAgICBjb25zdCB1bm1ldERlcGVuZGVuY2llcyA9IHBlbmRpbmdTdGFjay5kZXBlbmRlbmNpZXMuZmlsdGVyKFxuICAgICAgICAoZGVwZW5kZW5jeSkgPT4ge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5kZXBsb3llZFN0YWNrcy5zb21lKChkZXBsb3llZFN0YWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVwbG95ZWRTdGFjay5uYW1lID09PSBkZXBlbmRlbmN5O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHVubWV0RGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMDtcbiAgICB9KTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgTWFuaWZlc3RKc29uIHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBzdGFja3M6IFN0YWNrTWFuaWZlc3RbXTtcbn1cblxuZXhwb3J0IHR5cGUgU3ludGhPcmlnaW4gPSBcIndhdGNoXCI7XG5cbmV4cG9ydCBjbGFzcyBTeW50aFN0YWNrIHtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBzeW50aChcbiAgICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gICAgY29tbWFuZDogc3RyaW5nLFxuICAgIG91dGRpcjogc3RyaW5nLFxuICAgIHdvcmtpbmdEaXJlY3RvcnkgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIGdyYWNlZnVsID0gZmFsc2UsIC8vIHdpbGwgbm90IGV4aXQgdGhlIHByb2Nlc3MgYnV0IHJldGhyb3cgdGhlIGVycm9yIGluc3RlYWRcbiAgICBub0NvbG9yID0gZmFsc2UsXG4gICAgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbixcbiAgICBoY2wgPSBmYWxzZSxcbiAgKTogUHJvbWlzZTxTeW50aGVzaXplZFN0YWNrW10+IHtcbiAgICAvLyBzdGFydCBwZXJmb3JtYW5jZSB0aW1lclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgY29uc3QgaXNEaXJlY3RvcnkgPSAoc291cmNlOiBzdHJpbmcpID0+IGZzLmxzdGF0U3luYyhzb3VyY2UpLmlzRGlyZWN0b3J5KCk7XG4gICAgY29uc3QgZ2V0RGlyZWN0b3JpZXMgPSAoc291cmNlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzb3VyY2UpKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gZnNcbiAgICAgICAgLnJlYWRkaXJTeW5jKHNvdXJjZSlcbiAgICAgICAgLm1hcCgobmFtZSkgPT4gcGF0aC5qb2luKHNvdXJjZSwgbmFtZSkpXG4gICAgICAgIC5maWx0ZXIoaXNEaXJlY3RvcnkpO1xuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0RpcmVjdG9yaWVzID0gZ2V0RGlyZWN0b3JpZXMoXG4gICAgICBwYXRoLmpvaW4ob3V0ZGlyLCBNYW5pZmVzdC5zdGFja3NGb2xkZXIpLFxuICAgICk7XG5cbiAgICBjb25zdCBlbnYgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhwcm9jZXNzLmVudikuZmlsdGVyKFxuICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhc3MgVGVycmFmb3JtIHZhcmlhYmxlcyB0byB0aGUgc3ludGggY29tbWFuZCBzaW5jZSB0aGV5IHNob3VsZCBvbmx5IGJlIHVzZWQgYXQgZXhlY3V0aW9uIHRpbWVcbiAgICAgICAgKFtrZXldKSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJURl9WQVJfXCIpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gSW5jcmVhc2VzIHRoZSBkZWZhdWx0IG1lbW9yeSBhdmFpbGFibGUgdG8gTm9kZS5qcyB3aGVuIHN5bnRoZXNpemluZyBhIFR5cGVTY3JpcHQgQ0RLIHByb2plY3QuXG4gICAgY29uc3Qgbm9kZU9wdHNTd2l0Y2ggPSBcIi0tbWF4LW9sZC1zcGFjZS1zaXplXCI7XG4gICAgY29uc3Qgbm9kZU9wdHNTZXR0aW5nID0gYCR7bm9kZU9wdHNTd2l0Y2h9PTQwOTZgO1xuICAgIGlmIChlbnYuTk9ERV9PUFRJT05TICYmICFlbnYuTk9ERV9PUFRJT05TLmluY2x1ZGVzKG5vZGVPcHRzU3dpdGNoKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFdBUk5JTkc6IEZvdW5kIE5PREVfT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRob3V0IGEgc2V0dGluZyBmb3IgJHtub2RlT3B0c1N3aXRjaH1cblRoZSBzeW50aGVzaXppbmcgc3RlcCBmb3IgVHlwZVNjcmlwdCBtYXkgbmVlZCBhbiBpbmNyZWFzZWQgYW1vdW50IG9mIG1lbW9yeSBpZiBtdWx0aXBsZSBsYXJnZSBwcm92aWRlcnNcbmFyZSB1c2VkIHdpdGggbG9jYWxseSBnZW5lcmF0ZWQgYmluZGluZ3MuIFlvdSBjYW4gaWdub3JlIHRoaXMgaWYgeW91IGRvbid0IHVzZSBDREtUTiB3aXRoIFR5cGVTY3JpcHQuXG5JZiBub3QgcHJlc2VudCwgdGhlIGNka3RuLWNsaSBzZXRzIGl0IHRvIE5PREVfT1BUSU9OUz1cIiR7bm9kZU9wdHNTZXR0aW5nfVwiIGJ5IGRlZmF1bHQuIEJ1dCBhc1xueW91ciBlbnZpcm9ubWVudCBhbHJlYWR5IGNvbnRhaW5zIGEgTk9ERV9PUFRJT05TIHZhcmlhYmxlLCB3ZSB3b24ndCBvdmVycmlkZSBpdC4gSGVuY2UsIHRoZSBhcHAgY29tbWFuZFxubWlnaHQgZmFpbCB3aGlsZSBzeW50aGVzaXppbmcgd2l0aCBhbiBvdXQgb2YgbWVtb3J5IGVycm9yLmApO1xuICAgIH0gZWxzZSBpZiAoIWVudi5OT0RFX09QVElPTlMpIHtcbiAgICAgIC8vIGluY3JlYXNlIG1lbW9yeSB0byBhbGxvdyB0cy1ub2RlICh3aGVuIHVzaW5nIFR5cGVTY3JpcHQpIHRvIGhhbmRsZSBsYXJnZSBhbW91bnRzIG9mIGdlbmVyYXRlZCBjb2RlIGluIG1lbW9yeVxuICAgICAgZW52Lk5PREVfT1BUSU9OUyA9IGAke2Vudi5OT0RFX09QVElPTlMgfHwgXCJcIn0gJHtub2RlT3B0c1NldHRpbmd9YC50cmltKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENvbnRleHQgPSBwcm9jZXNzLmVudltDT05URVhUX0VOVl1cbiAgICAgID8gSlNPTi5wYXJzZShwcm9jZXNzLmVudi5DREtURl9DT05URVhUX0pTT04pXG4gICAgICA6IHt9O1xuICAgIGNvbnN0IHJlbGF0aXZlTW9kdWxlcyA9IGdldFJlbGF0aXZlVGVycmFmb3JtTW9kdWxlcygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNoZWxsKGNvbW1hbmQsIFtdLCB7XG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5lbnYsXG4gICAgICAgICAgQ0RLVEZfT1VURElSOiBvdXRkaXIsXG4gICAgICAgICAgQ0RLVEZfQ09OVElOVUVfU1lOVEhfT05fRVJST1JfQU5OT1RBVElPTlM6IFwidHJ1ZVwiLCAvLyB3ZSB3YW50IHRvIGRpc3BsYXkgdGhlIGVycm9ycyBvdXJzZWx2ZXNcbiAgICAgICAgICBbQ09OVEVYVF9FTlZdOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAuLi5jdXJyZW50Q29udGV4dCxcbiAgICAgICAgICAgIGNka3RmUmVsYXRpdmVNb2R1bGVzOiByZWxhdGl2ZU1vZHVsZXMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgU1lOVEhfSENMX09VVFBVVDogaGNsLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIGN3ZDogd29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgbm9Db2xvcjogbm9Db2xvcixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc3QgZXJyb3JPdXRwdXQgPSBjaGFsa0NvbG91cmB7cmVkQnJpZ2h0IGNka3RuIGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIHN5bnRoZXNpemluZ31cblxuU3ludGggY29tbWFuZDoge2JsdWUgJHtjb21tYW5kfX1cbkVycm9yOiAgICAgICAgIHtyZWRCcmlnaHQgJHtlLm1lc3NhZ2V9fVxuJHtcbiAgZS5zdGRlcnJcbiAgICA/IGNoYWxrQ29sb3VyYFxuQ29tbWFuZCBvdXRwdXQgb24gc3RkZXJyOlxuXG57ZGltICR7aW5kZW50U3RyaW5nKGUuc3RkZXJyLCA0KX19XG5gXG4gICAgOiBcIlwiXG59XG4ke1xuICBlLnN0ZG91dFxuICAgID8gY2hhbGtDb2xvdXJgXG5Db21tYW5kIG91dHB1dCBvbiBzdGRvdXQ6XG5cbntkaW0gJHtpbmRlbnRTdHJpbmcoZS5zdGRvdXQsIDQpfX1cbmBcbiAgICA6IFwiXCJcbn1gO1xuICAgICAgYXdhaXQgdGhpcy5zeW50aEVycm9yVGVsZW1ldHJ5KHN5bnRoT3JpZ2luKTtcbiAgICAgIGlmIChncmFjZWZ1bCkge1xuICAgICAgICBlLmVycm9yT3V0cHV0ID0gZXJyb3JPdXRwdXQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKGBFUlJPUjogJHtlcnJvck91dHB1dH1gKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBmb3JtYXR0aW5nIHRvIEhDTCBmaWxlcyBpZiBoY2wgb3V0cHV0IHdhcyBzZWxlY3RlZFxuICAgIGlmIChoY2wpIHtcbiAgICAgIGF3YWl0IFN5bnRoU3RhY2suZm9ybWF0SGNsRmlsZXMob3V0ZGlyKTtcbiAgICB9XG5cbiAgICAvLyBlbmQgcGVyZm9ybWFuY2UgdGltZXJcbiAgICBjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICBsZXQgc3RhY2tzOiBTeW50aGVzaXplZFN0YWNrW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5yZWFkU3ludGhlc2l6ZWRTdGFja3Mob3V0ZGlyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBFUlJPUjogc3ludGhlc2lzIGZhaWxlZCwgYmVjYXVzZSBhcHAgd2FzIGV4cGVjdGVkIHRvIGNhbGwgJ3N5bnRoKCknLCBidXQgZGlkbid0LiBUaHVzIFwiJHtvdXRkaXJ9LyR7TWFuaWZlc3QuZmlsZU5hbWV9XCIgIHdhcyBub3QgY3JlYXRlZDogJHtlfWA7XG4gICAgICBpZiAoZ3JhY2VmdWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN5bnRoVGVsZW1ldHJ5KGVuZFRpbWUgLSBzdGFydFRpbWUsIHN0YWNrcywgc3ludGhPcmlnaW4pO1xuXG4gICAgaWYgKHN0YWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVSUk9SOiBObyBUZXJyYWZvcm0gY29kZSBzeW50aGVzaXplZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tOYW1lcyA9IHN0YWNrcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gICAgY29uc3Qgb3JwaGFuZWREaXJlY3RvcmllcyA9IGV4aXN0aW5nRGlyZWN0b3JpZXMuZmlsdGVyKFxuICAgICAgKGUpID0+ICFzdGFja05hbWVzLmluY2x1ZGVzKHBhdGguYmFzZW5hbWUoZSkpLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IG9ycGhhbmVkRGlyZWN0b3J5IG9mIG9ycGhhbmVkRGlyZWN0b3JpZXMpIHtcbiAgICAgIGZzLnJtU3luYyhvcnBoYW5lZERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZm9ybWF0SGNsRmlsZXMob3V0RGlyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4ob3V0RGlyLCBNYW5pZmVzdC5maWxlTmFtZSk7XG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhtYW5pZmVzdFBhdGgpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgbWFuaWZlc3QgZmlsZSBhdCAke21hbmlmZXN0UGF0aH0uIEluIGNhc2UgLS1za2lwLXN5bnRoIHdhcyBwYXNzZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aG91dCB0aGUgZmxhZy5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYW5pZmVzdCA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoKS50b1N0cmluZygpLFxuICAgICkgYXMgTWFuaWZlc3RKc29uO1xuXG4gICAgZm9yIChjb25zdCBzdGFja05hbWUgaW4gbWFuaWZlc3Quc3RhY2tzKSB7XG4gICAgICBjb25zdCBzdGFjayA9IG1hbmlmZXN0LnN0YWNrc1tzdGFja05hbWVdO1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4ob3V0RGlyLCBzdGFjay5zeW50aGVzaXplZFN0YWNrUGF0aCk7XG5cbiAgICAgIGNvbnN0IGhjbENvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRIY2wgPSBhd2FpdCBmb3JtYXQoaGNsQ29udGVudCk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBmb3JtYXR0ZWRIY2wpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgcmVhZFN5bnRoZXNpemVkU3RhY2tzKFxuICAgIG91dGRpcjogc3RyaW5nLFxuICApOiBQcm9taXNlPFN5bnRoZXNpemVkU3RhY2tbXT4ge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9IHBhdGguam9pbihvdXRkaXIsIE1hbmlmZXN0LmZpbGVOYW1lKTtcbiAgICBpZiAoIShhd2FpdCBmcy5wYXRoRXhpc3RzKG1hbmlmZXN0UGF0aCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBtYW5pZmVzdCBmaWxlIGF0ICR7bWFuaWZlc3RQYXRofS4gSW4gY2FzZSAtLXNraXAtc3ludGggd2FzIHBhc3NlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRob3V0IHRoZSBmbGFnLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrczogU3ludGhlc2l6ZWRTdGFja1tdID0gW107XG4gICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCkudG9TdHJpbmcoKSxcbiAgICApIGFzIE1hbmlmZXN0SnNvbjtcblxuICAgIGZvciAoY29uc3Qgc3RhY2tOYW1lIGluIG1hbmlmZXN0LnN0YWNrcykge1xuICAgICAgY29uc3Qgc3RhY2sgPSBtYW5pZmVzdC5zdGFja3Nbc3RhY2tOYW1lXTtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKG91dGRpciwgc3RhY2suc3ludGhlc2l6ZWRTdGFja1BhdGgpO1xuICAgICAgbGV0IGpzb25Db250ZW50OiBTeW50aGVzaXplZFN0YWNrTWV0YWRhdGEgPSB7fTtcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aChcIi50Zi5qc29uXCIpKSB7XG4gICAgICAgIGpzb25Db250ZW50ID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgpLnRvU3RyaW5nKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFQYXRoID0gcGF0aC5qb2luKG91dGRpciwgc3RhY2suc3RhY2tNZXRhZGF0YVBhdGghKTtcbiAgICAgICAganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhtZXRhZGF0YVBhdGgpLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuXG4gICAgICBzdGFja3MucHVzaCh7XG4gICAgICAgIC4uLnN0YWNrLFxuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiBwYXRoLmpvaW4ob3V0ZGlyLCBzdGFjay53b3JraW5nRGlyZWN0b3J5KSxcbiAgICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkoanNvbkNvbnRlbnQsIG51bGwsIDIpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgc3ludGhUZWxlbWV0cnkoXG4gICAgdG90YWxUaW1lOiBudW1iZXIsXG4gICAgc3RhY2tzOiBTeW50aGVzaXplZFN0YWNrW10sXG4gICAgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gcmVhZENvbmZpZ1N5bmMoKTtcblxuICAgIGF3YWl0IHNlbmRUZWxlbWV0cnkoXCJzeW50aFwiLCB7XG4gICAgICB0b3RhbFRpbWU6IHRvdGFsVGltZSxcbiAgICAgIGxhbmd1YWdlOiBjb25maWcubGFuZ3VhZ2UsXG4gICAgICBzeW50aE9yaWdpbixcbiAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrcy5tYXAoXG4gICAgICAgIChzdGFjaykgPT4gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhLFxuICAgICAgKSxcbiAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3MubWFwKFxuICAgICAgICAoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVycyxcbiAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIHN5bnRoRXJyb3JUZWxlbWV0cnkoc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbikge1xuICAgIGF3YWl0IHNlbmRUZWxlbWV0cnkoXCJzeW50aFwiLCB7IGVycm9yOiB0cnVlLCBzeW50aE9yaWdpbiB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGl2ZVRlcnJhZm9ybU1vZHVsZXMoKSB7XG4gIGxldCBjZmc7XG5cbiAgdHJ5IHtcbiAgICBjZmcgPSBDZGt0ZkNvbmZpZy5yZWFkKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIudHJhY2UoXCJDb3VsZCBub3QgcmVhZCBjZGt0Zi5qc29uOiBcIiArIGUpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBjZmcudGVycmFmb3JtTW9kdWxlcy5maWx0ZXIoKG1vZCkgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgbW9kID09PSBcInN0cmluZ1wiXG4gICAgICA/IG1vZC5zdGFydHNXaXRoKFwiLi9cIikgfHwgbW9kLnN0YXJ0c1dpdGgoXCIuLi9cIilcbiAgICAgIDogbW9kLnNvdXJjZS5zdGFydHNXaXRoKFwiLi9cIikgfHwgbW9kLnNvdXJjZS5zdGFydHNXaXRoKFwiLi4vXCIpO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synth.d.ts","sourceRoot":"","sources":["../../src/lib/synth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,QA0C1D"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.printAnnotations = void 0;
27
+ const cdktn_1 = require("cdktn");
28
+ const chalk = __importStar(require("chalk"));
29
+ const chalkColour = new chalk.Instance();
30
+ /**
31
+ * prints annotations via console
32
+ * @throws Error if an Annotation with level === ERROR has been encountered
33
+ */
34
+ function printAnnotations(stacks) {
35
+ let encounteredAnnotationError = false;
36
+ stacks.forEach((stack) => (stack.annotations || []).forEach((annotation) => {
37
+ if (annotation.level === cdktn_1.AnnotationMetadataEntryType.ERROR)
38
+ encounteredAnnotationError = true;
39
+ let color = chalkColour.whiteBright;
40
+ let level = annotation.level;
41
+ switch (annotation.level) {
42
+ case cdktn_1.AnnotationMetadataEntryType.INFO: {
43
+ level = "INFO";
44
+ break;
45
+ }
46
+ case cdktn_1.AnnotationMetadataEntryType.WARN: {
47
+ color = chalkColour.hex("#FFA500"); // orange
48
+ level = "WARN";
49
+ break;
50
+ }
51
+ case cdktn_1.AnnotationMetadataEntryType.ERROR: {
52
+ color = chalkColour.redBright;
53
+ level = "ERROR";
54
+ break;
55
+ }
56
+ }
57
+ console.log(color(`${level} [${annotation.constructPath}]: ${annotation.message}`));
58
+ if (annotation.level === cdktn_1.AnnotationMetadataEntryType.ERROR &&
59
+ annotation.stacktrace)
60
+ console.log(chalkColour.gray(annotation.stacktrace.join("\n")));
61
+ }));
62
+ if (encounteredAnnotationError) {
63
+ throw new Error("While synthesizing one or more error annotations have been encountered. Please check the log output above.");
64
+ }
65
+ }
66
+ exports.printAnnotations = printAnnotations;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N5bnRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsaUNBQW9EO0FBQ3BELDZDQUErQjtBQUUvQixNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUEwQjtJQUN6RCxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztJQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDdkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQy9DLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxtQ0FBMkIsQ0FBQyxLQUFLO1lBQ3hELDBCQUEwQixHQUFHLElBQUksQ0FBQztRQUVwQyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksS0FBSyxHQUFXLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDckMsUUFBUSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsS0FBSyxtQ0FBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxLQUFLLEdBQUcsTUFBTSxDQUFDO2dCQUNmLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxtQ0FBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQzdDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQ2YsTUFBTTtZQUNSLENBQUM7WUFDRCxLQUFLLG1DQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO2dCQUM5QixLQUFLLEdBQUcsT0FBTyxDQUFDO2dCQUNoQixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUNULEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxVQUFVLENBQUMsYUFBYSxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUN2RSxDQUFDO1FBQ0YsSUFDRSxVQUFVLENBQUMsS0FBSyxLQUFLLG1DQUEyQixDQUFDLEtBQUs7WUFDdEQsVUFBVSxDQUFDLFVBQVU7WUFFckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUYsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2IsNEdBQTRHLENBQzdHLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQTFDRCw0Q0EwQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgU3ludGhlc2l6ZWRTdGFjayB9IGZyb20gXCIuL3N5bnRoLXN0YWNrXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUgfSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5jb25zdCBjaGFsa0NvbG91ciA9IG5ldyBjaGFsay5JbnN0YW5jZSgpO1xuXG4vKipcbiAqIHByaW50cyBhbm5vdGF0aW9ucyB2aWEgY29uc29sZVxuICogQHRocm93cyBFcnJvciBpZiBhbiBBbm5vdGF0aW9uIHdpdGggbGV2ZWwgPT09IEVSUk9SIGhhcyBiZWVuIGVuY291bnRlcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEFubm90YXRpb25zKHN0YWNrczogU3ludGhlc2l6ZWRTdGFja1tdKSB7XG4gIGxldCBlbmNvdW50ZXJlZEFubm90YXRpb25FcnJvciA9IGZhbHNlO1xuXG4gIHN0YWNrcy5mb3JFYWNoKChzdGFjaykgPT5cbiAgICAoc3RhY2suYW5ub3RhdGlvbnMgfHwgW10pLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcbiAgICAgIGlmIChhbm5vdGF0aW9uLmxldmVsID09PSBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUuRVJST1IpXG4gICAgICAgIGVuY291bnRlcmVkQW5ub3RhdGlvbkVycm9yID0gdHJ1ZTtcblxuICAgICAgbGV0IGNvbG9yID0gY2hhbGtDb2xvdXIud2hpdGVCcmlnaHQ7XG4gICAgICBsZXQgbGV2ZWw6IHN0cmluZyA9IGFubm90YXRpb24ubGV2ZWw7XG4gICAgICBzd2l0Y2ggKGFubm90YXRpb24ubGV2ZWwpIHtcbiAgICAgICAgY2FzZSBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUuSU5GTzoge1xuICAgICAgICAgIGxldmVsID0gXCJJTkZPXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBBbm5vdGF0aW9uTWV0YWRhdGFFbnRyeVR5cGUuV0FSTjoge1xuICAgICAgICAgIGNvbG9yID0gY2hhbGtDb2xvdXIuaGV4KFwiI0ZGQTUwMFwiKTsgLy8gb3JhbmdlXG4gICAgICAgICAgbGV2ZWwgPSBcIldBUk5cIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZS5FUlJPUjoge1xuICAgICAgICAgIGNvbG9yID0gY2hhbGtDb2xvdXIucmVkQnJpZ2h0O1xuICAgICAgICAgIGxldmVsID0gXCJFUlJPUlwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY29sb3IoYCR7bGV2ZWx9IFske2Fubm90YXRpb24uY29uc3RydWN0UGF0aH1dOiAke2Fubm90YXRpb24ubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIGFubm90YXRpb24ubGV2ZWwgPT09IEFubm90YXRpb25NZXRhZGF0YUVudHJ5VHlwZS5FUlJPUiAmJlxuICAgICAgICBhbm5vdGF0aW9uLnN0YWNrdHJhY2VcbiAgICAgIClcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtDb2xvdXIuZ3JheShhbm5vdGF0aW9uLnN0YWNrdHJhY2Uuam9pbihcIlxcblwiKSkpO1xuICAgIH0pLFxuICApO1xuXG4gIGlmIChlbmNvdW50ZXJlZEFubm90YXRpb25FcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiV2hpbGUgc3ludGhlc2l6aW5nIG9uZSBvciBtb3JlIGVycm9yIGFubm90YXRpb25zIGhhdmUgYmVlbiBlbmNvdW50ZXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgb3V0cHV0IGFib3ZlLlwiLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"terraform-json.d.ts","sourceRoot":"","sources":["terraform-json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUI,CAAC;AAEjB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0ClB,CAAC;AAEf,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACjE,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"terraform-json.d.ts","sourceRoot":"","sources":["../../src/lib/terraform-json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUI,CAAC;AAEjB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0ClB,CAAC;AAEf,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACjE,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.terraformJsonSchema = void 0;
27
+ // Copyright (c) HashiCorp, Inc
28
+ // SPDX-License-Identifier: MPL-2.0
29
+ const z = __importStar(require("zod"));
30
+ const remote = z
31
+ .object({
32
+ organization: z.string(),
33
+ hostname: z.string().optional(),
34
+ token: z.string().optional(),
35
+ workspaces: z.object({
36
+ name: z.string().optional(),
37
+ prefix: z.string().optional(),
38
+ }),
39
+ })
40
+ .deepPartial();
41
+ exports.terraformJsonSchema = z
42
+ .object({
43
+ "//": z
44
+ .object({
45
+ metadata: z
46
+ .object({
47
+ version: z.string(),
48
+ stackName: z.string(),
49
+ backend: z.string(),
50
+ })
51
+ .nonstrict(),
52
+ outputs: z.record(z.any()),
53
+ })
54
+ .nonstrict(),
55
+ terraform: z.object({
56
+ backend: z
57
+ .object({
58
+ // All other backends are here as well, but we don't read them right now
59
+ remote,
60
+ })
61
+ .nonstrict(),
62
+ cloud: z
63
+ .object({
64
+ organization: z.string(),
65
+ hostname: z.string().optional(),
66
+ token: z.string().optional(),
67
+ workspaces: z.union([
68
+ z.object({ name: z.string() }),
69
+ z.object({ tags: z.array(z.string()) }),
70
+ ]),
71
+ })
72
+ .nonstrict(),
73
+ required_providers: z.record(z.object({ source: z.string(), version: z.string() }).nonstrict()),
74
+ required_version: z.string(),
75
+ }),
76
+ data: z.record(z.any()),
77
+ provider: z.record(z.any()),
78
+ resource: z.record(z.any()),
79
+ })
80
+ .deepPartial()
81
+ .nonstrict();
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RlcnJhZm9ybS1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx1Q0FBeUI7QUFFekIsTUFBTSxNQUFNLEdBQUcsQ0FBQztLQUNiLE1BQU0sQ0FBQztJQUNOLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9CLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzVCLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25CLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzNCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzlCLENBQUM7Q0FDSCxDQUFDO0tBQ0QsV0FBVyxFQUFFLENBQUM7QUFFSixRQUFBLG1CQUFtQixHQUFHLENBQUM7S0FDakMsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUM7U0FDSixNQUFNLENBQUM7UUFDTixRQUFRLEVBQUUsQ0FBQzthQUNSLE1BQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ25CLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3JCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO1NBQ3BCLENBQUM7YUFDRCxTQUFTLEVBQUU7UUFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDM0IsQ0FBQztTQUNELFNBQVMsRUFBRTtJQUNkLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxDQUFDO2FBQ1AsTUFBTSxDQUFDO1lBQ04sd0VBQXdFO1lBQ3hFLE1BQU07U0FDUCxDQUFDO2FBQ0QsU0FBUyxFQUFFO1FBQ2QsS0FBSyxFQUFFLENBQUM7YUFDTCxNQUFNLENBQUM7WUFDTixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN4QixRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUM1QixVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDeEMsQ0FBQztTQUNILENBQUM7YUFDRCxTQUFTLEVBQUU7UUFDZCxrQkFBa0IsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FDbEU7UUFDRCxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0tBQzdCLENBQUM7SUFDRixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzNCLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM1QixDQUFDO0tBQ0QsV0FBVyxFQUFFO0tBQ2IsU0FBUyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHJlbW90ZSA9IHpcbiAgLm9iamVjdCh7XG4gICAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLFxuICAgIGhvc3RuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB3b3Jrc3BhY2VzOiB6Lm9iamVjdCh7XG4gICAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICBwcmVmaXg6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgfSlcbiAgLmRlZXBQYXJ0aWFsKCk7XG5cbmV4cG9ydCBjb25zdCB0ZXJyYWZvcm1Kc29uU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBcIi8vXCI6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBtZXRhZGF0YTogelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIHN0YWNrTmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIGJhY2tlbmQ6IHouc3RyaW5nKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAubm9uc3RyaWN0KCksXG4gICAgICAgIG91dHB1dHM6IHoucmVjb3JkKHouYW55KCkpLFxuICAgICAgfSlcbiAgICAgIC5ub25zdHJpY3QoKSxcbiAgICB0ZXJyYWZvcm06IHoub2JqZWN0KHtcbiAgICAgIGJhY2tlbmQ6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgLy8gQWxsIG90aGVyIGJhY2tlbmRzIGFyZSBoZXJlIGFzIHdlbGwsIGJ1dCB3ZSBkb24ndCByZWFkIHRoZW0gcmlnaHQgbm93XG4gICAgICAgICAgcmVtb3RlLFxuICAgICAgICB9KVxuICAgICAgICAubm9uc3RyaWN0KCksXG4gICAgICBjbG91ZDogelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICBvcmdhbml6YXRpb246IHouc3RyaW5nKCksXG4gICAgICAgICAgaG9zdG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgICB0b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgICAgIHdvcmtzcGFjZXM6IHoudW5pb24oW1xuICAgICAgICAgICAgei5vYmplY3QoeyBuYW1lOiB6LnN0cmluZygpIH0pLFxuICAgICAgICAgICAgei5vYmplY3QoeyB0YWdzOiB6LmFycmF5KHouc3RyaW5nKCkpIH0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICB9KVxuICAgICAgICAubm9uc3RyaWN0KCksXG4gICAgICByZXF1aXJlZF9wcm92aWRlcnM6IHoucmVjb3JkKFxuICAgICAgICB6Lm9iamVjdCh7IHNvdXJjZTogei5zdHJpbmcoKSwgdmVyc2lvbjogei5zdHJpbmcoKSB9KS5ub25zdHJpY3QoKSxcbiAgICAgICksXG4gICAgICByZXF1aXJlZF92ZXJzaW9uOiB6LnN0cmluZygpLFxuICAgIH0pLFxuICAgIGRhdGE6IHoucmVjb3JkKHouYW55KCkpLFxuICAgIHByb3ZpZGVyOiB6LnJlY29yZCh6LmFueSgpKSxcbiAgICByZXNvdXJjZTogei5yZWNvcmQoei5hbnkoKSksXG4gIH0pXG4gIC5kZWVwUGFydGlhbCgpXG4gIC5ub25zdHJpY3QoKTtcblxuZXhwb3J0IHR5cGUgVGVycmFmb3JtU3RhY2sgPSB6LmluZmVyPHR5cGVvZiB0ZXJyYWZvcm1Kc29uU2NoZW1hPjtcbmV4cG9ydCB0eXBlIFRlcnJhZm9ybUpzb25Db25maWdCYWNrZW5kUmVtb3RlID0gei5pbmZlcjx0eXBlb2YgcmVtb3RlPjtcbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-provider-lock.d.ts","sourceRoot":"","sources":["../../src/lib/terraform-provider-lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,KAAK,8BAA8B,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAQF,qBAAa,qBAAqB;IAEpB,OAAO,CAAC,qBAAqB;IADzC,OAAO,CAAC,iBAAiB,CAAuC;gBAC5C,qBAAqB,EAAE,MAAM;IAIjD,OAAO,KAAK,YAAY,GAEvB;IAEY,mBAAmB;YASlB,oBAAoB;IAYlC,OAAO,CAAC,qBAAqB;IAyChB,SAAS,CAAC,WAAW,UAAQ;;;IAS7B,mBAAmB,CAAC,UAAU,EAAE,kBAAkB;CAWhE"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TerraformProviderLock = void 0;
11
+ const path_1 = __importDefault(require("path"));
12
+ const promises_1 = __importDefault(require("fs/promises"));
13
+ const dependency_manager_1 = require("./dependencies/dependency-manager");
14
+ const commons_1 = require("@cdktn/commons");
15
+ const TerraformLockFileName = ".terraform.lock.hcl";
16
+ class TerraformProviderLock {
17
+ constructor(stackWorkingDirectory) {
18
+ this.stackWorkingDirectory = stackWorkingDirectory;
19
+ this._providerLockData = null;
20
+ }
21
+ get lockFilePath() {
22
+ return path_1.default.join(this.stackWorkingDirectory, TerraformLockFileName);
23
+ }
24
+ async hasProviderLockFile() {
25
+ try {
26
+ await promises_1.default.stat(this.lockFilePath);
27
+ return true;
28
+ }
29
+ catch (e) {
30
+ return false;
31
+ }
32
+ }
33
+ async readProviderLockFile() {
34
+ try {
35
+ const lockFile = (await promises_1.default.readFile(this.lockFilePath)).toString();
36
+ return lockFile;
37
+ }
38
+ catch (e) {
39
+ commons_1.logger.debug("Unable to read provider lock file", e);
40
+ }
41
+ return "";
42
+ }
43
+ parseProviderLockFile(contents) {
44
+ const providerLockData = {
45
+ providers: {},
46
+ };
47
+ let currentProvider;
48
+ contents.split(/\r\n|\r|\n/).forEach((line) => {
49
+ if (currentProvider) {
50
+ const constraintMatch = line.match(/^\s*constraints\s+=\s+"(.*)"/);
51
+ if (constraintMatch) {
52
+ providerLockData.providers[currentProvider].constraints =
53
+ new dependency_manager_1.ProviderConstraint(currentProvider, constraintMatch[1]);
54
+ return;
55
+ }
56
+ const versionMatch = line.match(/^\s*version\s+=\s+"(.*)"/);
57
+ if (versionMatch) {
58
+ providerLockData.providers[currentProvider].version = versionMatch[1];
59
+ return;
60
+ }
61
+ const endMatch = line.match(/^\s*}/);
62
+ if (endMatch) {
63
+ currentProvider = undefined;
64
+ }
65
+ return;
66
+ }
67
+ const providerMatch = line.match(/provider "(.*)"/);
68
+ if (providerMatch) {
69
+ currentProvider = providerMatch[1];
70
+ providerLockData.providers[currentProvider] = {
71
+ name: new dependency_manager_1.ProviderConstraint(currentProvider, ">=0").simplifiedName,
72
+ };
73
+ }
74
+ });
75
+ return providerLockData;
76
+ }
77
+ async providers(forceReread = false) {
78
+ if (!this._providerLockData || forceReread) {
79
+ const contents = await this.readProviderLockFile();
80
+ this._providerLockData = this.parseProviderLockFile(contents);
81
+ }
82
+ return this._providerLockData.providers;
83
+ }
84
+ async hasMatchingProvider(constraint) {
85
+ var _a, _b;
86
+ const providerLockData = await this.providers();
87
+ const lockedProvider = providerLockData[constraint.source];
88
+ if (lockedProvider) {
89
+ return (_a = lockedProvider.constraints) === null || _a === void 0 ? void 0 : _a.matchesVersion((_b = constraint.version) !== null && _b !== void 0 ? _b : ">0");
90
+ }
91
+ return false;
92
+ }
93
+ }
94
+ exports.TerraformProviderLock = TerraformProviderLock;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXByb3ZpZGVyLWxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RlcnJhZm9ybS1wcm92aWRlci1sb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7OztBQUVILGdEQUF3QjtBQUN4QiwyREFBNkI7QUFDN0IsMEVBQXVFO0FBQ3ZFLDRDQUF3QztBQUV4QyxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBY3BELE1BQWEscUJBQXFCO0lBRWhDLFlBQW9CLHFCQUE2QjtRQUE3QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQVE7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQjtRQUM5QixJQUFJLENBQUM7WUFDSCxNQUFNLGtCQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0I7UUFDaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRW5FLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLHFCQUFxQixDQUFDLFFBQWdCO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQWtDO1lBQ3RELFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQztRQUNGLElBQUksZUFBbUMsQ0FBQztRQUV4QyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVDLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFdBQVc7d0JBQ3JELElBQUksdUNBQWtCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5RCxPQUFPO2dCQUNULENBQUM7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNqQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEUsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsZUFBZSxHQUFHLFNBQVMsQ0FBQztnQkFDOUIsQ0FBQztnQkFFRCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNwRCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUc7b0JBQzVDLElBQUksRUFBRSxJQUFJLHVDQUFrQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxjQUFjO2lCQUNwRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBOEI7O1FBQzdELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTyxNQUFBLGNBQWMsQ0FBQyxXQUFXLDBDQUFFLGNBQWMsQ0FDL0MsTUFBQSxVQUFVLENBQUMsT0FBTyxtQ0FBSSxJQUFJLENBQzNCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE1RkQsc0RBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJDb25zdHJhaW50IH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbmNvbnN0IFRlcnJhZm9ybUxvY2tGaWxlTmFtZSA9IFwiLnRlcnJhZm9ybS5sb2NrLmhjbFwiO1xuXG50eXBlIFRlcnJhZm9ybVByb3ZpZGVyTG9ja0ZpbGVFbnRyeSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBjb25zdHJhaW50cz86IFByb3ZpZGVyQ29uc3RyYWludDtcbn07XG5cbnR5cGUgVGVycmFmb3JtUHJvdmlkZXJMb2NrRmlsZURhdGEgPSB7XG4gIHByb3ZpZGVyczoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBUZXJyYWZvcm1Qcm92aWRlckxvY2tGaWxlRW50cnk7XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgVGVycmFmb3JtUHJvdmlkZXJMb2NrIHtcbiAgcHJpdmF0ZSBfcHJvdmlkZXJMb2NrRGF0YTogVGVycmFmb3JtUHJvdmlkZXJMb2NrRmlsZURhdGEgfCBudWxsO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YWNrV29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJvdmlkZXJMb2NrRGF0YSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBsb2NrRmlsZVBhdGgoKSB7XG4gICAgcmV0dXJuIHBhdGguam9pbih0aGlzLnN0YWNrV29ya2luZ0RpcmVjdG9yeSwgVGVycmFmb3JtTG9ja0ZpbGVOYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYXNQcm92aWRlckxvY2tGaWxlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5zdGF0KHRoaXMubG9ja0ZpbGVQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQcm92aWRlckxvY2tGaWxlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NrRmlsZSA9IChhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmxvY2tGaWxlUGF0aCkpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHJldHVybiBsb2NrRmlsZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJVbmFibGUgdG8gcmVhZCBwcm92aWRlciBsb2NrIGZpbGVcIiwgZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUHJvdmlkZXJMb2NrRmlsZShjb250ZW50czogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvdmlkZXJMb2NrRGF0YTogVGVycmFmb3JtUHJvdmlkZXJMb2NrRmlsZURhdGEgPSB7XG4gICAgICBwcm92aWRlcnM6IHt9LFxuICAgIH07XG4gICAgbGV0IGN1cnJlbnRQcm92aWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29udGVudHMuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLykuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRQcm92aWRlcikge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50TWF0Y2ggPSBsaW5lLm1hdGNoKC9eXFxzKmNvbnN0cmFpbnRzXFxzKz1cXHMrXCIoLiopXCIvKTtcbiAgICAgICAgaWYgKGNvbnN0cmFpbnRNYXRjaCkge1xuICAgICAgICAgIHByb3ZpZGVyTG9ja0RhdGEucHJvdmlkZXJzW2N1cnJlbnRQcm92aWRlcl0uY29uc3RyYWludHMgPVxuICAgICAgICAgICAgbmV3IFByb3ZpZGVyQ29uc3RyYWludChjdXJyZW50UHJvdmlkZXIsIGNvbnN0cmFpbnRNYXRjaFsxXSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID0gbGluZS5tYXRjaCgvXlxccyp2ZXJzaW9uXFxzKz1cXHMrXCIoLiopXCIvKTtcbiAgICAgICAgaWYgKHZlcnNpb25NYXRjaCkge1xuICAgICAgICAgIHByb3ZpZGVyTG9ja0RhdGEucHJvdmlkZXJzW2N1cnJlbnRQcm92aWRlcl0udmVyc2lvbiA9IHZlcnNpb25NYXRjaFsxXTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmRNYXRjaCA9IGxpbmUubWF0Y2goL15cXHMqfS8pO1xuICAgICAgICBpZiAoZW5kTWF0Y2gpIHtcbiAgICAgICAgICBjdXJyZW50UHJvdmlkZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyTWF0Y2ggPSBsaW5lLm1hdGNoKC9wcm92aWRlciBcIiguKilcIi8pO1xuICAgICAgaWYgKHByb3ZpZGVyTWF0Y2gpIHtcbiAgICAgICAgY3VycmVudFByb3ZpZGVyID0gcHJvdmlkZXJNYXRjaFsxXTtcbiAgICAgICAgcHJvdmlkZXJMb2NrRGF0YS5wcm92aWRlcnNbY3VycmVudFByb3ZpZGVyXSA9IHtcbiAgICAgICAgICBuYW1lOiBuZXcgUHJvdmlkZXJDb25zdHJhaW50KGN1cnJlbnRQcm92aWRlciwgXCI+PTBcIikuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvdmlkZXJMb2NrRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm92aWRlcnMoZm9yY2VSZXJlYWQgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy5fcHJvdmlkZXJMb2NrRGF0YSB8fCBmb3JjZVJlcmVhZCkge1xuICAgICAgY29uc3QgY29udGVudHMgPSBhd2FpdCB0aGlzLnJlYWRQcm92aWRlckxvY2tGaWxlKCk7XG4gICAgICB0aGlzLl9wcm92aWRlckxvY2tEYXRhID0gdGhpcy5wYXJzZVByb3ZpZGVyTG9ja0ZpbGUoY29udGVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wcm92aWRlckxvY2tEYXRhLnByb3ZpZGVycztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYXNNYXRjaGluZ1Byb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGNvbnN0IHByb3ZpZGVyTG9ja0RhdGEgPSBhd2FpdCB0aGlzLnByb3ZpZGVycygpO1xuICAgIGNvbnN0IGxvY2tlZFByb3ZpZGVyID0gcHJvdmlkZXJMb2NrRGF0YVtjb25zdHJhaW50LnNvdXJjZV07XG4gICAgaWYgKGxvY2tlZFByb3ZpZGVyKSB7XG4gICAgICByZXR1cm4gbG9ja2VkUHJvdmlkZXIuY29uc3RyYWludHM/Lm1hdGNoZXNWZXJzaW9uKFxuICAgICAgICBjb25zdHJhaW50LnZlcnNpb24gPz8gXCI+MFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { CdktfProjectOptions, MutationOptions } from "./cdktf-project";
2
3
  import { CdktfStack } from "./cdktf-stack";
3
4
  export type State = {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/lib/watch.ts"],"names":[],"mappings":";AAGA,OAAO,EAEL,mBAAmB,EACnB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA0E3C,MAAM,MAAM,KAAK,GACb;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,wBAAsB,KAAK,CACzB,cAAc,EAAE,mBAAmB,EACnC,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,iBAiFzC"}