@formspec/cli 0.1.0-alpha.7 → 0.1.0-alpha.9

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 (57) hide show
  1. package/README.md +50 -37
  2. package/dist/__tests__/analyzer.test.d.ts +4 -1
  3. package/dist/__tests__/analyzer.test.d.ts.map +1 -1
  4. package/dist/__tests__/analyzer.test.js +9 -80
  5. package/dist/__tests__/analyzer.test.js.map +1 -1
  6. package/dist/__tests__/codegen.test.d.ts +4 -1
  7. package/dist/__tests__/codegen.test.d.ts.map +1 -1
  8. package/dist/__tests__/codegen.test.js +30 -478
  9. package/dist/__tests__/codegen.test.js.map +1 -1
  10. package/dist/__tests__/edge-cases.test.d.ts +5 -7
  11. package/dist/__tests__/edge-cases.test.d.ts.map +1 -1
  12. package/dist/__tests__/edge-cases.test.js +12 -275
  13. package/dist/__tests__/edge-cases.test.js.map +1 -1
  14. package/dist/__tests__/fixtures/edge-cases.d.ts +2 -2
  15. package/dist/__tests__/fixtures/edge-cases.d.ts.map +1 -1
  16. package/dist/__tests__/fixtures/edge-cases.js +4 -2
  17. package/dist/__tests__/fixtures/edge-cases.js.map +1 -1
  18. package/dist/__tests__/integration.test.js +45 -18
  19. package/dist/__tests__/integration.test.js.map +1 -1
  20. package/dist/index.js +46 -26
  21. package/dist/index.js.map +1 -1
  22. package/dist/output/writer.d.ts +5 -5
  23. package/dist/output/writer.d.ts.map +1 -1
  24. package/dist/output/writer.js +13 -13
  25. package/dist/output/writer.js.map +1 -1
  26. package/dist/runtime/formspec-loader.d.ts.map +1 -1
  27. package/dist/runtime/formspec-loader.js +1 -3
  28. package/dist/runtime/formspec-loader.js.map +1 -1
  29. package/package.json +4 -4
  30. package/dist/analyzer/class-analyzer.d.ts +0 -75
  31. package/dist/analyzer/class-analyzer.d.ts.map +0 -1
  32. package/dist/analyzer/class-analyzer.js +0 -151
  33. package/dist/analyzer/class-analyzer.js.map +0 -1
  34. package/dist/analyzer/decorator-extractor.d.ts +0 -87
  35. package/dist/analyzer/decorator-extractor.d.ts.map +0 -1
  36. package/dist/analyzer/decorator-extractor.js +0 -193
  37. package/dist/analyzer/decorator-extractor.js.map +0 -1
  38. package/dist/analyzer/program.d.ts +0 -37
  39. package/dist/analyzer/program.d.ts.map +0 -1
  40. package/dist/analyzer/program.js +0 -89
  41. package/dist/analyzer/program.js.map +0 -1
  42. package/dist/analyzer/type-converter.d.ts +0 -97
  43. package/dist/analyzer/type-converter.d.ts.map +0 -1
  44. package/dist/analyzer/type-converter.js +0 -353
  45. package/dist/analyzer/type-converter.js.map +0 -1
  46. package/dist/codegen/index.d.ts +0 -76
  47. package/dist/codegen/index.d.ts.map +0 -1
  48. package/dist/codegen/index.js +0 -550
  49. package/dist/codegen/index.js.map +0 -1
  50. package/dist/generators/class-schema.d.ts +0 -43
  51. package/dist/generators/class-schema.d.ts.map +0 -1
  52. package/dist/generators/class-schema.js +0 -61
  53. package/dist/generators/class-schema.js.map +0 -1
  54. package/dist/generators/method-schema.d.ts +0 -57
  55. package/dist/generators/method-schema.d.ts.map +0 -1
  56. package/dist/generators/method-schema.js +0 -108
  57. package/dist/generators/method-schema.js.map +0 -1
@@ -1,237 +1,23 @@
1
1
  /**
2
- * Edge case and negative tests for CLI components.
2
+ * Edge case and negative tests for CLI-specific components.
3
3
  *
4
4
  * Tests cover:
5
- * - Complex union types
6
- * - Nullable and optional patterns
7
- * - Array edge cases
8
- * - Object edge cases
9
- * - Error handling for file I/O
5
+ * - isFormSpec detection edge cases
6
+ * - File I/O error handling (output writer)
10
7
  * - FormSpec loading failures
11
- * - Decorator extractor edge cases
8
+ *
9
+ * Note: Analysis and generation edge cases are tested in @formspec/build.
12
10
  */
13
11
  import { describe, it, expect, beforeAll, afterAll } from "vitest";
14
12
  import * as fs from "node:fs";
15
13
  import * as path from "node:path";
16
14
  import * as os from "node:os";
17
- import { createProgramContext, findClassByName } from "../analyzer/program.js";
18
- import { analyzeClass } from "../analyzer/class-analyzer.js";
19
- import { convertType } from "../analyzer/type-converter.js";
15
+ import { createProgramContext, findClassByName, analyzeClass, generateClassSchemas, } from "@formspec/build/internals";
20
16
  import { loadFormSpecs, isFormSpec } from "../runtime/formspec-loader.js";
21
17
  import { writeClassSchemas } from "../output/writer.js";
22
- import { generateClassSchemas } from "../generators/class-schema.js";
23
18
  const fixturesDir = path.join(__dirname, "fixtures");
24
19
  const edgeCasesPath = path.join(fixturesDir, "edge-cases.ts");
25
20
  // ============================================================================
