@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.
- package/ambient.d.ts +0 -1
- package/build/lib/cdktf-config.d.ts.map +1 -0
- package/build/lib/cdktf-config.js +108 -0
- package/build/lib/cdktf-project-io-handler.d.ts.map +1 -0
- package/build/lib/cdktf-project-io-handler.js +84 -0
- package/build/lib/cdktf-project.d.ts.map +1 -0
- package/build/lib/cdktf-project.js +370 -0
- package/{src → build}/lib/cdktf-stack.d.ts +1 -0
- package/build/lib/cdktf-stack.d.ts.map +1 -0
- package/build/lib/cdktf-stack.js +386 -0
- package/build/lib/convert.d.ts.map +1 -0
- package/build/lib/convert.js +51 -0
- package/build/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
- package/build/lib/dependencies/cdktf-config-manager.js +36 -0
- package/build/lib/dependencies/dependency-manager.d.ts.map +1 -0
- package/build/lib/dependencies/dependency-manager.js +393 -0
- package/build/lib/dependencies/package-manager.d.ts.map +1 -0
- package/build/lib/dependencies/package-manager.js +581 -0
- package/build/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
- package/build/lib/dependencies/prebuilt-providers.js +221 -0
- package/build/lib/dependencies/registry-api.d.ts.map +1 -0
- package/build/lib/dependencies/registry-api.js +77 -0
- package/build/lib/dependencies/version-constraints.d.ts.map +1 -0
- package/build/lib/dependencies/version-constraints.js +95 -0
- package/build/lib/error-reporting.d.ts.map +1 -0
- package/build/lib/error-reporting.js +133 -0
- package/build/lib/errors.d.ts.map +1 -0
- package/build/lib/errors.js +10 -0
- package/build/lib/execution-logs.d.ts.map +1 -0
- package/build/lib/execution-logs.js +47 -0
- package/build/lib/get.d.ts.map +1 -0
- package/build/lib/get.js +90 -0
- package/build/lib/helpers/stack-helpers.d.ts.map +1 -0
- package/build/lib/helpers/stack-helpers.js +155 -0
- package/build/lib/index.d.ts.map +1 -0
- package/{src → build}/lib/index.js +1 -2
- package/build/lib/init.d.ts.map +1 -0
- package/build/lib/init.js +131 -0
- package/build/lib/local-provider-constraints.d.ts.map +1 -0
- package/build/lib/local-provider-constraints.js +95 -0
- package/build/lib/local-provider-versions.d.ts.map +1 -0
- package/build/lib/local-provider-versions.js +73 -0
- package/{src → build}/lib/models/deploy-machine.d.ts +3 -11
- package/build/lib/models/deploy-machine.d.ts.map +1 -0
- package/build/lib/models/deploy-machine.js +283 -0
- package/build/lib/models/interactive-process.d.ts +28 -0
- package/build/lib/models/interactive-process.d.ts.map +1 -0
- package/build/lib/models/interactive-process.js +59 -0
- package/{src → build}/lib/models/schema.d.ts.map +1 -1
- package/build/lib/models/schema.js +181 -0
- package/{src → build}/lib/models/terraform-cli.d.ts +1 -0
- package/build/lib/models/terraform-cli.d.ts.map +1 -0
- package/build/lib/models/terraform-cli.js +355 -0
- package/build/lib/models/terraform.d.ts.map +1 -0
- package/build/lib/models/terraform.js +72 -0
- package/build/lib/output.d.ts.map +1 -0
- package/build/lib/output.js +211 -0
- package/build/lib/provider-add.d.ts.map +1 -0
- package/build/lib/provider-add.js +30 -0
- package/build/lib/server/terraform-logs.d.ts.map +1 -0
- package/build/lib/server/terraform-logs.js +19 -0
- package/{src → build}/lib/synth-stack.d.ts +1 -0
- package/build/lib/synth-stack.d.ts.map +1 -0
- package/build/lib/synth-stack.js +251 -0
- package/build/lib/synth.d.ts.map +1 -0
- package/build/lib/synth.js +67 -0
- package/{src → build}/lib/terraform-json.d.ts.map +1 -1
- package/build/lib/terraform-json.js +82 -0
- package/build/lib/terraform-provider-lock.d.ts.map +1 -0
- package/{src → build}/lib/terraform-provider-lock.js +2 -2
- package/{src → build}/lib/watch.d.ts +1 -0
- package/build/lib/watch.d.ts.map +1 -0
- package/build/lib/watch.js +155 -0
- package/eslint.config.mjs +2 -70
- package/package.json +22 -33
- package/templates/go/go.mod +1 -1
- package/templates/python/Pipfile +1 -1
- package/templates/typescript/.hooks.sscaff.js +1 -1
- package/templates/typescript/jest.config.js +1 -1
- package/src/lib/cdktf-config.d.ts.map +0 -1
- package/src/lib/cdktf-config.js +0 -108
- package/src/lib/cdktf-project-io-handler.d.ts.map +0 -1
- package/src/lib/cdktf-project-io-handler.js +0 -84
- package/src/lib/cdktf-project.d.ts.map +0 -1
- package/src/lib/cdktf-project.js +0 -371
- package/src/lib/cdktf-stack.d.ts.map +0 -1
- package/src/lib/cdktf-stack.js +0 -386
- package/src/lib/convert.d.ts.map +0 -1
- package/src/lib/convert.js +0 -51
- package/src/lib/dependencies/cdktf-config-manager.d.ts.map +0 -1
- package/src/lib/dependencies/cdktf-config-manager.js +0 -36
- package/src/lib/dependencies/dependency-manager.d.ts.map +0 -1
- package/src/lib/dependencies/dependency-manager.js +0 -393
- package/src/lib/dependencies/package-manager.d.ts.map +0 -1
- package/src/lib/dependencies/package-manager.js +0 -581
- package/src/lib/dependencies/prebuilt-providers.d.ts.map +0 -1
- package/src/lib/dependencies/prebuilt-providers.js +0 -220
- package/src/lib/dependencies/registry-api.d.ts.map +0 -1
- package/src/lib/dependencies/registry-api.js +0 -77
- package/src/lib/dependencies/version-constraints.d.ts.map +0 -1
- package/src/lib/dependencies/version-constraints.js +0 -95
- package/src/lib/error-reporting.d.ts.map +0 -1
- package/src/lib/error-reporting.js +0 -133
- package/src/lib/errors.d.ts.map +0 -1
- package/src/lib/errors.js +0 -10
- package/src/lib/execution-logs.d.ts.map +0 -1
- package/src/lib/execution-logs.js +0 -47
- package/src/lib/get.d.ts.map +0 -1
- package/src/lib/get.js +0 -90
- package/src/lib/helpers/stack-helpers.d.ts.map +0 -1
- package/src/lib/helpers/stack-helpers.js +0 -155
- package/src/lib/index.d.ts.map +0 -1
- package/src/lib/init.d.ts.map +0 -1
- package/src/lib/init.js +0 -131
- package/src/lib/local-provider-constraints.d.ts.map +0 -1
- package/src/lib/local-provider-constraints.js +0 -95
- package/src/lib/local-provider-versions.d.ts.map +0 -1
- package/src/lib/local-provider-versions.js +0 -73
- package/src/lib/models/deploy-machine.d.ts.map +0 -1
- package/src/lib/models/deploy-machine.js +0 -280
- package/src/lib/models/pty-process.d.ts +0 -29
- package/src/lib/models/pty-process.d.ts.map +0 -1
- package/src/lib/models/pty-process.js +0 -132
- package/src/lib/models/schema.js +0 -181
- package/src/lib/models/terraform-cli.d.ts.map +0 -1
- package/src/lib/models/terraform-cli.js +0 -357
- package/src/lib/models/terraform.d.ts.map +0 -1
- package/src/lib/models/terraform.js +0 -72
- package/src/lib/output.d.ts.map +0 -1
- package/src/lib/output.js +0 -211
- package/src/lib/provider-add.d.ts.map +0 -1
- package/src/lib/provider-add.js +0 -30
- package/src/lib/server/terraform-logs.d.ts.map +0 -1
- package/src/lib/server/terraform-logs.js +0 -19
- package/src/lib/synth-stack.d.ts.map +0 -1
- package/src/lib/synth-stack.js +0 -251
- package/src/lib/synth.d.ts.map +0 -1
- package/src/lib/synth.js +0 -67
- package/src/lib/terraform-json.js +0 -82
- package/src/lib/terraform-provider-lock.d.ts.map +0 -1
- package/src/lib/watch.d.ts.map +0 -1
- package/src/lib/watch.js +0 -155
- /package/{src → build}/lib/cdktf-config.d.ts +0 -0
- /package/{src → build}/lib/cdktf-project-io-handler.d.ts +0 -0
- /package/{src → build}/lib/cdktf-project.d.ts +0 -0
- /package/{src → build}/lib/convert.d.ts +0 -0
- /package/{src → build}/lib/dependencies/cdktf-config-manager.d.ts +0 -0
- /package/{src → build}/lib/dependencies/dependency-manager.d.ts +0 -0
- /package/{src → build}/lib/dependencies/package-manager.d.ts +0 -0
- /package/{src → build}/lib/dependencies/prebuilt-providers.d.ts +0 -0
- /package/{src → build}/lib/dependencies/registry-api.d.ts +0 -0
- /package/{src → build}/lib/dependencies/version-constraints.d.ts +0 -0
- /package/{src → build}/lib/error-reporting.d.ts +0 -0
- /package/{src → build}/lib/errors.d.ts +0 -0
- /package/{src → build}/lib/execution-logs.d.ts +0 -0
- /package/{src → build}/lib/get.d.ts +0 -0
- /package/{src → build}/lib/helpers/stack-helpers.d.ts +0 -0
- /package/{src → build}/lib/index.d.ts +0 -0
- /package/{src → build}/lib/init.d.ts +0 -0
- /package/{src → build}/lib/local-provider-constraints.d.ts +0 -0
- /package/{src → build}/lib/local-provider-versions.d.ts +0 -0
- /package/{src → build}/lib/models/schema.d.ts +0 -0
- /package/{src → build}/lib/models/terraform.d.ts +0 -0
- /package/{src → build}/lib/output.d.ts +0 -0
- /package/{src → build}/lib/provider-add.d.ts +0 -0
- /package/{src → build}/lib/server/terraform-logs.d.ts +0 -0
- /package/{src → build}/lib/synth.d.ts +0 -0
- /package/{src → build}/lib/terraform-json.d.ts +0 -0
- /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
|
|
@@ -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"}
|