tfts 0.2.3 → 0.2.5

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 (50) hide show
  1. package/dist/src/cli/get.d.ts.map +1 -1
  2. package/dist/src/cli/get.js +38 -1
  3. package/dist/src/cli/get.js.map +1 -1
  4. package/dist/src/codegen/__tests__/fixtures.d.ts +5 -0
  5. package/dist/src/codegen/__tests__/fixtures.d.ts.map +1 -0
  6. package/dist/src/codegen/__tests__/fixtures.js +133 -0
  7. package/dist/src/codegen/__tests__/fixtures.js.map +1 -0
  8. package/dist/src/codegen/__tests__/generator.spec.js +223 -66
  9. package/dist/src/codegen/__tests__/generator.spec.js.map +1 -1
  10. package/dist/src/codegen/fn-generator.d.ts +22 -0
  11. package/dist/src/codegen/fn-generator.d.ts.map +1 -0
  12. package/dist/src/codegen/fn-generator.js +203 -0
  13. package/dist/src/codegen/fn-generator.js.map +1 -0
  14. package/dist/src/codegen/generator.d.ts +1 -5
  15. package/dist/src/codegen/generator.d.ts.map +1 -1
  16. package/dist/src/codegen/generator.js +365 -206
  17. package/dist/src/codegen/generator.js.map +1 -1
  18. package/dist/src/codegen/schema.d.ts +0 -2
  19. package/dist/src/codegen/schema.d.ts.map +1 -1
  20. package/dist/src/codegen/schema.js +0 -97
  21. package/dist/src/codegen/schema.js.map +1 -1
  22. package/dist/src/core/tokens.d.ts +8 -14
  23. package/dist/src/core/tokens.d.ts.map +1 -1
  24. package/dist/src/core/tokens.js +3 -3
  25. package/dist/src/core/tokens.js.map +1 -1
  26. package/dist/src/facade/datasource.d.ts +2 -2
  27. package/dist/src/facade/datasource.d.ts.map +1 -1
  28. package/dist/src/facade/datasource.js +2 -2
  29. package/dist/src/facade/datasource.js.map +1 -1
  30. package/dist/src/facade/resource.d.ts +2 -2
  31. package/dist/src/facade/resource.d.ts.map +1 -1
  32. package/dist/src/facade/resource.js +2 -2
  33. package/dist/src/facade/resource.js.map +1 -1
  34. package/dist/src/facade/stack.d.ts +1 -2
  35. package/dist/src/facade/stack.d.ts.map +1 -1
  36. package/dist/src/facade/stack.js +3 -1
  37. package/dist/src/facade/stack.js.map +1 -1
  38. package/dist/src/generated/fn.d.ts +599 -0
  39. package/dist/src/generated/fn.d.ts.map +1 -0
  40. package/dist/src/generated/fn.js +998 -0
  41. package/dist/src/generated/fn.js.map +1 -0
  42. package/dist/src/index.d.ts +5 -4
  43. package/dist/src/index.d.ts.map +1 -1
  44. package/dist/src/index.js +4 -3
  45. package/dist/src/index.js.map +1 -1
  46. package/package.json +3 -2
  47. package/dist/src/codegen/templates.d.ts +0 -14
  48. package/dist/src/codegen/templates.d.ts.map +0 -1
  49. package/dist/src/codegen/templates.js +0 -70
  50. package/dist/src/codegen/templates.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/cli/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,eAAO,MAAM,MAAM,GAAU,SAAS,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAgChF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACxE,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAoBhC,CAAC"}
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/cli/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAKlD,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAuB,KAAK,WAAW,EAAuB,MAAM,sBAAsB,CAAC;AA8ClG,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,eAAO,MAAM,MAAM,GAAU,SAAS,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAgChF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACxE,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAoBhC,CAAC"}
@@ -1,9 +1,46 @@
1
1
  import { ok, err } from "neverthrow";
2
2
  import * as fs from "node:fs/promises";
3
3
  import { join, dirname } from "node:path";
4
+ import { spawn } from "node:child_process";
5
+ import { tmpdir } from "node:os";
4
6
  import { readConfig } from "./config.js";