26
- // Type Converter Edge Cases
27
- // ============================================================================
28
- describe("convertType - complex unions", () => {
29
- it("handles string | number union as oneOf", () => {
30
- const ctx = createProgramContext(edgeCasesPath);
31
- const classDecl = findClassByName(ctx.sourceFile, "MixedUnionTypes");
32
- const analysis = analyzeClass(classDecl, ctx.checker);
33
- const field = analysis.fields.find((f) => f.name === "mixedPrimitive");
34
- const result = convertType(field.type, ctx.checker);
35
- expect(result.formSpecFieldType).toBe("union");
36
- expect(result.jsonSchema.oneOf).toBeDefined();
37
- expect(result.jsonSchema.oneOf).toHaveLength(2);
38
- });
39
- it("handles complex union with object and primitive", () => {
40
- const ctx = createProgramContext(edgeCasesPath);
41
- const classDecl = findClassByName(ctx.sourceFile, "MixedUnionTypes");
42
- const analysis = analyzeClass(classDecl, ctx.checker);
43
- const field = analysis.fields.find((f) => f.name === "complexUnion");
44
- const result = convertType(field.type, ctx.checker);
45
- expect(result.formSpecFieldType).toBe("union");
46
- expect(result.jsonSchema.oneOf).toBeDefined();
47
- });
48
- it("handles discriminated union (object union)", () => {
49
- const ctx = createProgramContext(edgeCasesPath);
50
- const classDecl = findClassByName(ctx.sourceFile, "MixedUnionTypes");
51
- const analysis = analyzeClass(classDecl, ctx.checker);
52
- const field = analysis.fields.find((f) => f.name === "objectUnion");
53
- const result = convertType(field.type, ctx.checker);
54
- expect(result.formSpecFieldType).toBe("union");
55
- expect(result.jsonSchema.oneOf).toHaveLength(2);
56
- });
57
- });
58
- describe("convertType - nullable patterns", () => {
59
- it("handles T | null as oneOf with null", () => {
60
- const ctx = createProgramContext(edgeCasesPath);
61
- const classDecl = findClassByName(ctx.sourceFile, "NullablePatterns");
62
- const analysis = analyzeClass(classDecl, ctx.checker);
63
- const field = analysis.fields.find((f) => f.name === "nullableString");
64
- const result = convertType(field.type, ctx.checker);
65
- expect(result.jsonSchema.oneOf).toBeDefined();
66
- const types = result.jsonSchema.oneOf.map((s) => s.type);
67
- expect(types).toContain("string");
68
- expect(types).toContain("null");
69
- });
70
- it("handles T | undefined (filters out undefined)", () => {
71
- const ctx = createProgramContext(edgeCasesPath);
72
- const classDecl = findClassByName(ctx.sourceFile, "NullablePatterns");
73
- const analysis = analyzeClass(classDecl, ctx.checker);
74
- const field = analysis.fields.find((f) => f.name === "undefinedString");
75
- const result = convertType(field.type, ctx.checker);
76
- // undefined is filtered out, leaving just string
77
- expect(result.jsonSchema.type).toBe("string");
78
- expect(result.formSpecFieldType).toBe("text");
79
- });
80
- it("handles nullable enum", () => {
81
- const ctx = createProgramContext(edgeCasesPath);
82
- const classDecl = findClassByName(ctx.sourceFile, "NullablePatterns");
83
- const analysis = analyzeClass(classDecl, ctx.checker);
84
- const field = analysis.fields.find((f) => f.name === "nullableStatus");
85
- const result = convertType(field.type, ctx.checker);
86
- expect(result.jsonSchema.oneOf).toBeDefined();
87
- // Should have enum schema and null type
88
- const hasEnum = result.jsonSchema.oneOf.some((s) => s.enum !== undefined);
89
- const hasNull = result.jsonSchema.oneOf.some((s) => s.type === "null");
90
- expect(hasEnum).toBe(true);
91
- expect(hasNull).toBe(true);
92
- });
93
- it("handles T | null | undefined", () => {
94
- const ctx = createProgramContext(edgeCasesPath);
95
- const classDecl = findClassByName(ctx.sourceFile, "NullablePatterns");
96
- const analysis = analyzeClass(classDecl, ctx.checker);
97
- const field = analysis.fields.find((f) => f.name === "tripleUnion");
98
- const result = convertType(field.type, ctx.checker);
99
- // Should filter undefined, keep string and null
100
- expect(result.jsonSchema.oneOf).toBeDefined();
101
- const types = result.jsonSchema.oneOf.map((s) => s.type);
102
- expect(types).toContain("string");
103
- expect(types).toContain("null");
104
- expect(types).not.toContain("undefined");
105
- });
106
- });
107
- describe("convertType - array edge cases", () => {
108
- it("handles array of unions", () => {
109
- const ctx = createProgramContext(edgeCasesPath);
110
- const classDecl = findClassByName(ctx.sourceFile, "ArrayEdgeCases");
111
- const analysis = analyzeClass(classDecl, ctx.checker);
112
- const field = analysis.fields.find((f) => f.name === "mixedArray");
113
- const result = convertType(field.type, ctx.checker);
114
- expect(result.jsonSchema.type).toBe("array");
115
- expect(result.jsonSchema.items?.oneOf).toBeDefined();
116
- });
117
- it("handles nullable array", () => {
118
- const ctx = createProgramContext(edgeCasesPath);
119
- const classDecl = findClassByName(ctx.sourceFile, "ArrayEdgeCases");
120
- const analysis = analyzeClass(classDecl, ctx.checker);
121
- const field = analysis.fields.find((f) => f.name === "nullableArray");
122
- const result = convertType(field.type, ctx.checker);
123
- expect(result.jsonSchema.oneOf).toBeDefined();
124
- });
125
- it("handles array of objects", () => {
126
- const ctx = createProgramContext(edgeCasesPath);
127
- const classDecl = findClassByName(ctx.sourceFile, "ArrayEdgeCases");
128
- const analysis = analyzeClass(classDecl, ctx.checker);
129
- const field = analysis.fields.find((f) => f.name === "objectArray");
130
- const result = convertType(field.type, ctx.checker);
131
- expect(result.jsonSchema.type).toBe("array");
132
- expect(result.jsonSchema.items?.type).toBe("object");
133
- expect(result.jsonSchema.items?.properties).toBeDefined();
134
- });
135
- it("handles nested arrays", () => {
136
- const ctx = createProgramContext(edgeCasesPath);
137
- const classDecl = findClassByName(ctx.sourceFile, "ArrayEdgeCases");
138
- const analysis = analyzeClass(classDecl, ctx.checker);
139
- const field = analysis.fields.find((f) => f.name === "nestedArray");
140
- const result = convertType(field.type, ctx.checker);
141
- expect(result.jsonSchema.type).toBe("array");
142
- expect(result.jsonSchema.items?.type).toBe("array");
143
- expect(result.jsonSchema.items?.items?.type).toBe("string");
144
- });
145
- });
146
- describe("convertType - object edge cases", () => {
147
- it("handles empty object", () => {
148
- const ctx = createProgramContext(edgeCasesPath);
149
- const classDecl = findClassByName(ctx.sourceFile, "ObjectEdgeCases");
150
- const analysis = analyzeClass(classDecl, ctx.checker);
151
- const field = analysis.fields.find((f) => f.name === "emptyObject");
152
- const result = convertType(field.type, ctx.checker);
153
- expect(result.jsonSchema.type).toBe("object");
154
- expect(result.jsonSchema.properties).toEqual({});
155
- });
156
- it("handles deeply nested object", () => {
157
- const ctx = createProgramContext(edgeCasesPath);
158
- const classDecl = findClassByName(ctx.sourceFile, "ObjectEdgeCases");
159
- const analysis = analyzeClass(classDecl, ctx.checker);
160
- const field = analysis.fields.find((f) => f.name === "deepNested");
161
- const result = convertType(field.type, ctx.checker);
162
- expect(result.jsonSchema.type).toBe("object");
163
- expect(result.jsonSchema.properties?.["level1"]?.properties?.["level2"]).toBeDefined();
164
- });
165
- it("handles object with optional properties", () => {
166
- const ctx = createProgramContext(edgeCasesPath);
167
- const classDecl = findClassByName(ctx.sourceFile, "ObjectEdgeCases");
168
- const analysis = analyzeClass(classDecl, ctx.checker);
169
- const field = analysis.fields.find((f) => f.name === "optionalProps");
170
- const result = convertType(field.type, ctx.checker);
171
- expect(result.jsonSchema.type).toBe("object");
172
- expect(result.jsonSchema.required).toContain("required");
173
- expect(result.jsonSchema.required).not.toContain("optional");
174
- });
175
- });
176
- describe("convertType - special types", () => {
177
- it("handles any type gracefully", () => {
178
- const ctx = createProgramContext(edgeCasesPath);
179
- const classDecl = findClassByName(ctx.sourceFile, "SpecialTypes");
180
- const analysis = analyzeClass(classDecl, ctx.checker);
181
- const field = analysis.fields.find((f) => f.name === "anyField");
182
- const result = convertType(field.type, ctx.checker);
183
- // any should be treated as unknown/empty schema
184
- expect(result.formSpecFieldType).toBeDefined();
185
- });
186
- it("handles unknown type gracefully", () => {
187
- const ctx = createProgramContext(edgeCasesPath);
188
- const classDecl = findClassByName(ctx.sourceFile, "SpecialTypes");
189
- const analysis = analyzeClass(classDecl, ctx.checker);
190
- const field = analysis.fields.find((f) => f.name === "unknownField");
191
- const result = convertType(field.type, ctx.checker);
192
- expect(result.formSpecFieldType).toBeDefined();
193
- });
194
- });
195
- describe("convertType - enum variations", () => {
196
- it("handles single literal as enum with one value", () => {
197
- const ctx = createProgramContext(edgeCasesPath);
198
- const classDecl = findClassByName(ctx.sourceFile, "EnumVariations");
199
- const analysis = analyzeClass(classDecl, ctx.checker);
200
- const field = analysis.fields.find((f) => f.name === "singleLiteral");
201
- const result = convertType(field.type, ctx.checker);
202
- // Single literal should be const, not enum
203
- expect(result.jsonSchema.const).toBe("only");
204
- });
205
- it("handles number literal enum", () => {
206
- const ctx = createProgramContext(edgeCasesPath);
207
- const classDecl = findClassByName(ctx.sourceFile, "EnumVariations");
208
- const analysis = analyzeClass(classDecl, ctx.checker);
209
- const field = analysis.fields.find((f) => f.name === "numberEnum");
210
- const result = convertType(field.type, ctx.checker);
211
- expect(result.jsonSchema.enum).toEqual([1, 2, 3]);
212
- expect(result.formSpecFieldType).toBe("enum");
213
- });
214
- it("handles mixed literal types as union", () => {
215
- const ctx = createProgramContext(edgeCasesPath);
216
- const classDecl = findClassByName(ctx.sourceFile, "EnumVariations");
217
- const analysis = analyzeClass(classDecl, ctx.checker);
218
- const field = analysis.fields.find((f) => f.name === "mixedLiterals");
219
- const result = convertType(field.type, ctx.checker);
220
- // Mixed string/number literals should be union, not enum
221
- expect(result.formSpecFieldType).toBe("union");
222
- expect(result.jsonSchema.oneOf).toBeDefined();
223
- });
224
- it("handles large enum", () => {
225
- const ctx = createProgramContext(edgeCasesPath);
226
- const classDecl = findClassByName(ctx.sourceFile, "EnumVariations");
227
- const analysis = analyzeClass(classDecl, ctx.checker);
228
- const field = analysis.fields.find((f) => f.name === "largeEnum");
229
- const result = convertType(field.type, ctx.checker);
230
- expect(result.jsonSchema.enum).toHaveLength(10);
231
- expect(result.formSpecFieldType).toBe("enum");
232
- });
233
- });
234
- // ============================================================================
235
21
  // isFormSpec Edge Cases
