tfts 0.2.1 → 0.2.3

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.
@@ -1,7 +1,7 @@
1
1
  import { test, expect, describe } from "bun:test";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
- import { generateProvider } from "../generator.js";
4
+ import { generateProvider, generateProviderFiles } from "../generator.js";
5
5
  import { parseProviderSchema } from "../schema.js";
6
6
  const loadFixture = (name) => {
7
7
  const path = join(import.meta.dir, "fixtures", `${name}.json`);
@@ -19,4 +19,64 @@ describe("generateProvider", () => {
19
19
  expect(result).toMatchSnapshot();
20
20
  });
21
21
  });
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
+ });
34
+ });
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 |");
42
+ });
43
+ });
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 {");
54
+ });
55
+ });
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');
66
+ });
67
+ });
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;");
80
+ });
81
+ });
22
82
  //# sourceMappingURL=generator.spec.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"generator.spec.js","sourceRoot":"","sources":["../../../../src/codegen/__tests__/generator.spec.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export const generateProviderFiles = (name, schema) => {
32
32
  return new Map([["index.ts", `// No schema available for provider ${name}\nexport {};\n`]]);
33
33
  }
34
34
  const [source, entry] = firstEntry;
35
- const providerName = toPascalCase(name);
35
+ const providerName = snakeToPascalCase(name);
36
36
  const files = new Map();
37
37
  const namespaceExports = [];
38
38
  // Provider file (in provider/ subdirectory)
