@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,386 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CdktfStack = void 0;
|
|
4
|
+
const output_1 = require("./output");
|
|
5
|
+
const commons_1 = require("@cdktn/commons");
|
|
6
|
+
const terraform_logs_1 = require("./server/terraform-logs");
|
|
7
|
+
const terraform_cli_1 = require("./models/terraform-cli");
|
|
8
|
+
const dependency_manager_1 = require("./dependencies/dependency-manager");
|
|
9
|
+
const terraform_json_1 = require("./terraform-json");
|
|
10
|
+
const terraform_provider_lock_1 = require("./terraform-provider-lock");
|
|
11
|
+
const convert_1 = require("./convert");
|
|
12
|
+
async function getTerraformClient(abortSignal, stack, createTerraformLogHandler) {
|
|
13
|
+
return new terraform_cli_1.TerraformCli(abortSignal, stack, createTerraformLogHandler);
|
|
14
|
+
}
|
|
15
|
+
class CdktfStack {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.stopped = false;
|
|
19
|
+
this.currentState = "idle";
|
|
20
|
+
this.stack = options.stack;
|
|
21
|
+
this.parsedContent = terraform_json_1.terraformJsonSchema.parse(JSON.parse(this.stack.content));
|
|
22
|
+
}
|
|
23
|
+
get isPending() {
|
|
24
|
+
return this.currentState === "idle" && !this.stopped;
|
|
25
|
+
}
|
|
26
|
+
get isDone() {
|
|
27
|
+
return (this.currentState === "done" ||
|
|
28
|
+
this.currentState === "errored" ||
|
|
29
|
+
this.stopped);
|
|
30
|
+
}
|
|
31
|
+
get isRunning() {
|
|
32
|
+
return !this.isPending && !this.isDone;
|
|
33
|
+
}
|
|
34
|
+
updateState(update) {
|
|
35
|
+
commons_1.logger.debug(`[${this.stack.name}]: ${update.type}`);
|
|
36
|
+
this.currentState = update.type;
|
|
37
|
+
switch (update.type) {
|
|
38
|
+
case "idle":
|
|
39
|
+
case "done":
|
|
40
|
+
break;
|
|
41
|
+
case "errored":
|
|
42
|
+
this.error = update.error;
|
|
43
|
+
this.options.onUpdate(update);
|
|
44
|
+
break;
|
|
45
|
+
case "outputs fetched":
|
|
46
|
+
case "deployed":
|
|
47
|
+
commons_1.logger.debug(`Outputs: ${JSON.stringify(update.outputs)}`);
|
|
48
|
+
commons_1.logger.debug(`OutputsByConstructId: ${JSON.stringify(update.outputsByConstructId)}`);
|
|
49
|
+
this.outputs = update.outputs;
|
|
50
|
+
this.outputsByConstructId = update.outputsByConstructId;
|
|
51
|
+
this.options.onUpdate(update);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
this.options.onUpdate(update);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
createTerraformLogHandler(phase, filters) {
|
|
59
|
+
commons_1.logger.debug("Creating terraform log handler", phase);
|
|
60
|
+
const onLog = this.options.onLog;
|
|
61
|
+
return (msg, isError = false) => {
|
|
62
|
+
const message = (0, terraform_logs_1.extractJsonLogIfPresent)(msg);
|
|
63
|
+
commons_1.logger.debug(`[${this.options.stack.name}](${phase}): ${msg}`);
|
|
64
|
+
const filterToApply = filters === null || filters === void 0 ? void 0 : filters.find((filter) => filter.condition(message));
|
|
65
|
+
const filteredMessage = filterToApply
|
|
66
|
+
? filterToApply.transform(message)
|
|
67
|
+
: message;
|
|
68
|
+
if (filteredMessage) {
|
|
69
|
+
commons_1.logger.debug(`Filter ${filterToApply} applied on line '${message}' with result '${filteredMessage}'`);
|
|
70
|
+
}
|
|
71
|
+
if (onLog) {
|
|
72
|
+
onLog({ message: filteredMessage, isError });
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async terraformClient() {
|
|
77
|
+
return await getTerraformClient(this.options.abortSignal, this.options.stack, this.createTerraformLogHandler.bind(this));
|
|
78
|
+
}
|
|
79
|
+
async initalizeTerraform(noColor, skipProviderLock, migrateState) {
|
|
80
|
+
const terraform = await this.terraformClient();
|
|
81
|
+
const needsLockfileUpdate = skipProviderLock
|
|
82
|
+
? false
|
|
83
|
+
: await this.checkNeedsLockfileUpdate();
|
|
84
|
+
const needsUpgrade = await this.checkNeedsUpgrade();
|
|
85
|
+
await terraform.init({
|
|
86
|
+
needsUpgrade,
|
|
87
|
+
noColor: noColor !== null && noColor !== void 0 ? noColor : false,
|
|
88
|
+
needsLockfileUpdate,
|
|
89
|
+
migrateState: migrateState !== null && migrateState !== void 0 ? migrateState : false,
|
|
90
|
+
});
|
|
91
|
+
return terraform;
|
|
92
|
+
}
|
|
93
|
+
requiredProviders() {
|
|
94
|
+
var _a;
|
|
95
|
+
// Read required providers from the stack output
|
|
96
|
+
const requiredProviders = (_a = this.parsedContent.terraform) === null || _a === void 0 ? void 0 : _a.required_providers;
|
|
97
|
+
return Object.values(requiredProviders || {}).reduce((acc, obj) => {
|
|
98
|
+
const constraint = new dependency_manager_1.ProviderConstraint(obj.source, obj.version);
|
|
99
|
+
acc[constraint.source] = constraint;
|
|
100
|
+
return acc;
|
|
101
|
+
}, {});
|
|
102
|
+
}
|
|
103
|
+
async checkNeedsLockfileUpdate() {
|
|
104
|
+
if (this.options.migrateState) {
|
|
105
|
+
// If we're migrating state, we need to init
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
const lock = new terraform_provider_lock_1.TerraformProviderLock(this.stack.workingDirectory);
|
|
109
|
+
const lockFileExists = await lock.hasProviderLockFile();
|
|
110
|
+
if (!lockFileExists) {
|
|
111
|
+
// If we don't have a lock file, this is probably the first init
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
const requiredProviders = this.requiredProviders();
|
|
115
|
+
for (const provider of Object.values(requiredProviders)) {
|
|
116
|
+
const hasProvider = await lock.hasMatchingProvider(provider);
|
|
117
|
+
if (!hasProvider) {
|
|
118
|
+
// If we don't have a provider or version doesn't match, we need to init
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
async checkNeedsUpgrade() {
|
|
125
|
+
const lock = new terraform_provider_lock_1.TerraformProviderLock(this.stack.workingDirectory);
|
|
126
|
+
const allProviders = this.requiredProviders();
|
|
127
|
+
const lockedProviders = Object.values(await lock.providers());
|
|
128
|
+
// Check if any provider contained in `providers` violates constraints in `lockedProviders`
|
|
129
|
+
// Upgrade if some provider constraint not met
|
|
130
|
+
// If a provider wasn't preset in lockedProviders, that's fine; it will just get added
|
|
131
|
+
return lockedProviders.some((lockedProvider) => {
|
|
132
|
+
var _a;
|
|
133
|
+
const lockedConstraint = lockedProvider.constraints;
|
|
134
|
+
if (!lockedConstraint) {
|
|
135
|
+
// Provider lock doesn't have a constraint specified, so we can't check.
|
|
136
|
+
// This shouldn't happen
|
|
137
|
+
commons_1.logger.debug(`Provider lock doesn't have a constraint for ${lockedProvider.name}`);
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
const provider = allProviders[lockedConstraint.source];
|
|
141
|
+
if (!provider) {
|
|
142
|
+
// else no longer using this provider, so won't cause problems
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
return !lockedConstraint.matchesVersion((_a = provider.version) !== null && _a !== void 0 ? _a : ">0");
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
async run(cb) {
|
|
149
|
+
if (this.stopped) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
this.currentWorkPromise = cb();
|
|
154
|
+
await this.currentWorkPromise;
|
|
155
|
+
this.updateState({ type: "done" });
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
commons_1.logger.trace("Error in currentWorkPromise", e);
|
|
159
|
+
this.currentWorkPromise = undefined;
|
|
160
|
+
this.updateState({
|
|
161
|
+
type: "errored",
|
|
162
|
+
stackName: this.stack.name,
|
|
163
|
+
error: String(e),
|
|
164
|
+
});
|
|
165
|
+
throw e;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
this.currentWorkPromise = undefined;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async diff({ refreshOnly, terraformParallelism, vars, varFiles, noColor, }) {
|
|
172
|
+
await this.run(async () => {
|
|
173
|
+
this.updateState({ type: "planning", stackName: this.stack.name });
|
|
174
|
+
const terraform = await this.terraformClient();
|
|
175
|
+
await terraform.plan({
|
|
176
|
+
destroy: false,
|
|
177
|
+
refreshOnly,
|
|
178
|
+
parallelism: terraformParallelism,
|
|
179
|
+
vars,
|
|
180
|
+
varFiles,
|
|
181
|
+
noColor,
|
|
182
|
+
});
|
|
183
|
+
this.updateState({ type: "planned", stackName: this.stack.name });
|
|
184
|
+
// Find generated file
|
|
185
|
+
const configFile = await (0, terraform_cli_1.tryReadGeneratedConfigurationFile)(this.stack.workingDirectory);
|
|
186
|
+
if (configFile) {
|
|
187
|
+
this.updateState({
|
|
188
|
+
type: "import with configuration detected",
|
|
189
|
+
stackName: this.stack.name,
|
|
190
|
+
configuration: configFile,
|
|
191
|
+
});
|
|
192
|
+
const convertedCode = await (0, convert_1.convertConfigurationFile)(configFile, this.stack.workingDirectory);
|
|
193
|
+
this.updateState({
|
|
194
|
+
type: "import with configuration converted",
|
|
195
|
+
stackName: this.stack.name,
|
|
196
|
+
configuration: convertedCode,
|
|
197
|
+
});
|
|
198
|
+
const onLog = this.options.onLog;
|
|
199
|
+
if (onLog) {
|
|
200
|
+
onLog({
|
|
201
|
+
message: `Import without configuration detected. Terraform has created configuration for it:
|
|
202
|
+
${configFile}
|
|
203
|
+
|
|
204
|
+
CDKTN has translated the code to the following:
|
|
205
|
+
|
|
206
|
+
${convertedCode}
|
|
207
|
+
|
|
208
|
+
Please review the code and make any necessary changes before adding it to your codebase.
|
|
209
|
+
Make sure to only copy the code within the construct's constructor.
|
|
210
|
+
|
|
211
|
+
NOTE: Your resource has not yet become managed by CDKTN.
|
|
212
|
+
To finish the import remove the call "generateConfigForImport", add the above code within the construct's constructor, and then append the call importFrom(<resource_id_to_import_from>) to the generated code:
|
|
213
|
+
|
|
214
|
+
new SomeResource(...).importFrom("some_id")
|
|
215
|
+
`,
|
|
216
|
+
isError: false,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
await (0, terraform_cli_1.tryRemoveGeneratedConfigurationFile)(this.stack.workingDirectory);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
async deploy(opts) {
|
|
224
|
+
const { refreshOnly, terraformParallelism, noColor, vars, varFiles } = opts;
|
|
225
|
+
await this.run(async () => {
|
|
226
|
+
this.updateState({ type: "planning", stackName: this.stack.name });
|
|
227
|
+
const terraform = await this.terraformClient();
|
|
228
|
+
const { cancelled } = await terraform.deploy({
|
|
229
|
+
autoApprove: this.options.autoApprove,
|
|
230
|
+
refreshOnly,
|
|
231
|
+
parallelism: terraformParallelism,
|
|
232
|
+
vars,
|
|
233
|
+
varFiles,
|
|
234
|
+
noColor,
|
|
235
|
+
}, (state) => {
|
|
236
|
+
// state updates while apply runs that affect the UI
|
|
237
|
+
if (state.type === "running" && !state.cancelled) {
|
|
238
|
+
this.updateState({
|
|
239
|
+
type: "deploying",
|
|
240
|
+
stackName: this.stack.name,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
else if (state.type === "waiting for approval") {
|
|
244
|
+
this.updateState({
|
|
245
|
+
type: "waiting for stack approval",
|
|
246
|
+
stackName: this.stack.name,
|
|
247
|
+
approve: state.approve,
|
|
248
|
+
reject: () => {
|
|
249
|
+
state.reject();
|
|
250
|
+
this.updateState({
|
|
251
|
+
type: "dismissed",
|
|
252
|
+
stackName: this.stack.name,
|
|
253
|
+
});
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
else if (state.type === "waiting for sentinel override") {
|
|
258
|
+
this.updateState({
|
|
259
|
+
type: "waiting for stack sentinel override",
|
|
260
|
+
stackName: this.stack.name,
|
|
261
|
+
override: state.override,
|
|
262
|
+
reject: () => {
|
|
263
|
+
state.reject();
|
|
264
|
+
this.updateState({
|
|
265
|
+
type: "dismissed",
|
|
266
|
+
stackName: this.stack.name,
|
|
267
|
+
});
|
|
268
|
+
},
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
else if (state.type === "external approval reply") {
|
|
272
|
+
this.updateState({
|
|
273
|
+
type: "external stack approval reply",
|
|
274
|
+
stackName: this.stack.name,
|
|
275
|
+
approved: state.approved,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
else if (state.type === "external sentinel override reply") {
|
|
279
|
+
this.updateState({
|
|
280
|
+
type: "external stack sentinel override reply",
|
|
281
|
+
stackName: this.stack.name,
|
|
282
|
+
overridden: state.overridden,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
if (!cancelled) {
|
|
287
|
+
const outputs = await terraform.output();
|
|
288
|
+
const outputsByConstructId = (0, output_1.getConstructIdsForOutputs)(JSON.parse(this.stack.content), outputs);
|
|
289
|
+
this.updateState({
|
|
290
|
+
type: "deployed",
|
|
291
|
+
stackName: this.stack.name,
|
|
292
|
+
outputs,
|
|
293
|
+
outputsByConstructId,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
async destroy(opts) {
|
|
299
|
+
const { terraformParallelism, noColor, vars, varFiles } = opts;
|
|
300
|
+
await this.run(async () => {
|
|
301
|
+
this.updateState({ type: "planning", stackName: this.stack.name });
|
|
302
|
+
const terraform = await this.terraformClient();
|
|
303
|
+
const { cancelled } = await terraform.destroy({
|
|
304
|
+
autoApprove: this.options.autoApprove,
|
|
305
|
+
parallelism: terraformParallelism,
|
|
306
|
+
vars,
|
|
307
|
+
varFiles,
|
|
308
|
+
noColor,
|
|
309
|
+
}, (state) => {
|
|
310
|
+
// state updates while apply runs that affect the UI
|
|
311
|
+
if (state.type === "running" && !state.cancelled) {
|
|
312
|
+
this.updateState({
|
|
313
|
+
type: "destroying",
|
|
314
|
+
stackName: this.stack.name,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
else if (state.type === "waiting for approval") {
|
|
318
|
+
this.updateState({
|
|
319
|
+
type: "waiting for stack approval",
|
|
320
|
+
stackName: this.stack.name,
|
|
321
|
+
approve: state.approve,
|
|
322
|
+
reject: () => {
|
|
323
|
+
state.reject();
|
|
324
|
+
this.updateState({
|
|
325
|
+
type: "dismissed",
|
|
326
|
+
stackName: this.stack.name,
|
|
327
|
+
});
|
|
328
|
+
},
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
else if (state.type === "waiting for sentinel override") {
|
|
332
|
+
this.updateState({
|
|
333
|
+
type: "waiting for stack sentinel override",
|
|
334
|
+
stackName: this.stack.name,
|
|
335
|
+
override: state.override,
|
|
336
|
+
reject: () => {
|
|
337
|
+
state.reject();
|
|
338
|
+
this.updateState({
|
|
339
|
+
type: "dismissed",
|
|
340
|
+
stackName: this.stack.name,
|
|
341
|
+
});
|
|
342
|
+
},
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
else if (state.type === "external approval reply") {
|
|
346
|
+
this.updateState({
|
|
347
|
+
type: "external stack approval reply",
|
|
348
|
+
stackName: this.stack.name,
|
|
349
|
+
approved: state.approved,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
else if (state.type === "external sentinel override reply") {
|
|
353
|
+
this.updateState({
|
|
354
|
+
type: "external stack sentinel override reply",
|
|
355
|
+
stackName: this.stack.name,
|
|
356
|
+
overridden: state.overridden,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
if (!cancelled)
|
|
361
|
+
this.updateState({
|
|
362
|
+
type: "destroyed",
|
|
363
|
+
stackName: this.stack.name,
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
async fetchOutputs() {
|
|
368
|
+
await this.run(async () => {
|
|
369
|
+
const terraform = await this.terraformClient();
|
|
370
|
+
const outputs = await terraform.output();
|
|
371
|
+
const outputsByConstructId = (0, output_1.getConstructIdsForOutputs)(JSON.parse(this.stack.content), outputs);
|
|
372
|
+
this.updateState({
|
|
373
|
+
type: "outputs fetched",
|
|
374
|
+
stackName: this.stack.name,
|
|
375
|
+
outputs,
|
|
376
|
+
outputsByConstructId,
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
return this.outputs;
|
|
380
|
+
}
|
|
381
|
+
async stop() {
|
|
382
|
+
this.stopped = true;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
exports.CdktfStack = CdktfStack;
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2Nka3RmLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFDQUE2RTtBQUM3RSw0Q0FBd0M7QUFDeEMsNERBQWtFO0FBQ2xFLDBEQUtnQztBQUNoQywwRUFBdUU7QUFDdkUscURBQXVFO0FBQ3ZFLHVFQUFrRTtBQUNsRSx1Q0FBcUQ7QUE0RnJELEtBQUssVUFBVSxrQkFBa0IsQ0FDL0IsV0FBd0IsRUFDeEIsS0FBdUIsRUFDdkIseUJBR2lEO0lBRWpELE9BQU8sSUFBSSw0QkFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBMkJELE1BQWEsVUFBVTtJQVVyQixZQUFtQixPQUEwQjtRQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQU50QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRVAsaUJBQVksR0FBcUIsTUFBTSxDQUFDO1FBS3RELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLG9DQUFtQixDQUFDLEtBQUssQ0FDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2RCxDQUFDO0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxDQUNMLElBQUksQ0FBQyxZQUFZLEtBQUssTUFBTTtZQUM1QixJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsU0FBUztRQUNsQixPQUFPLENBQUMsSUFBSSxDQUFD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ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBTeW50aGVzaXplZFN0YWNrIH0gZnJvbSBcIi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7IFRlcnJhZm9ybSB9IGZyb20gXCIuL21vZGVscy90ZXJyYWZvcm1cIjtcbmltcG9ydCB7IGdldENvbnN0cnVjdElkc0Zvck91dHB1dHMsIE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgfSBmcm9tIFwiLi9vdXRwdXRcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEpzb25Mb2dJZlByZXNlbnQgfSBmcm9tIFwiLi9zZXJ2ZXIvdGVycmFmb3JtLWxvZ3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybUNsaSxcbiAgT3V0cHV0RmlsdGVyLFxuICB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUsXG4gIHRyeVJlbW92ZUdlbmVyYXRlZENvbmZpZ3VyYXRpb25GaWxlLFxufSBmcm9tIFwiLi9tb2RlbHMvdGVycmFmb3JtLWNsaVwiO1xuaW1wb3J0IHsgUHJvdmlkZXJDb25zdHJhaW50IH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3ktbWFuYWdlclwiO1xuaW1wb3J0IHsgdGVycmFmb3JtSnNvblNjaGVtYSwgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiLi90ZXJyYWZvcm0tanNvblwiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJMb2NrIH0gZnJvbSBcIi4vdGVycmFmb3JtLXByb3ZpZGVyLWxvY2tcIjtcbmltcG9ydCB7IGNvbnZlcnRDb25maWd1cmF0aW9uRmlsZSB9IGZyb20gXCIuL2NvbnZlcnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhY2tVcGRhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwicGxhbm5pbmdcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInBsYW5uZWRcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImRlcGxveWluZ1wiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVwbG95IHVwZGF0ZVwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBkZXBsb3lPdXRwdXQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJkZXBsb3llZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBvdXRwdXRzQnlDb25zdHJ1Y3RJZDogTmVzdGVkVGVycmFmb3JtT3V0cHV0cztcbiAgICAgIG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVzdHJveWluZ1wiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGVzdHJveSB1cGRhdGVcIjtcbiAgICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgICAgZGVzdHJveU91dHB1dDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcImRlc3Ryb3llZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwib3V0cHV0cyBmZXRjaGVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIG91dHB1dHNCeUNvbnN0cnVjdElkOiBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzO1xuICAgICAgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJlcnJvcmVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIGVycm9yOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwiZGlzbWlzc2VkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGRldGVjdGVkXCI7XG4gICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgIGNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbXBvcnQgd2l0aCBjb25maWd1cmF0aW9uIGNvbnZlcnRlZFwiO1xuICAgICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgICBjb25maWd1cmF0aW9uOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU3RhY2tVc2VySW5wdXRVcGRhdGUgPVxuICB8IFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFN0YWNrQXBwcm92YWxVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGFwcHJvdmU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKCkgPT4gdm9pZDtcbn07XG5leHBvcnQgdHlwZSBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG92ZXJyaWRlOiAoKSA9PiB2b2lkO1xuICByZWplY3Q6ICgpID0+IHZvaWQ7XG59O1xuZXhwb3J0IHR5cGUgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlID0ge1xuICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBhcHByb3ZlZDogYm9vbGVhbjsgLy8gZmFsc2UgPSByZWplY3RlZFxufTtcbmV4cG9ydCB0eXBlIEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlID0ge1xuICB0eXBlOiBcImV4dGVybmFsIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlIHJlcGx5XCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBvdmVycmlkZGVuOiBib29sZWFuOyAvLyBmYWxzZSA9IHJlamVjdGVkXG59O1xuXG5hc3luYyBmdW5jdGlvbiBnZXRUZXJyYWZvcm1DbGllbnQoXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2ssXG4gIGNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXI6IChcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGZpbHRlcj86IE91dHB1dEZpbHRlcltdLFxuICApID0+IChtZXNzYWdlOiBzdHJpbmcsIGlzRXJyb3I/OiBib29sZWFuKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxUZXJyYWZvcm0+IHtcbiAgcmV0dXJuIG5ldyBUZXJyYWZvcm1DbGkoYWJvcnRTaWduYWwsIHN0YWNrLCBjcmVhdGVUZXJyYWZvcm1Mb2dIYW5kbGVyKTtcbn1cblxudHlwZSBDZGt0ZlN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2s7XG4gIG9uVXBkYXRlOiAoXG4gICAgdXBkYXRlOlxuICAgICAgfCBTdGFja1VwZGF0ZVxuICAgICAgfCBTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICB8IEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgIHwgRXh0ZXJuYWxTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gICkgPT4gdm9pZDtcbiAgb25Mb2c/OiAobG9nOiB7IG1lc3NhZ2U6IHN0cmluZzsgaXNFcnJvcjogYm9vbGVhbiB9KSA9PiB2b2lkO1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG4gIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbn07XG5cbnR5cGUgQ2RrdGZTdGFja1N0YXRlcyA9XG4gIHwgU3RhY2tVcGRhdGVbXCJ0eXBlXCJdXG4gIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVtcInR5cGVcIl1cbiAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVbXCJ0eXBlXCJdXG4gIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlW1widHlwZVwiXVxuICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlW1widHlwZVwiXVxuICB8IFwiaWRsZVwiXG4gIHwgXCJkb25lXCI7XG5cbmV4cG9ydCBjbGFzcyBDZGt0ZlN0YWNrIHtcbiAgcHVibGljIHN0YWNrOiBTeW50aGVzaXplZFN0YWNrO1xuICBwdWJsaWMgb3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHB1YmxpYyBvdXRwdXRzQnlDb25zdHJ1Y3RJZD86IE5lc3RlZFRlcnJhZm9ybU91dHB1dHM7XG4gIHB1YmxpYyBzdG9wcGVkID0gZmFsc2U7XG4gIHB1YmxpYyBjdXJyZW50V29ya1Byb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBjdXJyZW50U3RhdGU6IENka3RmU3RhY2tTdGF0ZXMgPSBcImlkbGVcIjtcbiAgcHVibGljIGVycm9yPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnNlZENvbnRlbnQ6IFRlcnJhZm9ybVN0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBDZGt0ZlN0YWNrT3B0aW9ucykge1xuICAgIHRoaXMuc3RhY2sgPSBvcHRpb25zLnN0YWNrO1xuICAgIHRoaXMucGFyc2VkQ29udGVudCA9IHRlcnJhZm9ybUpzb25TY2hlbWEucGFyc2UoXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNQZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gXCJpZGxlXCIgJiYgIXRoaXMuc3RvcHBlZDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50U3RhdGUgPT09IFwiZG9uZVwiIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9PT0gXCJlcnJvcmVkXCIgfHxcbiAgICAgIHRoaXMuc3RvcHBlZFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUGVuZGluZyAmJiAhdGhpcy5pc0RvbmU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKFxuICAgIHVwZGF0ZTpcbiAgICAgIHwgU3RhY2tVcGRhdGVcbiAgICAgIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgIHwgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlXG4gICAgICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICB8IHsgdHlwZTogXCJpZGxlXCIgfVxuICAgICAgfCB7IHR5cGU6IFwiZG9uZVwiIH0sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgWyR7dGhpcy5zdGFjay5uYW1lfV06ICR7dXBkYXRlLnR5cGV9YCk7XG4gICAgKHRoaXMuY3VycmVudFN0YXRlIGFzIENka3RmU3RhY2tTdGF0ZXMpID0gdXBkYXRlLnR5cGU7XG4gICAgc3dpdGNoICh1cGRhdGUudHlwZSkge1xuICAgICAgY2FzZSBcImlkbGVcIjpcbiAgICAgIGNhc2UgXCJkb25lXCI6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZXJyb3JlZFwiOlxuICAgICAgICB0aGlzLmVycm9yID0gdXBkYXRlLmVycm9yO1xuICAgICAgICB0aGlzLm9wdGlvbnMub25VcGRhdGUodXBkYXRlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJvdXRwdXRzIGZldGNoZWRcIjpcbiAgICAgIGNhc2UgXCJkZXBsb3llZFwiOlxuICAgICAgICBsb2dnZXIuZGVidWcoYE91dHB1dHM6ICR7SlNPTi5zdHJpbmdpZnkodXBkYXRlLm91dHB1dHMpfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYE91dHB1dHNCeUNvbnN0cnVjdElkOiAke0pTT04uc3RyaW5naWZ5KHVwZGF0ZS5vdXRwdXRzQnlDb25zdHJ1Y3RJZCl9YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gdXBkYXRlLm91dHB1dHM7XG4gICAgICAgIHRoaXMub3V0cHV0c0J5Q29uc3RydWN0SWQgPSB1cGRhdGUub3V0cHV0c0J5Q29uc3RydWN0SWQ7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZSh1cGRhdGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5vcHRpb25zLm9uVXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVycmFmb3JtTG9nSGFuZGxlcihcbiAgICBwaGFzZTogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBPdXRwdXRGaWx0ZXJbXSxcbiAgKTogKG1lc3NhZ2U6IHN0cmluZywgaXNFcnJvcj86IGJvb2xlYW4pID0+IHZvaWQge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkNyZWF0aW5nIHRlcnJhZm9ybSBsb2cgaGFuZGxlclwiLCBwaGFzZSk7XG5cbiAgICBjb25zdCBvbkxvZyA9IHRoaXMub3B0aW9ucy5vbkxvZztcbiAgICByZXR1cm4gKG1zZzogc3RyaW5nLCBpc0Vycm9yID0gZmFsc2UpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleHRyYWN0SnNvbkxvZ0lmUHJlc2VudChtc2cpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBbJHt0aGlzLm9wdGlvbnMuc3RhY2submFtZX1dKCR7cGhhc2V9KTogJHttc2d9YCk7XG5cbiAgICAgIGNvbnN0IGZpbHRlclRvQXBwbHkgPSBmaWx0ZXJzPy5maW5kKChmaWx0ZXIpID0+XG4gICAgICAgIGZpbHRlci5jb25kaXRpb24obWVzc2FnZSksXG4gICAgICApO1xuICAgICAgY29uc3QgZmlsdGVyZWRNZXNzYWdlID0gZmlsdGVyVG9BcHBseVxuICAgICAgICA/IGZpbHRlclRvQXBwbHkudHJhbnNmb3JtKG1lc3NhZ2UpXG4gICAgICAgIDogbWVzc2FnZTtcblxuICAgICAgaWYgKGZpbHRlcmVkTWVzc2FnZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYEZpbHRlciAke2ZpbHRlclRvQXBwbHl9IGFwcGxpZWQgb24gbGluZSAnJHttZXNzYWdlfScgd2l0aCByZXN1bHQgJyR7ZmlsdGVyZWRNZXNzYWdlfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAob25Mb2cpIHtcbiAgICAgICAgb25Mb2coeyBtZXNzYWdlOiBmaWx0ZXJlZE1lc3NhZ2UsIGlzRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdGVycmFmb3JtQ2xpZW50KCkge1xuICAgIHJldHVybiBhd2FpdCBnZXRUZXJyYWZvcm1DbGllbnQoXG4gICAgICB0aGlzLm9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhY2ssXG4gICAgICB0aGlzLmNyZWF0ZVRlcnJhZm9ybUxvZ0hhbmRsZXIuYmluZCh0aGlzKSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRhbGl6ZVRlcnJhZm9ybShcbiAgICBub0NvbG9yPzogYm9vbGVhbixcbiAgICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbixcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCB0ZXJyYWZvcm0gPSBhd2FpdCB0aGlzLnRlcnJhZm9ybUNsaWVudCgpO1xuICAgIGNvbnN0IG5lZWRzTG9ja2ZpbGVVcGRhdGUgPSBza2lwUHJvdmlkZXJMb2NrXG4gICAgICA/IGZhbHNlXG4gICAgICA6IGF3YWl0IHRoaXMuY2hlY2tOZWVkc0xvY2tmaWxlVXBkYXRlKCk7XG4gICAgY29uc3QgbmVlZHNVcGdyYWRlID0gYXdhaXQgdGhpcy5jaGVja05lZWRzVXBncmFkZSgpO1xuICAgIGF3YWl0IHRlcnJhZm9ybS5pbml0KHtcbiAgICAgIG5lZWRzVXBncmFkZSxcbiAgICAgIG5vQ29sb3I6IG5vQ29sb3IgPz8gZmFsc2UsXG4gICAgICBuZWVkc0xvY2tmaWxlVXBkYXRlLFxuICAgICAgbWlncmF0ZVN0YXRlOiBtaWdyYXRlU3RhdGUgPz8gZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRlcnJhZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZWRQcm92aWRlcnMoKSB7XG4gICAgLy8gUmVhZCByZXF1aXJlZCBwcm92aWRlcnMgZnJvbSB0aGUgc3RhY2sgb3V0cHV0XG4gICAgY29uc3QgcmVxdWlyZWRQcm92aWRlcnMgPSB0aGlzLnBhcnNlZENvbnRlbnQudGVycmFmb3JtPy5yZXF1aXJlZF9wcm92aWRlcnM7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXF1aXJlZFByb3ZpZGVycyB8fCB7fSkucmVkdWNlKFxuICAgICAgKGFjYywgb2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KG9iai5zb3VyY2UsIG9iai52ZXJzaW9uKTtcbiAgICAgICAgYWNjW2NvbnN0cmFpbnQuc291cmNlXSA9IGNvbnN0cmFpbnQ7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgUHJvdmlkZXJDb25zdHJhaW50PixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRzTG9ja2ZpbGVVcGRhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5taWdyYXRlU3RhdGUpIHtcbiAgICAgIC8vIElmIHdlJ3JlIG1pZ3JhdGluZyBzdGF0ZSwgd2UgbmVlZCB0byBpbml0XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbG9jayA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckxvY2sodGhpcy5zdGFjay53b3JraW5nRGlyZWN0b3J5KTtcbiAgICBjb25zdCBsb2NrRmlsZUV4aXN0cyA9IGF3YWl0IGxvY2suaGFzUHJvdmlkZXJMb2NrRmlsZSgpO1xuXG4gICAgaWYgKCFsb2NrRmlsZUV4aXN0cykge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGxvY2sgZmlsZSwgdGhpcyBpcyBwcm9iYWJseSB0aGUgZmlyc3QgaW5pdFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWlyZWRQcm92aWRlcnMgPSB0aGlzLnJlcXVpcmVkUHJvdmlkZXJzKCk7XG5cbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIE9iamVjdC52YWx1ZXMocmVxdWlyZWRQcm92aWRlcnMpKSB7XG4gICAgICBjb25zdCBoYXNQcm92aWRlciA9IGF3YWl0IGxvY2suaGFzTWF0Y2hpbmdQcm92aWRlcihwcm92aWRlcik7XG4gICAgICBpZiAoIWhhc1Byb3ZpZGVyKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBwcm92aWRlciBvciB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2gsIHdlIG5lZWQgdG8gaW5pdFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrTmVlZHNVcGdyYWRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2sgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJMb2NrKHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSk7XG4gICAgY29uc3QgYWxsUHJvdmlkZXJzID0gdGhpcy5yZXF1aXJlZFByb3ZpZGVycygpO1xuICAgIGNvbnN0IGxvY2tlZFByb3ZpZGVycyA9IE9iamVjdC52YWx1ZXMoYXdhaXQgbG9jay5wcm92aWRlcnMoKSk7XG5cbiAgICAvLyBDaGVjayBpZiBhbnkgcHJvdmlkZXIgY29udGFpbmVkIGluIGBwcm92aWRlcnNgIHZpb2xhdGVzIGNvbnN0cmFpbnRzIGluIGBsb2NrZWRQcm92aWRlcnNgXG4gICAgLy8gVXBncmFkZSBpZiBzb21lIHByb3ZpZGVyIGNvbnN0cmFpbnQgbm90IG1ldFxuICAgIC8vIElmIGEgcHJvdmlkZXIgd2Fzbid0IHByZXNldCBpbiBsb2NrZWRQcm92aWRlcnMsIHRoYXQncyBmaW5lOyBpdCB3aWxsIGp1c3QgZ2V0IGFkZGVkXG4gICAgcmV0dXJuIGxvY2tlZFByb3ZpZGVycy5zb21lKChsb2NrZWRQcm92aWRlcikgPT4ge1xuICAgICAgY29uc3QgbG9ja2VkQ29uc3RyYWludCA9IGxvY2tlZFByb3ZpZGVyLmNvbnN0cmFpbnRzO1xuICAgICAgaWYgKCFsb2NrZWRDb25zdHJhaW50KSB7XG4gICAgICAgIC8vIFByb3ZpZGVyIGxvY2sgZG9lc24ndCBoYXZlIGEgY29uc3RyYWludCBzcGVjaWZpZWQsIHNvIHdlIGNhbid0IGNoZWNrLlxuICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBQcm92aWRlciBsb2NrIGRvZXNuJ3QgaGF2ZSBhIGNvbnN0cmFpbnQgZm9yICR7bG9ja2VkUHJvdmlkZXIubmFtZX1gLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYWxsUHJvdmlkZXJzW2xvY2tlZENvbnN0cmFpbnQuc291cmNlXTtcbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgLy8gZWxzZSBubyBsb25nZXIgdXNpbmcgdGhpcyBwcm92aWRlciwgc28gd29uJ3QgY2F1c2UgcHJvYmxlbXNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWxvY2tlZENvbnN0cmFpbnQubWF0Y2hlc1ZlcnNpb24ocHJvdmlkZXIudmVyc2lvbiA/PyBcIj4wXCIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW4oY2I6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICBpZiAodGhpcy5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtQcm9taXNlID0gY2IoKTtcbiAgICAgIGF3YWl0IHRoaXMuY3VycmVudFdvcmtQcm9taXNlO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7IHR5cGU6IFwiZG9uZVwiIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci50cmFjZShcIkVycm9yIGluIGN1cnJlbnRXb3JrUHJvbWlzZVwiLCBlKTtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgIHR5cGU6IFwiZXJyb3JlZFwiLFxuICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgZXJyb3I6IFN0cmluZyhlKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jdXJyZW50V29ya1Byb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpZmYoe1xuICAgIHJlZnJlc2hPbmx5LFxuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtLFxuICAgIHZhcnMsXG4gICAgdmFyRmlsZXMsXG4gICAgbm9Db2xvcixcbiAgfToge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGF3YWl0IHRoaXMucnVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyB0eXBlOiBcInBsYW5uaW5nXCIsIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lIH0pO1xuICAgICAgY29uc3QgdGVycmFmb3JtID0gYXdhaXQgdGhpcy50ZXJyYWZvcm1DbGllbnQoKTtcblxuICAgICAgYXdhaXQgdGVycmFmb3JtLnBsYW4oe1xuICAgICAgICBkZXN0cm95OiBmYWxzZSxcbiAgICAgICAgcmVmcmVzaE9ubHksXG4gICAgICAgIHBhcmFsbGVsaXNtOiB0ZXJyYWZvcm1QYXJhbGxlbGlzbSxcbiAgICAgICAgdmFycyxcbiAgICAgICAgdmFyRmlsZXMsXG4gICAgICAgIG5vQ29sb3IsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyB0eXBlOiBcInBsYW5uZWRcIiwgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUgfSk7XG5cbiAgICAgIC8vIEZpbmQgZ2VuZXJhdGVkIGZpbGVcbiAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBhd2FpdCB0cnlSZWFkR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUoXG4gICAgICAgIHRoaXMuc3RhY2sud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICk7XG4gICAgICBpZiAoY29uZmlnRmlsZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImltcG9ydCB3aXRoIGNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWRcIixcbiAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWdGaWxlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRDb2RlID0gYXdhaXQgY29udmVydENvbmZpZ3VyYXRpb25GaWxlKFxuICAgICAgICAgIGNvbmZpZ0ZpbGUsXG4gICAgICAgICAgdGhpcy5zdGFjay53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImltcG9ydCB3aXRoIGNvbmZpZ3VyYXRpb24gY29udmVydGVkXCIsXG4gICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogY29udmVydGVkQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9uTG9nID0gdGhpcy5vcHRpb25zLm9uTG9nO1xuICAgICAgICBpZiAob25Mb2cpIHtcbiAgICAgICAgICBvbkxvZyh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgSW1wb3J0IHdpdGhvdXQgY29uZmlndXJhdGlvbiBkZXRlY3RlZC4gVGVycmFmb3JtIGhhcyBjcmVhdGVkIGNvbmZpZ3VyYXRpb24gZm9yIGl0OlxuJHtjb25maWdGaWxlfVxuXG5DREtUTiBoYXMgdHJhbnNsYXRlZCB0aGUgY29kZSB0byB0aGUgZm9sbG93aW5nOlxuXG4ke2NvbnZlcnRlZENvZGV9XG5cblBsZWFzZSByZXZpZXcgdGhlIGNvZGUgYW5kIG1ha2UgYW55IG5lY2Vzc2FyeSBjaGFuZ2VzIGJlZm9yZSBhZGRpbmcgaXQgdG8geW91ciBjb2RlYmFzZS5cbk1ha2Ugc3VyZSB0byBvbmx5IGNvcHkgdGhlIGNvZGUgd2l0aGluIHRoZSBjb25zdHJ1Y3QncyBjb25zdHJ1Y3Rvci5cblxuTk9URTogWW91ciByZXNvdXJjZSBoYXMgbm90IHlldCBiZWNvbWUgbWFuYWdlZCBieSBDREtUTi4gXG5UbyBmaW5pc2ggdGhlIGltcG9ydCByZW1vdmUgdGhlIGNhbGwgXCJnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydFwiLCBhZGQgdGhlIGFib3ZlIGNvZGUgd2l0aGluIHRoZSBjb25zdHJ1Y3QncyBjb25zdHJ1Y3RvciwgYW5kIHRoZW4gYXBwZW5kIHRoZSBjYWxsIGltcG9ydEZyb20oPHJlc291cmNlX2lkX3RvX2ltcG9ydF9mcm9tPikgdG8gdGhlIGdlbmVyYXRlZCBjb2RlOiBcblxubmV3IFNvbWVSZXNvdXJjZSguLi4pLmltcG9ydEZyb20oXCJzb21lX2lkXCIpXG5gLFxuICAgICAgICAgICAgaXNFcnJvcjogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdHJ5UmVtb3ZlR2VuZXJhdGVkQ29uZmlndXJhdGlvbkZpbGUodGhpcy5zdGFjay53b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0czoge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICB0ZXJyYWZvcm1QYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgICBub0NvbG9yPzogYm9vbGVhbjtcbiAgICB2YXJzPzogc3RyaW5nW107XG4gICAgdmFyRmlsZXM/OiBzdHJpbmdbXTtcbiAgfSkge1xuICAgIGNvbnN0IHsgcmVmcmVzaE9ubHksIHRlcnJhZm9ybVBhcmFsbGVsaXNtLCBub0NvbG9yLCB2YXJzLCB2YXJGaWxlcyB9ID0gb3B0cztcbiAgICBhd2FpdCB0aGlzLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgdHlwZTogXCJwbGFubmluZ1wiLCBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSB9KTtcbiAgICAgIGNvbnN0IHRlcnJhZm9ybSA9IGF3YWl0IHRoaXMudGVycmFmb3JtQ2xpZW50KCk7XG5cbiAgICAgIGNvbnN0IHsgY2FuY2VsbGVkIH0gPSBhd2FpdCB0ZXJyYWZvcm0uZGVwbG95KFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b0FwcHJvdmU6IHRoaXMub3B0aW9ucy5hdXRvQXBwcm92ZSxcbiAgICAgICAgICByZWZyZXNoT25seSxcbiAgICAgICAgICBwYXJhbGxlbGlzbTogdGVycmFmb3JtUGFyYWxsZWxpc20sXG4gICAgICAgICAgdmFycyxcbiAgICAgICAgICB2YXJGaWxlcyxcbiAgICAgICAgICBub0NvbG9yLFxuICAgICAgICB9LFxuICAgICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgICAvLyBzdGF0ZSB1cGRhdGVzIHdoaWxlIGFwcGx5IHJ1bnMgdGhhdCBhZmZlY3QgdGhlIFVJXG4gICAgICAgICAgaWYgKHN0YXRlLnR5cGUgPT09IFwicnVubmluZ1wiICYmICFzdGF0ZS5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBcImRlcGxveWluZ1wiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgYXBwcm92ZTogc3RhdGUuYXBwcm92ZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG92ZXJyaWRlOiBzdGF0ZS5vdmVycmlkZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc3RhY2sgYXBwcm92YWwgcmVwbHlcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBzdGF0ZS5hcHByb3ZlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGRlbjogc3RhdGUub3ZlcnJpZGRlbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dHMgPSBhd2FpdCB0ZXJyYWZvcm0ub3V0cHV0KCk7XG4gICAgICAgIGNvbnN0IG91dHB1dHNCeUNvbnN0cnVjdElkID0gZ2V0Q29uc3RydWN0SWRzRm9yT3V0cHV0cyhcbiAgICAgICAgICBKU09OLnBhcnNlKHRoaXMuc3RhY2suY29udGVudCksXG4gICAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImRlcGxveWVkXCIsXG4gICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgICBvdXRwdXRzQnlDb25zdHJ1Y3RJZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShvcHRzOiB7XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBjb25zdCB7IHRlcnJhZm9ybVBhcmFsbGVsaXNtLCBub0NvbG9yLCB2YXJzLCB2YXJGaWxlcyB9ID0gb3B0cztcbiAgICBhd2FpdCB0aGlzLnJ1bihhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgdHlwZTogXCJwbGFubmluZ1wiLCBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSB9KTtcbiAgICAgIGNvbnN0IHRlcnJhZm9ybSA9IGF3YWl0IHRoaXMudGVycmFmb3JtQ2xpZW50KCk7XG4gICAgICBjb25zdCB7IGNhbmNlbGxlZCB9ID0gYXdhaXQgdGVycmFmb3JtLmRlc3Ryb3koXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvQXBwcm92ZTogdGhpcy5vcHRpb25zLmF1dG9BcHByb3ZlLFxuICAgICAgICAgIHBhcmFsbGVsaXNtOiB0ZXJyYWZvcm1QYXJhbGxlbGlzbSxcbiAgICAgICAgICB2YXJzLFxuICAgICAgICAgIHZhckZpbGVzLFxuICAgICAgICAgIG5vQ29sb3IsXG4gICAgICAgIH0sXG4gICAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICAgIC8vIHN0YXRlIHVwZGF0ZXMgd2hpbGUgYXBwbHkgcnVucyB0aGF0IGFmZmVjdCB0aGUgVUlcbiAgICAgICAgICBpZiAoc3RhdGUudHlwZSA9PT0gXCJydW5uaW5nXCIgJiYgIXN0YXRlLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZGVzdHJveWluZ1wiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgYXBwcm92ZTogc3RhdGUuYXBwcm92ZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG92ZXJyaWRlOiBzdGF0ZS5vdmVycmlkZSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImRpc21pc3NlZFwiLFxuICAgICAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgYXBwcm92YWwgcmVwbHlcIikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiZXh0ZXJuYWwgc3RhY2sgYXBwcm92YWwgcmVwbHlcIixcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiB0aGlzLnN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIGFwcHJvdmVkOiBzdGF0ZS5hcHByb3ZlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiLFxuICAgICAgICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGRlbjogc3RhdGUub3ZlcnJpZGRlbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghY2FuY2VsbGVkKVxuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgICAgICB0eXBlOiBcImRlc3Ryb3llZFwiLFxuICAgICAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFjay5uYW1lLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaE91dHB1dHMoKSB7XG4gICAgYXdhaXQgdGhpcy5ydW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVycmFmb3JtID0gYXdhaXQgdGhpcy50ZXJyYWZvcm1DbGllbnQoKTtcblxuICAgICAgY29uc3Qgb3V0cHV0cyA9IGF3YWl0IHRlcnJhZm9ybS5vdXRwdXQoKTtcbiAgICAgIGNvbnN0IG91dHB1dHNCeUNvbnN0cnVjdElkID0gZ2V0Q29uc3RydWN0SWRzRm9yT3V0cHV0cyhcbiAgICAgICAgSlNPTi5wYXJzZSh0aGlzLnN0YWNrLmNvbnRlbnQpLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICB0eXBlOiBcIm91dHB1dHMgZmV0Y2hlZFwiLFxuICAgICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2submFtZSxcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgb3V0cHV0c0J5Q29uc3RydWN0SWQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLm91dHB1dHM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RvcCgpIHtcbiAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/lib/convert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,MAAM,mBAqB9B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) HashiCorp, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
|
+
if (mod && mod.__esModule) return mod;
|
|
24
|
+
var result = {};
|
|
25
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
26
|
+
__setModuleDefault(result, mod);
|
|
27
|
+
return result;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.convertConfigurationFile = void 0;
|
|
31
|
+
const hcl2cdk = __importStar(require("@cdktn/hcl2cdk"));
|
|
32
|
+
const cdktf_config_1 = require("./cdktf-config");
|
|
33
|
+
const provider_generator_1 = require("@cdktn/provider-generator");
|
|
34
|
+
const provider_schema_1 = require("@cdktn/provider-schema");
|
|
35
|
+
const commons_1 = require("@cdktn/commons");
|
|
36
|
+
async function convertConfigurationFile(configuration, stackWorkingDirectory) {
|
|
37
|
+
const cfg = cdktf_config_1.CdktfConfig.read(stackWorkingDirectory);
|
|
38
|
+
const targets = cfg.terraformProviders.map((constraint) => commons_1.ConstructsMakerProviderTarget.from(new provider_generator_1.TerraformProviderConstraint(constraint), commons_1.LANGUAGES[0]));
|
|
39
|
+
const { providerSchema } = await (0, provider_schema_1.readSchema)(targets);
|
|
40
|
+
if (!providerSchema) {
|
|
41
|
+
throw commons_1.Errors.Internal("Could not fetch provider schema");
|
|
42
|
+
}
|
|
43
|
+
const { all } = await hcl2cdk.convert(configuration, {
|
|
44
|
+
providerSchema,
|
|
45
|
+
language: cfg.language,
|
|
46
|
+
codeContainer: "constructs.Construct",
|
|
47
|
+
});
|
|
48
|
+
return all;
|
|
49
|
+
}
|
|
50
|
+
exports.convertConfigurationFile = convertConfigurationFile;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29udmVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHdEQUEwQztBQUMxQyxpREFBNkM7QUFDN0Msa0VBQXdFO0FBQ3hFLDREQUFvRDtBQUNwRCw0Q0FJd0I7QUFFakIsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxhQUFxQixFQUNyQixxQkFBNkI7SUFFN0IsTUFBTSxHQUFHLEdBQUcsMEJBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDeEQsdUNBQTZCLENBQUMsSUFBSSxDQUNoQyxJQUFJLGdEQUEyQixDQUFDLFVBQVUsQ0FBQyxFQUMzQyxtQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUNiLENBQ0YsQ0FBQztJQUNGLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEsNEJBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsTUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtRQUNuRCxjQUFjO1FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLGFBQWEsRUFBRSxzQkFBc0I7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBdkJELDREQXVCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgaGNsMmNkayBmcm9tIFwiQGNka3RuL2hjbDJjZGtcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVhZFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIExBTkdVQUdFUyxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydENvbmZpZ3VyYXRpb25GaWxlKFxuICBjb25maWd1cmF0aW9uOiBzdHJpbmcsXG4gIHN0YWNrV29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGNmZyA9IENka3RmQ29uZmlnLnJlYWQoc3RhY2tXb3JraW5nRGlyZWN0b3J5KTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNmZy50ZXJyYWZvcm1Qcm92aWRlcnMubWFwKChjb25zdHJhaW50KSA9PlxuICAgIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LmZyb20oXG4gICAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KGNvbnN0cmFpbnQpLFxuICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICksXG4gICk7XG4gIGNvbnN0IHsgcHJvdmlkZXJTY2hlbWEgfSA9IGF3YWl0IHJlYWRTY2hlbWEodGFyZ2V0cyk7XG4gIGlmICghcHJvdmlkZXJTY2hlbWEpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXCJDb3VsZCBub3QgZmV0Y2ggcHJvdmlkZXIgc2NoZW1hXCIpO1xuICB9XG5cbiAgY29uc3QgeyBhbGwgfSA9IGF3YWl0IGhjbDJjZGsuY29udmVydChjb25maWd1cmF0aW9uLCB7XG4gICAgcHJvdmlkZXJTY2hlbWEsXG4gICAgbGFuZ3VhZ2U6IGNmZy5sYW5ndWFnZSxcbiAgICBjb2RlQ29udGFpbmVyOiBcImNvbnN0cnVjdHMuQ29uc3RydWN0XCIsXG4gIH0pO1xuXG4gIHJldHVybiBhbGw7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdktf-config-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/dependencies/cdktf-config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAmC;IAEpC,WAAW,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;YAQ5D,WAAW;IAoBZ,WAAW,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,cAAc,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3E"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CdktfConfigManager = void 0;
|
|
4
|
+
// Copyright (c) HashiCorp, Inc
|
|
5
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
6
|
+
const cdktf_config_1 = require("../cdktf-config");
|
|
7
|
+
const dependency_manager_1 = require("./dependency-manager");
|
|
8
|
+
/**
|
|
9
|
+
* facilitates adding provider dependencies to cdktf.json
|
|
10
|
+
*/
|
|
11
|
+
class CdktfConfigManager {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.config = cdktf_config_1.CdktfConfig.read();
|
|
14
|
+
}
|
|
15
|
+
async hasProvider(constraint) {
|
|
16
|
+
return this.config.terraformProviders.some((provider) => dependency_manager_1.ProviderConstraint.fromConfigEntry(provider).source ===
|
|
17
|
+
constraint.source);
|
|
18
|
+
}
|
|
19
|
+
async setProvider(constraint) {
|
|
20
|
+
// excluding the constraint to be added (if it already existed)
|
|
21
|
+
const currentProviders = this.config.terraformProviders.filter((provider) => dependency_manager_1.ProviderConstraint.fromConfigEntry(provider).source !==
|
|
22
|
+
constraint.source);
|
|
23
|
+
const simplifiedSource = constraint.source.replace("registry.terraform.io/", "");
|
|
24
|
+
const provider = simplifiedSource + (constraint.version ? `@${constraint.version}` : "");
|
|
25
|
+
currentProviders.push(provider);
|
|
26
|
+
this.config.writeTerraformProviders(currentProviders);
|
|
27
|
+
}
|
|
28
|
+
async addProvider(constraint) {
|
|
29
|
+
await this.setProvider(constraint);
|
|
30
|
+
}
|
|
31
|
+
async updateProvider(constraint) {
|
|
32
|
+
await this.setProvider(constraint);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.CdktfConfigManager = CdktfConfigManager;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtY29uZmlnLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RlcGVuZGVuY2llcy9jZGt0Zi1jb25maWctbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLGtEQUE4QztBQUM5Qyw2REFBMEQ7QUFFMUQ7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUEvQjtRQUNVLFdBQU0sR0FBZ0IsMEJBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQXFDbkQsQ0FBQztJQW5DUSxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQThCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3hDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDWCx1Q0FBa0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTTtZQUNuRCxVQUFVLENBQUMsTUFBTSxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBOEI7UUFDdEQsK0RBQStEO1FBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQzVELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDWCx1Q0FBa0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTTtZQUNuRCxVQUFVLENBQUMsTUFBTSxDQUNwQixDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDaEQsd0JBQXdCLEVBQ3hCLEVBQUUsQ0FDSCxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQ1osZ0JBQWdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUE4QjtRQUNyRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBOEI7UUFDeEQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQXRDRCxnREFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHsgQ2RrdGZDb25maWcgfSBmcm9tIFwiLi4vY2RrdGYtY29uZmlnXCI7XG5pbXBvcnQgeyBQcm92aWRlckNvbnN0cmFpbnQgfSBmcm9tIFwiLi9kZXBlbmRlbmN5LW1hbmFnZXJcIjtcblxuLyoqXG4gKiBmYWNpbGl0YXRlcyBhZGRpbmcgcHJvdmlkZXIgZGVwZW5kZW5jaWVzIHRvIGNka3RmLmpzb25cbiAqL1xuZXhwb3J0IGNsYXNzIENka3RmQ29uZmlnTWFuYWdlciB7XG4gIHByaXZhdGUgY29uZmlnOiBDZGt0ZkNvbmZpZyA9IENka3RmQ29uZmlnLnJlYWQoKTtcblxuICBwdWJsaWMgYXN5bmMgaGFzUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRlcnJhZm9ybVByb3ZpZGVycy5zb21lKFxuICAgICAgKHByb3ZpZGVyKSA9PlxuICAgICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KHByb3ZpZGVyKS5zb3VyY2UgPT09XG4gICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFByb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGV4Y2x1ZGluZyB0aGUgY29uc3RyYWludCB0byBiZSBhZGRlZCAoaWYgaXQgYWxyZWFkeSBleGlzdGVkKVxuICAgIGNvbnN0IGN1cnJlbnRQcm92aWRlcnMgPSB0aGlzLmNvbmZpZy50ZXJyYWZvcm1Qcm92aWRlcnMuZmlsdGVyKFxuICAgICAgKHByb3ZpZGVyKSA9PlxuICAgICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KHByb3ZpZGVyKS5zb3VyY2UgIT09XG4gICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICk7XG5cbiAgICBjb25zdCBzaW1wbGlmaWVkU291cmNlID0gY29uc3RyYWludC5zb3VyY2UucmVwbGFjZShcbiAgICAgIFwicmVnaXN0cnkudGVycmFmb3JtLmlvL1wiLFxuICAgICAgXCJcIixcbiAgICApO1xuXG4gICAgY29uc3QgcHJvdmlkZXIgPVxuICAgICAgc2ltcGxpZmllZFNvdXJjZSArIChjb25zdHJhaW50LnZlcnNpb24gPyBgQCR7Y29uc3RyYWludC52ZXJzaW9ufWAgOiBcIlwiKTtcblxuICAgIGN1cnJlbnRQcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgdGhpcy5jb25maWcud3JpdGVUZXJyYWZvcm1Qcm92aWRlcnMoY3VycmVudFByb3ZpZGVycyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zZXRQcm92aWRlcihjb25zdHJhaW50KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/dependencies/dependency-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AAkBxB,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAc7C,qBAAa,kBAAkB;aAYX,OAAO,EAAE,MAAM,GAAG,SAAS;IAX7C;;;OAGG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAM7B,MAAM,EAAE,MAAM,EACE,OAAO,EAAE,MAAM,GAAG,SAAS;IAK7C,MAAM,CAAC,eAAe,CACpB,QAAQ,EAAE,MAAM,GAAG,6BAA6B,GAC/C,kBAAkB;IAgBd,uBAAuB,IAAI,OAAO;IAIzC;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,MAAM,CAKlC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC,QAAQ;CAGhB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,cAAc,EAAE,QAAQ,EACjC,YAAY,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM;IAQrC,WAAW,CACf,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrC,eAAe,CAAC,UAAU,EAAE,kBAAkB;;;IAkB9C,4BAA4B,CAAC,UAAU,EAAE,kBAAkB;IA2B3D,uBAAuB,CAC3B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM;IAkBlB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;YAoC7D,iBAAiB;YAWjB,yBAAyB;IAajC,0BAA0B,CAAC,UAAU,EAAE,kBAAkB;;;;IAwBzD,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAQ;YAc1D,iCAAiC;IAgCzC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB;IAuBrD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwCtB,YAAY;;;;;;;;CAoD1B"}
|