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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/ambient.d.ts +0 -1
  2. package/build/lib/cdktf-config.d.ts.map +1 -0
  3. package/build/lib/cdktf-config.js +108 -0
  4. package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
  5. package/build/lib/cdktf-project-io-handler.js +84 -0
  6. package/build/lib/cdktf-project.d.ts.map +1 -0
  7. package/build/lib/cdktf-project.js +370 -0
  8. package/{src → build}/lib/cdktf-stack.d.ts +1 -0
  9. package/build/lib/cdktf-stack.d.ts.map +1 -0
  10. package/build/lib/cdktf-stack.js +386 -0
  11. package/build/lib/convert.d.ts.map +1 -0
  12. package/build/lib/convert.js +51 -0
  13. package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
  14. package/build/lib/dependencies/cdktf-config-manager.js +36 -0
  15. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
  16. package/build/lib/dependencies/dependency-manager.js +393 -0
  17. package/build/lib/dependencies/package-manager.d.ts.map +1 -0
  18. package/build/lib/dependencies/package-manager.js +581 -0
  19. package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
  20. package/build/lib/dependencies/prebuilt-providers.js +221 -0
  21. package/build/lib/dependencies/registry-api.d.ts.map +1 -0
  22. package/build/lib/dependencies/registry-api.js +77 -0
  23. package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
  24. package/build/lib/dependencies/version-constraints.js +95 -0
  25. package/build/lib/error-reporting.d.ts.map +1 -0
  26. package/build/lib/error-reporting.js +133 -0
  27. package/build/lib/errors.d.ts.map +1 -0
  28. package/build/lib/errors.js +10 -0
  29. package/build/lib/execution-logs.d.ts.map +1 -0
  30. package/build/lib/execution-logs.js +47 -0
  31. package/build/lib/get.d.ts.map +1 -0
  32. package/build/lib/get.js +90 -0
  33. package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
  34. package/build/lib/helpers/stack-helpers.js +155 -0
  35. package/build/lib/index.d.ts.map +1 -0
  36. package/{src → build}/lib/index.js +1 -2
  37. package/build/lib/init.d.ts.map +1 -0
  38. package/build/lib/init.js +131 -0
  39. package/build/lib/local-provider-constraints.d.ts.map +1 -0
  40. package/build/lib/local-provider-constraints.js +95 -0
  41. package/build/lib/local-provider-versions.d.ts.map +1 -0
  42. package/build/lib/local-provider-versions.js +73 -0
  43. package/{src → build}/lib/models/deploy-machine.d.ts +3 -11
  44. package/build/lib/models/deploy-machine.d.ts.map +1 -0
  45. package/build/lib/models/deploy-machine.js +283 -0
  46. package/build/lib/models/interactive-process.d.ts +28 -0
  47. package/build/lib/models/interactive-process.d.ts.map +1 -0
  48. package/build/lib/models/interactive-process.js +59 -0
  49. package/{src → build}/lib/models/schema.d.ts.map +1 -1
  50. package/build/lib/models/schema.js +181 -0
  51. package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
  52. package/build/lib/models/terraform-cli.d.ts.map +1 -0
  53. package/build/lib/models/terraform-cli.js +355 -0
  54. package/build/lib/models/terraform.d.ts.map +1 -0
  55. package/build/lib/models/terraform.js +72 -0
  56. package/build/lib/output.d.ts.map +1 -0
  57. package/build/lib/output.js +211 -0
  58. package/build/lib/provider-add.d.ts.map +1 -0
  59. package/build/lib/provider-add.js +30 -0
  60. package/build/lib/server/terraform-logs.d.ts.map +1 -0
  61. package/build/lib/server/terraform-logs.js +19 -0
  62. package/{src → build}/lib/synth-stack.d.ts +1 -0
  63. package/build/lib/synth-stack.d.ts.map +1 -0
  64. package/build/lib/synth-stack.js +251 -0
  65. package/build/lib/synth.d.ts.map +1 -0
  66. package/build/lib/synth.js +67 -0
  67. package/{src → build}/lib/terraform-json.d.ts.map +1 -1
  68. package/build/lib/terraform-json.js +82 -0
  69. package/build/lib/terraform-provider-lock.d.ts.map +1 -0
  70. package/{src → build}/lib/terraform-provider-lock.js +2 -2
  71. package/{src → build}/lib/watch.d.ts +1 -0
  72. package/build/lib/watch.d.ts.map +1 -0
  73. package/build/lib/watch.js +155 -0
  74. package/eslint.config.mjs +2 -70
  75. package/package.json +22 -33
  76. package/templates/go/go.mod +1 -1
  77. package/templates/python/Pipfile +1 -1
  78. package/templates/typescript/.hooks.sscaff.js +1 -1
  79. package/templates/typescript/jest.config.js +1 -1
  80. package/src/lib/cdktf-config.d.ts.map +0 -1
  81. package/src/lib/cdktf-config.js +0 -108
  82. package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
  83. package/src/lib/cdktf-project-io-handler.js +0 -84
  84. package/src/lib/cdktf-project.d.ts.map +0 -1
  85. package/src/lib/cdktf-project.js +0 -371
  86. package/src/lib/cdktf-stack.d.ts.map +0 -1
  87. package/src/lib/cdktf-stack.js +0 -386
  88. package/src/lib/convert.d.ts.map +0 -1
  89. package/src/lib/convert.js +0 -51
  90. package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
  91. package/src/lib/dependencies/cdktf-config-manager.js +0 -36
  92. package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
  93. package/src/lib/dependencies/dependency-manager.js +0 -393
  94. package/src/lib/dependencies/package-manager.d.ts.map +0 -1
  95. package/src/lib/dependencies/package-manager.js +0 -581
  96. package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
  97. package/src/lib/dependencies/prebuilt-providers.js +0 -220
  98. package/src/lib/dependencies/registry-api.d.ts.map +0 -1
  99. package/src/lib/dependencies/registry-api.js +0 -77
  100. package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
  101. package/src/lib/dependencies/version-constraints.js +0 -95
  102. package/src/lib/error-reporting.d.ts.map +0 -1
  103. package/src/lib/error-reporting.js +0 -133
  104. package/src/lib/errors.d.ts.map +0 -1
  105. package/src/lib/errors.js +0 -10
  106. package/src/lib/execution-logs.d.ts.map +0 -1
  107. package/src/lib/execution-logs.js +0 -47
  108. package/src/lib/get.d.ts.map +0 -1
  109. package/src/lib/get.js +0 -90
  110. package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
  111. package/src/lib/helpers/stack-helpers.js +0 -155
  112. package/src/lib/index.d.ts.map +0 -1
  113. package/src/lib/init.d.ts.map +0 -1
  114. package/src/lib/init.js +0 -131
  115. package/src/lib/local-provider-constraints.d.ts.map +0 -1
  116. package/src/lib/local-provider-constraints.js +0 -95
  117. package/src/lib/local-provider-versions.d.ts.map +0 -1
  118. package/src/lib/local-provider-versions.js +0 -73
  119. package/src/lib/models/deploy-machine.d.ts.map +0 -1
  120. package/src/lib/models/deploy-machine.js +0 -280
  121. package/src/lib/models/pty-process.d.ts +0 -29
  122. package/src/lib/models/pty-process.d.ts.map +0 -1
  123. package/src/lib/models/pty-process.js +0 -132
  124. package/src/lib/models/schema.js +0 -181
  125. package/src/lib/models/terraform-cli.d.ts.map +0 -1
  126. package/src/lib/models/terraform-cli.js +0 -357
  127. package/src/lib/models/terraform.d.ts.map +0 -1
  128. package/src/lib/models/terraform.js +0 -72
  129. package/src/lib/output.d.ts.map +0 -1
  130. package/src/lib/output.js +0 -211
  131. package/src/lib/provider-add.d.ts.map +0 -1
  132. package/src/lib/provider-add.js +0 -30
  133. package/src/lib/server/terraform-logs.d.ts.map +0 -1
  134. package/src/lib/server/terraform-logs.js +0 -19
  135. package/src/lib/synth-stack.d.ts.map +0 -1
  136. package/src/lib/synth-stack.js +0 -251
  137. package/src/lib/synth.d.ts.map +0 -1
  138. package/src/lib/synth.js +0 -67
  139. package/src/lib/terraform-json.js +0 -82
  140. package/src/lib/terraform-provider-lock.d.ts.map +0 -1
  141. package/src/lib/watch.d.ts.map +0 -1
  142. package/src/lib/watch.js +0 -155
  143. /package/{src → build}/lib/cdktf-config.d.ts +0 -0
  144. /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
  145. /package/{src → build}/lib/cdktf-project.d.ts +0 -0
  146. /package/{src → build}/lib/convert.d.ts +0 -0
  147. /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
  148. /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
  149. /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
  150. /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
  151. /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
  152. /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
  153. /package/{src → build}/lib/error-reporting.d.ts +0 -0
  154. /package/{src → build}/lib/errors.d.ts +0 -0
  155. /package/{src → build}/lib/execution-logs.d.ts +0 -0
  156. /package/{src → build}/lib/get.d.ts +0 -0
  157. /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
  158. /package/{src → build}/lib/index.d.ts +0 -0
  159. /package/{src → build}/lib/init.d.ts +0 -0
  160. /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
  161. /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
  162. /package/{src → build}/lib/models/schema.d.ts +0 -0
  163. /package/{src → build}/lib/models/terraform.d.ts +0 -0
  164. /package/{src → build}/lib/output.d.ts +0 -0
  165. /package/{src → build}/lib/provider-add.d.ts +0 -0
  166. /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
  167. /package/{src → build}/lib/synth.d.ts +0 -0
  168. /package/{src → build}/lib/terraform-json.d.ts +0 -0
  169. /package/{src → build}/lib/terraform-provider-lock.d.ts +0 -0