@@ -41,18 +41,18 @@ export const generateProviderFiles = (name, schema) => {
41
41
  const providerContent = [PROVIDER_IMPORTS, ...providerConfig.types, providerClass].join("\n\n");
42
42
  files.set("provider/index.ts", providerContent);
43
43
  namespaceExports.push(`export * as provider from "./provider/index.js";`);
44
- // Resource files (each in its own subdirectory)
44
+ // Resource files (each in lib/ subdirectory for CDKTF compatibility)
45
45
  for (const [resourceName, resourceSchema] of Object.entries(entry.resource_schemas ?? {})) {
46
46
  const className = terraformNameToClassName(resourceName);
47
47
  const dirName = terraformNameToFileName(resourceName);
48
- const namespaceName = toCamelCase(className);
48
+ const namespaceName = pascalToCamelCase(className);
49
49
  const config = generateConfigWithNestedTypes(`${className}Config`, resourceSchema.block, "TerraformResourceConfig");
50
50
  const resourceClass = resourceTemplate(className, resourceName, config.props, config.getters);
51
51
  const content = [RESOURCE_IMPORTS, ...config.types, resourceClass].join("\n\n");
52
- files.set(`${dirName}/index.ts`, content);
53
- namespaceExports.push(`export * as ${namespaceName} from "./${dirName}/index.js";`);
52
+ files.set(`lib/${dirName}/index.ts`, content);
53
+ namespaceExports.push(`export * as ${namespaceName} from "./lib/${dirName}/index.js";`);
54
54
  }
55
- // Data source files (each in its own subdirectory)
55
+ // Data source files (each in lib/ subdirectory for CDKTF compatibility)
56
56
  for (const [dataSourceName, dataSourceSchema] of Object.entries(entry.data_source_schemas ?? {})) {
57
57
  const baseClassName = terraformNameToClassName(dataSourceName);
58
58
  const className = `Data${baseClassName}`;
@@ -61,8 +61,8 @@ export const generateProviderFiles = (name, schema) => {
61
61
  const config = generateConfigWithNestedTypes(`${className}Config`, dataSourceSchema.block, "TerraformDataSourceConfig");
62
62
  const dataSourceClass = dataSourceTemplate(className, dataSourceName, config.props, config.getters);
63
63
  const content = [DATASOURCE_IMPORTS, ...config.types, dataSourceClass].join("\n\n");
64
- files.set(`${dirName}/index.ts`, content);
65
- namespaceExports.push(`export * as ${namespaceName} from "./${dirName}/index.js";`);
64
+ files.set(`lib/${dirName}/index.ts`, content);
65
+ namespaceExports.push(`export * as ${namespaceName} from "./lib/${dirName}/index.js";`);
66
66
  }
67
67
  // Index file with namespace exports
68
68
  files.set("index.ts", namespaceExports.join("\n") + "\n");
@@ -106,26 +106,37 @@ const generateConfigInterface = (name, block) => {
106
106
  const blockEntries = Object.entries(block.block_types ?? {});
107
107
  const attrProps = attrEntries.map(([attrName]) => ({
108
108
  tfName: toTfName(attrName),
109
- tsName: toCamelCase(attrName),
109
+ tsName: snakeToCamelCase(attrName),
110
110
  }));
111
111
  const attrLines = attrEntries.map(([attrName, attr]) => {
112
112
  const tsType = parseSchemaType(attr.type);
113
113
  const optional = attr.optional === true || attr.computed === true;
114
- const propName = toCamelCase(attrName);
114
+ const propName = snakeToCamelCase(attrName);
115
115
  return ` readonly ${propName}${optional ? "?" : ""}: ${tsType};`;
116
116
  });
117
- const blockProps = blockEntries.map(([blockName]) => ({
118
- tfName: toTfName(blockName),
119
- tsName: toCamelCase(blockName),
120
- }));
117
+ const blockProps = blockEntries.map(([blockName, blockType]) => {
118
+ const isList = blockType.nesting_mode === "list" || blockType.nesting_mode === "set";
119
+ const isSingleItem = isList && blockType.max_items === 1;
120
+ return {
121
+ tfName: toTfName(blockName),
122
+ tsName: snakeToCamelCase(blockName),
123
+ isListBlock: isSingleItem,
124
+ };
125
+ });
121
126
  const blockLines = blockEntries.map(([blockName, blockType]) => {
122
- const nestedName = `${name}${toPascalCase(blockName)}`;
123
- const propName = toCamelCase(blockName);
127
+ const nestedName = `${name}${snakeToPascalCase(blockName)}`;
128
+ const propName = snakeToCamelCase(blockName);
124
129
  const isList = blockType.nesting_mode === "list" || blockType.nesting_mode === "set";
130
+ const isSingleItem = isList && blockType.max_items === 1;
125
131
  const isOptional = blockType.min_items === undefined || blockType.min_items === 0;
126
- return isList
127
- ? ` readonly ${propName}${isOptional ? "?" : ""}: readonly ${nestedName}[];`
128
- : ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName};`;
132
+ if (isSingleItem) {
133
+ // max_items=1: accept single object or array
134
+ return ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName} | readonly ${nestedName}[];`;
135
+ }
136
+ if (isList) {
137
+ return ` readonly ${propName}${isOptional ? "?" : ""}: readonly ${nestedName}[];`;
138
+ }
139
+ return ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName};`;
129
140
  });
130
141
  return {
131
142
  code: configInterfaceTemplate(name, [...attrLines, ...blockLines]),
@@ -137,33 +148,44 @@ const generateConfigWithNestedTypes = (name, block, baseType) => {
137
148
  const blockEntries = Object.entries(block.block_types ?? {});
138
149
  const attrProps = attrEntries.map(([attrName]) => ({
139
150
  tfName: toTfName(attrName),
140
- tsName: toCamelCase(attrName),
151
+ tsName: snakeToCamelCase(attrName),
141
152
  }));
142
153
  const attrLines = attrEntries.map(([attrName, attr]) => {
143
154
  const tsType = parseSchemaType(attr.type);
144
155
  const optional = attr.optional === true || attr.computed === true;
145
- const propName = toCamelCase(attrName);
156
+ const propName = snakeToCamelCase(attrName);
146
157
  return ` readonly ${propName}${optional ? "?" : ""}: ${tsType};`;
147
158
  });
148
- // Collect getters for computed attributes (excluding reserved names)
159
+ // Collect getters for all attributes (excluding reserved names)
149
160
  const getters = attrEntries
150
- .filter(([attrName, attr]) => attr.computed === true && !RESERVED_NAMES.has(toCamelCase(attrName)))
151
- .map(([attrName]) => ({ tfName: toTfName(attrName), tsName: toCamelCase(attrName) }));
152
- const blockProps = blockEntries.map(([blockName]) => ({
153
- tfName: toTfName(blockName),
154
- tsName: toCamelCase(blockName),
155
- }));
161
+ .filter(([attrName]) => !RESERVED_NAMES.has(snakeToCamelCase(attrName)))
162
+ .map(([attrName]) => ({ tfName: toTfName(attrName), tsName: snakeToCamelCase(attrName) }));
163
+ const blockProps = blockEntries.map(([blockName, blockType]) => {
164
+ const isList = blockType.nesting_mode === "list" || blockType.nesting_mode === "set";
165
+ const isSingleItem = isList && blockType.max_items === 1;
166
+ return {
167
+ tfName: toTfName(blockName),
168
+ tsName: snakeToCamelCase(blockName),
169
+ isListBlock: isSingleItem,
170
+ };
171
+ });
156
172
  const blockLines = blockEntries.map(([blockName, blockType]) => {
157
- const nestedName = `${name}${toPascalCase(blockName)}`;
158
- const propName = toCamelCase(blockName);
173
+ const nestedName = `${name}${snakeToPascalCase(blockName)}`;
174
+ const propName = snakeToCamelCase(blockName);
159
175
  const isList = blockType.nesting_mode === "list" || blockType.nesting_mode === "set";
176
+ const isSingleItem = isList && blockType.max_items === 1;
160
177
  const isOptional = blockType.min_items === undefined || blockType.min_items === 0;
161
- return isList
162
- ? ` readonly ${propName}${isOptional ? "?" : ""}: readonly ${nestedName}[];`
163
- : ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName};`;
178
+ if (isSingleItem) {
179
+ // max_items=1: accept single object or array
180
+ return ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName} | readonly ${nestedName}[];`;
181
+ }
182
+ if (isList) {
183
+ return ` readonly ${propName}${isOptional ? "?" : ""}: readonly ${nestedName}[];`;
184
+ }
185
+ return ` readonly ${propName}${isOptional ? "?" : ""}: ${nestedName};`;
164
186
  });
165
187
  const nestedTypes = blockEntries.flatMap(([blockName, blockType]) => {
166
- const nestedName = `${name}${toPascalCase(blockName)}`;
188
+ const nestedName = `${name}${snakeToPascalCase(blockName)}`;
167
189
  return generateConfigWithNestedTypes(nestedName, blockType.block).types;
168
190
  });
169
191
  return {
@@ -172,16 +194,19 @@ const generateConfigWithNestedTypes = (name, block, baseType) => {
172
194
  getters,
173
195
  };
174
196
  };
175
- const toPascalCase = (s) => {
197
+ const snakeToPascalCase = (s) => {
176
198
  return s
177
199
  .split(/[-_]/)
178
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
200
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
179
201
  .join("");
180
202
  };
181
- const toCamelCase = (s) => {
182
- const pascal = toPascalCase(s);
203
+ const snakeToCamelCase = (s) => {
204
+ const pascal = snakeToPascalCase(s);
183
205
  return pascal.charAt(0).toLowerCase() + pascal.slice(1);
184
206
  };
207
+ const pascalToCamelCase = (s) => {
208
+ return s.charAt(0).toLowerCase() + s.slice(1);
209
+ };
185
210
  const toTfName = (s) => {
186
211
  return s.replace(/-/g, "_");
187
212
  };
@@ -191,7 +216,7 @@ const terraformNameToClassName = (name) => {
191
216
  const parts = name.split("_");
192
217
  // Remove first part (provider name)
193
218
  const withoutProvider = parts.slice(1).join("_");
194
- return toPascalCase(withoutProvider || name);
219
+ return snakeToPascalCase(withoutProvider || name);
195
220
  };
196
221
  const terraformNameToFileName = (name) => {
197
222
  // google_storage_bucket -> storage-bucket
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/codegen/generator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export type PropMapping = {
2
2
  readonly tfName: string;
3
3
  readonly tsName: string;
4
+ readonly isListBlock?: boolean;
4
5
  };
5
6
  export type AttributeGetter = {
6
7
  readonly tfName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/codegen/templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,OAAO,SAAS,WAAW,EAAE,EAC7B,UAAS,SAAS,eAAe,EAAO,KACvC,MAoBF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,OAAO,SAAS,WAAW,EAAE,KAC5B,MAUF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,OAAO,SAAS,WAAW,EAAE,EAC7B,UAAS,SAAS,eAAe,EAAO,KACvC,MAoBF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,EACZ,OAAO,SAAS,MAAM,EAAE,EACxB,WAAW,MAAM,KAChB,MAUF,CAAC"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/codegen/templates.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,OAAO,SAAS,WAAW,EAAE,EAC7B,UAAS,SAAS,eAAe,EAAO,KACvC,MA0BF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,OAAO,SAAS,WAAW,EAAE,KAC5B,MAgBF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,eAAe,MAAM,EACrB,OAAO,SAAS,WAAW,EAAE,EAC7B,UAAS,SAAS,eAAe,EAAO,KACvC,MA0BF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,MAAM,MAAM,EACZ,OAAO,SAAS,MAAM,EAAE,EACxB,WAAW,MAAM,KAChB,MAUF,CAAC"}
@@ -1,5 +1,9 @@
1
1
  export const resourceTemplate = (className, terraformType, props, getters = []) => {
2
- const attrsObject = props.map((p) => ` ${p.tfName}: config.${p.tsName},`).join("\n");
2
+ const attrsObject = props
3
+ .map((p) => p.isListBlock === true
4
+ ? ` ${p.tfName}: config.${p.tsName} !== undefined ? (Array.isArray(config.${p.tsName}) ? config.${p.tsName} : [config.${p.tsName}]) : undefined,`
5
+ : ` ${p.tfName}: config.${p.tsName},`)
6
+ .join("\n");
3
7
  const getterMethods = getters
4
8
  .map((g) => {
5
9
  return ` get ${g.tsName}(): TokenString {
@@ -17,7 +21,11 @@ ${attrsObject}
17
21
  }`;
18
22
  };
19
23
  export const providerTemplate = (className, source, props) => {
20
- const attrsObject = props.map((p) => ` ${p.tfName}: config.${p.tsName},`).join("\n");
24
+ const attrsObject = props
25
+ .map((p) => p.isListBlock === true
26
+ ? ` ${p.tfName}: config.${p.tsName} !== undefined ? (Array.isArray(config.${p.tsName}) ? config.${p.tsName} : [config.${p.tsName}]) : undefined,`
27
+ : ` ${p.tfName}: config.${p.tsName},`)
28
+ .join("\n");
21
29
  return `export class ${className}Provider extends TerraformProvider {
22
30
  constructor(scope: Construct, id: string, config: ${className}ProviderConfig = {}) {
23
31
  super(scope, id, "${source}", {
@@ -27,7 +35,11 @@ ${attrsObject}
27
35
  }`;
28
36
  };
29
37
  export const dataSourceTemplate = (className, terraformType, props, getters = []) => {
30
- const attrsObject = props.map((p) => ` ${p.tfName}: config.${p.tsName},`).join("\n");
38
+ const attrsObject = props
39
+ .map((p) => p.isListBlock === true
40
+ ? ` ${p.tfName}: config.${p.tsName} !== undefined ? (Array.isArray(config.${p.tsName}) ? config.${p.tsName} : [config.${p.tsName}]) : undefined,`
41
+ : ` ${p.tfName}: config.${p.tsName},`)
42
+ .join("\n");
31
43
  const getterMethods = getters
32
44
  .map((g) => {
33
45
  return ` get ${g.tsName}(): TokenString {
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/codegen/templates.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAAiB,EACjB,aAAqB,EACrB,KAA6B,EAC7B,UAAsC,EAAE,EAChC,EAAE;IACV,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1F,MAAM,aAAa,GAAG,OAAO;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,OAAO,SAAS,CAAC,CAAC,MAAM;sCACQ,CAAC,CAAC,MAAM;IAC1C,CAAC;IACD,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,OAAO,gBAAgB,SAAS;sDACoB,SAAS;wBACvC,aAAa;EACnC,WAAW;;KAER,cAAc;EACjB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAAiB,EACjB,MAAc,EACd,KAA6B,EACrB,EAAE;IACV,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1F,OAAO,gBAAgB,SAAS;sDACoB,SAAS;wBACvC,MAAM;EAC5B,WAAW;;;EAGX,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,aAAqB,EACrB,KAA6B,EAC7B,UAAsC,EAAE,EAChC,EAAE;IACV,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1F,MAAM,aAAa,GAAG,OAAO;SAC1B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,OAAO,SAAS,CAAC,CAAC,MAAM;sCACQ,CAAC,CAAC,MAAM;IAC1C,CAAC;IACD,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,OAAO,gBAAgB,SAAS;sDACoB,SAAS;wBACvC,aAAa;EACnC,WAAW;;KAER,cAAc;EACjB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,IAAY,EACZ,KAAwB,EACxB,QAAiB,EACT,EAAE;IACV,MAAM,aAAa,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,KAAK,SAAS;YAC3B,CAAC,CAAC,eAAe,IAAI,MAAM,QAAQ,GAAG;YACtC,CAAC,CAAC,eAAe,IAAI,2BAA2B,CAAC;IACrD,CAAC;IACD,OAAO,eAAe,IAAI;EAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;GACf,aAAa,GAAG,CAAC;AACpB,CAAC,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/codegen/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tfts",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "TypeScript-first infrastructure as code for Terraform",
5
5
  "type": "module",
6
6
  "bin": {