@cdktn/cli-core 0.22.0-pre.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +3 -0
  2. package/ambient.d.ts +13 -0
  3. package/eslint.config.mjs +82 -0
  4. package/jest.config.js +20 -0
  5. package/package.json +139 -0
  6. package/src/lib/cdktf-config.d.ts +16 -0
  7. package/src/lib/cdktf-config.d.ts.map +1 -0
  8. package/src/lib/cdktf-config.js +108 -0
  9. package/src/lib/cdktf-project-io-handler.d.ts +20 -0
  10. package/src/lib/cdktf-project-io-handler.d.ts.map +1 -0
  11. package/src/lib/cdktf-project-io-handler.js +84 -0
  12. package/src/lib/cdktf-project.d.ts +111 -0
  13. package/src/lib/cdktf-project.d.ts.map +1 -0
  14. package/src/lib/cdktf-project.js +371 -0
  15. package/src/lib/cdktf-stack.d.ts +134 -0
  16. package/src/lib/cdktf-stack.d.ts.map +1 -0
  17. package/src/lib/cdktf-stack.js +386 -0
  18. package/src/lib/convert.d.ts +6 -0
  19. package/src/lib/convert.d.ts.map +1 -0
  20. package/src/lib/convert.js +51 -0
  21. package/src/lib/dependencies/cdktf-config-manager.d.ts +12 -0
  22. package/src/lib/dependencies/cdktf-config-manager.d.ts.map +1 -0
  23. package/src/lib/dependencies/cdktf-config-manager.js +36 -0
  24. package/src/lib/dependencies/dependency-manager.d.ts +84 -0
  25. package/src/lib/dependencies/dependency-manager.d.ts.map +1 -0
  26. package/src/lib/dependencies/dependency-manager.js +365 -0
  27. package/src/lib/dependencies/package-manager.d.ts +18 -0
  28. package/src/lib/dependencies/package-manager.d.ts.map +1 -0
  29. package/src/lib/dependencies/package-manager.js +574 -0
  30. package/src/lib/dependencies/prebuilt-providers.d.ts +18 -0
  31. package/src/lib/dependencies/prebuilt-providers.d.ts.map +1 -0
  32. package/src/lib/dependencies/prebuilt-providers.js +204 -0
  33. package/src/lib/dependencies/registry-api.d.ts +8 -0
  34. package/src/lib/dependencies/registry-api.d.ts.map +1 -0
  35. package/src/lib/dependencies/registry-api.js +77 -0
  36. package/src/lib/dependencies/version-constraints.d.ts +8 -0
  37. package/src/lib/dependencies/version-constraints.d.ts.map +1 -0
  38. package/src/lib/dependencies/version-constraints.js +95 -0
  39. package/src/lib/error-reporting.d.ts +10 -0
  40. package/src/lib/error-reporting.d.ts.map +1 -0
  41. package/src/lib/error-reporting.js +133 -0
  42. package/src/lib/errors.d.ts +6 -0
  43. package/src/lib/errors.d.ts.map +1 -0
  44. package/src/lib/errors.js +10 -0
  45. package/src/lib/execution-logs.d.ts +3 -0
  46. package/src/lib/execution-logs.d.ts.map +1 -0
  47. package/src/lib/execution-logs.js +47 -0
  48. package/src/lib/get.d.ts +25 -0
  49. package/src/lib/get.d.ts.map +1 -0
  50. package/src/lib/get.js +90 -0
  51. package/src/lib/helpers/stack-helpers.d.ts +16 -0
  52. package/src/lib/helpers/stack-helpers.d.ts.map +1 -0
  53. package/src/lib/helpers/stack-helpers.js +155 -0
  54. package/src/lib/index.d.ts +15 -0
  55. package/src/lib/index.d.ts.map +1 -0
  56. package/src/lib/index.js +44 -0
  57. package/src/lib/init.d.ts +37 -0
  58. package/src/lib/init.d.ts.map +1 -0
  59. package/src/lib/init.js +131 -0
  60. package/src/lib/local-provider-constraints.d.ts +28 -0
  61. package/src/lib/local-provider-constraints.d.ts.map +1 -0
  62. package/src/lib/local-provider-constraints.js +95 -0
  63. package/src/lib/local-provider-versions.d.ts +12 -0
  64. package/src/lib/local-provider-versions.d.ts.map +1 -0
  65. package/src/lib/local-provider-versions.js +73 -0
  66. package/src/lib/models/deploy-machine.d.ts +128 -0
  67. package/src/lib/models/deploy-machine.d.ts.map +1 -0
  68. package/src/lib/models/deploy-machine.js +280 -0
  69. package/src/lib/models/pty-process.d.ts +29 -0
  70. package/src/lib/models/pty-process.d.ts.map +1 -0
  71. package/src/lib/models/pty-process.js +132 -0
  72. package/src/lib/models/schema.d.ts +2307 -0
  73. package/src/lib/models/schema.d.ts.map +1 -0
  74. package/src/lib/models/schema.js +181 -0
  75. package/src/lib/models/terraform-cli.d.ts +72 -0
  76. package/src/lib/models/terraform-cli.d.ts.map +1 -0
  77. package/src/lib/models/terraform-cli.js +357 -0
  78. package/src/lib/models/terraform.d.ts +125 -0
  79. package/src/lib/models/terraform.d.ts.map +1 -0
  80. package/src/lib/models/terraform.js +72 -0
  81. package/src/lib/output.d.ts +23 -0
  82. package/src/lib/output.d.ts.map +1 -0
  83. package/src/lib/output.js +211 -0
  84. package/src/lib/provider-add.d.ts +15 -0
  85. package/src/lib/provider-add.d.ts.map +1 -0
  86. package/src/lib/provider-add.js +30 -0
  87. package/src/lib/server/terraform-logs.d.ts +2 -0
  88. package/src/lib/server/terraform-logs.d.ts.map +1 -0
  89. package/src/lib/server/terraform-logs.js +19 -0
  90. package/src/lib/synth-stack.d.ts +29 -0
  91. package/src/lib/synth-stack.d.ts.map +1 -0
  92. package/src/lib/synth-stack.js +251 -0
  93. package/src/lib/synth.d.ts +7 -0
  94. package/src/lib/synth.d.ts.map +1 -0
  95. package/src/lib/synth.js +67 -0
  96. package/src/lib/terraform-json.d.ts +1015 -0
  97. package/src/lib/terraform-json.d.ts.map +1 -0
  98. package/src/lib/terraform-json.js +82 -0
  99. package/src/lib/terraform-provider-lock.d.ts +25 -0
  100. package/src/lib/terraform-provider-lock.d.ts.map +1 -0
  101. package/src/lib/terraform-provider-lock.js +95 -0
  102. package/src/lib/watch.d.ts +16 -0
  103. package/src/lib/watch.d.ts.map +1 -0
  104. package/src/lib/watch.js +155 -0
  105. package/templates/csharp/.hooks.sscaff.js +63 -0
  106. package/templates/csharp/MainStack.cs +15 -0
  107. package/templates/csharp/MyTerraformStack.csproj +13 -0
  108. package/templates/csharp/Program.cs +17 -0
  109. package/templates/csharp/TestProgram.cs +42 -0
  110. package/templates/csharp/cdktf.json +11 -0
  111. package/templates/csharp/help +42 -0
  112. package/templates/csharp/{{}}.gitignore +345 -0
  113. package/templates/go/.hooks.sscaff.js +70 -0
  114. package/templates/go/cdktf.json +12 -0
  115. package/templates/go/go.mod +8 -0
  116. package/templates/go/help +32 -0
  117. package/templates/go/main.go +22 -0
  118. package/templates/go/main_test.go +42 -0
  119. package/templates/go/{{}}.gitignore +21 -0
  120. package/templates/java/.hooks.sscaff.js +64 -0
  121. package/templates/java/build.gradle +55 -0
  122. package/templates/java/cdktf.json +12 -0
  123. package/templates/java/gradle.properties +1 -0
  124. package/templates/java/gradlew +248 -0
  125. package/templates/java/gradlew.bat +92 -0
  126. package/templates/java/help +35 -0
  127. package/templates/java/settings.gradle +5 -0
  128. package/templates/java/src/main/java/com/mycompany/app/Main.java +16 -0
  129. package/templates/java/src/main/java/com/mycompany/app/MainStack.java +14 -0
  130. package/templates/java/src/test/java/com/company/app/MainTest.java +38 -0
  131. package/templates/java/{{}}.gitignore +14 -0
  132. package/templates/python/.hooks.sscaff.js +59 -0
  133. package/templates/python/Pipfile +7 -0
  134. package/templates/python/cdktf.json +12 -0
  135. package/templates/python/help +42 -0
  136. package/templates/python/main-test.py +26 -0
  137. package/templates/python/main.py +16 -0
  138. package/templates/python/{{}}.gitignore +7 -0
  139. package/templates/python-pip/.hooks.sscaff.js +63 -0
  140. package/templates/python-pip/cdktf.json +12 -0
  141. package/templates/python-pip/help +35 -0
  142. package/templates/python-pip/main-test.py +23 -0
  143. package/templates/python-pip/main.py +16 -0
  144. package/templates/python-pip/{{}}.gitignore +7 -0
  145. package/templates/typescript/.hooks.sscaff.js +78 -0
  146. package/templates/typescript/__tests__/main-test.ts +89 -0
  147. package/templates/typescript/cdktf.json +11 -0
  148. package/templates/typescript/help +51 -0
  149. package/templates/typescript/jest.config.js +187 -0
  150. package/templates/typescript/main.ts +14 -0
  151. package/templates/typescript/package.json +22 -0
  152. package/templates/typescript/setup.js +2 -0
  153. package/templates/typescript/tsconfig.json +35 -0
  154. 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"}
@@ -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,15 @@
1
+ using System;
2
+ using Constructs;
3
+ using Io.Cdktn;
4
+
5
+
6
+ namespace MyCompany.MyApp
7
+ {
8
+ class MainStack : TerraformStack
9
+ {
10
+ public MainStack(Construct scope, string id) : base(scope, id)
11
+ {
12
+ // define resources here
13
+ }
14
+ }
15
+ }
@@ -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,11 @@
1
+ {
2
+ "language": "csharp",
3
+ "app": "dotnet run -p MyTerraformStack.csproj",
4
+ "projectId": "{{projectId}}",
5
+ "sendCrashReports": "{{sendCrashReports}}",
6
+ "terraformProviders": [],
7
+ "terraformModules": [],
8
+ "context": {
9
+ {{futureFlags}}
10
+ }
11
+ }
@@ -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
+ ========================================================================================================