@@ -0,0 +1,211 @@
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.getConstructIdsForOutputs = exports.parseOutput = exports.normalizeOutputPath = exports.saveOutputs = void 0;
30
+ // Copyright (c) HashiCorp, Inc
31
+ // SPDX-License-Identifier: MPL-2.0
32
+ const z = __importStar(require("zod"));
33
+ const fs = __importStar(require("fs"));
34
+ const path = __importStar(require("path"));
35
+ const strip_ansi_1 = __importDefault(require("strip-ansi"));
36
+ const commons_1 = require("@cdktn/commons");
37
+ const schema_1 = require("./models/schema");
38
+ const terraform_1 = require("./models/terraform");
39
+ function unpackTerraformOutput(outputs, includeSensitiveOutputs) {
40
+ return Object.entries(outputs).reduce((acc, [key, entry]) => ({
41
+ ...acc,
42
+ [key]: (0, terraform_1.isTerraformOutput)(entry)
43
+ ? !entry.sensitive || includeSensitiveOutputs
44
+ ? entry.value
45
+ : undefined
46
+ : unpackTerraformOutput(entry, includeSensitiveOutputs),
47
+ }), {});
48
+ }
49
+ async function saveOutputs(filePath, outputs, includeSensitiveOutputs) {
50
+ fs.writeFileSync(filePath, JSON.stringify(unpackTerraformOutput(outputs, includeSensitiveOutputs), null, 2));
51
+ }
52
+ exports.saveOutputs = saveOutputs;
53
+ function normalizeOutputPath(filePath) {
54
+ return path.isAbsolute(filePath)
55
+ ? filePath
56
+ : path.join(process.cwd(), filePath);
57
+ }
58
+ exports.normalizeOutputPath = normalizeOutputPath;
59
+ const mapActionToState = (action, done) => {
60
+ switch (action) {
61
+ case "create":
62
+ case "update":
63
+ return done
64
+ ? terraform_1.DeployingResourceApplyState.CREATED
65
+ : terraform_1.DeployingResourceApplyState.CREATING;
66
+ case "delete":
67
+ return done
68
+ ? terraform_1.DeployingResourceApplyState.DESTROYED
69
+ : terraform_1.DeployingResourceApplyState.DESTROYING;
70
+ default:
71
+ return terraform_1.DeployingResourceApplyState.WAITING;
72
+ }
73
+ };
74
+ // This is deprecated and will be removed in a future version.
75
+ const parseJsonOutputLine = (line) => {
76
+ let json, message;
77
+ try {
78
+ json = JSON.parse(line);
79
+ }
80
+ catch (_a) {
81
+ commons_1.logger.trace(`Could not parse line as JSON: ${line}`);
82
+ return;
83
+ }
84
+ try {
85
+ message = schema_1.schema.parse(json);
86
+ }
87
+ catch (err) {
88
+ if (err instanceof z.ZodError) {
89
+ commons_1.logger.trace(`Error parsing line into schema: ${JSON.stringify(err.errors)} => ${line}`);
90
+ }
91
+ return;
92
+ }
93
+ switch (message.type) {
94
+ case "apply_start":
95
+ case "apply_progress":
96
+ return {
97
+ id: message.hook.resource.resource,
98
+ applyState: mapActionToState(message.hook.action, false),
99
+ };
100
+ case "apply_complete":
101
+ return {
102
+ id: message.hook.resource.resource,
103
+ applyState: mapActionToState(message.hook.action, true),
104
+ };
105
+ default:
106
+ return;
107
+ }
108
+ };
109
+ const parseTextOutputLine = (line) => {
110
+ if (/^Outputs:/.test(line)) {
111
+ return;
112
+ }
113
+ if (/^Plan:/.test(line)) {
114
+ return;
115
+ }
116
+ if (/^data\..*/.test(line)) {
117
+ return;
118
+ }
119
+ const resourceMatch = line.match(/^([a-zA-Z_][a-zA-Z\d_\-.]*):/);
120
+ let applyState;
121
+ switch (true) {
122
+ case /Creating.../.test(line):
123
+ case /Still creating.../.test(line):
124
+ applyState = terraform_1.DeployingResourceApplyState.CREATING;
125
+ break;
126
+ case /Creation complete/.test(line):
127
+ applyState = terraform_1.DeployingResourceApplyState.CREATED;
128
+ break;
129
+ case /Modifying.../.test(line):
130
+ applyState = terraform_1.DeployingResourceApplyState.UPDATING;
131
+ break;
132
+ case /Modifications complete/.test(line):
133
+ applyState = terraform_1.DeployingResourceApplyState.UPDATED;
134
+ break;
135
+ case /Destroying.../.test(line):
136
+ case /Still destroying.../.test(line):
137
+ applyState = terraform_1.DeployingResourceApplyState.DESTROYING;
138
+ break;
139
+ case /Destruction complete/.test(line):
140
+ applyState = terraform_1.DeployingResourceApplyState.DESTROYED;
141
+ break;
142
+ default:
143
+ return;
144
+ }
145
+ if (resourceMatch &&
146
+ resourceMatch.length >= 0 &&
147
+ resourceMatch[1] != "Warning") {
148
+ return {
149
+ id: resourceMatch[1],
150
+ applyState,
151
+ };
152
+ }
153
+ else {
154
+ return;
155
+ }
156
+ };
157
+ const parseOutput = (str) => {
158
+ const lines = (0, strip_ansi_1.default)(str.toString()).split("\n");
159
+ const resources = lines.map((line) => {
160
+ const parsed = parseJsonOutputLine(line) || parseTextOutputLine(line);
161
+ if (parsed === undefined) {
162
+ return;
163
+ }
164
+ const { id, applyState } = parsed;
165
+ return {
166
+ id,
167
+ applyState,
168
+ action: terraform_1.PlannedResourceAction.CREATE,
169
+ };
170
+ });
171
+ return resources.reduce((acc, resource) => {
172
+ if (resource) {
173
+ acc.push(resource);
174
+ }
175
+ return acc;
176
+ // eslint-disable-next-line @typescript-eslint/no-array-constructor
177
+ }, new Array());
178
+ };
179
+ exports.parseOutput = parseOutput;
180
+ const isObjectEmpty = (obj) => {
181
+ if (typeof obj !== "object") {
182
+ return false;
183
+ }
184
+ return (Object.keys(obj).length === 0 ||
185
+ Object.values(obj).every((v) => v === undefined || v === null || isObjectEmpty(v)));
186
+ };
187
+ const getConstructIdsForOutputs = (stackContent, outputs) => {
188
+ // Older cdktf versions might not have the output metadata
189
+ if (!("//" in stackContent) || !("outputs" in stackContent["//"])) {
190
+ return outputs;
191
+ }
192
+ const outputsMapping = stackContent["//"].outputs;
193
+ const mapOutputs = (value) => {
194
+ return Object.entries(value).reduce((acc, [key, value]) => {
195
+ if (typeof value === "string") {
196
+ return { ...acc, [key]: outputs[value] };
197
+ }
198
+ const mapped = mapOutputs(value);
199
+ if (isObjectEmpty(mapped)) {
200
+ return acc;
201
+ }
202
+ return {
203
+ ...acc,
204
+ [key]: mapped,
205
+ };
206
+ }, {});
207
+ };
208
+ return mapOutputs(outputsMapping);
209
+ };
210
+ exports.getConstructIdsForOutputs = getConstructIdsForOutputs;
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9vdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDREQUFtQztBQUVuQyw0Q0FBd0M7QUFDeEMsNENBQXNEO0FBQ3RELGtEQU00QjtBQU81QixTQUFTLHFCQUFxQixDQUM1QixPQUErQixFQUMvQix1QkFBZ0M7SUFFaEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHO1FBQ04sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFBLDZCQUFpQixFQUFDLEtBQUssQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLHVCQUF1QjtnQkFDM0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLO2dCQUNiLENBQUMsQ0FBQyxTQUFTO1lBQ2IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQztLQUMxRCxDQUFDLEVBQ0YsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLFdBQVcsQ0FDL0IsUUFBZ0IsRUFDaEIsT0FBK0IsRUFDL0IsdUJBQWdDO0lBRWhDLEVBQUUsQ0FBQyxhQUFhLENBQ2QsUUFBUSxFQUNSLElBQUksQ0FBQyxTQUFTLENBQ1oscUJBQXFCLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLEVBQ3ZELElBQUksRUFDSixDQUFDLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQWJELGtDQWFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMs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LENBQUM7UUFDSixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUE3QlcsUUFBQSx5QkFBeUIsNkJBNkJwQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IEFjdGlvblR5cGVzLCBzY2hlbWEgfSBmcm9tIFwiLi9tb2RlbHMvc2NoZW1hXCI7XG5pbXBvcnQge1xuICBEZXBsb3lpbmdSZXNvdXJjZSxcbiAgRGVwbG95aW5nUmVzb3VyY2VBcHBseVN0YXRlLFxuICBQbGFubmVkUmVzb3VyY2VBY3Rpb24sXG4gIFRlcnJhZm9ybU91dHB1dCxcbiAgaXNUZXJyYWZvcm1PdXRwdXQsXG59IGZyb20gXCIuL21vZGVscy90ZXJyYWZvcm1cIjtcblxuZXhwb3J0IHR5cGUgT3V0cHV0cyA9IHsgW2tleTogc3RyaW5nXTogVGVycmFmb3JtT3V0cHV0IH07XG5leHBvcnQgdHlwZSBPdXRwdXRJZE1hcExlYWYgPSB7IFtjb25zdHJ1Y3RJZDogc3RyaW5nXTogc3RyaW5nIH07XG5leHBvcnQgdHlwZSBPdXRwdXRJZE1hcE5vZGUgPSB7IFtzdGFja09yQ29uc3RydWN0SWQ6IHN0cmluZ106IE91dHB1dElkTWFwIH07XG5leHBvcnQgdHlwZSBPdXRwdXRJZE1hcCA9IE91dHB1dElkTWFwTGVhZiB8IE91dHB1dElkTWFwTm9kZTtcblxuZnVuY3Rpb24gdW5wYWNrVGVycmFmb3JtT3V0cHV0KFxuICBvdXRwdXRzOiBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzLFxuICBpbmNsdWRlU2Vuc2l0aXZlT3V0cHV0czogYm9vbGVhbixcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3V0cHV0cykucmVkdWNlKFxuICAgIChhY2MsIFtrZXksIGVudHJ5XSkgPT4gKHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtrZXldOiBpc1RlcnJhZm9ybU91dHB1dChlbnRyeSlcbiAgICAgICAgPyAhZW50cnkuc2Vuc2l0aXZlIHx8IGluY2x1ZGVTZW5zaXRpdmVPdXRwdXRzXG4gICAgICAgICAgPyBlbnRyeS52YWx1ZVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogdW5wYWNrVGVycmFmb3JtT3V0cHV0KGVudHJ5LCBpbmNsdWRlU2Vuc2l0aXZlT3V0cHV0cyksXG4gICAgfSksXG4gICAge30sXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlT3V0cHV0cyhcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgb3V0cHV0czogTmVzdGVkVGVycmFmb3JtT3V0cHV0cyxcbiAgaW5jbHVkZVNlbnNpdGl2ZU91dHB1dHM6IGJvb2xlYW4sXG4pIHtcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBmaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgIHVucGFja1RlcnJhZm9ybU91dHB1dChvdXRwdXRzLCBpbmNsdWRlU2Vuc2l0aXZlT3V0cHV0cyksXG4gICAgICBudWxsLFxuICAgICAgMixcbiAgICApLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3V0cHV0UGF0aChmaWxlUGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBwYXRoLmlzQWJzb2x1dGUoZmlsZVBhdGgpXG4gICAgPyBmaWxlUGF0aFxuICAgIDogcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbn1cblxuZXhwb3J0IHR5cGUgTmVzdGVkVGVycmFmb3JtT3V0cHV0cyA9XG4gIHwgeyBba2V5OiBzdHJpbmddOiBUZXJyYWZvcm1PdXRwdXQgfVxuICB8IHsgW2tleTogc3RyaW5nXTogTmVzdGVkVGVycmFmb3JtT3V0cHV0cyB9O1xuXG5jb25zdCBtYXBBY3Rpb25Ub1N0YXRlID0gKGFjdGlvbjogQWN0aW9uVHlwZXMsIGRvbmU6IGJvb2xlYW4pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICBjYXNlIFwiY3JlYXRlXCI6XG4gICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgcmV0dXJuIGRvbmVcbiAgICAgICAgPyBEZXBsb3lpbmdSZXNvdXJjZUFwcGx5U3RhdGUuQ1JFQVRFRFxuICAgICAgICA6IERlcGxveWluZ1Jlc291cmNlQXBwbHlTdGF0ZS5DUkVBVElORztcbiAgICBjYXNlIFwiZGVsZXRlXCI6XG4gICAgICByZXR1cm4gZG9uZVxuICAgICAgICA/IERlcGxveWluZ1Jlc291cmNlQXBwbHlTdGF0ZS5ERVNUUk9ZRURcbiAgICAgICAgOiBEZXBsb3lpbmdSZXNvdXJjZUFwcGx5U3RhdGUuREVTVFJPWUlORztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIERlcGxveWluZ1Jlc291cmNlQXBwbHlTdGF0ZS5XQUlUSU5HO1xuICB9XG59O1xuLy8gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbmNvbnN0IHBhcnNlSnNvbk91dHB1dExpbmUgPSAoXG4gIGxpbmU6IHN0cmluZyxcbik6IE9taXQ8RGVwbG95aW5nUmVzb3VyY2UsIFwiYWN0aW9uXCI+IHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IGpzb24sIG1lc3NhZ2U7XG4gIHRyeSB7XG4gICAganNvbiA9IEpTT04ucGFyc2UobGluZSk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZ2dlci50cmFjZShgQ291bGQgbm90IHBhcnNlIGxpbmUgYXMgSlNPTjogJHtsaW5lfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbWVzc2FnZSA9IHNjaGVtYS5wYXJzZShqc29uKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGxvZ2dlci50cmFjZShcbiAgICAgICAgYEVycm9yIHBhcnNpbmcgbGluZSBpbnRvIHNjaGVtYTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBlcnIuZXJyb3JzLFxuICAgICAgICApfSA9PiAke2xpbmV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICBjYXNlIFwiYXBwbHlfc3RhcnRcIjpcbiAgICBjYXNlIFwiYXBwbHlfcHJvZ3Jlc3NcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBtZXNzYWdlLmhvb2sucmVzb3VyY2UucmVzb3VyY2UsXG4gICAgICAgIGFwcGx5U3RhdGU6IG1hcEFjdGlvblRvU3RhdGUobWVzc2FnZS5ob29rLmFjdGlvbiwgZmFsc2UpLFxuICAgICAgfTtcblxuICAgIGNhc2UgXCJhcHBseV9jb21wbGV0ZVwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IG1lc3NhZ2UuaG9vay5yZXNvdXJjZS5yZXNvdXJjZSxcbiAgICAgICAgYXBwbHlTdGF0ZTogbWFwQWN0aW9uVG9TdGF0ZShtZXNzYWdlLmhvb2suYWN0aW9uLCB0cnVlKSxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybjtcbiAgfVxufTtcblxuY29uc3QgcGFyc2VUZXh0T3V0cHV0TGluZSA9IChcbiAgbGluZTogc3RyaW5nLFxuKTogT21pdDxEZXBsb3lpbmdSZXNvdXJjZSwgXCJhY3Rpb25cIj4gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoL15PdXRwdXRzOi8udGVzdChsaW5lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoL15QbGFuOi8udGVzdChsaW5lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoL15kYXRhXFwuLiovLnRlc3QobGluZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvdXJjZU1hdGNoID0gbGluZS5tYXRjaCgvXihbYS16QS1aX11bYS16QS1aXFxkX1xcLS5dKik6Lyk7XG4gIGxldCBhcHBseVN0YXRlOiBEZXBsb3lpbmdSZXNvdXJjZUFwcGx5U3RhdGU7XG5cbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSAvQ3JlYXRpbmcuLi4vLnRlc3QobGluZSk6XG4gICAgY2FzZSAvU3RpbGwgY3JlYXRpbmcuLi4vLnRlc3QobGluZSk6XG4gICAgICBhcHBseVN0YXRlID0gRGVwbG95aW5nUmVzb3VyY2VBcHBseVN0YXRlLkNSRUFUSU5HO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAvQ3JlYXRpb24gY29tcGxldGUvLnRlc3QobGluZSk6XG4gICAgICBhcHBseVN0YXRlID0gRGVwbG95aW5nUmVzb3VyY2VBcHBseVN0YXRlLkNSRUFURUQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIC9Nb2RpZnlpbmcuLi4vLnRlc3QobGluZSk6XG4gICAgICBhcHBseVN0YXRlID0gRGVwbG95aW5nUmVzb3VyY2VBcHBseVN0YXRlLlVQREFUSU5HO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAvTW9kaWZpY2F0aW9ucyBjb21wbGV0ZS8udGVzdChsaW5lKTpcbiAgICAgIGFwcGx5U3RhdGUgPSBEZXBsb3lpbmdSZXNvdXJjZUFwcGx5U3RhdGUuVVBEQVRFRDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgL0Rlc3Ryb3lpbmcuLi4vLnRlc3QobGluZSk6XG4gICAgY2FzZSAvU3RpbGwgZGVzdHJveWluZy4uLi8udGVzdChsaW5lKTpcbiAgICAgIGFwcGx5U3RhdGUgPSBEZXBsb3lpbmdSZXNvdXJjZUFwcGx5U3RhdGUuREVTVFJPWUlORztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgL0Rlc3RydWN0aW9uIGNvbXBsZXRlLy50ZXN0KGxpbmUpOlxuICAgICAgYXBwbHlTdGF0ZSA9IERlcGxveWluZ1Jlc291cmNlQXBwbHlTdGF0ZS5ERVNUUk9ZRUQ7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKFxuICAgIHJlc291cmNlTWF0Y2ggJiZcbiAgICByZXNvdXJjZU1hdGNoLmxlbmd0aCA+PSAwICYmXG4gICAgcmVzb3VyY2VNYXRjaFsxXSAhPSBcIldhcm5pbmdcIlxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc291cmNlTWF0Y2hbMV0sXG4gICAgICBhcHBseVN0YXRlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VPdXRwdXQgPSAoc3RyOiBzdHJpbmcpOiBEZXBsb3lpbmdSZXNvdXJjZVtdID0+IHtcbiAgY29uc3QgbGluZXMgPSBzdHJpcEFuc2koc3RyLnRvU3RyaW5nKCkpLnNwbGl0KFwiXFxuXCIpO1xuXG4gIGNvbnN0IHJlc291cmNlcyA9IGxpbmVzLm1hcCgobGluZSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSnNvbk91dHB1dExpbmUobGluZSkgfHwgcGFyc2VUZXh0T3V0cHV0TGluZShsaW5lKTtcbiAgICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGlkLCBhcHBseVN0YXRlIH0gPSBwYXJzZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgYXBwbHlTdGF0ZSxcbiAgICAgIGFjdGlvbjogUGxhbm5lZFJlc291cmNlQWN0aW9uLkNSRUFURSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4gcmVzb3VyY2VzLnJlZHVjZSgoYWNjLCByZXNvdXJjZSkgPT4ge1xuICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgYWNjLnB1c2gocmVzb3VyY2UpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tYXJyYXktY29uc3RydWN0b3JcbiAgfSwgbmV3IEFycmF5KCkpO1xufTtcblxuY29uc3QgaXNPYmplY3RFbXB0eSA9IChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCB8fFxuICAgIE9iamVjdC52YWx1ZXMob2JqKS5ldmVyeShcbiAgICAgICh2KSA9PiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCB8fCBpc09iamVjdEVtcHR5KHYpLFxuICAgIClcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25zdHJ1Y3RJZHNGb3JPdXRwdXRzID0gKFxuICBzdGFja0NvbnRlbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIG91dHB1dHM6IHsgW2tleTogc3RyaW5nXTogVGVycmFmb3JtT3V0cHV0IH0sXG4pOiBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzID0+IHtcbiAgLy8gT2xkZXIgY2RrdGYgdmVyc2lvbnMgbWlnaHQgbm90IGhhdmUgdGhlIG91dHB1dCBtZXRhZGF0YVxuICBpZiAoIShcIi8vXCIgaW4gc3RhY2tDb250ZW50KSB8fCAhKFwib3V0cHV0c1wiIGluIHN0YWNrQ29udGVudFtcIi8vXCJdKSkge1xuICAgIHJldHVybiBvdXRwdXRzO1xuICB9XG4gIGNvbnN0IG91dHB1dHNNYXBwaW5nID0gc3RhY2tDb250ZW50W1wiLy9cIl0ub3V0cHV0cztcblxuICBjb25zdCBtYXBPdXRwdXRzID0gKHZhbHVlOiBPdXRwdXRJZE1hcCk6IE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgPT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh2YWx1ZSkucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiBvdXRwdXRzW3ZhbHVlXSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWQgPSBtYXBPdXRwdXRzKHZhbHVlKTtcbiAgICAgIGlmIChpc09iamVjdEVtcHR5KG1hcHBlZCkpIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBba2V5XTogbWFwcGVkLFxuICAgICAgfTtcbiAgICB9LCB7fSk7XG4gIH07XG5cbiAgcmV0dXJuIG1hcE91dHB1dHMob3V0cHV0c01hcHBpbmcpO1xufTtcbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-add.d.ts","sourceRoot":"","sources":["../../src/lib/provider-add.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO1C,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,WAAW,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,UAAU,GACX,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBpC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) HashiCorp, Inc.
4
+ * SPDX-License-Identifier: MPL-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.providerAdd = void 0;
8
+ const dependency_manager_1 = require("./dependencies/dependency-manager");
9
+ const init_1 = require("./init");
10
+ async function providerAdd({ providers, language, projectDirectory, cdktfVersion, dist, forceLocal, }) {
11
+ const version = cdktfVersion || (await (0, init_1.determineDeps)(cdktfVersion, dist)).cdktf_version;
12
+ const manager = new dependency_manager_1.DependencyManager(language, version, projectDirectory);
13
+ let needsGet = false;
14
+ for (const provider of providers) {
15
+ const constraint = dependency_manager_1.ProviderConstraint.fromConfigEntry(provider);
16
+ if (forceLocal) {
17
+ needsGet = true;
18
+ await manager.addLocalProvider(constraint);
19
+ }
20
+ else {
21
+ const { addedLocalProvider } = await manager.addProvider(constraint);
22
+ if (addedLocalProvider) {
23
+ needsGet = true;
24
+ }
25
+ }
26
+ }
27
+ return needsGet;
28
+ }
29
+ exports.providerAdd = providerAdd;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9wcm92aWRlci1hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBR0gsMEVBRzJDO0FBQzNDLGlDQUF1QztBQVdoQyxLQUFLLFVBQVUsV0FBVyxDQUFDLEVBQ2hDLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixJQUFJLEVBQ0osVUFBVSxHQUNNO0lBQ2hCLE1BQU0sT0FBTyxHQUNYLFlBQVksSUFBSSxDQUFDLE1BQU0sSUFBQSxvQkFBYSxFQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUUxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLHNDQUFpQixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUUzRSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyx1Q0FBa0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEIsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN2QixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUE3QkQsa0NBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG5pbXBvcnQgeyBMYW5ndWFnZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgRGVwZW5kZW5jeU1hbmFnZXIsXG4gIFByb3ZpZGVyQ29uc3RyYWludCxcbn0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgZGV0ZXJtaW5lRGVwcyB9IGZyb20gXCIuL2luaXRcIjtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJBZGRBcmdzID0ge1xuICBwcm92aWRlcnM6IHN0cmluZ1tdO1xuICBsYW5ndWFnZTogTGFuZ3VhZ2U7XG4gIHByb2plY3REaXJlY3Rvcnk6IHN0cmluZztcbiAgY2RrdGZWZXJzaW9uPzogc3RyaW5nO1xuICBmb3JjZUxvY2FsPzogYm9vbGVhbjtcbiAgZGlzdD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92aWRlckFkZCh7XG4gIHByb3ZpZGVycyxcbiAgbGFuZ3VhZ2UsXG4gIHByb2plY3REaXJlY3RvcnksXG4gIGNka3RmVmVyc2lvbixcbiAgZGlzdCxcbiAgZm9yY2VMb2NhbCxcbn06IFByb3ZpZGVyQWRkQXJncyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB2ZXJzaW9uID1cbiAgICBjZGt0ZlZlcnNpb24gfHwgKGF3YWl0IGRldGVybWluZURlcHMoY2RrdGZWZXJzaW9uLCBkaXN0KSkuY2RrdGZfdmVyc2lvbjtcblxuICBjb25zdCBtYW5hZ2VyID0gbmV3IERlcGVuZGVuY3lNYW5hZ2VyKGxhbmd1YWdlLCB2ZXJzaW9uLCBwcm9qZWN0RGlyZWN0b3J5KTtcblxuICBsZXQgbmVlZHNHZXQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIHByb3ZpZGVycykge1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KHByb3ZpZGVyKTtcbiAgICBpZiAoZm9yY2VMb2NhbCkge1xuICAgICAgbmVlZHNHZXQgPSB0cnVlO1xuICAgICAgYXdhaXQgbWFuYWdlci5hZGRMb2NhbFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGFkZGVkTG9jYWxQcm92aWRlciB9ID0gYXdhaXQgbWFuYWdlci5hZGRQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIGlmIChhZGRlZExvY2FsUHJvdmlkZXIpIHtcbiAgICAgICAgbmVlZHNHZXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZWVkc0dldDtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-logs.d.ts","sourceRoot":"","sources":["../../../src/lib/server/terraform-logs.ts"],"names":[],"mappings":"AAWA,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractJsonLogIfPresent = void 0;
4
+ // Copyright (c) HashiCorp, Inc
5
+ // SPDX-License-Identifier: MPL-2.0
6
+ function extractJsonLogLineIfPresent(logLine) {
7
+ try {
8
+ const extractedMessage = JSON.parse(logLine)["@message"];
9
+ return extractedMessage ? extractedMessage.trim() : logLine;
10
+ }
11
+ catch (_a) {
12
+ return logLine;
13
+ }
14
+ }
15
+ function extractJsonLogIfPresent(logLines) {
16
+ return logLines.split("\n").map(extractJsonLogLineIfPresent).join("\n");
17
+ }
18
+ exports.extractJsonLogIfPresent = extractJsonLogIfPresent;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NlcnZlci90ZXJyYWZvcm0tbG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLFNBQVMsMkJBQTJCLENBQUMsT0FBZTtJQUNsRCxJQUFJLENBQUM7UUFDSCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM5RCxDQUFDO0lBQUMsV0FBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxRQUFnQjtJQUN0RCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFGRCwwREFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5mdW5jdGlvbiBleHRyYWN0SnNvbkxvZ0xpbmVJZlByZXNlbnQobG9nTGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBleHRyYWN0ZWRNZXNzYWdlID0gSlNPTi5wYXJzZShsb2dMaW5lKVtcIkBtZXNzYWdlXCJdO1xuICAgIHJldHVybiBleHRyYWN0ZWRNZXNzYWdlID8gZXh0cmFjdGVkTWVzc2FnZS50cmltKCkgOiBsb2dMaW5lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbG9nTGluZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEpzb25Mb2dJZlByZXNlbnQobG9nTGluZXM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dMaW5lcy5zcGxpdChcIlxcblwiKS5tYXAoZXh0cmFjdEpzb25Mb2dMaW5lSWZQcmVzZW50KS5qb2luKFwiXFxuXCIpO1xufVxuIl19
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import { StackManifest, TerraformStackMetadata } from "cdktn";
2
3
  export interface SynthesizedStackMetadata {
3
4
  "//"?: {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synth-stack.d.ts","sourceRoot":"","sources":["../../src/lib/synth-stack.ts"],"names":[],"mappings":";AAMA,OAAO,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAAA;KAAE,CAAC;CAClD;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAKhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJ5B,aAAa,EAAE,gBAAgB,EAAE,CAAM;IACvC,cAAc,EAAE,gBAAgB,EAAE,CAAM;IACxC,cAAc,EAAE,gBAAgB,EAAE,CAAM;gBAElB,MAAM,EAAE,gBAAgB,EAAE;IAIhD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAOvC,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAO/C,IAAW,uBAAuB,IAAI,gBAAgB,EAAE,CAYvD;CACF;AAOD,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAElC,qBAAa,UAAU;WACD,KAAK,CACvB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,SAAgB,EAChC,QAAQ,UAAQ,EAAE,0DAA0D;IAC5E,OAAO,UAAQ,EACf,WAAW,CAAC,EAAE,WAAW,EACzB,GAAG,UAAQ,GACV,OAAO,CAAC,gBAAgB,EAAE,CAAC;WAmIV,cAAc,CAAC,MAAM,EAAE,MAAM;WAsB7B,qBAAqB,CACvC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,EAAE,CAAC;WAkCV,cAAc,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EAAE,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;WAiBI,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW;CAGlE"}
@@ -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"}