236
22
  // ============================================================================
237
23
  describe("isFormSpec - negative cases", () => {
@@ -288,6 +74,8 @@ describe("output writer - error handling", () => {
288
74
  it("creates output directory if it doesn't exist", () => {
289
75
  const ctx = createProgramContext(edgeCasesPath);
290
76
  const classDecl = findClassByName(ctx.sourceFile, "NullablePatterns");
77
+ if (!classDecl)
78
+ throw new Error("NullablePatterns class not found");
291
79
  const analysis = analyzeClass(classDecl, ctx.checker);
292
80
  const schemas = generateClassSchemas(analysis, ctx.checker);
293
81
  const nonExistentDir = path.join(tempDir, "new-dir", "nested");
@@ -298,6 +86,8 @@ describe("output writer - error handling", () => {
298
86
  it("overwrites existing files", () => {
299
87
  const ctx = createProgramContext(edgeCasesPath);
300
88
  const classDecl = findClassByName(ctx.sourceFile, "NullablePatterns");
89
+ if (!classDecl)
90
+ throw new Error("NullablePatterns class not found");
301
91
  const analysis = analyzeClass(classDecl, ctx.checker);
302
92
  const schemas = generateClassSchemas(analysis, ctx.checker);
303
93
  const outputDir = path.join(tempDir, "overwrite-test");
@@ -314,9 +104,10 @@ describe("output writer - error handling", () => {
314
104
  expect(content.title).toBe("Modified");
315
105
  });
316
106
  it("handles special characters in class names", () => {
317
- // Note: This tests the sanitization logic if any
318
107
  const ctx = createProgramContext(edgeCasesPath);
319
108
  const classDecl = findClassByName(ctx.sourceFile, "MixedUnionTypes");
109
+ if (!classDecl)
110
+ throw new Error("MixedUnionTypes class not found");
320
111
  const analysis = analyzeClass(classDecl, ctx.checker);
321
112
  const schemas = generateClassSchemas(analysis, ctx.checker);
322
113
  const result = writeClassSchemas(analysis.name, schemas, [], [], { outDir: tempDir });
@@ -375,58 +166,4 @@ describe("loadFormSpecs - error handling", () => {
375
166
  expect(formSpecs.has("notFormSpec")).toBe(false);
376
167
  });
377
168
  });
378
- // ============================================================================
379
- // Decorator Extractor Edge Cases
380
- // ============================================================================
381
- describe("extractDecorators - edge cases", () => {
382
- it("handles class with no decorated properties", () => {
383
- const ctx = createProgramContext(edgeCasesPath);
384
- const classDecl = findClassByName(ctx.sourceFile, "MixedUnionTypes");
385
- // This class has no decorators
386
- const analysis = analyzeClass(classDecl, ctx.checker);
387
- // All fields should have empty decorator arrays
388
- for (const field of analysis.fields) {
389
- expect(field.decorators).toEqual([]);
390
- }
391
- });
392
- it("handles class explicitly without decorators", () => {
393
- const ctx = createProgramContext(edgeCasesPath);
394
- const classDecl = findClassByName(ctx.sourceFile, "NoDecoratorsClass");
395
- const analysis = analyzeClass(classDecl, ctx.checker);
396
- // All fields should have empty decorator arrays
397
- expect(analysis.fields).toHaveLength(3);
398
- for (const field of analysis.fields) {
399
- expect(field.decorators).toEqual([]);
400
- }
401
- });
402
- it("correctly detects optional vs required fields without decorators", () => {
403
- const ctx = createProgramContext(edgeCasesPath);
404
- const classDecl = findClassByName(ctx.sourceFile, "NoDecoratorsClass");
405
- const analysis = analyzeClass(classDecl, ctx.checker);
406
- const nameField = analysis.fields.find((f) => f.name === "name");
407
- const countField = analysis.fields.find((f) => f.name === "count");
408
- const activeField = analysis.fields.find((f) => f.name === "active");
409
- expect(nameField.optional).toBe(false);
410
- expect(countField.optional).toBe(true);
411
- expect(activeField.optional).toBe(false);
412
- });
413
- });
414
- // ============================================================================
415
- // Program Context Error Handling
416
- // ============================================================================
417
- describe("createProgramContext - error handling", () => {
418
- it("throws for non-existent file", () => {
419
- expect(() => createProgramContext("/non/existent/path.ts")).toThrow();
420
- });
421
- it("throws for directory path", () => {
422
- expect(() => createProgramContext(fixturesDir)).toThrow();
423
- });
424
- it("handles file with TypeScript errors gracefully", () => {
425
- // The program should still be created even if there are type errors
426
- // We test this by using a valid file - the program context should work
427
- const ctx = createProgramContext(edgeCasesPath);
428
- expect(ctx.program).toBeDefined();
429
- expect(ctx.checker).toBeDefined();
430
- });
431
- });
432
169
  //# sourceMappingURL=edge-cases.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-cases.test.js","sourceRoot":"","sources":["../../src/__tests__/edge-cases.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge-cases.test.js","sourceRoot":"","sources":["../../src/__tests__/edge-cases.test.ts"],"names":[],"mappings":"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"}
@@ -36,10 +36,10 @@ export declare class ArrayEdgeCases {
36
36
  strings: string[];
37
37
  mixedArray: (string | number)[];
38
38
  nullableArray: string[] | null;
39
- objectArray: Array<{
39
+ objectArray: {
40
40
  id: number;
41
41
  name: string;
42
- }>;
42
+ }[];
43
43
  anyArray: unknown[];
44
44
  nestedArray: string[][];
45
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"edge-cases.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/edge-cases.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,qBAAa,eAAe;IAE1B,cAAc,EAAG,MAAM,GAAG,MAAM,CAAC;IAGjC,YAAY,EAAG,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAG5C,WAAW,EAAG;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAMD;;GAEG;AACH,qBAAa,gBAAgB;IAE3B,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAG/B,eAAe,EAAG,MAAM,GAAG,SAAS,CAAC;IAGrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,WAAW,EAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAGxC,cAAc,EAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;CAC/C;AAMD;;GAEG;AACH,qBAAa,cAAc;IAEzB,OAAO,EAAG,MAAM,EAAE,CAAC;IAGnB,UAAU,EAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAGjC,aAAa,EAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAGhC,WAAW,EAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAGlD,QAAQ,EAAG,OAAO,EAAE,CAAC;IAGrB,WAAW,EAAG,MAAM,EAAE,EAAE,CAAC;CAC1B;AAMD;;GAEG;AACH,qBAAa,eAAe;IAE1B,WAAW,EAAG,EAAE,CAAC;IAGjB,YAAY,EAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtC,UAAU,EAAG;QACX,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM,CAAC;iBACf,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;IAGF,aAAa,EAAG;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAMD;;GAEG;AACH,qBAAa,YAAY;IAGvB,QAAQ,EAAG,GAAG,CAAC;IAGf,YAAY,EAAG,OAAO,CAAC;IAMvB,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;CAClB;AAMD;;GAEG;AACH,qBAAa,cAAc;IAEzB,aAAa,EAAG,MAAM,CAAC;IAGvB,UAAU,EAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAIvB,aAAa,EAAG,QAAQ,GAAG,EAAE,CAAC;IAG9B,SAAS,EACL,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAC3B,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACjC;AAMD;;GAEG;AACH,qBAAa,iBAAiB;IAE5B,IAAI,EAAG,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,MAAM,EAAG,OAAO,CAAC;CAClB;AAMD,eAAO,MAAM,YAAY,MAAO,CAAC;AACjC,eAAO,MAAM,YAAY,WAAY,CAAC;AACtC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY;;CAAsB,CAAC;AAChD,eAAO,MAAM,YAAY;;CAA4B,CAAC;AACtD,eAAO,MAAM,YAAY;;;;CAAwC,CAAC;AAClE,eAAO,MAAM,YAAY;;CAAuB,CAAC"}
1
+ {"version":3,"file":"edge-cases.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/edge-cases.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,qBAAa,eAAe;IAE1B,cAAc,EAAG,MAAM,GAAG,MAAM,CAAC;IAGjC,YAAY,EAAG,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAG5C,WAAW,EAAG;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAMD;;GAEG;AACH,qBAAa,gBAAgB;IAE3B,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAG/B,eAAe,EAAG,MAAM,GAAG,SAAS,CAAC;IAGrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,WAAW,EAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAGxC,cAAc,EAAG,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;CAC/C;AAMD;;GAEG;AACH,qBAAa,cAAc;IAEzB,OAAO,EAAG,MAAM,EAAE,CAAC;IAGnB,UAAU,EAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAGjC,aAAa,EAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IAGhC,WAAW,EAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAG7C,QAAQ,EAAG,OAAO,EAAE,CAAC;IAGrB,WAAW,EAAG,MAAM,EAAE,EAAE,CAAC;CAC1B;AAMD;;GAEG;AACH,qBAAa,eAAe;IAG1B,WAAW,EAAG,EAAE,CAAC;IAGjB,YAAY,EAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtC,UAAU,EAAG;QACX,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM,CAAC;iBACf,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;IAGF,aAAa,EAAG;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAMD;;GAEG;AACH,qBAAa,YAAY;IAGvB,QAAQ,EAAG,GAAG,CAAC;IAGf,YAAY,EAAG,OAAO,CAAC;IAOvB,SAAS,EAAG,IAAI,CAAC;IAGjB,SAAS,EAAG,IAAI,CAAC;CAClB;AAMD;;GAEG;AACH,qBAAa,cAAc;IAEzB,aAAa,EAAG,MAAM,CAAC;IAGvB,UAAU,EAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAIvB,aAAa,EAAG,QAAQ,GAAG,EAAE,CAAC;IAG9B,SAAS,EAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACvE;AAMD;;GAEG;AACH,qBAAa,iBAAiB;IAE5B,IAAI,EAAG,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,MAAM,EAAG,OAAO,CAAC;CAClB;AAMD,eAAO,MAAM,YAAY,MAAO,CAAC;AACjC,eAAO,MAAM,YAAY,WAAY,CAAC;AACtC,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY;;CAAsB,CAAC;AAChD,eAAO,MAAM,YAAY;;CAA4B,CAAC;AACtD,eAAO,MAAM,YAAY;;;;CAAwC,CAAC;AAClE,eAAO,MAAM,YAAY;;CAAuB,CAAC"}
@@ -62,7 +62,8 @@ export class ArrayEdgeCases {
62
62
  * Various object type patterns.
63
63
  */
64
64
  export class ObjectEdgeCases {
65
- // Empty object
65
+ // Empty object - Allow this as a test case for empty object type handling
66
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
66
67
  emptyObject;
67
68
  // Record type
68
69
  stringRecord;
@@ -85,7 +86,8 @@ export class SpecialTypes {
85
86
  unknownField;
86
87
  // never type (edge case)
87
88
  // Note: never is not typically used as a property type
88
- // void type
89
+ // void type - Test case for void type handling, used in FormSpec codegen tests
90
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
89
91
  voidField;
90
92
  // Date (built-in object)
91
93
  dateField;
@@ -1 +1 @@
1
- {"version":3,"file":"edge-cases.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/edge-cases.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,uCAAuC;IACvC,cAAc,CAAmB;IAEjC,0CAA0C;IAC1C,YAAY,CAAgC;IAE5C,mCAAmC;IACnC,WAAW,CAAiE;CAC7E;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,6BAA6B;IAC7B,cAAc,CAAiB;IAE/B,4DAA4D;IAC5D,eAAe,CAAsB;IAErC,6BAA6B;IAC7B,gBAAgB,CAAiB;IAEjC,sCAAsC;IACtC,WAAW,CAA6B;IAExC,gBAAgB;IAChB,cAAc,CAAgC;CAC/C;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,sBAAsB;IACtB,OAAO,CAAY;IAEnB,kBAAkB;IAClB,UAAU,CAAuB;IAEjC,iBAAiB;IACjB,aAAa,CAAmB;IAEhC,mBAAmB;IACnB,WAAW,CAAuC;IAElD,2BAA2B;IAC3B,QAAQ,CAAa;IAErB,gBAAgB;IAChB,WAAW,CAAc;CAC1B;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,eAAe;IACf,WAAW,CAAM;IAEjB,cAAc;IACd,YAAY,CAA0B;IAEtC,uBAAuB;IACvB,UAAU,CAQR;IAEF,kCAAkC;IAClC,aAAa,CAGX;CACH;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB,sCAAsC;IACtC,8DAA8D;IAC9D,QAAQ,CAAO;IAEf,eAAe;IACf,YAAY,CAAW;IAEvB,yBAAyB;IACzB,uDAAuD;IAEvD,YAAY;IACZ,SAAS,CAAQ;IAEjB,yBAAyB;IACzB,SAAS,CAAQ;CAClB;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,wCAAwC;IACxC,aAAa,CAAU;IAEvB,sBAAsB;IACtB,UAAU,CAAa;IAEvB,iDAAiD;IACjD,qCAAqC;IACrC,aAAa,CAAiB;IAE9B,4BAA4B;IAC5B,SAAS,CAEuB;CACjC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B,uBAAuB;IACvB,IAAI,CAAU;IAEd,wBAAwB;IACxB,KAAK,CAAU;IAEf,gBAAgB;IAChB,MAAM,CAAW;CAClB;AAED,+EAA+E;AAC/E,yDAAyD;AACzD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"edge-cases.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/edge-cases.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,uCAAuC;IACvC,cAAc,CAAmB;IAEjC,0CAA0C;IAC1C,YAAY,CAAgC;IAE5C,mCAAmC;IACnC,WAAW,CAAiE;CAC7E;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,6BAA6B;IAC7B,cAAc,CAAiB;IAE/B,4DAA4D;IAC5D,eAAe,CAAsB;IAErC,6BAA6B;IAC7B,gBAAgB,CAAiB;IAEjC,sCAAsC;IACtC,WAAW,CAA6B;IAExC,gBAAgB;IAChB,cAAc,CAAgC;CAC/C;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,sBAAsB;IACtB,OAAO,CAAY;IAEnB,kBAAkB;IAClB,UAAU,CAAuB;IAEjC,iBAAiB;IACjB,aAAa,CAAmB;IAEhC,mBAAmB;IACnB,WAAW,CAAkC;IAE7C,2BAA2B;IAC3B,QAAQ,CAAa;IAErB,gBAAgB;IAChB,WAAW,CAAc;CAC1B;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,0EAA0E;IAC1E,mEAAmE;IACnE,WAAW,CAAM;IAEjB,cAAc;IACd,YAAY,CAA0B;IAEtC,uBAAuB;IACvB,UAAU,CAQR;IAEF,kCAAkC;IAClC,aAAa,CAGX;CACH;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB,sCAAsC;IACtC,8DAA8D;IAC9D,QAAQ,CAAO;IAEf,eAAe;IACf,YAAY,CAAW;IAEvB,yBAAyB;IACzB,uDAAuD;IAEvD,+EAA+E;IAC/E,mEAAmE;IACnE,SAAS,CAAQ;IAEjB,yBAAyB;IACzB,SAAS,CAAQ;CAClB;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,wCAAwC;IACxC,aAAa,CAAU;IAEvB,sBAAsB;IACtB,UAAU,CAAa;IAEvB,iDAAiD;IACjD,qCAAqC;IACrC,aAAa,CAAiB;IAE9B,4BAA4B;IAC5B,SAAS,CAA6D;CACvE;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B,uBAAuB;IACvB,IAAI,CAAU;IAEd,wBAAwB;IACxB,KAAK,CAAU;IAEf,gBAAgB;IAChB,MAAM,CAAW;CAClB;AAED,+EAA+E;AAC/E,yDAAyD;AACzD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAChD,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC"}
@@ -4,11 +4,8 @@
4
4
  import { describe, it, expect, beforeAll, afterAll } from "vitest";
5
5
  import * as fs from "node:fs";
6
6
  import * as path from "node:path";
7
- import { createProgramContext, findClassByName } from "../analyzer/program.js";
8
- import { analyzeClass } from "../analyzer/class-analyzer.js";
9
- import { generateClassSchemas } from "../generators/class-schema.js";
10
- import { generateMethodSchemas, collectFormSpecReferences, } from "../generators/method-schema.js";
11
- import { loadFormSpecs, isFormSpec, } from "../runtime/formspec-loader.js";
7
+ import { createProgramContext, findClassByName, analyzeClass, generateClassSchemas, generateMethodSchemas, collectFormSpecReferences, } from "@formspec/build/internals";
8
+ import { loadFormSpecs, isFormSpec } from "../runtime/formspec-loader.js";
12
9
  import { writeClassSchemas, writeFormSpecSchemas } from "../output/writer.js";
13
10
  const fixturesDir = path.join(__dirname, "fixtures");
14
11
  const sampleFormsPath = path.join(fixturesDir, "sample-forms.ts");
@@ -16,10 +13,26 @@ const compiledPath = path.join(fixturesDir, "sample-forms.js");
16
13
  const testOutputDir = path.join(__dirname, "__test_output__");
17
14
  // Check if compiled fixture exists (may need to be built)
18
15
  const hasCompiledFixture = fs.existsSync(compiledPath);
16
+ /**
17
+ * Converts FormSpecSchemas from loader to LoadedFormSpecSchemas for build API.
18
+ */
19
+ function toLoadedSchemas(formSpecs) {
20
+ const result = new Map();
21
+ for (const [name, schemas] of formSpecs) {
22
+ result.set(name, {
23
+ name: schemas.name,
24
+ jsonSchema: schemas.jsonSchema,
25
+ uiSchema: schemas.uiSchema,
26
+ });
27
+ }
28
+ return result;
29
+ }
19
30
  describe("generators", () => {
20
31
  it("generates class schemas from static analysis", () => {
21
32
  const ctx = createProgramContext(sampleFormsPath);
22
33
  const classDecl = findClassByName(ctx.sourceFile, "SimpleProduct");
34
+ if (!classDecl)
35
+ throw new Error("SimpleProduct class not found");
23
36
  const analysis = analyzeClass(classDecl, ctx.checker);
24
37
  const schemas = generateClassSchemas(analysis, ctx.checker);
25
38
  // JSON Schema
@@ -31,14 +44,16 @@ describe("generators", () => {
31
44
  expect(schemas.jsonSchema.required).toContain("active");
32
45
  expect(schemas.jsonSchema.required).not.toContain("price");
33
46
  // UI Schema
34
- expect(schemas.uxSpec.elements).toHaveLength(4);
35
- const nameElement = schemas.uxSpec.elements.find((e) => e.id === "name");
47
+ expect(schemas.uiSchema.elements).toHaveLength(4);
48
+ const nameElement = schemas.uiSchema.elements.find((e) => e.id === "name");
36
49
  expect(nameElement?._field).toBe("text");
37
50
  expect(nameElement?.required).toBe(true);
38
51
  });
39
52
  it("collects FormSpec references from methods", () => {
40
53
  const ctx = createProgramContext(sampleFormsPath);
41
54
  const classDecl = findClassByName(ctx.sourceFile, "InstallmentPlan");
55
+ if (!classDecl)
56
+ throw new Error("InstallmentPlan class not found");
42
57
  const analysis = analyzeClass(classDecl, ctx.checker);
43
58
  const refs = collectFormSpecReferences([
44
59
  ...analysis.instanceMethods,
@@ -51,22 +66,24 @@ describe("generators", () => {
51
66
  it("generates method schemas without FormSpec (static only)", () => {
52
67
  const ctx = createProgramContext(sampleFormsPath);
53
68
  const classDecl = findClassByName(ctx.sourceFile, "SimpleProduct");
69
+ if (!classDecl)
70
+ throw new Error("SimpleProduct class not found");
54
71
  const analysis = analyzeClass(classDecl, ctx.checker);
55
72
  const updateMethod = analysis.instanceMethods[0];
73
+ if (!updateMethod)
74
+ throw new Error("updateMethod not found");
56
75
  const methodSchemas = generateMethodSchemas(updateMethod, ctx.checker, new Map());
57
76
  expect(methodSchemas.name).toBe("update");
58
77
  expect(methodSchemas.params).not.toBeNull();
59
78
  expect(methodSchemas.params?.jsonSchema.type).toBe("object");
60
- expect(methodSchemas.params?.uxSpec).toBeNull();
79
+ expect(methodSchemas.params?.uiSchema).toBeNull();
61
80
  expect(methodSchemas.returnType.type).toBe("boolean");
62
81
  });
63
82
  });
64
83
  describe("isFormSpec", () => {
65
84
  it("detects valid FormSpec-like objects", () => {
66
85
  const validFormSpec = {
67
- elements: [
68
- { _type: "field", _field: "text", name: "test" },
69
- ],
86
+ elements: [{ _type: "field", _field: "text", name: "test" }],
70
87
  };
71
88
  expect(isFormSpec(validFormSpec)).toBe(true);
72
89
  });
@@ -89,6 +106,8 @@ describe.skipIf(!hasCompiledFixture)("runtime loading", () => {
89
106
  expect(formSpecs.has("CancelParams")).toBe(true);
90
107
  // Check generated schemas
91
108
  const userForm = formSpecs.get("UserRegistrationForm");
109
+ if (!userForm)
110
+ throw new Error("UserRegistrationForm not found");
92
111
  expect(userForm.jsonSchema).toBeDefined();
93
112
  expect(userForm.uiSchema).toBeDefined();
94
113
  // Module should have the class exports too
@@ -97,17 +116,22 @@ describe.skipIf(!hasCompiledFixture)("runtime loading", () => {
97
116
  it("generates method schemas with FormSpec params", async () => {
98
117
  const ctx = createProgramContext(sampleFormsPath);
99
118
  const classDecl = findClassByName(ctx.sourceFile, "InstallmentPlan");
119
+ if (!classDecl)
120
+ throw new Error("InstallmentPlan class not found");
100
121
  const analysis = analyzeClass(classDecl, ctx.checker);
101
122
  // Load FormSpecs at runtime
102
123
  const { formSpecs } = await loadFormSpecs(compiledPath);
124
+ const loadedSchemas = toLoadedSchemas(formSpecs);
103
125
  // Generate method schemas
104
126
  const activateMethod = analysis.instanceMethods.find((m) => m.name === "activate");
105
- const methodSchemas = generateMethodSchemas(activateMethod, ctx.checker, formSpecs);
127
+ if (!activateMethod)
128
+ throw new Error("activate method not found");
129
+ const methodSchemas = generateMethodSchemas(activateMethod, ctx.checker, loadedSchemas);
106
130
  expect(methodSchemas.name).toBe("activate");
107
131
  expect(methodSchemas.params).not.toBeNull();
108
132
  expect(methodSchemas.params?.formSpecExport).toBe("ActivateParams");
109
133
  // Should have UI Schema from the FormSpec
110
- expect(methodSchemas.params?.uxSpec).not.toBeNull();
134
+ expect(methodSchemas.params?.uiSchema).not.toBeNull();
111
135
  });
112
136
  });
113
137
  describe.skipIf(!hasCompiledFixture)("output writer", () => {
@@ -126,21 +150,24 @@ describe.skipIf(!hasCompiledFixture)("output writer", () => {
126
150
  it("writes class schemas to output directory", async () => {
127
151
  const ctx = createProgramContext(sampleFormsPath);
128
152
  const classDecl = findClassByName(ctx.sourceFile, "InstallmentPlan");
153
+ if (!classDecl)
154
+ throw new Error("InstallmentPlan class not found");
129
155
  const analysis = analyzeClass(classDecl, ctx.checker);
130
156
  // Load FormSpecs
131
157
  const { formSpecs } = await loadFormSpecs(compiledPath);
158
+ const loadedSchemas = toLoadedSchemas(formSpecs);
132
159
  // Generate schemas
133
160
  const classSchemas = generateClassSchemas(analysis, ctx.checker);
134
- const instanceMethodSchemas = analysis.instanceMethods.map((m) => generateMethodSchemas(m, ctx.checker, formSpecs));
135
- const staticMethodSchemas = analysis.staticMethods.map((m) => generateMethodSchemas(m, ctx.checker, formSpecs));
161
+ const instanceMethodSchemas = analysis.instanceMethods.map((m) => generateMethodSchemas(m, ctx.checker, loadedSchemas));
162
+ const staticMethodSchemas = analysis.staticMethods.map((m) => generateMethodSchemas(m, ctx.checker, loadedSchemas));
136
163
  // Write output
137
164
  const result = writeClassSchemas(analysis.name, classSchemas, instanceMethodSchemas, staticMethodSchemas, { outDir: testOutputDir });
138
165
  // Verify directory structure
139
166
  expect(fs.existsSync(result.dir)).toBe(true);
140
167
  expect(fs.existsSync(path.join(result.dir, "schema.json"))).toBe(true);
141
- expect(fs.existsSync(path.join(result.dir, "ux_spec.json"))).toBe(true);
168
+ expect(fs.existsSync(path.join(result.dir, "ui_schema.json"))).toBe(true);
142
169
  expect(fs.existsSync(path.join(result.dir, "instance_methods", "activate", "params.schema.json"))).toBe(true);
143
- expect(fs.existsSync(path.join(result.dir, "instance_methods", "activate", "params.ux_spec.json"))).toBe(true);
170
+ expect(fs.existsSync(path.join(result.dir, "instance_methods", "activate", "params.ui_schema.json"))).toBe(true);
144
171
  expect(fs.existsSync(path.join(result.dir, "static_methods", "createStandard", "return_type.schema.json"))).toBe(true);
145
172
  // Verify JSON content
146
173
  const schemaContent = JSON.parse(fs.readFileSync(path.join(result.dir, "schema.json"), "utf-8"));
@@ -152,7 +179,7 @@ describe.skipIf(!hasCompiledFixture)("output writer", () => {
152
179
  const result = writeFormSpecSchemas(formSpecs, { outDir: testOutputDir });
153
180
  expect(fs.existsSync(result.dir)).toBe(true);
154
181
  expect(fs.existsSync(path.join(result.dir, "UserRegistrationForm", "schema.json"))).toBe(true);
155
- expect(fs.existsSync(path.join(result.dir, "UserRegistrationForm", "ux_spec.json"))).toBe(true);
182
+ expect(fs.existsSync(path.join(result.dir, "UserRegistrationForm", "ui_schema.json"))).toBe(true);
156
183
  expect(fs.existsSync(path.join(result.dir, "ProductConfigForm", "schema.json"))).toBe(true);
157
184
  });
158
185
  });