tfts 0.1.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.
Files changed (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/dist/bin/tfts.d.ts +3 -0
  4. package/dist/bin/tfts.d.ts.map +1 -0
  5. package/dist/bin/tfts.js +5 -0
  6. package/dist/bin/tfts.js.map +1 -0
  7. package/dist/src/cli/config.d.ts +43 -0
  8. package/dist/src/cli/config.d.ts.map +1 -0
  9. package/dist/src/cli/config.js +63 -0
  10. package/dist/src/cli/config.js.map +1 -0
  11. package/dist/src/cli/diff.d.ts +25 -0
  12. package/dist/src/cli/diff.d.ts.map +1 -0
  13. package/dist/src/cli/diff.js +105 -0
  14. package/dist/src/cli/diff.js.map +1 -0
  15. package/dist/src/cli/get.d.ts +24 -0
  16. package/dist/src/cli/get.d.ts.map +1 -0
  17. package/dist/src/cli/get.js +41 -0
  18. package/dist/src/cli/get.js.map +1 -0
  19. package/dist/src/cli/index.d.ts +2 -0
  20. package/dist/src/cli/index.d.ts.map +1 -0
  21. package/dist/src/cli/index.js +157 -0
  22. package/dist/src/cli/index.js.map +1 -0
  23. package/dist/src/cli/synth.d.ts +32 -0
  24. package/dist/src/cli/synth.d.ts.map +1 -0
  25. package/dist/src/cli/synth.js +52 -0
  26. package/dist/src/cli/synth.js.map +1 -0
  27. package/dist/src/codegen/__tests__/generator.spec.d.ts +2 -0
  28. package/dist/src/codegen/__tests__/generator.spec.d.ts.map +1 -0
  29. package/dist/src/codegen/__tests__/generator.spec.js +22 -0
  30. package/dist/src/codegen/__tests__/generator.spec.js.map +1 -0
  31. package/dist/src/codegen/generator.d.ts +7 -0
  32. package/dist/src/codegen/generator.d.ts.map +1 -0
  33. package/dist/src/codegen/generator.js +160 -0
  34. package/dist/src/codegen/generator.js.map +1 -0
  35. package/dist/src/codegen/schema.d.ts +46 -0
  36. package/dist/src/codegen/schema.d.ts.map +1 -0
  37. package/dist/src/codegen/schema.js +141 -0
  38. package/dist/src/codegen/schema.js.map +1 -0
  39. package/dist/src/codegen/templates.d.ts +14 -0
  40. package/dist/src/codegen/templates.d.ts.map +1 -0
  41. package/dist/src/codegen/templates.js +74 -0
  42. package/dist/src/codegen/templates.js.map +1 -0
  43. package/dist/src/core/backend.d.ts +5 -0
  44. package/dist/src/core/backend.d.ts.map +1 -0
  45. package/dist/src/core/backend.js +2 -0
  46. package/dist/src/core/backend.js.map +1 -0
  47. package/dist/src/core/construct.d.ts +42 -0
  48. package/dist/src/core/construct.d.ts.map +1 -0
  49. package/dist/src/core/construct.js +2 -0
  50. package/dist/src/core/construct.js.map +1 -0
  51. package/dist/src/core/datasource.d.ts +8 -0
  52. package/dist/src/core/datasource.d.ts.map +1 -0
  53. package/dist/src/core/datasource.js +2 -0
  54. package/dist/src/core/datasource.js.map +1 -0
  55. package/dist/src/core/errors.d.ts +29 -0
  56. package/dist/src/core/errors.d.ts.map +1 -0
  57. package/dist/src/core/errors.js +2 -0
  58. package/dist/src/core/errors.js.map +1 -0
  59. package/dist/src/core/local.d.ts +4 -0
  60. package/dist/src/core/local.d.ts.map +1 -0
  61. package/dist/src/core/local.js +2 -0
  62. package/dist/src/core/local.js.map +1 -0
  63. package/dist/src/core/logical-id.d.ts +3 -0
  64. package/dist/src/core/logical-id.d.ts.map +1 -0
  65. package/dist/src/core/logical-id.js +48 -0
  66. package/dist/src/core/logical-id.js.map +1 -0
  67. package/dist/src/core/output.d.ts +8 -0
  68. package/dist/src/core/output.d.ts.map +1 -0
  69. package/dist/src/core/output.js +2 -0
  70. package/dist/src/core/output.js.map +1 -0
  71. package/dist/src/core/provider.d.ts +7 -0
  72. package/dist/src/core/provider.d.ts.map +1 -0
  73. package/dist/src/core/provider.js +2 -0
  74. package/dist/src/core/provider.js.map +1 -0
  75. package/dist/src/core/resource.d.ts +30 -0
  76. package/dist/src/core/resource.d.ts.map +1 -0
  77. package/dist/src/core/resource.js +2 -0
  78. package/dist/src/core/resource.js.map +1 -0
  79. package/dist/src/core/synthesize.d.ts +78 -0
  80. package/dist/src/core/synthesize.d.ts.map +1 -0
  81. package/dist/src/core/synthesize.js +293 -0
  82. package/dist/src/core/synthesize.js.map +1 -0
  83. package/dist/src/core/synthesize.spec.d.ts +2 -0
  84. package/dist/src/core/synthesize.spec.d.ts.map +1 -0
  85. package/dist/src/core/synthesize.spec.js +506 -0
  86. package/dist/src/core/synthesize.spec.js.map +1 -0
  87. package/dist/src/core/terraform-json.d.ts +36 -0
  88. package/dist/src/core/terraform-json.d.ts.map +1 -0
  89. package/dist/src/core/terraform-json.js +2 -0
  90. package/dist/src/core/terraform-json.js.map +1 -0
  91. package/dist/src/core/tokens.d.ts +55 -0
  92. package/dist/src/core/tokens.d.ts.map +1 -0
  93. package/dist/src/core/tokens.js +98 -0
  94. package/dist/src/core/tokens.js.map +1 -0
  95. package/dist/src/core/tokens.spec.d.ts +2 -0
  96. package/dist/src/core/tokens.spec.d.ts.map +1 -0
  97. package/dist/src/core/tokens.spec.js +119 -0
  98. package/dist/src/core/tokens.spec.js.map +1 -0
  99. package/dist/src/core/tree.d.ts +6 -0
  100. package/dist/src/core/tree.d.ts.map +1 -0
  101. package/dist/src/core/tree.js +52 -0
  102. package/dist/src/core/tree.js.map +1 -0
  103. package/dist/src/core/tree.spec.d.ts +2 -0
  104. package/dist/src/core/tree.spec.d.ts.map +1 -0
  105. package/dist/src/core/tree.spec.js +138 -0
  106. package/dist/src/core/tree.spec.js.map +1 -0
  107. package/dist/src/core/validate.d.ts +5 -0
  108. package/dist/src/core/validate.d.ts.map +1 -0
  109. package/dist/src/core/validate.js +94 -0
  110. package/dist/src/core/validate.js.map +1 -0
  111. package/dist/src/core/validate.spec.d.ts +2 -0
  112. package/dist/src/core/validate.spec.d.ts.map +1 -0
  113. package/dist/src/core/validate.spec.js +69 -0
  114. package/dist/src/core/validate.spec.js.map +1 -0
  115. package/dist/src/core/variable.d.ts +14 -0
  116. package/dist/src/core/variable.d.ts.map +1 -0
  117. package/dist/src/core/variable.js +2 -0
  118. package/dist/src/core/variable.js.map +1 -0
  119. package/dist/src/facade/app.d.ts +23 -0
  120. package/dist/src/facade/app.d.ts.map +1 -0
  121. package/dist/src/facade/app.js +55 -0
  122. package/dist/src/facade/app.js.map +1 -0
  123. package/dist/src/facade/backends/backend.d.ts +7 -0
  124. package/dist/src/facade/backends/backend.d.ts.map +1 -0
  125. package/dist/src/facade/backends/backend.js +15 -0
  126. package/dist/src/facade/backends/backend.js.map +1 -0
  127. package/dist/src/facade/backends/gcs.d.ts +18 -0
  128. package/dist/src/facade/backends/gcs.d.ts.map +1 -0
  129. package/dist/src/facade/backends/gcs.js +28 -0
  130. package/dist/src/facade/backends/gcs.js.map +1 -0
  131. package/dist/src/facade/backends/index.d.ts +6 -0
  132. package/dist/src/facade/backends/index.d.ts.map +1 -0
  133. package/dist/src/facade/backends/index.js +6 -0
  134. package/dist/src/facade/backends/index.js.map +1 -0
  135. package/dist/src/facade/backends/local.d.ts +12 -0
  136. package/dist/src/facade/backends/local.d.ts.map +1 -0
  137. package/dist/src/facade/backends/local.js +16 -0
  138. package/dist/src/facade/backends/local.js.map +1 -0
  139. package/dist/src/facade/backends/remote.d.ts +22 -0
  140. package/dist/src/facade/backends/remote.d.ts.map +1 -0
  141. package/dist/src/facade/backends/remote.js +23 -0
  142. package/dist/src/facade/backends/remote.js.map +1 -0
  143. package/dist/src/facade/backends/s3.d.ts +24 -0
  144. package/dist/src/facade/backends/s3.d.ts.map +1 -0
  145. package/dist/src/facade/backends/s3.js +39 -0
  146. package/dist/src/facade/backends/s3.js.map +1 -0
  147. package/dist/src/facade/construct.d.ts +9 -0
  148. package/dist/src/facade/construct.d.ts.map +1 -0
  149. package/dist/src/facade/construct.js +32 -0
  150. package/dist/src/facade/construct.js.map +1 -0
  151. package/dist/src/facade/datasource.d.ts +20 -0
  152. package/dist/src/facade/datasource.d.ts.map +1 -0
  153. package/dist/src/facade/datasource.js +33 -0
  154. package/dist/src/facade/datasource.js.map +1 -0
  155. package/dist/src/facade/facade.spec.d.ts +2 -0
  156. package/dist/src/facade/facade.spec.d.ts.map +1 -0
  157. package/dist/src/facade/facade.spec.js +434 -0
  158. package/dist/src/facade/facade.spec.js.map +1 -0
  159. package/dist/src/facade/local.d.ts +15 -0
  160. package/dist/src/facade/local.d.ts.map +1 -0
  161. package/dist/src/facade/local.js +27 -0
  162. package/dist/src/facade/local.js.map +1 -0
  163. package/dist/src/facade/output.d.ts +18 -0
  164. package/dist/src/facade/output.d.ts.map +1 -0
  165. package/dist/src/facade/output.js +29 -0
  166. package/dist/src/facade/output.js.map +1 -0
  167. package/dist/src/facade/provider.d.ts +14 -0
  168. package/dist/src/facade/provider.d.ts.map +1 -0
  169. package/dist/src/facade/provider.js +25 -0
  170. package/dist/src/facade/provider.js.map +1 -0
  171. package/dist/src/facade/resource.d.ts +32 -0
  172. package/dist/src/facade/resource.d.ts.map +1 -0
  173. package/dist/src/facade/resource.js +49 -0
  174. package/dist/src/facade/resource.js.map +1 -0
  175. package/dist/src/facade/stack.d.ts +12 -0
  176. package/dist/src/facade/stack.d.ts.map +1 -0
  177. package/dist/src/facade/stack.js +26 -0
  178. package/dist/src/facade/stack.js.map +1 -0
  179. package/dist/src/facade/variable.d.ts +27 -0
  180. package/dist/src/facade/variable.d.ts.map +1 -0
  181. package/dist/src/facade/variable.js +45 -0
  182. package/dist/src/facade/variable.js.map +1 -0
  183. package/dist/src/index.d.ts +34 -0
  184. package/dist/src/index.d.ts.map +1 -0
  185. package/dist/src/index.js +22 -0
  186. package/dist/src/index.js.map +1 -0
  187. package/package.json +62 -0
@@ -0,0 +1,157 @@
1
+ import { runSynth } from "./synth.js";
2
+ import { runGet } from "./get.js";
3
+ import { runDiff } from "./diff.js";
4
+ const VERSION = "0.1.0";
5
+ const parseArgs = (argv) => {
6
+ const args = argv.slice(2);
7
+ const options = {};
8
+ const positional = [];
9
+ let command = "help";
10
+ for (let i = 0; i < args.length; i++) {
11
+ const arg = args[i];
12
+ if (arg === undefined)
13
+ continue;
14
+ if (arg === "--help" || arg === "-h") {
15
+ command = "help";
16
+ }
17
+ else if (arg === "--version" || arg === "-v") {
18
+ command = "version";
19
+ }
20
+ else if (arg.startsWith("--")) {
21
+ const key = arg.slice(2);
22
+ const nextArg = args[i + 1];
23
+ if (nextArg !== undefined && !nextArg.startsWith("-")) {
24
+ options[key] = nextArg;
25
+ i++;
26
+ }
27
+ else {
28
+ options[key] = true;
29
+ }
30
+ }
31
+ else if (arg === "synth" || arg === "get" || arg === "diff") {
32
+ command = arg;
33
+ }
34
+ else {
35
+ positional.push(arg);
36
+ }
37
+ }
38
+ return { command, options, args: positional };
39
+ };
40
+ const printHelp = () => {
41
+ console.log(`
42
+ tfts - Terraform CDK TypeScript
43
+
44
+ Usage: tfts <command> [options]
45
+
46
+ Commands:
47
+ synth Synthesize Terraform configuration
48
+ get Generate provider bindings
49
+ diff Show changes (terraform plan)
50
+
51
+ Options:
52
+ --help, -h Show help
53
+ --version, -v Show version
54
+
55
+ Synth Options:
56
+ --app App command to run
57
+ --output Output directory
58
+ --config Config file path (default: cdktf.json)
59
+
60
+ Get Options:
61
+ --output Output directory for generated bindings
62
+
63
+ Diff Options:
64
+ --app App command to run
65
+ --output Output directory
66
+ --config Config file path (default: cdktf.json)
67
+ --stack Target a specific stack
68
+ --refresh-only Only refresh state, don't plan changes
69
+ --skip-synth Skip synthesis, use existing output
70
+ `);
71
+ };
72
+ const printVersion = () => {
73
+ console.log(`tfts v${VERSION}`);
74
+ };
75
+ export const run = async (argv) => {
76
+ const parsed = parseArgs(argv);
77
+ switch (parsed.command) {
78
+ case "help": {
79
+ printHelp();
80
+ return 0;
81
+ }
82
+ case "version": {
83
+ printVersion();
84
+ return 0;
85
+ }
86
+ case "synth": {
87
+ const options = {
88
+ app: typeof parsed.options["app"] === "string" ? parsed.options["app"] : undefined,
89
+ output: typeof parsed.options["output"] === "string" ? parsed.options["output"] : undefined,
90
+ configPath: typeof parsed.options["config"] === "string" ? parsed.options["config"] : undefined,
91
+ };
92
+ const result = await runSynth(options);
93
+ if (result.isErr()) {
94
+ console.error(`Error: ${formatSynthError(result.error)}`);
95
+ return 1;
96
+ }
97
+ return 0;
98
+ }
99
+ case "get": {
100
+ const options = {
101
+ output: typeof parsed.options["output"] === "string" ? parsed.options["output"] : undefined,
102
+ configPath: typeof parsed.options["config"] === "string" ? parsed.options["config"] : undefined,
103
+ };
104
+ const result = await runGet(options);
105
+ if (result.isErr()) {
106
+ console.error(`Error: ${formatGetError(result.error)}`);
107
+ return 1;
108
+ }
109
+ return 0;
110
+ }
111
+ case "diff": {
112
+ const options = {
113
+ app: typeof parsed.options["app"] === "string" ? parsed.options["app"] : undefined,
114
+ output: typeof parsed.options["output"] === "string" ? parsed.options["output"] : undefined,
115
+ configPath: typeof parsed.options["config"] === "string" ? parsed.options["config"] : undefined,
116
+ stack: typeof parsed.options["stack"] === "string" ? parsed.options["stack"] : undefined,
117
+ refreshOnly: parsed.options["refresh-only"] === true,
118
+ skipSynth: parsed.options["skip-synth"] === true,
119
+ };
120
+ const result = await runDiff(options);
121
+ if (result.isErr()) {
122
+ console.error(`Error: ${formatDiffError(result.error)}`);
123
+ return 1;
124
+ }
125
+ return 0;
126
+ }
127
+ }
128
+ };
129
+ const formatSynthError = (error) => {
130
+ if (error.kind === "config" && error.error !== undefined) {
131
+ return error.error.message;
132
+ }
133
+ return error.message ?? "Unknown error";
134
+ };
135
+ const formatGetError = (error) => {
136
+ switch (error.kind) {
137
+ case "config":
138
+ return error.error.message;
139
+ case "schema":
140
+ return error.error.message;
141
+ case "io":
142
+ return error.message;
143
+ }
144
+ };
145
+ const formatDiffError = (error) => {
146
+ switch (error.kind) {
147
+ case "config":
148
+ return error.error.message;
149
+ case "exec":
150
+ return error.message;
151
+ case "io":
152
+ return error.message;
153
+ case "terraform":
154
+ return error.message;
155
+ }
156
+ };
157
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { type Result } from "neverthrow";
2
+ import type { TerraformJson } from "../core/terraform-json.js";
3
+ import { type ConfigError } from "./config.js";
4
+ export type SynthOptions = {
5
+ readonly configPath?: string;
6
+ readonly output?: string;
7
+ readonly app?: string;
8
+ };
9
+ export type SynthError = {
10
+ readonly kind: "config";
11
+ readonly error: ConfigError;
12
+ } | {
13
+ readonly kind: "exec";
14
+ readonly message: string;
15
+ } | {
16
+ readonly kind: "io";
17
+ readonly message: string;
18
+ };
19
+ export type Manifest = {
20
+ readonly version: string;
21
+ readonly stacks: Record<string, ManifestStack>;
22
+ };
23
+ export type ManifestStack = {
24
+ readonly name: string;
25
+ readonly synthesizedStackPath: string;
26
+ readonly workingDirectory: string;
27
+ };
28
+ export declare const runSynth: (options: SynthOptions) => Promise<Result<void, SynthError>>;
29
+ export declare const executeApp: (command: string, outdir: string) => Promise<Result<void, SynthError>>;
30
+ export declare const writeOutput: (stackName: string, json: TerraformJson, outdir: string) => Promise<Result<void, SynthError>>;
31
+ export declare const writeManifest: (stacks: ReadonlyMap<string, TerraformJson>, outdir: string) => Promise<Result<void, SynthError>>;
32
+ //# sourceMappingURL=synth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synth.d.ts","sourceRoot":"","sources":["../../../src/cli/synth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAkBtF,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,SAAS,MAAM,EACf,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAalC,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,WAAW,MAAM,EACjB,MAAM,aAAa,EACnB,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAQlC,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,QAAQ,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAkBlC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { ok, err } from "neverthrow";
2
+ import { readConfig } from "./config.js";
3
+ export const runSynth = async (options) => {
4
+ const configPath = options.configPath ?? "cdktf.json";
5
+ const configResult = await readConfig(configPath);
6
+ if (configResult.isErr()) {
7
+ return err({ kind: "config", error: configResult.error });
8
+ }
9
+ const config = configResult.value;
10
+ const appCommand = options.app ?? config.app;
11
+ const outdir = options.output ?? config.output;
12
+ const execResult = await executeApp(appCommand, outdir);
13
+ if (execResult.isErr()) {
14
+ return execResult;
15
+ }
16
+ return ok(undefined);
17
+ };
18
+ export const executeApp = async (command, outdir) => {
19
+ const proc = Bun.spawn(["sh", "-c", command], {
20
+ env: { ...process.env, CDKTF_OUTDIR: outdir },
21
+ stdout: "inherit",
22
+ stderr: "inherit",
23
+ });
24
+ const exitCode = await proc.exited;
25
+ if (exitCode !== 0) {
26
+ return err({ kind: "exec", message: `App command failed with exit code ${exitCode}` });
27
+ }
28
+ return ok(undefined);
29
+ };
30
+ export const writeOutput = async (stackName, json, outdir) => {
31
+ const stackDir = `${outdir}/stacks/${stackName}`;
32
+ await Bun.$ `mkdir -p ${stackDir}`;
33
+ const outputPath = `${stackDir}/cdk.tf.json`;
34
+ await Bun.write(outputPath, JSON.stringify(json, null, 2));
35
+ return ok(undefined);
36
+ };
37
+ export const writeManifest = async (stacks, outdir) => {
38
+ const manifest = {
39
+ version: "1.0.0",
40
+ stacks: Object.fromEntries(Array.from(stacks.keys()).map((name) => [
41
+ name,
42
+ {
43
+ name,
44
+ synthesizedStackPath: `stacks/${name}/cdk.tf.json`,
45
+ workingDirectory: `stacks/${name}`,
46
+ },
47
+ ])),
48
+ };
49
+ await Bun.write(`${outdir}/manifest.json`, JSON.stringify(manifest, null, 2));
50
+ return ok(undefined);
51
+ };
52
+ //# sourceMappingURL=synth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synth.js","sourceRoot":"","sources":["../../../src/cli/synth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generator.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.spec.d.ts","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generator.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import { test, expect, describe } from "bun:test";
2
+ import { readFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { generateProvider } from "../generator.js";
5
+ import { parseProviderSchema } from "../schema.js";
6
+ const loadFixture = (name) => {
7
+ const path = join(import.meta.dir, "fixtures", `${name}.json`);
8
+ const json = JSON.parse(readFileSync(path, "utf-8"));
9
+ const result = parseProviderSchema(json);
10
+ if (result.isErr()) {
11
+ throw new Error(`Failed to parse fixture ${name}: ${result.error.message}`);
12
+ }
13
+ return result.value;
14
+ };
15
+ describe("generateProvider", () => {
16
+ test("generates provider with resources and data sources", () => {
17
+ const schema = loadFixture("simple-provider");
18
+ const result = generateProvider("simple", schema);
19
+ expect(result).toMatchSnapshot();
20
+ });
21
+ });
22
+ //# sourceMappingURL=generator.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.spec.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generator.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AAExE,MAAM,WAAW,GAAG,CAAC,IAAY,EAAkB,EAAE;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ProviderSchema, ResourceSchema, SchemaBlock } from "./schema.js";
2
+ export declare const generateProvider: (name: string, schema: ProviderSchema) => string;
3
+ export declare const generateResource: (name: string, schema: ResourceSchema) => string;
4
+ export declare const generateDataSource: (name: string, schema: ResourceSchema) => string;
5
+ export declare const generateConfig: (name: string, schema: SchemaBlock) => string;
6
+ export declare const generateIndex: (resources: readonly string[], dataSources: readonly string[]) => string;
7
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgC/E,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,cAAc,KAAG,MA0DvE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,QAAQ,cAAc,KAAG,MAIvE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,QAAQ,cAAc,KAAG,MAIzE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,QAAQ,WAAW,KAAG,MAElE,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,WAAW,SAAS,MAAM,EAAE,EAC5B,aAAa,SAAS,MAAM,EAAE,KAC7B,MAEF,CAAC"}
@@ -0,0 +1,160 @@
1
+ import { parseSchemaType } from "./schema.js";
2
+ import { resourceTemplate, providerTemplate, dataSourceTemplate, configInterfaceTemplate, indexTemplate, } from "./templates.js";
3
+ const IMPORTS = `import type { TerraformStack, TokenString, TerraformResourceConfig, TerraformDataSourceConfig, TerraformProviderConfig, TfString, TfNumber, TfBoolean, TfStringList, TfNumberList, TfStringMap } from "terraform-ts";
4
+ import { TerraformProvider, TerraformResource, TerraformDataSource } from "terraform-ts";`;
5
+ // Properties defined in base classes that cannot be overridden
6
+ const RESERVED_NAMES = new Set([
7
+ "node",
8
+ "path",
9
+ "terraformResourceType",
10
+ "friendlyUniqueId",
11
+ "terraformGeneratorMetadata",
12
+ "connection",
13
+ "count",
14
+ "dependsOn",
15
+ "forEach",
16
+ "lifecycle",
17
+ "provider",
18
+ "provisioners",
19
+ "fqn",
20
+ ]);
21
+ export const generateProvider = (name, schema) => {
22
+ const entries = Object.entries(schema.provider_schemas);
23
+ if (entries.length === 0) {
24
+ return `// No schema available for provider ${name}\nexport {};\n`;
25
+ }
26
+ const firstEntry = entries[0];
27
+ if (firstEntry === undefined) {
28
+ return `// No schema available for provider ${name}\nexport {};\n`;
29
+ }
30
+ const [source, entry] = firstEntry;
31
+ const providerName = toPascalCase(name);
32
+ const parts = [IMPORTS];
33
+ // Provider class
34
+ const providerConfig = generateConfigWithNestedTypes(`${providerName}Config`, entry.provider, "TerraformProviderConfig");
35
+ const providerClass = providerTemplate(providerName, source, providerConfig.props);
36
+ parts.push(...providerConfig.types);
37
+ parts.push(providerClass);
38
+ // Resources
39
+ for (const [resourceName, resourceSchema] of Object.entries(entry.resource_schemas)) {
40
+ const className = resourceNameToClassName(resourceName);
41
+ const config = generateConfigWithNestedTypes(`${className}Config`, resourceSchema.block, "TerraformResourceConfig");
42
+ const resourceClass = resourceTemplate(className, resourceName, config.props, config.getters);
43
+ parts.push(...config.types);
44
+ parts.push(resourceClass);
45
+ }
46
+ // Data sources
47
+ for (const [dataSourceName, dataSourceSchema] of Object.entries(entry.data_source_schemas)) {
48
+ const className = `Data${resourceNameToClassName(dataSourceName)}`;
49
+ const config = generateConfigWithNestedTypes(`${className}Config`, dataSourceSchema.block, "TerraformDataSourceConfig");
50
+ const dataSourceClass = dataSourceTemplate(className, dataSourceName, config.props, config.getters);
51
+ parts.push(...config.types);
52
+ parts.push(dataSourceClass);
53
+ }
54
+ return parts.join("\n\n");
55
+ };
56
+ export const generateResource = (name, schema) => {
57
+ const className = resourceNameToClassName(name);
58
+ const config = generateConfigInterface(`${className}Config`, schema.block);
59
+ return `${config.code}\n\n${resourceTemplate(className, name, config.props)}`;
60
+ };
61
+ export const generateDataSource = (name, schema) => {
62
+ const className = `Data${resourceNameToClassName(name)}`;
63
+ const config = generateConfigInterface(`${className}Config`, schema.block);
64
+ return `${config.code}\n\n${dataSourceTemplate(className, name, config.props)}`;
65
+ };
66
+ export const generateConfig = (name, schema) => {
67
+ return generateConfigInterface(name, schema).code;
68
+ };
69
+ export const generateIndex = (resources, dataSources) => {
70
+ return indexTemplate(resources, dataSources);
71
+ };
72
+ const generateConfigInterface = (name, block) => {
73
+ const attrEntries = Object.entries(block.attributes ?? {});
74
+ const blockEntries = Object.entries(block.block_types ?? {});
75
+ const attrProps = attrEntries.map(([attrName]) => ({
76
+ tfName: toTfName(attrName),
77
+ tsName: toCamelCase(attrName),
78
+ }));
79
+ const attrLines = attrEntries.map(([attrName, attr]) => {
80
+ const tsType = parseSchemaType(attr.type);
81
+ const optional = attr.optional === true || attr.computed === true;
82
+ const propName = toCamelCase(attrName);
83
+ return ` readonly ${propName}${optional ? "?" : ""}: ${tsType};`;
84
+ });
85
+ const blockProps = blockEntries.map(([blockName]) => ({
86
+ tfName: toTfName(blockName),
87
+ tsName: toCamelCase(blockName),
88
+ }));
89
+ const blockLines = blockEntries.map(([blockName, blockType]) => {
90
+ const nestedName = `${name}${toPascalCase(blockName)}`;
91
+ const propName = toCamelCase(blockName);
92
+ const isList = blockType.nesting_mode === "list" || blockType.nesting_mode === "set";
93
+ const isOptional = blockType.min_items === undefined || blockType.min_items === 0;
94
+ return isList
95
+ ? ` readonly ${propName}${isOptional ? "?" : ""}: readonly ${nestedName}[];`
96
+ : ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName};`;
97
+ });
98
+ return {
99
+ code: configInterfaceTemplate(name, [...attrLines, ...blockLines]),
100
+ props: [...attrProps, ...blockProps],
101
+ };
102
+ };
103
+ const generateConfigWithNestedTypes = (name, block, baseType) => {
104
+ const attrEntries = Object.entries(block.attributes ?? {});
105
+ const blockEntries = Object.entries(block.block_types ?? {});
106
+ const attrProps = attrEntries.map(([attrName]) => ({
107
+ tfName: toTfName(attrName),
108
+ tsName: toCamelCase(attrName),
109
+ }));
110
+ const attrLines = attrEntries.map(([attrName, attr]) => {
111
+ const tsType = parseSchemaType(attr.type);
112
+ const optional = attr.optional === true || attr.computed === true;
113
+ const propName = toCamelCase(attrName);
114
+ return ` readonly ${propName}${optional ? "?" : ""}: ${tsType};`;
115
+ });
116
+ // Collect getters for computed attributes (excluding reserved names)
117
+ const getters = attrEntries
118
+ .filter(([attrName, attr]) => attr.computed === true && !RESERVED_NAMES.has(toCamelCase(attrName)))
119
+ .map(([attrName]) => ({ tfName: toTfName(attrName), tsName: toCamelCase(attrName) }));
120
+ const blockProps = blockEntries.map(([blockName]) => ({
121
+ tfName: toTfName(blockName),
122
+ tsName: toCamelCase(blockName),
123
+ }));
124
+ const blockLines = blockEntries.map(([blockName, blockType]) => {
125
+ const nestedName = `${name}${toPascalCase(blockName)}`;
126
+ const propName = toCamelCase(blockName);
127
+ const isList = blockType.nesting_mode === "list" || blockType.nesting_mode === "set";
128
+ const isOptional = blockType.min_items === undefined || blockType.min_items === 0;
129
+ return isList
130
+ ? ` readonly ${propName}${isOptional ? "?" : ""}: readonly ${nestedName}[];`
131
+ : ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName};`;
132
+ });
133
+ const nestedTypes = blockEntries.flatMap(([blockName, blockType]) => {
134
+ const nestedName = `${name}${toPascalCase(blockName)}`;
135
+ return generateConfigWithNestedTypes(nestedName, blockType.block).types;
136
+ });
137
+ return {
138
+ types: [...nestedTypes, configInterfaceTemplate(name, [...attrLines, ...blockLines], baseType)],
139
+ props: [...attrProps, ...blockProps],
140
+ getters,
141
+ };
142
+ };
143
+ const toPascalCase = (s) => {
144
+ return s
145
+ .split(/[-_]/)
146
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
147
+ .join("");
148
+ };
149
+ const toCamelCase = (s) => {
150
+ const pascal = toPascalCase(s);
151
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
152
+ };
153
+ const toTfName = (s) => {
154
+ return s.replace(/-/g, "_");
155
+ };
156
+ const resourceNameToClassName = (name) => {
157
+ // google_storage_bucket -> GoogleStorageBucket
158
+ return toPascalCase(name);
159
+ };
160
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type Result } from "neverthrow";
2
+ export type SchemaType = "string" | "number" | "bool" | "dynamic" | readonly ["list", SchemaType] | readonly ["set", SchemaType] | readonly ["map", SchemaType] | readonly ["object", Readonly<Record<string, SchemaType>>] | readonly ["tuple", readonly SchemaType[]];
3
+ export type AttributeSchema = {
4
+ readonly type: SchemaType;
5
+ readonly description?: string;
6
+ readonly description_kind?: "plain" | "markdown";
7
+ readonly required?: boolean;
8
+ readonly optional?: boolean;
9
+ readonly computed?: boolean;
10
+ readonly sensitive?: boolean;
11
+ readonly deprecated?: boolean;
12
+ };
13
+ export type BlockTypeSchema = {
14
+ readonly nesting_mode: "single" | "list" | "set" | "map";
15
+ readonly block: SchemaBlock;
16
+ readonly min_items?: number;
17
+ readonly max_items?: number;
18
+ };
19
+ export type SchemaBlock = {
20
+ readonly attributes?: Readonly<Record<string, AttributeSchema>>;
21
+ readonly block_types?: Readonly<Record<string, BlockTypeSchema>>;
22
+ readonly description?: string;
23
+ readonly description_kind?: "plain" | "markdown";
24
+ readonly deprecated?: boolean;
25
+ };
26
+ export type ResourceSchema = {
27
+ readonly version: number;
28
+ readonly block: SchemaBlock;
29
+ };
30
+ export type ProviderSchemaEntry = {
31
+ readonly provider: SchemaBlock;
32
+ readonly resource_schemas: Readonly<Record<string, ResourceSchema>>;
33
+ readonly data_source_schemas: Readonly<Record<string, ResourceSchema>>;
34
+ };
35
+ export type ProviderSchema = {
36
+ readonly format_version: string;
37
+ readonly provider_schemas: Readonly<Record<string, ProviderSchemaEntry>>;
38
+ };
39
+ export type SchemaError = {
40
+ readonly kind: "init" | "schema" | "parse";
41
+ readonly message: string;
42
+ };
43
+ export declare const parseProviderSchema: (data: unknown) => Result<ProviderSchema, SchemaError>;
44
+ export declare const fetchProviderSchema: (source: string, version?: string) => Promise<Result<ProviderSchema, SchemaError>>;
45
+ export declare const parseSchemaType: (type: SchemaType) => string;
46
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/codegen/schema.ts"],"names":[],"mappings":"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"}