5
7
  import { generateProviderFiles } from "../codegen/generator.js";
6
- import { fetchProviderSchema } from "../codegen/schema.js";
8
+ import { parseProviderSchema } from "../codegen/schema.js";
9
+ const exec = (command, args, cwd) => new Promise((resolve, reject) => {
10
+ const child = spawn(command, args, { cwd });
11
+ const chunks = [];
12
+ const errChunks = [];
13
+ child.stdout.on("data", (chunk) => chunks.push(chunk.toString()));
14
+ child.stderr.on("data", (chunk) => errChunks.push(chunk.toString()));
15
+ child.on("close", (code) => code === 0 ? resolve(chunks.join("")) : reject(new Error(errChunks.join(""))));
16
+ });
17
+ const fetchProviderSchema = async (source, version) => {
18
+ const tempDir = await fs.mkdtemp(join(tmpdir(), "tfts-"));
19
+ try {
20
+ const tfConfig = `
21
+ terraform {
22
+ required_providers {
23
+ provider = {
24
+ source = "${source}"
25
+ version = "${version === "latest" ? ">= 0" : version}"
26
+ }
27
+ }
28
+ }
29
+ `;
30
+ await fs.writeFile(join(tempDir, "main.tf"), tfConfig);
31
+ await exec("terraform", ["init"], tempDir);
32
+ const stdout = await exec("terraform", ["providers", "schema", "-json"], tempDir);
33
+ const data = JSON.parse(stdout);
34
+ return parseProviderSchema(data);
35
+ }
36
+ catch (e) {
37
+ const message = e instanceof Error ? e.message : String(e);
38
+ return err({ kind: "schema", message });
39
+ }
40
+ finally {
41
+ await fs.rm(tempDir, { recursive: true, force: true });
42
+ }
43
+ };
7
44
  export const runGet = async (options) => {
8
45
  const configPath = options.configPath ?? "cdktf.json";
9
46
  const configResult = await readConfig(configPath);
@@ -1 +1 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProviderSchema } from "../schema.js";
2
+ export declare const simpleProvider: ProviderSchema;
3
+ export declare const multiwordProvider: ProviderSchema;
4
+ export declare const nestingModesProvider: ProviderSchema;
5
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../../src/codegen/__tests__/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,cAyD5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,cAyB/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cA+ClC,CAAC"}
@@ -0,0 +1,133 @@
1
+ export const simpleProvider = {
2
+ format_version: "1.0",
3
+ provider_schemas: {
4
+ "registry.terraform.io/hashicorp/simple": {
5
+ provider: {
6
+ attributes: {
7
+ api_key: { type: "string", required: true },
8
+ region: { type: "string", optional: true },
9
+ },
10
+ },
11
+ resource_schemas: {
12
+ simple_resource: {
13
+ version: 0,
14
+ block: {
15
+ attributes: {
16
+ id: { type: "string", computed: true },
17
+ name: { type: "string", required: true },
18
+ enabled: { type: "bool", optional: true },
19
+ count: { type: "number", optional: true },
20
+ tags: { type: ["map", "string"], optional: true },
21
+ },
22
+ block_types: {
23
+ config: {
24
+ nesting_mode: "single",
25
+ block: {
26
+ attributes: {
27
+ key: { type: "string", required: true },
28
+ value: { type: "string", optional: true },
29
+ },
30
+ },
31
+ },
32
+ items: {
33
+ nesting_mode: "list",
34
+ min_items: 1,
35
+ block: {
36
+ attributes: {
37
+ name: { type: "string", required: true },
38
+ },
39
+ },
40
+ },
41
+ },
42
+ },
43
+ },
44
+ },
45
+ data_source_schemas: {
46
+ simple_data: {
47
+ version: 0,
48
+ block: {
49
+ attributes: {
50
+ id: { type: "string", required: true },
51
+ name: { type: "string", computed: true },
52
+ },
53
+ },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ };
59
+ export const multiwordProvider = {
60
+ format_version: "1.0",
61
+ provider_schemas: {
62
+ "registry.terraform.io/hashicorp/google": {
63
+ provider: { attributes: {} },
64
+ resource_schemas: {
65
+ google_alloydb_cluster: {
66
+ version: 0,
67
+ block: {
68
+ attributes: {
69
+ id: { type: "string", computed: true },
70
+ },
71
+ },
72
+ },
73
+ google_storage_bucket: {
74
+ version: 0,
75
+ block: {
76
+ attributes: {
77
+ name: { type: "string", required: true },
78
+ },
79
+ },
80
+ },
81
+ },
82
+ },
83
+ },
84
+ };
85
+ export const nestingModesProvider = {
86
+ format_version: "1.0",
87
+ provider_schemas: {
88
+ "registry.terraform.io/test/test": {
89
+ provider: { attributes: {} },
90
+ resource_schemas: {
91
+ test_resource: {
92
+ version: 0,
93
+ block: {
94
+ attributes: {
95
+ id: { type: "string", computed: true },
96
+ name: { type: "string", required: true },
97
+ secret_id: { type: "string", computed: true },
98
+ location: { type: "string", computed: true },
99
+ },
100
+ block_types: {
101
+ single_block: {
102
+ nesting_mode: "single",
103
+ block: {
104
+ attributes: { value: { type: "string", required: true } },
105
+ },
106
+ },
107
+ list_block: {
108
+ nesting_mode: "list",
109
+ block: {
110
+ attributes: { value: { type: "string", required: true } },
111
+ },
112
+ },
113
+ single_item_list: {
114
+ nesting_mode: "list",
115
+ max_items: 1,
116
+ block: {
117
+ attributes: { value: { type: "string", required: true } },
118
+ },
119
+ },
120
+ set_block: {
121
+ nesting_mode: "set",
122
+ block: {
123
+ attributes: { value: { type: "string", required: true } },
124
+ },
125
+ },
126
+ },
127
+ },
128
+ },
129
+ },
130
+ },
131
+ },
132
+ };
133
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/fixtures.ts"],"names":[],"mappings":"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"}
@@ -1,82 +1,239 @@
1
1
  import { test, expect, describe } from "bun:test";
2
- import { readFileSync } from "node:fs";
3
- import { join } from "node:path";
4
- import { generateProvider, generateProviderFiles } 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}`);
2
+ import { generateProviderFiles } from "../generator.js";
3
+ import { simpleProvider, multiwordProvider, nestingModesProvider } from "./fixtures.js";
4
+ const getContent = (files, path) => {
5
+ const content = files.get(path);
6
+ if (content === undefined) {
7
+ throw new Error(`File not found: ${path}`);
12
8
  }
13
- return result.value;
9
+ return content;
14
10
  };
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();
11
+ describe("file structure", () => {
12
+ test("generates provider at provider/index.ts", () => {
13
+ const files = generateProviderFiles("simple", simpleProvider);
14
+ expect(files.has("provider/index.ts")).toBe(true);
15
+ });
16
+ test("generates resources at lib/{name}/index.ts", () => {
17
+ const files = generateProviderFiles("google", multiwordProvider);
18
+ expect(files.has("lib/alloydb-cluster/index.ts")).toBe(true);
19
+ expect(files.has("lib/storage-bucket/index.ts")).toBe(true);
20
+ });
21
+ test("generates data sources at lib/data-{name}/index.ts", () => {
22
+ const files = generateProviderFiles("simple", simpleProvider);
23
+ expect(files.has("lib/data-data/index.ts")).toBe(true);
24
+ });
25
+ test("generates index.ts with namespace exports", () => {
26
+ const files = generateProviderFiles("google", multiwordProvider);
27
+ const index = getContent(files, "index.ts");
28
+ expect(index).toContain('export * as provider from "./provider/index.js"');
29
+ expect(index).toContain('export * as alloydbCluster from "./lib/alloydb-cluster/index.js"');
30
+ expect(index).toContain('export * as storageBucket from "./lib/storage-bucket/index.js"');
20
31
  });
21
32
  });
22
- describe("generateProviderFiles", () => {
23
- test("generates camelCase namespace names for multi-word resources", () => {
24
- const schema = loadFixture("multiword-provider");
25
- const files = generateProviderFiles("google", schema);
26
- const indexContent = files.get("index.ts");
27
- // Namespace names should be camelCase: alloydbCluster, storageBucket
28
- expect(indexContent).toContain("export * as alloydbCluster from");
29
- expect(indexContent).toContain("export * as storageBucket from");
30
- // Should NOT be all lowercase
31
- expect(indexContent).not.toContain("export * as alloydbcluster from");
32
- expect(indexContent).not.toContain("export * as storagebucket from");
33
+ describe("class naming", () => {
34
+ test("provider class: {Provider}Provider", () => {
35
+ const files = generateProviderFiles("simple", simpleProvider);
36
+ const content = getContent(files, "provider/index.ts");
37
+ expect(content).toContain("export class SimpleProvider extends TerraformProvider");
38
+ });
39
+ test("resource class: strips provider prefix, PascalCase", () => {
40
+ const files = generateProviderFiles("google", multiwordProvider);
41
+ const content = getContent(files, "lib/alloydb-cluster/index.ts");
42
+ expect(content).toContain("export class AlloydbCluster extends TerraformResource");
43
+ });
44
+ test("data source class: Data{Name}", () => {
45
+ const files = generateProviderFiles("simple", simpleProvider);
46
+ const content = getContent(files, "lib/data-data/index.ts");
47
+ expect(content).toContain("export class DataData extends TerraformDataSource");
33
48
  });
34
49
  });
35
- describe("nesting modes", () => {
36
- test("single nesting mode generates single object type, not array", () => {
37
- const schema = loadFixture("nesting-modes");
38
- const result = generateProvider("test", schema);
39
- // Single nesting mode should be single object only
40
- expect(result).toContain("readonly singleBlock?: ResourceConfigSingleBlock;");
41
- expect(result).not.toContain("readonly singleBlock?: ResourceConfigSingleBlock |");
50
+ describe("type naming", () => {
51
+ test("config type: {ClassName}Config", () => {
52
+ const files = generateProviderFiles("test", nestingModesProvider);
53
+ const content = getContent(files, "lib/resource/index.ts");
54
+ expect(content).toContain("export type ResourceConfig = {");
55
+ });
56
+ test("nested block type: {ClassName}{BlockName} (not {ClassName}Config{BlockName})", () => {
57
+ const files = generateProviderFiles("test", nestingModesProvider);
58
+ const content = getContent(files, "lib/resource/index.ts");
59
+ // Correct: ResourceSingleBlock
60
+ expect(content).toContain("export type ResourceSingleBlock = {");
61
+ expect(content).toContain("export type ResourceListBlock = {");
62
+ expect(content).toContain("export type ResourceSingleItemList = {");
63
+ expect(content).toContain("export type ResourceSetBlock = {");
64
+ // Wrong: ResourceConfigSingleBlock
65
+ expect(content).not.toContain("ResourceConfigSingleBlock");
66
+ expect(content).not.toContain("ResourceConfigListBlock");
67
+ });
68
+ test("collision: append A when type name exists", () => {
69
+ const files = generateProviderFiles("simple", simpleProvider);
70
+ const content = getContent(files, "lib/resource/index.ts");
71
+ // ResourceConfig exists for the config type
72
+ // Nested block "config" would also be ResourceConfig -> becomes ResourceConfigA
73
+ expect(content).toContain("export type ResourceConfigA = {");
74
+ expect(content).toContain("readonly config?: ResourceConfigA;");
42
75
  });
43
76
  });
44
- describe("attribute getters", () => {
45
- test("generates getters for ALL attributes, not just computed", () => {
46
- const schema = loadFixture("nesting-modes");
47
- const result = generateProvider("test", schema);
48
- // Should have getters for computed attributes
49
- expect(result).toContain("get id(): TokenString {");
50
- expect(result).toContain("get secretId(): TokenString {");
51
- expect(result).toContain("get location(): TokenString {");
52
- // Should ALSO have getter for required (non-computed) attribute
53
- expect(result).toContain("get name(): TokenString {");
77
+ describe("property naming", () => {
78
+ test("converts snake_case to camelCase", () => {
79
+ const files = generateProviderFiles("test", nestingModesProvider);
80
+ const content = getContent(files, "lib/resource/index.ts");
81
+ expect(content).toContain("readonly secretId?:");
82
+ expect(content).toContain("readonly singleBlock?:");
83
+ expect(content).toContain("readonly listBlock?:");
84
+ expect(content).toContain("readonly singleItemList?:");
85
+ expect(content).toContain("readonly setBlock?:");
86
+ });
87
+ test("uses snake_case in terraform attribute mapping", () => {
88
+ const files = generateProviderFiles("test", nestingModesProvider);
89
+ const content = getContent(files, "lib/resource/index.ts");
90
+ expect(content).toContain("secret_id: config.secretId");
91
+ expect(content).toContain("single_block: config.singleBlock");
54
92
  });
55
93
  });
56
- describe("lib directory structure", () => {
57
- test("generates lib/ directory for CDKTF compatibility", () => {
58
- const schema = loadFixture("multiword-provider");
59
- const files = generateProviderFiles("google", schema);
60
- // Should have lib/ prefix
61
- expect(files.has("lib/alloydb-cluster/index.ts")).toBe(true);
62
- expect(files.has("lib/storage-bucket/index.ts")).toBe(true);
63
- // Root index should export from lib/
64
- const indexContent = files.get("index.ts");
65
- expect(indexContent).toContain('from "./lib/alloydb-cluster');
94
+ describe("block nesting modes", () => {
95
+ test("single: generates T", () => {
96
+ const files = generateProviderFiles("test", nestingModesProvider);
97
+ const content = getContent(files, "lib/resource/index.ts");
98
+ expect(content).toContain("readonly singleBlock?: ResourceSingleBlock;");
99
+ expect(content).not.toContain("readonly singleBlock?: ResourceSingleBlock |");
100
+ });
101
+ test("list without max_items=1: generates readonly T[]", () => {
102
+ const files = generateProviderFiles("test", nestingModesProvider);
103
+ const content = getContent(files, "lib/resource/index.ts");
104
+ expect(content).toContain("readonly listBlock?: readonly ResourceListBlock[];");
105
+ });
106
+ test("set: generates readonly T[]", () => {
107
+ const files = generateProviderFiles("test", nestingModesProvider);
108
+ const content = getContent(files, "lib/resource/index.ts");
109
+ expect(content).toContain("readonly setBlock?: readonly ResourceSetBlock[];");
110
+ });
111
+ test("list with max_items=1: generates T | readonly T[]", () => {
112
+ const files = generateProviderFiles("test", nestingModesProvider);
113
+ const content = getContent(files, "lib/resource/index.ts");
114
+ expect(content).toContain("readonly singleItemList?: ResourceSingleItemList | readonly ResourceSingleItemList[];");
115
+ });
116
+ });
117
+ describe("constructor body", () => {
118
+ test("regular properties: tf_name: config.tsName", () => {
119
+ const files = generateProviderFiles("test", nestingModesProvider);
120
+ const content = getContent(files, "lib/resource/index.ts");
121
+ expect(content).toContain("secret_id: config.secretId,");
122
+ expect(content).toContain("single_block: config.singleBlock,");
123
+ });
124
+ test("max_items=1 blocks: array normalization", () => {
125
+ const files = generateProviderFiles("test", nestingModesProvider);
126
+ const content = getContent(files, "lib/resource/index.ts");
127
+ expect(content).toContain("single_item_list: config.singleItemList !== undefined ? (Array.isArray(config.singleItemList) ? config.singleItemList : [config.singleItemList]) : undefined,");
128
+ });
129
+ });
130
+ describe("getters", () => {
131
+ test("generates getters for all attributes", () => {
132
+ const files = generateProviderFiles("test", nestingModesProvider);
133
+ const content = getContent(files, "lib/resource/index.ts");
134
+ expect(content).toContain("get id(): TokenString {");
135
+ expect(content).toContain("get name(): TokenString {");
136
+ expect(content).toContain("get secretId(): TokenString {");
137
+ expect(content).toContain("get location(): TokenString {");
138
+ });
139
+ test("getter format: return this.getStringAttribute(tf_name)", () => {
140
+ const files = generateProviderFiles("test", nestingModesProvider);
141
+ const content = getContent(files, "lib/resource/index.ts");
142
+ expect(content).toContain('return this.getStringAttribute("secret_id");');
143
+ });
144
+ });
145
+ describe("attribute type mappings", () => {
146
+ test("string -> TfString in config", () => {
147
+ const files = generateProviderFiles("simple", simpleProvider);
148
+ const content = getContent(files, "lib/resource/index.ts");
149
+ expect(content).toContain("readonly name: TfString;");
150
+ });
151
+ test("bool -> TfBoolean in config", () => {
152
+ const files = generateProviderFiles("simple", simpleProvider);
153
+ const content = getContent(files, "lib/resource/index.ts");
154
+ expect(content).toContain("readonly enabled?: TfBoolean;");
155
+ });
156
+ test("number -> TfNumber in config", () => {
157
+ const files = generateProviderFiles("simple", simpleProvider);
158
+ const content = getContent(files, "lib/resource/index.ts");
159
+ expect(content).toContain("readonly count?: TfNumber;");
160
+ });
161
+ test('["map", "string"] -> TfStringMap in config', () => {
162
+ const files = generateProviderFiles("simple", simpleProvider);
163
+ const content = getContent(files, "lib/resource/index.ts");
164
+ expect(content).toContain("readonly tags?: TfStringMap;");
66
165
  });
67
166
  });
68
- describe("list block types", () => {
69
- test("max_items=1 blocks accept single object or array (union type)", () => {
70
- const schema = loadFixture("nesting-modes");
71
- const result = generateProvider("test", schema);
72
- // max_items=1: accept single object or array
73
- expect(result).toContain("readonly singleItemList?: ResourceConfigSingleItemList | readonly ResourceConfigSingleItemList[];");
74
- // Regular list block: array only
75
- expect(result).toContain("readonly listBlock?: readonly ResourceConfigListBlock[];");
76
- // Set block: array only
77
- expect(result).toContain("readonly setBlock?: readonly ResourceConfigSetBlock[];");
78
- // Single nesting mode: single object
79
- expect(result).toContain("readonly singleBlock?: ResourceConfigSingleBlock;");
167
+ describe("optionality", () => {
168
+ test("required: true -> required property", () => {
169
+ const files = generateProviderFiles("simple", simpleProvider);
170
+ const content = getContent(files, "lib/resource/index.ts");
171
+ expect(content).toContain("readonly name: TfString;"); // no ?
172
+ });
173
+ test("optional: true -> optional property", () => {
174
+ const files = generateProviderFiles("simple", simpleProvider);
175
+ const content = getContent(files, "lib/resource/index.ts");
176
+ expect(content).toContain("readonly enabled?: TfBoolean;");
177
+ });
178
+ test("computed: true -> optional property", () => {
179
+ const files = generateProviderFiles("simple", simpleProvider);
180
+ const content = getContent(files, "lib/resource/index.ts");
181
+ expect(content).toContain("readonly id?: TfString;");
182
+ });
183
+ test("block with min_items undefined or 0 -> optional", () => {
184
+ const files = generateProviderFiles("test", nestingModesProvider);
185
+ const content = getContent(files, "lib/resource/index.ts");
186
+ expect(content).toContain("readonly singleBlock?:");
187
+ expect(content).toContain("readonly listBlock?:");
188
+ });
189
+ test("block with min_items >= 1 -> required", () => {
190
+ const files = generateProviderFiles("simple", simpleProvider);
191
+ const content = getContent(files, "lib/resource/index.ts");
192
+ // items has min_items: 1
193
+ expect(content).toContain("readonly items: readonly ResourceItems[];");
194
+ });
195
+ });
196
+ describe("input getters", () => {
197
+ test("generates *Input getters for non-computed attributes", () => {
198
+ const files = generateProviderFiles("simple", simpleProvider);
199
+ const content = getContent(files, "lib/resource/index.ts");
200
+ // Should have nameInput for required attribute
201
+ expect(content).toContain("get nameInput():");
202
+ // Should have enabledInput for optional attribute
203
+ expect(content).toContain("get enabledInput():");
204
+ // Should have countInput for optional number attribute
205
+ expect(content).toContain("get countInput():");
206
+ // Should have tagsInput for optional map attribute
207
+ expect(content).toContain("get tagsInput():");
208
+ });
209
+ test("does not generate *Input getters for computed-only attributes", () => {
210
+ const files = generateProviderFiles("simple", simpleProvider);
211
+ const content = getContent(files, "lib/resource/index.ts");
212
+ // id is computed-only, should not have idInput
213
+ expect(content).not.toContain("get idInput():");
214
+ });
215
+ test("*Input getter returns the config value type", () => {
216
+ const files = generateProviderFiles("simple", simpleProvider);
217
+ const content = getContent(files, "lib/resource/index.ts");
218
+ expect(content).toContain("get nameInput(): TfString | undefined {");
219
+ expect(content).toContain("return this._config.name;");
220
+ });
221
+ });
222
+ describe("importFrom static method", () => {
223
+ test("generates importFrom static method on resources", () => {
224
+ const files = generateProviderFiles("simple", simpleProvider);
225
+ const content = getContent(files, "lib/resource/index.ts");
226
+ expect(content).toContain("static importFrom(");
227
+ });
228
+ test("importFrom has correct signature", () => {
229
+ const files = generateProviderFiles("simple", simpleProvider);
230
+ const content = getContent(files, "lib/resource/index.ts");
231
+ expect(content).toContain("static importFrom(scope: Construct, id: string, resourceId: TfString, provider?: TerraformProvider):");
232
+ });
233
+ test("importFrom returns instance with import lifecycle", () => {
234
+ const files = generateProviderFiles("simple", simpleProvider);
235
+ const content = getContent(files, "lib/resource/index.ts");
236
+ expect(content).toContain("lifecycle: { importId: resourceId }");
80
237
  });
81
238
  });
82
239
  //# sourceMappingURL=generator.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.spec.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generator.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.spec.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generator.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ type ParameterType = "string" | "number" | "bool" | "dynamic" | readonly ["list", ParameterType] | readonly ["set", ParameterType] | readonly ["map", ParameterType] | readonly ["object", Readonly<Record<string, ParameterType>>] | readonly ["tuple", readonly ParameterType[]];
3
+ declare const FunctionsMetadataSchema: z.ZodObject<{
4
+ format_version: z.ZodString;
5
+ function_signatures: z.ZodRecord<z.ZodString, z.ZodObject<{
6
+ description: z.ZodString;
7
+ return_type: z.ZodType<ParameterType, unknown, z.core.$ZodTypeInternals<ParameterType, unknown>>;
8
+ parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
9
+ name: z.ZodString;
10
+ type: z.ZodType<ParameterType, unknown, z.core.$ZodTypeInternals<ParameterType, unknown>>;
11
+ }, z.core.$strip>>>;
12
+ variadic_parameter: z.ZodOptional<z.ZodObject<{
13
+ name: z.ZodString;
14
+ type: z.ZodType<ParameterType, unknown, z.core.$ZodTypeInternals<ParameterType, unknown>>;
15
+ }, z.core.$strip>>;
16
+ }, z.core.$strip>>;
17
+ }, z.core.$strip>;
18
+ export type FunctionsMetadata = z.infer<typeof FunctionsMetadataSchema>;
19
+ export declare const parseFunctionsMetadata: (data: unknown) => FunctionsMetadata;
20
+ export declare const generateFnClass: (metadata: FunctionsMetadata) => string;
21
+ export {};
22
+ //# sourceMappingURL=fn-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fn-generator.d.ts","sourceRoot":"","sources":["../../../src/codegen/fn-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,aAAa,GACd,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,SAAS,GACT,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,GAChC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,GAC/B,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,GAC/B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAC5D,SAAS,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC,CAAC;AA8BjD,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;iBAG3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,sBAAsB,GAAI,MAAM,OAAO,KAAG,iBAClB,CAAC;AA+KtC,eAAO,MAAM,eAAe,GAAI,UAAU,iBAAiB,KAAG,MAmB7D,CAAC"}