@cdktn/cli-core 0.21.0
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/README.md +3 -0
- package/ambient.d.ts +13 -0
- package/eslint.config.mjs +82 -0
- package/jest.config.js +20 -0
- package/package.json +139 -0
- package/src/lib/cdktf-config.d.ts +16 -0
- package/src/lib/cdktf-config.d.ts.map +1 -0
- package/src/lib/cdktf-config.js +108 -0
- package/src/lib/cdktf-project-io-handler.d.ts +20 -0
- package/src/lib/cdktf-project-io-handler.d.ts.map +1 -0
- package/src/lib/cdktf-project-io-handler.js +84 -0
- package/src/lib/cdktf-project.d.ts +111 -0
- package/src/lib/cdktf-project.d.ts.map +1 -0
- package/src/lib/cdktf-project.js +371 -0
- package/src/lib/cdktf-stack.d.ts +134 -0
- package/src/lib/cdktf-stack.d.ts.map +1 -0
- package/src/lib/cdktf-stack.js +386 -0
- package/src/lib/convert.d.ts +6 -0
- package/src/lib/convert.d.ts.map +1 -0
- package/src/lib/convert.js +51 -0
- package/src/lib/dependencies/cdktf-config-manager.d.ts +12 -0
- package/src/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
- package/src/lib/dependencies/cdktf-config-manager.js +36 -0
- package/src/lib/dependencies/dependency-manager.d.ts +95 -0
- package/src/lib/dependencies/dependency-manager.d.ts.map +1 -0
- package/src/lib/dependencies/dependency-manager.js +393 -0
- package/src/lib/dependencies/package-manager.d.ts +18 -0
- package/src/lib/dependencies/package-manager.d.ts.map +1 -0
- package/src/lib/dependencies/package-manager.js +581 -0
- package/src/lib/dependencies/prebuilt-providers.d.ts +23 -0
- package/src/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
- package/src/lib/dependencies/prebuilt-providers.js +220 -0
- package/src/lib/dependencies/registry-api.d.ts +8 -0
- package/src/lib/dependencies/registry-api.d.ts.map +1 -0
- package/src/lib/dependencies/registry-api.js +77 -0
- package/src/lib/dependencies/version-constraints.d.ts +8 -0
- package/src/lib/dependencies/version-constraints.d.ts.map +1 -0
- package/src/lib/dependencies/version-constraints.js +95 -0
- package/src/lib/error-reporting.d.ts +10 -0
- package/src/lib/error-reporting.d.ts.map +1 -0
- package/src/lib/error-reporting.js +133 -0
- package/src/lib/errors.d.ts +6 -0
- package/src/lib/errors.d.ts.map +1 -0
- package/src/lib/errors.js +10 -0
- package/src/lib/execution-logs.d.ts +3 -0
- package/src/lib/execution-logs.d.ts.map +1 -0
- package/src/lib/execution-logs.js +47 -0
- package/src/lib/get.d.ts +25 -0
- package/src/lib/get.d.ts.map +1 -0
- package/src/lib/get.js +90 -0
- package/src/lib/helpers/stack-helpers.d.ts +16 -0
- package/src/lib/helpers/stack-helpers.d.ts.map +1 -0
- package/src/lib/helpers/stack-helpers.js +155 -0
- package/src/lib/index.d.ts +15 -0
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/index.js +44 -0
- package/src/lib/init.d.ts +37 -0
- package/src/lib/init.d.ts.map +1 -0
- package/src/lib/init.js +131 -0
- package/src/lib/local-provider-constraints.d.ts +28 -0
- package/src/lib/local-provider-constraints.d.ts.map +1 -0
- package/src/lib/local-provider-constraints.js +95 -0
- package/src/lib/local-provider-versions.d.ts +12 -0
- package/src/lib/local-provider-versions.d.ts.map +1 -0
- package/src/lib/local-provider-versions.js +73 -0
- package/src/lib/models/deploy-machine.d.ts +128 -0
- package/src/lib/models/deploy-machine.d.ts.map +1 -0
- package/src/lib/models/deploy-machine.js +280 -0
- package/src/lib/models/pty-process.d.ts +29 -0
- package/src/lib/models/pty-process.d.ts.map +1 -0
- package/src/lib/models/pty-process.js +132 -0
- package/src/lib/models/schema.d.ts +2307 -0
- package/src/lib/models/schema.d.ts.map +1 -0
- package/src/lib/models/schema.js +181 -0
- package/src/lib/models/terraform-cli.d.ts +72 -0
- package/src/lib/models/terraform-cli.d.ts.map +1 -0
- package/src/lib/models/terraform-cli.js +357 -0
- package/src/lib/models/terraform.d.ts +125 -0
- package/src/lib/models/terraform.d.ts.map +1 -0
- package/src/lib/models/terraform.js +72 -0
- package/src/lib/output.d.ts +23 -0
- package/src/lib/output.d.ts.map +1 -0
- package/src/lib/output.js +211 -0
- package/src/lib/provider-add.d.ts +15 -0
- package/src/lib/provider-add.d.ts.map +1 -0
- package/src/lib/provider-add.js +30 -0
- package/src/lib/server/terraform-logs.d.ts +2 -0
- package/src/lib/server/terraform-logs.d.ts.map +1 -0
- package/src/lib/server/terraform-logs.js +19 -0
- package/src/lib/synth-stack.d.ts +29 -0
- package/src/lib/synth-stack.d.ts.map +1 -0
- package/src/lib/synth-stack.js +251 -0
- package/src/lib/synth.d.ts +7 -0
- package/src/lib/synth.d.ts.map +1 -0
- package/src/lib/synth.js +67 -0
- package/src/lib/terraform-json.d.ts +1015 -0
- package/src/lib/terraform-json.d.ts.map +1 -0
- package/src/lib/terraform-json.js +82 -0
- package/src/lib/terraform-provider-lock.d.ts +25 -0
- package/src/lib/terraform-provider-lock.d.ts.map +1 -0
- package/src/lib/terraform-provider-lock.js +95 -0
- package/src/lib/watch.d.ts +16 -0
- package/src/lib/watch.d.ts.map +1 -0
- package/src/lib/watch.js +155 -0
- package/templates/csharp/.hooks.sscaff.js +63 -0
- package/templates/csharp/MainStack.cs +15 -0
- package/templates/csharp/MyTerraformStack.csproj +13 -0
- package/templates/csharp/Program.cs +17 -0
- package/templates/csharp/TestProgram.cs +42 -0
- package/templates/csharp/cdktf.json +11 -0
- package/templates/csharp/help +42 -0
- package/templates/csharp/{{}}.gitignore +345 -0
- package/templates/go/.hooks.sscaff.js +70 -0
- package/templates/go/cdktf.json +12 -0
- package/templates/go/go.mod +8 -0
- package/templates/go/help +32 -0
- package/templates/go/main.go +22 -0
- package/templates/go/main_test.go +42 -0
- package/templates/go/{{}}.gitignore +21 -0
- package/templates/java/.hooks.sscaff.js +64 -0
- package/templates/java/build.gradle +55 -0
- package/templates/java/cdktf.json +12 -0
- package/templates/java/gradle.properties +1 -0
- package/templates/java/gradlew +248 -0
- package/templates/java/gradlew.bat +92 -0
- package/templates/java/help +35 -0
- package/templates/java/settings.gradle +5 -0
- package/templates/java/src/main/java/com/mycompany/app/Main.java +16 -0
- package/templates/java/src/main/java/com/mycompany/app/MainStack.java +14 -0
- package/templates/java/src/test/java/com/company/app/MainTest.java +38 -0
- package/templates/java/{{}}.gitignore +14 -0
- package/templates/python/.hooks.sscaff.js +59 -0
- package/templates/python/Pipfile +7 -0
- package/templates/python/cdktf.json +12 -0
- package/templates/python/help +42 -0
- package/templates/python/main-test.py +26 -0
- package/templates/python/main.py +16 -0
- package/templates/python/{{}}.gitignore +7 -0
- package/templates/python-pip/.hooks.sscaff.js +63 -0
- package/templates/python-pip/cdktf.json +12 -0
- package/templates/python-pip/help +35 -0
- package/templates/python-pip/main-test.py +23 -0
- package/templates/python-pip/main.py +16 -0
- package/templates/python-pip/{{}}.gitignore +7 -0
- package/templates/typescript/.hooks.sscaff.js +78 -0
- package/templates/typescript/__tests__/main-test.ts +89 -0
- package/templates/typescript/cdktf.json +11 -0
- package/templates/typescript/help +51 -0
- package/templates/typescript/jest.config.js +187 -0
- package/templates/typescript/main.ts +14 -0
- package/templates/typescript/package.json +22 -0
- package/templates/typescript/setup.js +2 -0
- package/templates/typescript/tsconfig.json +35 -0
- package/templates/typescript/{{}}.gitignore +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform-json.d.ts","sourceRoot":"","sources":["terraform-json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUI,CAAC;AAEjB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCA0ClB,CAAC;AAEf,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACjE,MAAM,MAAM,gCAAgC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.terraformJsonSchema = void 0;
|
|
27
|
+
// Copyright (c) HashiCorp, Inc
|
|
28
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
29
|
+
const z = __importStar(require("zod"));
|
|
30
|
+
const remote = z
|
|
31
|
+
.object({
|
|
32
|
+
organization: z.string(),
|
|
33
|
+
hostname: z.string().optional(),
|
|
34
|
+
token: z.string().optional(),
|
|
35
|
+
workspaces: z.object({
|
|
36
|
+
name: z.string().optional(),
|
|
37
|
+
prefix: z.string().optional(),
|
|
38
|
+
}),
|
|
39
|
+
})
|
|
40
|
+
.deepPartial();
|
|
41
|
+
exports.terraformJsonSchema = z
|
|
42
|
+
.object({
|
|
43
|
+
"//": z
|
|
44
|
+
.object({
|
|
45
|
+
metadata: z
|
|
46
|
+
.object({
|
|
47
|
+
version: z.string(),
|
|
48
|
+
stackName: z.string(),
|
|
49
|
+
backend: z.string(),
|
|
50
|
+
})
|
|
51
|
+
.nonstrict(),
|
|
52
|
+
outputs: z.record(z.any()),
|
|
53
|
+
})
|
|
54
|
+
.nonstrict(),
|
|
55
|
+
terraform: z.object({
|
|
56
|
+
backend: z
|
|
57
|
+
.object({
|
|
58
|
+
// All other backends are here as well, but we don't read them right now
|
|
59
|
+
remote,
|
|
60
|
+
})
|
|
61
|
+
.nonstrict(),
|
|
62
|
+
cloud: z
|
|
63
|
+
.object({
|
|
64
|
+
organization: z.string(),
|
|
65
|
+
hostname: z.string().optional(),
|
|
66
|
+
token: z.string().optional(),
|
|
67
|
+
workspaces: z.union([
|
|
68
|
+
z.object({ name: z.string() }),
|
|
69
|
+
z.object({ tags: z.array(z.string()) }),
|
|
70
|
+
]),
|
|
71
|
+
})
|
|
72
|
+
.nonstrict(),
|
|
73
|
+
required_providers: z.record(z.object({ source: z.string(), version: z.string() }).nonstrict()),
|
|
74
|
+
required_version: z.string(),
|
|
75
|
+
}),
|
|
76
|
+
data: z.record(z.any()),
|
|
77
|
+
provider: z.record(z.any()),
|
|
78
|
+
resource: z.record(z.any()),
|
|
79
|
+
})
|
|
80
|
+
.deepPartial()
|
|
81
|
+
.nonstrict();
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWpzb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXJyYWZvcm0tanNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsdUNBQXlCO0FBRXpCLE1BQU0sTUFBTSxHQUFHLENBQUM7S0FDYixNQUFNLENBQUM7SUFDTixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUN4QixRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUMzQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtLQUM5QixDQUFDO0NBQ0gsQ0FBQztLQUNELFdBQVcsRUFBRSxDQUFDO0FBRUosUUFBQSxtQkFBbUIsR0FBRyxDQUFDO0tBQ2pDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDO1NBQ0osTUFBTSxDQUFDO1FBQ04sUUFBUSxFQUFFLENBQUM7YUFDUixNQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNuQixTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNyQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtTQUNwQixDQUFDO2FBQ0QsU0FBUyxFQUFFO1FBQ2QsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQzNCLENBQUM7U0FDRCxTQUFTLEVBQUU7SUFDZCxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNsQixPQUFPLEVBQUUsQ0FBQzthQUNQLE1BQU0sQ0FBQztZQUNOLHdFQUF3RTtZQUN4RSxNQUFNO1NBQ1AsQ0FBQzthQUNELFNBQVMsRUFBRTtRQUNkLEtBQUssRUFBRSxDQUFDO2FBQ0wsTUFBTSxDQUFDO1lBQ04sWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDL0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDNUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ3hDLENBQUM7U0FDSCxDQUFDO2FBQ0QsU0FBUyxFQUFFO1FBQ2Qsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQ2xFO1FBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtLQUM3QixDQUFDO0lBQ0YsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzQixRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDNUIsQ0FBQztLQUNELFdBQVcsRUFBRTtLQUNiLFNBQVMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIHogZnJvbSBcInpvZFwiO1xuXG5jb25zdCByZW1vdGUgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9yZ2FuaXphdGlvbjogei5zdHJpbmcoKSxcbiAgICBob3N0bmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHRva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgd29ya3NwYWNlczogei5vYmplY3Qoe1xuICAgICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgcHJlZml4OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSksXG4gIH0pXG4gIC5kZWVwUGFydGlhbCgpO1xuXG5leHBvcnQgY29uc3QgdGVycmFmb3JtSnNvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgXCIvL1wiOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgbWV0YWRhdGE6IHpcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHZlcnNpb246IHouc3RyaW5nKCksXG4gICAgICAgICAgICBzdGFja05hbWU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICBiYWNrZW5kOiB6LnN0cmluZygpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLm5vbnN0cmljdCgpLFxuICAgICAgICBvdXRwdXRzOiB6LnJlY29yZCh6LmFueSgpKSxcbiAgICAgIH0pXG4gICAgICAubm9uc3RyaWN0KCksXG4gICAgdGVycmFmb3JtOiB6Lm9iamVjdCh7XG4gICAgICBiYWNrZW5kOiB6XG4gICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgIC8vIEFsbCBvdGhlciBiYWNrZW5kcyBhcmUgaGVyZSBhcyB3ZWxsLCBidXQgd2UgZG9uJ3QgcmVhZCB0aGVtIHJpZ2h0IG5vd1xuICAgICAgICAgIHJlbW90ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLm5vbnN0cmljdCgpLFxuICAgICAgY2xvdWQ6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICAgIGhvc3RuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICAgICAgdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgICB3b3Jrc3BhY2VzOiB6LnVuaW9uKFtcbiAgICAgICAgICAgIHoub2JqZWN0KHsgbmFtZTogei5zdHJpbmcoKSB9KSxcbiAgICAgICAgICAgIHoub2JqZWN0KHsgdGFnczogei5hcnJheSh6LnN0cmluZygpKSB9KSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm5vbnN0cmljdCgpLFxuICAgICAgcmVxdWlyZWRfcHJvdmlkZXJzOiB6LnJlY29yZChcbiAgICAgICAgei5vYmplY3QoeyBzb3VyY2U6IHouc3RyaW5nKCksIHZlcnNpb246IHouc3RyaW5nKCkgfSkubm9uc3RyaWN0KCksXG4gICAgICApLFxuICAgICAgcmVxdWlyZWRfdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICB9KSxcbiAgICBkYXRhOiB6LnJlY29yZCh6LmFueSgpKSxcbiAgICBwcm92aWRlcjogei5yZWNvcmQoei5hbnkoKSksXG4gICAgcmVzb3VyY2U6IHoucmVjb3JkKHouYW55KCkpLFxuICB9KVxuICAuZGVlcFBhcnRpYWwoKVxuICAubm9uc3RyaWN0KCk7XG5cbmV4cG9ydCB0eXBlIFRlcnJhZm9ybVN0YWNrID0gei5pbmZlcjx0eXBlb2YgdGVycmFmb3JtSnNvblNjaGVtYT47XG5leHBvcnQgdHlwZSBUZXJyYWZvcm1Kc29uQ29uZmlnQmFja2VuZFJlbW90ZSA9IHouaW5mZXI8dHlwZW9mIHJlbW90ZT47XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) HashiCorp, Inc.
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { ProviderConstraint } from "./dependencies/dependency-manager";
|
|
6
|
+
type TerraformProviderLockFileEntry = {
|
|
7
|
+
name: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
constraints?: ProviderConstraint;
|
|
10
|
+
};
|
|
11
|
+
export declare class TerraformProviderLock {
|
|
12
|
+
private stackWorkingDirectory;
|
|
13
|
+
private _providerLockData;
|
|
14
|
+
constructor(stackWorkingDirectory: string);
|
|
15
|
+
private get lockFilePath();
|
|
16
|
+
hasProviderLockFile(): Promise<boolean>;
|
|
17
|
+
private readProviderLockFile;
|
|
18
|
+
private parseProviderLockFile;
|
|
19
|
+
providers(forceReread?: boolean): Promise<{
|
|
20
|
+
[name: string]: TerraformProviderLockFileEntry;
|
|
21
|
+
}>;
|
|
22
|
+
hasMatchingProvider(constraint: ProviderConstraint): Promise<boolean | undefined>;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=terraform-provider-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform-provider-lock.d.ts","sourceRoot":"","sources":["terraform-provider-lock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAKvE,KAAK,8BAA8B,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAQF,qBAAa,qBAAqB;IAEpB,OAAO,CAAC,qBAAqB;IADzC,OAAO,CAAC,iBAAiB,CAAuC;gBAC5C,qBAAqB,EAAE,MAAM;IAIjD,OAAO,KAAK,YAAY,GAEvB;IAEY,mBAAmB;YASlB,oBAAoB;IAYlC,OAAO,CAAC,qBAAqB;IAyChB,SAAS,CAAC,WAAW,UAAQ;;;IAS7B,mBAAmB,CAAC,UAAU,EAAE,kBAAkB;CAWhE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) HashiCorp, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.TerraformProviderLock = void 0;
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
13
|
+
const dependency_manager_1 = require("./dependencies/dependency-manager");
|
|
14
|
+
const commons_1 = require("@cdktn/commons");
|
|
15
|
+
const TerraformLockFileName = ".terraform.lock.hcl";
|
|
16
|
+
class TerraformProviderLock {
|
|
17
|
+
constructor(stackWorkingDirectory) {
|
|
18
|
+
this.stackWorkingDirectory = stackWorkingDirectory;
|
|
19
|
+
this._providerLockData = null;
|
|
20
|
+
}
|
|
21
|
+
get lockFilePath() {
|
|
22
|
+
return path_1.default.join(this.stackWorkingDirectory, TerraformLockFileName);
|
|
23
|
+
}
|
|
24
|
+
async hasProviderLockFile() {
|
|
25
|
+
try {
|
|
26
|
+
await promises_1.default.stat(this.lockFilePath);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async readProviderLockFile() {
|
|
34
|
+
try {
|
|
35
|
+
const lockFile = (await promises_1.default.readFile(this.lockFilePath)).toString();
|
|
36
|
+
return lockFile;
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
commons_1.logger.debug("Unable to read provider lock file", e);
|
|
40
|
+
}
|
|
41
|
+
return "";
|
|
42
|
+
}
|
|
43
|
+
parseProviderLockFile(contents) {
|
|
44
|
+
const providerLockData = {
|
|
45
|
+
providers: {},
|
|
46
|
+
};
|
|
47
|
+
let currentProvider;
|
|
48
|
+
contents.split(/\r\n|\r|\n/).forEach((line) => {
|
|
49
|
+
if (currentProvider) {
|
|
50
|
+
const constraintMatch = line.match(/^\s*constraints\s+=\s+"(.*)"/);
|
|
51
|
+
if (constraintMatch) {
|
|
52
|
+
providerLockData.providers[currentProvider].constraints =
|
|
53
|
+
new dependency_manager_1.ProviderConstraint(currentProvider, constraintMatch[1]);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const versionMatch = line.match(/^\s*version\s+=\s+"(.*)"/);
|
|
57
|
+
if (versionMatch) {
|
|
58
|
+
providerLockData.providers[currentProvider].version = versionMatch[1];
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const endMatch = line.match(/^\s*}/);
|
|
62
|
+
if (endMatch) {
|
|
63
|
+
currentProvider = undefined;
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const providerMatch = line.match(/provider "(.*)"/);
|
|
68
|
+
if (providerMatch) {
|
|
69
|
+
currentProvider = providerMatch[1];
|
|
70
|
+
providerLockData.providers[currentProvider] = {
|
|
71
|
+
name: new dependency_manager_1.ProviderConstraint(currentProvider, ">=0").simplifiedName,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return providerLockData;
|
|
76
|
+
}
|
|
77
|
+
async providers(forceReread = false) {
|
|
78
|
+
if (!this._providerLockData || forceReread) {
|
|
79
|
+
const contents = await this.readProviderLockFile();
|
|
80
|
+
this._providerLockData = this.parseProviderLockFile(contents);
|
|
81
|
+
}
|
|
82
|
+
return this._providerLockData.providers;
|
|
83
|
+
}
|
|
84
|
+
async hasMatchingProvider(constraint) {
|
|
85
|
+
var _a, _b;
|
|
86
|
+
const providerLockData = await this.providers();
|
|
87
|
+
const lockedProvider = providerLockData[constraint.source];
|
|
88
|
+
if (lockedProvider) {
|
|
89
|
+
return (_a = lockedProvider.constraints) === null || _a === void 0 ? void 0 : _a.matchesVersion((_b = constraint.version) !== null && _b !== void 0 ? _b : ">0");
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.TerraformProviderLock = TerraformProviderLock;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLXByb3ZpZGVyLWxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXJyYWZvcm0tcHJvdmlkZXItbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7QUFFSCxnREFBd0I7QUFDeEIsMkRBQTZCO0FBQzdCLDBFQUF1RTtBQUN2RSw0Q0FBd0M7QUFFeEMsTUFBTSxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQWNwRCxNQUFhLHFCQUFxQjtJQUVoQyxZQUFvQixxQkFBNkI7UUFBN0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFRO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVksWUFBWTtRQUN0QixPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxrQkFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxrQkFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVuRSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFnQjtRQUM1QyxNQUFNLGdCQUFnQixHQUFrQztZQUN0RCxTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFDRixJQUFJLGVBQW1DLENBQUM7UUFFeEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQ25FLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXO3dCQUNyRCxJQUFJLHVDQUFrQixDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUQsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RFLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLGVBQWUsR0FBRyxTQUFTLENBQUM7Z0JBQzlCLENBQUM7Z0JBRUQsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHO29CQUM1QyxJQUFJLEVBQUUsSUFBSSx1Q0FBa0IsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsY0FBYztpQkFDcEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUs7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQThCOztRQUM3RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sTUFBQSxjQUFjLENBQUMsV0FBVywwQ0FBRSxjQUFjLENBQy9DLE1BQUEsVUFBVSxDQUFDLE9BQU8sbUNBQUksSUFBSSxDQUMzQixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBNUZELHNEQTRGQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IFByb3ZpZGVyQ29uc3RyYWludCB9IGZyb20gXCIuL2RlcGVuZGVuY2llcy9kZXBlbmRlbmN5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5jb25zdCBUZXJyYWZvcm1Mb2NrRmlsZU5hbWUgPSBcIi50ZXJyYWZvcm0ubG9jay5oY2xcIjtcblxudHlwZSBUZXJyYWZvcm1Qcm92aWRlckxvY2tGaWxlRW50cnkgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgY29uc3RyYWludHM/OiBQcm92aWRlckNvbnN0cmFpbnQ7XG59O1xuXG50eXBlIFRlcnJhZm9ybVByb3ZpZGVyTG9ja0ZpbGVEYXRhID0ge1xuICBwcm92aWRlcnM6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogVGVycmFmb3JtUHJvdmlkZXJMb2NrRmlsZUVudHJ5O1xuICB9O1xufTtcblxuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybVByb3ZpZGVyTG9jayB7XG4gIHByaXZhdGUgX3Byb3ZpZGVyTG9ja0RhdGE6IFRlcnJhZm9ybVByb3ZpZGVyTG9ja0ZpbGVEYXRhIHwgbnVsbDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGFja1dvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZykge1xuICAgIHRoaXMuX3Byb3ZpZGVyTG9ja0RhdGEgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbG9ja0ZpbGVQYXRoKCkge1xuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5zdGFja1dvcmtpbmdEaXJlY3RvcnksIFRlcnJhZm9ybUxvY2tGaWxlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFzUHJvdmlkZXJMb2NrRmlsZSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuc3RhdCh0aGlzLmxvY2tGaWxlUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkUHJvdmlkZXJMb2NrRmlsZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbG9ja0ZpbGUgPSAoYXdhaXQgZnMucmVhZEZpbGUodGhpcy5sb2NrRmlsZVBhdGgpKS50b1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gbG9ja0ZpbGU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiVW5hYmxlIHRvIHJlYWQgcHJvdmlkZXIgbG9jayBmaWxlXCIsIGUpO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVByb3ZpZGVyTG9ja0ZpbGUoY29udGVudHM6IHN0cmluZykge1xuICAgIGNvbnN0IHByb3ZpZGVyTG9ja0RhdGE6IFRlcnJhZm9ybVByb3ZpZGVyTG9ja0ZpbGVEYXRhID0ge1xuICAgICAgcHJvdmlkZXJzOiB7fSxcbiAgICB9O1xuICAgIGxldCBjdXJyZW50UHJvdmlkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnRlbnRzLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGlmIChjdXJyZW50UHJvdmlkZXIpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludE1hdGNoID0gbGluZS5tYXRjaCgvXlxccypjb25zdHJhaW50c1xccys9XFxzK1wiKC4qKVwiLyk7XG4gICAgICAgIGlmIChjb25zdHJhaW50TWF0Y2gpIHtcbiAgICAgICAgICBwcm92aWRlckxvY2tEYXRhLnByb3ZpZGVyc1tjdXJyZW50UHJvdmlkZXJdLmNvbnN0cmFpbnRzID1cbiAgICAgICAgICAgIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoY3VycmVudFByb3ZpZGVyLCBjb25zdHJhaW50TWF0Y2hbMV0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IGxpbmUubWF0Y2goL15cXHMqdmVyc2lvblxccys9XFxzK1wiKC4qKVwiLyk7XG4gICAgICAgIGlmICh2ZXJzaW9uTWF0Y2gpIHtcbiAgICAgICAgICBwcm92aWRlckxvY2tEYXRhLnByb3ZpZGVyc1tjdXJyZW50UHJvdmlkZXJdLnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV07XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kTWF0Y2ggPSBsaW5lLm1hdGNoKC9eXFxzKn0vKTtcbiAgICAgICAgaWYgKGVuZE1hdGNoKSB7XG4gICAgICAgICAgY3VycmVudFByb3ZpZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm92aWRlck1hdGNoID0gbGluZS5tYXRjaCgvcHJvdmlkZXIgXCIoLiopXCIvKTtcbiAgICAgIGlmIChwcm92aWRlck1hdGNoKSB7XG4gICAgICAgIGN1cnJlbnRQcm92aWRlciA9IHByb3ZpZGVyTWF0Y2hbMV07XG4gICAgICAgIHByb3ZpZGVyTG9ja0RhdGEucHJvdmlkZXJzW2N1cnJlbnRQcm92aWRlcl0gPSB7XG4gICAgICAgICAgbmFtZTogbmV3IFByb3ZpZGVyQ29uc3RyYWludChjdXJyZW50UHJvdmlkZXIsIFwiPj0wXCIpLnNpbXBsaWZpZWROYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb3ZpZGVyTG9ja0RhdGE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJvdmlkZXJzKGZvcmNlUmVyZWFkID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuX3Byb3ZpZGVyTG9ja0RhdGEgfHwgZm9yY2VSZXJlYWQpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdGhpcy5yZWFkUHJvdmlkZXJMb2NrRmlsZSgpO1xuICAgICAgdGhpcy5fcHJvdmlkZXJMb2NrRGF0YSA9IHRoaXMucGFyc2VQcm92aWRlckxvY2tGaWxlKGNvbnRlbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvdmlkZXJMb2NrRGF0YS5wcm92aWRlcnM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFzTWF0Y2hpbmdQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBjb25zdCBwcm92aWRlckxvY2tEYXRhID0gYXdhaXQgdGhpcy5wcm92aWRlcnMoKTtcbiAgICBjb25zdCBsb2NrZWRQcm92aWRlciA9IHByb3ZpZGVyTG9ja0RhdGFbY29uc3RyYWludC5zb3VyY2VdO1xuICAgIGlmIChsb2NrZWRQcm92aWRlcikge1xuICAgICAgcmV0dXJuIGxvY2tlZFByb3ZpZGVyLmNvbnN0cmFpbnRzPy5tYXRjaGVzVmVyc2lvbihcbiAgICAgICAgY29uc3RyYWludC52ZXJzaW9uID8/IFwiPjBcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CdktfProjectOptions, MutationOptions } from "./cdktf-project";
|
|
2
|
+
import { CdktfStack } from "./cdktf-stack";
|
|
3
|
+
export type State = {
|
|
4
|
+
type: "waiting";
|
|
5
|
+
} | {
|
|
6
|
+
type: "running";
|
|
7
|
+
nextRunQueued: boolean;
|
|
8
|
+
currentRun: Promise<void>;
|
|
9
|
+
inProgress: CdktfStack[];
|
|
10
|
+
finished: CdktfStack[];
|
|
11
|
+
pending: CdktfStack[];
|
|
12
|
+
} | {
|
|
13
|
+
type: "stopped";
|
|
14
|
+
};
|
|
15
|
+
export declare function watch(projectOptions: CdktfProjectOptions, mutationOptions: MutationOptions, abortSignal: AbortSignal, onStateChange: (newState: State) => void): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["watch.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,mBAAmB,EACnB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AA0E3C,MAAM,MAAM,KAAK,GACb;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,GACD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,wBAAsB,KAAK,CACzB,cAAc,EAAE,mBAAmB,EACnC,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,iBAiFzC"}
|
package/src/lib/watch.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
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.watch = void 0;
|
|
30
|
+
// Copyright (c) HashiCorp, Inc
|
|
31
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
32
|
+
const path_1 = __importDefault(require("path"));
|
|
33
|
+
const cdktf_project_1 = require("./cdktf-project");
|
|
34
|
+
const fs = __importStar(require("fs"));
|
|
35
|
+
const chokidar = __importStar(require("chokidar"));
|
|
36
|
+
const commons_1 = require("@cdktn/commons");
|
|
37
|
+
// In this very first iteration we will find out which files to watch by asking the user to provide the files
|
|
38
|
+
// We default to something reasonable per language and write it into the cdkt.json file
|
|
39
|
+
// Mid-Term we might want to add a WatchFile / WatchDir construct that we can use (e.g. in assets) and that a user can use to specify their watch behaviour
|
|
40
|
+
// See https://github.com/hashicorp/terraform-cdk/issues/1668
|
|
41
|
+
function getOrWriteDefaultWatchConfig(projectPath = process.cwd()) {
|
|
42
|
+
const cdktfJsonPath = path_1.default.resolve(projectPath, "cdktf.json");
|
|
43
|
+
commons_1.logger.debug(`Getting files to watch from cdktf.json at ${cdktfJsonPath}`);
|
|
44
|
+
let cdktfJson;
|
|
45
|
+
try {
|
|
46
|
+
cdktfJson = require(cdktfJsonPath);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
throw commons_1.Errors.Internal(`Could not find cdktf.json file in ${projectPath}`, err);
|
|
50
|
+
}
|
|
51
|
+
if (cdktfJson.watchPattern) {
|
|
52
|
+
commons_1.logger.debug(`Found watchPattern in cdktf.json: ${cdktfJson.watchPattern}`);
|
|
53
|
+
return cdktfJson.watchPattern;
|
|
54
|
+
}
|
|
55
|
+
const language = cdktfJson.language;
|
|
56
|
+
if (!language) {
|
|
57
|
+
throw commons_1.Errors.Usage(`No language specified in cdktf.json, please either specify a language or watchPattern to use the watch command`);
|
|
58
|
+
}
|
|
59
|
+
const defaultWatchPattern = {
|
|
60
|
+
typescript: ["./**/*.ts"],
|
|
61
|
+
python: ["./**/*.py"],
|
|
62
|
+
java: ["src/**/*.java"],
|
|
63
|
+
csharp: ["./**/*.cs"],
|
|
64
|
+
go: ["./**/*.go"],
|
|
65
|
+
}[language];
|
|
66
|
+
fs.writeFileSync(cdktfJsonPath, JSON.stringify({ ...cdktfJson, watchPattern: defaultWatchPattern }, null, 2));
|
|
67
|
+
commons_1.logger.debug(`Write default watchPattern for ${language} in cdktf.json.`);
|
|
68
|
+
return defaultWatchPattern;
|
|
69
|
+
}
|
|
70
|
+
const projectStatus = (project) => {
|
|
71
|
+
if (!(project === null || project === void 0 ? void 0 : project.stacksToRun.length)) {
|
|
72
|
+
return {
|
|
73
|
+
inProgress: [],
|
|
74
|
+
finished: [],
|
|
75
|
+
pending: [],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
const inProgress = project.stacksToRun.filter((s) => s.isRunning);
|
|
79
|
+
const finished = project.stacksToRun.filter((s) => s.isDone);
|
|
80
|
+
const pending = project.stacksToRun.filter((s) => s.isPending);
|
|
81
|
+
return { inProgress, finished, pending };
|
|
82
|
+
};
|
|
83
|
+
async function watch(projectOptions, mutationOptions, abortSignal, onStateChange) {
|
|
84
|
+
const patterns = getOrWriteDefaultWatchConfig();
|
|
85
|
+
const watcher = chokidar.watch(patterns, {
|
|
86
|
+
ignoreInitial: true,
|
|
87
|
+
});
|
|
88
|
+
let state = { type: "waiting" };
|
|
89
|
+
const changeState = (newState) => {
|
|
90
|
+
state = newState;
|
|
91
|
+
onStateChange(state);
|
|
92
|
+
};
|
|
93
|
+
async function run() {
|
|
94
|
+
commons_1.logger.debug("Running cdktn deploy");
|
|
95
|
+
const project = new cdktf_project_1.CdktfProject({
|
|
96
|
+
synthOrigin: "watch",
|
|
97
|
+
...projectOptions,
|
|
98
|
+
onLog: (log) => {
|
|
99
|
+
if (projectOptions.onLog) {
|
|
100
|
+
projectOptions.onLog(log);
|
|
101
|
+
}
|
|
102
|
+
if (state.type === "running") {
|
|
103
|
+
changeState({ ...state, ...projectStatus(project) });
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
const abort = () => project.hardAbort();
|
|
108
|
+
abortSignal.addEventListener("abort", abort);
|
|
109
|
+
await project.deploy(mutationOptions);
|
|
110
|
+
abortSignal.removeEventListener("abort", abort);
|
|
111
|
+
commons_1.logger.debug("cdktn deploy finished");
|
|
112
|
+
if (state.type !== "running") {
|
|
113
|
+
throw commons_1.Errors.Internal("Watch was in a state where the state was not running in the run phase");
|
|
114
|
+
}
|
|
115
|
+
if (state.nextRunQueued) {
|
|
116
|
+
commons_1.logger.debug("Next run was queued, starting it now");
|
|
117
|
+
changeState({
|
|
118
|
+
...state,
|
|
119
|
+
nextRunQueued: false,
|
|
120
|
+
currentRun: run(),
|
|
121
|
+
...projectStatus(project),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
commons_1.logger.debug("Nothing queued, waiting for changes");
|
|
126
|
+
changeState({ type: "waiting" });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
abortSignal.addEventListener("abort", () => {
|
|
130
|
+
commons_1.logger.debug("Abort signal received, stopping watch");
|
|
131
|
+
watcher.close();
|
|
132
|
+
changeState({ type: "stopped" });
|
|
133
|
+
});
|
|
134
|
+
const onFileChange = () => {
|
|
135
|
+
if (state.type === "stopped") {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (state.type === "running") {
|
|
139
|
+
changeState({ ...state, nextRunQueued: true });
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
changeState({
|
|
143
|
+
type: "running",
|
|
144
|
+
nextRunQueued: false,
|
|
145
|
+
currentRun: run(),
|
|
146
|
+
...projectStatus(),
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
watcher.on("all", onFileChange);
|
|
150
|
+
// initially run once
|
|
151
|
+
onFileChange();
|
|
152
|
+
await (0, commons_1.sendTelemetry)("watch", { event: "start" });
|
|
153
|
+
}
|
|
154
|
+
exports.watch = watch;
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3YXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsZ0RBQXdCO0FBQ3hCLG1EQUl5QjtBQUN6Qix1Q0FBeUI7QUFDekIsbURBQXFDO0FBQ3JDLDRDQUErRDtBQUcvRCw2R0FBNkc7QUFDN0csdUZBQXVGO0FBQ3ZGLDJKQUEySjtBQUMzSiw2REFBNkQ7QUFDN0QsU0FBUyw0QkFBNEIsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtJQUMvRCxNQUFNLGFBQWEsR0FBRyxjQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUUzRSxJQUFJLFNBQVMsQ0FBQztJQUNkLElBQUksQ0FBQztRQUNILFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsTUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FDbkIscUNBQXFDLFdBQVcsRUFBRSxFQUNsRCxHQUFHLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDNUUsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FNRSxTQUFTLENBQUMsUUFBUSxDQUFDO0lBRW5DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQ2hCLGdIQUFnSCxDQUNqSCxDQUFDO0lBQ0osQ0FB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TSxZQUFZLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixXQUFXLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUVELFdBQVcsQ0FBQztZQUNWLElBQUksRUFBRSxTQUFTO1lBQ2YsYUFBYSxFQUFFLEtBQUs7WUFDcEIsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNqQixHQUFHLGFBQWEsRUFBRTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoQyxxQkFBcUI7SUFDckIsWUFBWSxFQUFFLENBQUM7SUFFZixNQUFNLElBQUEsdUJBQWEsRUFBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBckZELHNCQXFGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHtcbiAgQ2RrdGZQcm9qZWN0LFxuICBDZGt0ZlByb2plY3RPcHRpb25zLFxuICBNdXRhdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL2Nka3RmLXByb2plY3RcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgY2hva2lkYXIgZnJvbSBcImNob2tpZGFyXCI7XG5pbXBvcnQgeyBsb2dnZXIsIEVycm9ycywgc2VuZFRlbGVtZXRyeSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgQ2RrdGZTdGFjayB9IGZyb20gXCIuL2Nka3RmLXN0YWNrXCI7XG5cbi8vIEluIHRoaXMgdmVyeSBmaXJzdCBpdGVyYXRpb24gd2Ugd2lsbCBmaW5kIG91dCB3aGljaCBmaWxlcyB0byB3YXRjaCBieSBhc2tpbmcgdGhlIHVzZXIgdG8gcHJvdmlkZSB0aGUgZmlsZXNcbi8vIFdlIGRlZmF1bHQgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUgcGVyIGxhbmd1YWdlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBjZGt0Lmpzb24gZmlsZVxuLy8gTWlkLVRlcm0gd2UgbWlnaHQgd2FudCB0byBhZGQgYSBXYXRjaEZpbGUgLyBXYXRjaERpciBjb25zdHJ1Y3QgdGhhdCB3ZSBjYW4gdXNlIChlLmcuIGluIGFzc2V0cykgYW5kIHRoYXQgYSB1c2VyIGNhbiB1c2UgdG8gc3BlY2lmeSB0aGVpciB3YXRjaCBiZWhhdmlvdXJcbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzE2NjhcbmZ1bmN0aW9uIGdldE9yV3JpdGVEZWZhdWx0V2F0Y2hDb25maWcocHJvamVjdFBhdGggPSBwcm9jZXNzLmN3ZCgpKSB7XG4gIGNvbnN0IGNka3RmSnNvblBhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdFBhdGgsIFwiY2RrdGYuanNvblwiKTtcbiAgbG9nZ2VyLmRlYnVnKGBHZXR0aW5nIGZpbGVzIHRvIHdhdGNoIGZyb20gY2RrdGYuanNvbiBhdCAke2Nka3RmSnNvblBhdGh9YCk7XG5cbiAgbGV0IGNka3RmSnNvbjtcbiAgdHJ5IHtcbiAgICBjZGt0Zkpzb24gPSByZXF1aXJlKGNka3RmSnNvblBhdGgpO1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgIGBDb3VsZCBub3QgZmluZCBjZGt0Zi5qc29uIGZpbGUgaW4gJHtwcm9qZWN0UGF0aH1gLFxuICAgICAgZXJyLFxuICAgICk7XG4gIH1cblxuICBpZiAoY2RrdGZKc29uLndhdGNoUGF0dGVybikge1xuICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgd2F0Y2hQYXR0ZXJuIGluIGNka3RmLmpzb246ICR7Y2RrdGZKc29uLndhdGNoUGF0dGVybn1gKTtcbiAgICByZXR1cm4gY2RrdGZKc29uLndhdGNoUGF0dGVybjtcbiAgfVxuICBjb25zdCBsYW5ndWFnZTpcbiAgICB8IFwidHlwZXNjcmlwdFwiXG4gICAgfCBcInB5dGhvblwiXG4gICAgfCBcImphdmFcIlxuICAgIHwgXCJjc2hhcnBcIlxuICAgIHwgXCJnb1wiXG4gICAgfCB1bmRlZmluZWQgPSBjZGt0Zkpzb24ubGFuZ3VhZ2U7XG5cbiAgaWYgKCFsYW5ndWFnZSkge1xuICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgIGBObyBsYW5ndWFnZSBzcGVjaWZpZWQgaW4gY2RrdGYuanNvbiwgcGxlYXNlIGVpdGhlciBzcGVjaWZ5IGEgbGFuZ3VhZ2Ugb3Igd2F0Y2hQYXR0ZXJuIHRvIHVzZSB0aGUgd2F0Y2ggY29tbWFuZGAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRXYXRjaFBhdHRlcm4gPSB7XG4gICAgdHlwZXNjcmlwdDogW1wiLi8qKi8qLnRzXCJdLFxuICAgIHB5dGhvbjogW1wiLi8qKi8qLnB5XCJdLFxuICAgIGphdmE6IFtcInNyYy8qKi8qLmphdmFcIl0sXG4gICAgY3NoYXJwOiBbXCIuLyoqLyouY3NcIl0sXG4gICAgZ286IFtcIi4vKiovKi5nb1wiXSxcbiAgfVtsYW5ndWFnZV07XG5cbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBjZGt0Zkpzb25QYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgeyAuLi5jZGt0Zkpzb24sIHdhdGNoUGF0dGVybjogZGVmYXVsdFdhdGNoUGF0dGVybiB9LFxuICAgICAgbnVsbCxcbiAgICAgIDIsXG4gICAgKSxcbiAgKTtcbiAgbG9nZ2VyLmRlYnVnKGBXcml0ZSBkZWZhdWx0IHdhdGNoUGF0dGVybiBmb3IgJHtsYW5ndWFnZX0gaW4gY2RrdGYuanNvbi5gKTtcblxuICByZXR1cm4gZGVmYXVsdFdhdGNoUGF0dGVybjtcbn1cblxuY29uc3QgcHJvamVjdFN0YXR1cyA9IChwcm9qZWN0PzogQ2RrdGZQcm9qZWN0KSA9PiB7XG4gIGlmICghcHJvamVjdD8uc3RhY2tzVG9SdW4ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluUHJvZ3Jlc3M6IFtdLFxuICAgICAgZmluaXNoZWQ6IFtdLFxuICAgICAgcGVuZGluZzogW10sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGluUHJvZ3Jlc3MgPSBwcm9qZWN0LnN0YWNrc1RvUnVuLmZpbHRlcigocykgPT4gcy5pc1J1bm5pbmcpO1xuICBjb25zdCBmaW5pc2hlZCA9IHByb2plY3Quc3RhY2tzVG9SdW4uZmlsdGVyKChzKSA9PiBzLmlzRG9uZSk7XG4gIGNvbnN0IHBlbmRpbmcgPSBwcm9qZWN0LnN0YWNrc1RvUnVuLmZpbHRlcigocykgPT4gcy5pc1BlbmRpbmcpO1xuICByZXR1cm4geyBpblByb2dyZXNzLCBmaW5pc2hlZCwgcGVuZGluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgU3RhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwid2FpdGluZ1wiO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInJ1bm5pbmdcIjtcbiAgICAgIG5leHRSdW5RdWV1ZWQ6IGJvb2xlYW47XG4gICAgICBjdXJyZW50UnVuOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgaW5Qcm9ncmVzczogQ2RrdGZTdGFja1tdO1xuICAgICAgZmluaXNoZWQ6IENka3RmU3RhY2tbXTtcbiAgICAgIHBlbmRpbmc6IENka3RmU3RhY2tbXTtcbiAgICB9XG4gIHwgeyB0eXBlOiBcInN0b3BwZWRcIiB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2F0Y2goXG4gIHByb2plY3RPcHRpb25zOiBDZGt0ZlByb2plY3RPcHRpb25zLFxuICBtdXRhdGlvbk9wdGlvbnM6IE11dGF0aW9uT3B0aW9ucyxcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuICBvblN0YXRlQ2hhbmdlOiAobmV3U3RhdGU6IFN0YXRlKSA9PiB2b2lkLFxuKSB7XG4gIGNvbnN0IHBhdHRlcm5zID0gZ2V0T3JXcml0ZURlZmF1bHRXYXRjaENvbmZpZygpO1xuICBjb25zdCB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2gocGF0dGVybnMsIHtcbiAgICBpZ25vcmVJbml0aWFsOiB0cnVlLFxuICB9KTtcbiAgbGV0IHN0YXRlOiBTdGF0ZSA9IHsgdHlwZTogXCJ3YWl0aW5nXCIgfTtcbiAgY29uc3QgY2hhbmdlU3RhdGUgPSAobmV3U3RhdGU6IFN0YXRlKSA9PiB7XG4gICAgc3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBvblN0YXRlQ2hhbmdlKHN0YXRlKTtcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBydW4oKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiUnVubmluZyBjZGt0biBkZXBsb3lcIik7XG4gICAgY29uc3QgcHJvamVjdCA9IG5ldyBDZGt0ZlByb2plY3Qoe1xuICAgICAgc3ludGhPcmlnaW46IFwid2F0Y2hcIixcbiAgICAgIC4uLnByb2plY3RPcHRpb25zLFxuICAgICAgb25Mb2c6IChsb2cpID0+IHtcbiAgICAgICAgaWYgKHByb2plY3RPcHRpb25zLm9uTG9nKSB7XG4gICAgICAgICAgcHJvamVjdE9wdGlvbnMub25Mb2cobG9nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUudHlwZSA9PT0gXCJydW5uaW5nXCIpIHtcbiAgICAgICAgICBjaGFuZ2VTdGF0ZSh7IC4uLnN0YXRlLCAuLi5wcm9qZWN0U3RhdHVzKHByb2plY3QpIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGFib3J0ID0gKCkgPT4gcHJvamVjdC5oYXJkQWJvcnQoKTtcbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnQpO1xuICAgIGF3YWl0IHByb2plY3QuZGVwbG95KG11dGF0aW9uT3B0aW9ucyk7XG4gICAgYWJvcnRTaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0KTtcbiAgICBsb2dnZXIuZGVidWcoXCJjZGt0biBkZXBsb3kgZmluaXNoZWRcIik7XG5cbiAgICBpZiAoc3RhdGUudHlwZSAhPT0gXCJydW5uaW5nXCIpIHtcbiAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgXCJXYXRjaCB3YXMgaW4gYSBzdGF0ZSB3aGVyZSB0aGUgc3RhdGUgd2FzIG5vdCBydW5uaW5nIGluIHRoZSBydW4gcGhhc2VcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLm5leHRSdW5RdWV1ZWQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIk5leHQgcnVuIHdhcyBxdWV1ZWQsIHN0YXJ0aW5nIGl0IG5vd1wiKTtcbiAgICAgIGNoYW5nZVN0YXRlKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG5leHRSdW5RdWV1ZWQ6IGZhbHNlLFxuICAgICAgICBjdXJyZW50UnVuOiBydW4oKSxcbiAgICAgICAgLi4ucHJvamVjdFN0YXR1cyhwcm9qZWN0KSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJOb3RoaW5nIHF1ZXVlZCwgd2FpdGluZyBmb3IgY2hhbmdlc1wiKTtcbiAgICAgIGNoYW5nZVN0YXRlKHsgdHlwZTogXCJ3YWl0aW5nXCIgfSk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoXCJBYm9ydCBzaWduYWwgcmVjZWl2ZWQsIHN0b3BwaW5nIHdhdGNoXCIpO1xuICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICBjaGFuZ2VTdGF0ZSh7IHR5cGU6IFwic3RvcHBlZFwiIH0pO1xuICB9KTtcblxuICBjb25zdCBvbkZpbGVDaGFuZ2UgPSAoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnR5cGUgPT09IFwic3RvcHBlZFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnR5cGUgPT09IFwicnVubmluZ1wiKSB7XG4gICAgICBjaGFuZ2VTdGF0ZSh7IC4uLnN0YXRlLCBuZXh0UnVuUXVldWVkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKHtcbiAgICAgIHR5cGU6IFwicnVubmluZ1wiLFxuICAgICAgbmV4dFJ1blF1ZXVlZDogZmFsc2UsXG4gICAgICBjdXJyZW50UnVuOiBydW4oKSxcbiAgICAgIC4uLnByb2plY3RTdGF0dXMoKSxcbiAgICB9KTtcbiAgfTtcblxuICB3YXRjaGVyLm9uKFwiYWxsXCIsIG9uRmlsZUNoYW5nZSk7XG4gIC8vIGluaXRpYWxseSBydW4gb25jZVxuICBvbkZpbGVDaGFuZ2UoKTtcblxuICBhd2FpdCBzZW5kVGVsZW1ldHJ5KFwid2F0Y2hcIiwgeyBldmVudDogXCJzdGFydFwiIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) HashiCorp, Inc.
|
|
3
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const { execSync } = require('child_process');
|
|
7
|
+
const { readFileSync, writeFileSync } = require('fs');
|
|
8
|
+
const os = require('os');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
|
|
11
|
+
exports.pre = (variables) => {
|
|
12
|
+
try {
|
|
13
|
+
if (os.platform() === 'win32') {
|
|
14
|
+
execSync('where dotnet')
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
execSync('which dotnet')
|
|
18
|
+
}
|
|
19
|
+
} catch {
|
|
20
|
+
console.error(`Unable to find "dotnet" installation. Install from https://dotnet.microsoft.com/download`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
exports.post = options => {
|
|
26
|
+
const { nuget_cdktf, cdktf_version } = options;
|
|
27
|
+
if (!nuget_cdktf) {
|
|
28
|
+
throw new Error(`missing context "nuget_cdktf"`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Terraform Cloud configuration settings if the organization name and workspace is set.
|
|
32
|
+
if (options.OrganizationName != '') {
|
|
33
|
+
console.log(`\nGenerating Terraform Cloud configuration for '${options.OrganizationName}' organization and '${options.WorkspaceName}' workspace.....`)
|
|
34
|
+
terraformCloudConfig(options.$base, options.OrganizationName, options.WorkspaceName, options.TerraformRemoteHostname)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// dist package
|
|
38
|
+
if (nuget_cdktf.endsWith('.nupkg')) {
|
|
39
|
+
srcFolder = path.dirname(nuget_cdktf);
|
|
40
|
+
|
|
41
|
+
writeFileSync('./NuGet.Config', `<?xml version="1.0" encoding="utf-8"?>
|
|
42
|
+
<configuration>
|
|
43
|
+
<packageSources>
|
|
44
|
+
<add key="Locally Distributed Packages" value="${srcFolder}" />
|
|
45
|
+
<add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
|
|
46
|
+
</packageSources>
|
|
47
|
+
</configuration>`, 'utf-8');
|
|
48
|
+
}
|
|
49
|
+
execSync(`dotnet add package Microsoft.NET.Test.Sdk --version 17.2.0`, { stdio: 'inherit' });
|
|
50
|
+
execSync(`dotnet add package xunit --version 2.4.1`, { stdio: 'inherit' });
|
|
51
|
+
execSync(`dotnet add package xunit.runner.visualstudio --version 2.4.5`, { stdio: 'inherit' });
|
|
52
|
+
execSync(`dotnet restore`, { stdio: 'inherit' });
|
|
53
|
+
console.log(readFileSync('./help', 'utf-8'));
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
function terraformCloudConfig(baseName, organizationName, workspaceName, terraformRemoteHostname) {
|
|
57
|
+
template = readFileSync('./Program.cs', 'utf-8');
|
|
58
|
+
|
|
59
|
+
result = template.replace(`new MainStack(app, "${baseName}");`, `MainStack stack = new MainStack(app, "${baseName}");
|
|
60
|
+
new CloudBackend(stack, new CloudBackendConfig { Hostname = "${terraformRemoteHostname}", Organization = "${organizationName}", Workspaces = new NamedCloudWorkspace("${workspaceName}") });`);
|
|
61
|
+
|
|
62
|
+
writeFileSync('./Program.cs', result, 'utf-8');
|
|
63
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<OutputType>Exe</OutputType>
|
|
5
|
+
<TargetFramework>net6.0</TargetFramework>
|
|
6
|
+
<GenerateProgramFile>false</GenerateProgramFile>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<PackageReference Include="Io.Cdktn" Version="{{ cdktf_version }}" />
|
|
11
|
+
</ItemGroup>
|
|
12
|
+
|
|
13
|
+
</Project>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
using System;
|
|
2
|
+
using Constructs;
|
|
3
|
+
using Io.Cdktn;
|
|
4
|
+
|
|
5
|
+
namespace MyCompany.MyApp
|
|
6
|
+
{
|
|
7
|
+
class Program
|
|
8
|
+
{
|
|
9
|
+
public static void Main(string[] args)
|
|
10
|
+
{
|
|
11
|
+
App app = new App();
|
|
12
|
+
new MainStack(app, "{{ $base }}");
|
|
13
|
+
app.Synth();
|
|
14
|
+
Console.WriteLine("App synth complete");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
using Xunit;
|
|
2
|
+
using Io.Cdktn;
|
|
3
|
+
using System;
|
|
4
|
+
using System.Collections.Generic;
|
|
5
|
+
|
|
6
|
+
namespace MyCompany.MyApp{
|
|
7
|
+
// The tests below are example tests, you can find more information at
|
|
8
|
+
// https://cdk.tf/testing
|
|
9
|
+
public class TestProgram{
|
|
10
|
+
|
|
11
|
+
[Fact]
|
|
12
|
+
public void myAppTest(){
|
|
13
|
+
Assert.True(true);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//[Fact]
|
|
17
|
+
//public void CheckValidity(){
|
|
18
|
+
// TerraformStack stack = new TerraformStack(Testing.App(), "stack");
|
|
19
|
+
// MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "construct");
|
|
20
|
+
// Assert.True(Testing.ToBeValidTerraform(Testing.FullSynth(stack)) );
|
|
21
|
+
//}
|
|
22
|
+
|
|
23
|
+
//[Fact]
|
|
24
|
+
//public void shouldContainContainer(){
|
|
25
|
+
// TerraformStack stack = new TerraformStack(Testing.App(), "stack");
|
|
26
|
+
// MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "construct");
|
|
27
|
+
// string synthesized = Testing.Synth(stack);
|
|
28
|
+
// Assert.True(Testing.ToHaveResource(synthesized, Container.TfResourceType) );
|
|
29
|
+
//}
|
|
30
|
+
|
|
31
|
+
//[Fact]
|
|
32
|
+
//public void shouldUseUbuntuImage(){
|
|
33
|
+
// TerraformStack stack = new TerraformStack(Testing.App(), "stack");
|
|
34
|
+
// MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "construct");
|
|
35
|
+
// string synthesized = Testing.Synth(stack);
|
|
36
|
+
// Assert.True(Testing.ToHaveResourceWithProperties(synthesized, Image.TfResourceType, new Dictionary<String, Object>() {
|
|
37
|
+
// {"name", "ubuntu:latest"}
|
|
38
|
+
// }) );
|
|
39
|
+
//}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
========================================================================================================
|
|
2
|
+
|
|
3
|
+
Your cdktn csharp project is ready!
|
|
4
|
+
|
|
5
|
+
cat help Prints this message
|
|
6
|
+
|
|
7
|
+
Compile:
|
|
8
|
+
dotnet build Builds your dotnet packages
|
|
9
|
+
|
|
10
|
+
Synthesize:
|
|
11
|
+
cdktn synth [stack] Synthesize Terraform resources to cdktf.out/
|
|
12
|
+
|
|
13
|
+
Diff:
|
|
14
|
+
cdktn diff [stack] Perform a diff (terraform plan) for the given stack
|
|
15
|
+
|
|
16
|
+
Deploy:
|
|
17
|
+
cdktn deploy [stack] Deploy the given stack
|
|
18
|
+
|
|
19
|
+
Destroy:
|
|
20
|
+
cdktn destroy [stack] Destroy the given stack
|
|
21
|
+
|
|
22
|
+
Learn more about using modules and providers https://cdk.tf/modules-and-providers
|
|
23
|
+
|
|
24
|
+
Use Providers:
|
|
25
|
+
|
|
26
|
+
Use the add command to add both prebuilt providers (if available) or locally generated providers:
|
|
27
|
+
|
|
28
|
+
cdktn provider add "aws@~>3.0" null kreuzwerker/docker
|
|
29
|
+
|
|
30
|
+
You can find all prebuilt providers on nuget: https://www.nuget.org/packages?q=HashiCorp.Cdktf.Providers
|
|
31
|
+
You can also install these providers directly through dotnet:
|
|
32
|
+
|
|
33
|
+
dotnet add package HashiCorp.Cdktf.Providers.Aws
|
|
34
|
+
dotnet add package HashiCorp.Cdktf.Providers.Google
|
|
35
|
+
dotnet add package HashiCorp.Cdktf.Providers.Azurerm
|
|
36
|
+
dotnet add package HashiCorp.Cdktf.Providers.Docker
|
|
37
|
+
dotnet add package HashiCorp.Cdktf.Providers.Github
|
|
38
|
+
dotnet add package HashiCorp.Cdktf.Providers.Null
|
|
39
|
+
|
|
40
|
+
You can also build any module or provider locally. Learn more: https://cdk.tf/modules-and-providers
|
|
41
|
+
|
|
42
|
+
========================================================================================================
|