@formspec/build 0.1.0-alpha.10 → 0.1.0-alpha.11

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 (107) hide show
  1. package/dist/browser.cjs +549 -0
  2. package/dist/browser.cjs.map +1 -0
  3. package/dist/browser.d.ts +4 -2
  4. package/dist/browser.d.ts.map +1 -1
  5. package/dist/browser.js +498 -45
  6. package/dist/browser.js.map +1 -1
  7. package/dist/build.d.ts +343 -33
  8. package/dist/cli.cjs +2267 -0
  9. package/dist/cli.cjs.map +1 -0
  10. package/dist/cli.js +2204 -101
  11. package/dist/cli.js.map +1 -1
  12. package/dist/generators/class-schema.d.ts +5 -9
  13. package/dist/generators/class-schema.d.ts.map +1 -1
  14. package/dist/index.cjs +2093 -0
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/index.d.ts +4 -2
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2024 -114
  19. package/dist/index.js.map +1 -1
  20. package/dist/internals.cjs +1345 -0
  21. package/dist/internals.cjs.map +1 -0
  22. package/dist/internals.d.ts +1 -0
  23. package/dist/internals.d.ts.map +1 -1
  24. package/dist/internals.js +1297 -21
  25. package/dist/internals.js.map +1 -1
  26. package/dist/json-schema/generator.d.ts.map +1 -1
  27. package/dist/json-schema/schema.d.ts +16 -0
  28. package/dist/json-schema/schema.d.ts.map +1 -0
  29. package/dist/ui-schema/generator.d.ts +15 -0
  30. package/dist/ui-schema/generator.d.ts.map +1 -1
  31. package/dist/ui-schema/schema.d.ts +357 -0
  32. package/dist/ui-schema/schema.d.ts.map +1 -0
  33. package/dist/ui-schema/types.d.ts +8 -73
  34. package/dist/ui-schema/types.d.ts.map +1 -1
  35. package/package.json +14 -9
  36. package/dist/__tests__/analyzer-edge-cases.test.js +0 -376
  37. package/dist/__tests__/analyzer-edge-cases.test.js.map +0 -1
  38. package/dist/__tests__/analyzer.test.js +0 -190
  39. package/dist/__tests__/analyzer.test.js.map +0 -1
  40. package/dist/__tests__/cli.test.js +0 -178
  41. package/dist/__tests__/cli.test.js.map +0 -1
  42. package/dist/__tests__/codegen.test.js +0 -506
  43. package/dist/__tests__/codegen.test.js.map +0 -1
  44. package/dist/__tests__/decorator-pipeline.test.js +0 -460
  45. package/dist/__tests__/decorator-pipeline.test.js.map +0 -1
  46. package/dist/__tests__/edge-cases.test.js +0 -215
  47. package/dist/__tests__/edge-cases.test.js.map +0 -1
  48. package/dist/__tests__/fixtures/edge-cases.js +0 -137
  49. package/dist/__tests__/fixtures/edge-cases.js.map +0 -1
  50. package/dist/__tests__/fixtures/example-a-builtins.js +0 -100
  51. package/dist/__tests__/fixtures/example-a-builtins.js.map +0 -1
  52. package/dist/__tests__/fixtures/example-b-decorators.js +0 -5
  53. package/dist/__tests__/fixtures/example-b-decorators.js.map +0 -1
  54. package/dist/__tests__/fixtures/example-b-extended.js +0 -60
  55. package/dist/__tests__/fixtures/example-b-extended.js.map +0 -1
  56. package/dist/__tests__/fixtures/example-c-custom.js +0 -61
  57. package/dist/__tests__/fixtures/example-c-custom.js.map +0 -1
  58. package/dist/__tests__/fixtures/example-c-decorators.js +0 -4
  59. package/dist/__tests__/fixtures/example-c-decorators.js.map +0 -1
  60. package/dist/__tests__/fixtures/example-d-mixed-decorators.js +0 -75
  61. package/dist/__tests__/fixtures/example-d-mixed-decorators.js.map +0 -1
  62. package/dist/__tests__/fixtures/example-e-decorators.js +0 -10
  63. package/dist/__tests__/fixtures/example-e-decorators.js.map +0 -1
  64. package/dist/__tests__/fixtures/example-e-no-namespace.js +0 -61
  65. package/dist/__tests__/fixtures/example-e-no-namespace.js.map +0 -1
  66. package/dist/__tests__/fixtures/example-interface-types.js +0 -8
  67. package/dist/__tests__/fixtures/example-interface-types.js.map +0 -1
  68. package/dist/__tests__/fixtures/example-jsdoc-constraints.js +0 -98
  69. package/dist/__tests__/fixtures/example-jsdoc-constraints.js.map +0 -1
  70. package/dist/__tests__/fixtures/example-nested-class.js +0 -248
  71. package/dist/__tests__/fixtures/example-nested-class.js.map +0 -1
  72. package/dist/__tests__/fixtures/sample-forms.js +0 -78
  73. package/dist/__tests__/fixtures/sample-forms.js.map +0 -1
  74. package/dist/__tests__/generator.test.js +0 -234
  75. package/dist/__tests__/generator.test.js.map +0 -1
  76. package/dist/__tests__/integration.test.js +0 -161
  77. package/dist/__tests__/integration.test.js.map +0 -1
  78. package/dist/__tests__/interface-types.test.js +0 -404
  79. package/dist/__tests__/interface-types.test.js.map +0 -1
  80. package/dist/__tests__/jsdoc-constraints.test.js +0 -465
  81. package/dist/__tests__/jsdoc-constraints.test.js.map +0 -1
  82. package/dist/__tests__/write-schemas.test.js +0 -198
  83. package/dist/__tests__/write-schemas.test.js.map +0 -1
  84. package/dist/analyzer/class-analyzer.js +0 -377
  85. package/dist/analyzer/class-analyzer.js.map +0 -1
  86. package/dist/analyzer/decorator-extractor.js +0 -336
  87. package/dist/analyzer/decorator-extractor.js.map +0 -1
  88. package/dist/analyzer/jsdoc-constraints.js +0 -153
  89. package/dist/analyzer/jsdoc-constraints.js.map +0 -1
  90. package/dist/analyzer/program.js +0 -114
  91. package/dist/analyzer/program.js.map +0 -1
  92. package/dist/analyzer/type-converter.js +0 -474
  93. package/dist/analyzer/type-converter.js.map +0 -1
  94. package/dist/codegen/index.js +0 -597
  95. package/dist/codegen/index.js.map +0 -1
  96. package/dist/generators/class-schema.js +0 -140
  97. package/dist/generators/class-schema.js.map +0 -1
  98. package/dist/generators/method-schema.js +0 -108
  99. package/dist/generators/method-schema.js.map +0 -1
  100. package/dist/json-schema/generator.js +0 -166
  101. package/dist/json-schema/generator.js.map +0 -1
  102. package/dist/json-schema/types.js +0 -33
  103. package/dist/json-schema/types.js.map +0 -1
  104. package/dist/ui-schema/generator.js +0 -148
  105. package/dist/ui-schema/generator.js.map +0 -1
  106. package/dist/ui-schema/types.js +0 -8
  107. package/dist/ui-schema/types.js.map +0 -1
@@ -1,404 +0,0 @@
1
- /**
2
- * Tests for interface and type alias schema generation.
3
- *
4
- * Covers the `generateSchemas` unified entry point, `analyzeInterface`,
5
- * `analyzeTypeAlias`, `extractJSDocFieldMetadata`, `@EnumOptions` JSON
6
- * parsing, nested type propagation, and error paths.
7
- *
8
- * @see https://json-schema.org/understanding-json-schema
9
- */
10
- import { describe, it, expect } from "vitest";
11
- import * as path from "node:path";
12
- import { generateSchemas } from "../generators/class-schema.js";
13
- import { createProgramContext, findInterfaceByName, findTypeAliasByName, } from "../analyzer/program.js";
14
- import { analyzeInterface, analyzeTypeAlias } from "../analyzer/class-analyzer.js";
15
- import { extractJSDocFieldMetadata } from "../analyzer/jsdoc-constraints.js";
16
- const fixturesDir = path.join(__dirname, "fixtures");
17
- const fixturePath = path.join(fixturesDir, "example-interface-types.ts");
18
- // Shared program context for fixture analysis
19
- function getCtx() {
20
- return createProgramContext(fixturePath);
21
- }
22
- /** Finds an interface in the fixture or throws with a descriptive message. */
23
- function requireInterface(name) {
24
- const ctx = getCtx();
25
- const decl = findInterfaceByName(ctx.sourceFile, name);
26
- if (!decl)
27
- throw new Error(`Test precondition failed: interface "${name}" not found in fixture`);
28
- return { decl, ctx };
29
- }
30
- /** Finds a type alias in the fixture or throws with a descriptive message. */
31
- function requireTypeAlias(name) {
32
- const ctx = getCtx();
33
- const decl = findTypeAliasByName(ctx.sourceFile, name);
34
- if (!decl)
35
- throw new Error(`Test precondition failed: type alias "${name}" not found in fixture`);
36
- return { decl, ctx };
37
- }
38
- // ============================================================================
39
- // generateSchemas — unified entry point
40
- // ============================================================================
41
- describe("generateSchemas", () => {
42
- it("resolves a class automatically", () => {
43
- // Uses the existing class fixture
44
- const result = generateSchemas({
45
- filePath: path.join(fixturesDir, "example-a-builtins.ts"),
46
- typeName: "ExampleAForm",
47
- });
48
- expect(result.jsonSchema.type).toBe("object");
49
- expect(result.jsonSchema.properties).toBeDefined();
50
- });
51
- it("resolves an interface automatically", () => {
52
- const result = generateSchemas({
53
- filePath: fixturePath,
54
- typeName: "SimpleConfig",
55
- });
56
- expect(result.jsonSchema.type).toBe("object");
57
- expect(result.jsonSchema.properties?.["name"]).toHaveProperty("title", "Full Name");
58
- });
59
- it("resolves a type alias automatically", () => {
60
- const result = generateSchemas({
61
- filePath: fixturePath,
62
- typeName: "SimpleTypeAlias",
63
- });
64
- expect(result.jsonSchema.type).toBe("object");
65
- expect(result.jsonSchema.properties?.["label"]).toHaveProperty("title", "Label");
66
- });
67
- it("throws for unknown type names", () => {
68
- expect(() => generateSchemas({
69
- filePath: fixturePath,
70
- typeName: "NonExistentType",
71
- })).toThrow(/not found as a class, interface, or type alias/);
72
- });
73
- it("throws with descriptive error for non-object type alias", () => {
74
- expect(() => generateSchemas({
75
- filePath: fixturePath,
76
- typeName: "StringAlias",
77
- })).toThrow(/not an object type literal/);
78
- });
79
- it("includes line number in type alias error", () => {
80
- expect(() => generateSchemas({
81
- filePath: fixturePath,
82
- typeName: "StringAlias",
83
- })).toThrow(/line \d+/);
84
- });
85
- });
86
- // ============================================================================
87
- // Interface analysis
88
- // ============================================================================
89
- describe("analyzeInterface", () => {
90
- it("extracts fields from a simple interface", () => {
91
- const { decl, ctx } = requireInterface("SimpleConfig");
92
- const analysis = analyzeInterface(decl, ctx.checker);
93
- expect(analysis.name).toBe("SimpleConfig");
94
- expect(analysis.fields).toHaveLength(4);
95
- expect(analysis.instanceMethods).toHaveLength(0);
96
- expect(analysis.staticMethods).toHaveLength(0);
97
- });
98
- it("detects optional fields", () => {
99
- const { decl, ctx } = requireInterface("SimpleConfig");
100
- const analysis = analyzeInterface(decl, ctx.checker);
101
- const nameField = analysis.fields.find((f) => f.name === "name");
102
- const emailField = analysis.fields.find((f) => f.name === "email");
103
- expect(nameField?.optional).toBe(false);
104
- expect(emailField?.optional).toBe(true);
105
- });
106
- it("detects @deprecated on interface properties", () => {
107
- const { decl, ctx } = requireInterface("DeprecatedFieldInterface");
108
- const analysis = analyzeInterface(decl, ctx.checker);
109
- const nameField = analysis.fields.find((f) => f.name === "name");
110
- const fullNameField = analysis.fields.find((f) => f.name === "fullName");
111
- // eslint-disable-next-line @typescript-eslint/no-deprecated -- testing deprecated field detection
112
- expect(nameField?.deprecated).toBe(true);
113
- // eslint-disable-next-line @typescript-eslint/no-deprecated -- testing deprecated field detection
114
- expect(fullNameField?.deprecated).toBe(false);
115
- });
116
- it("handles empty interface", () => {
117
- const { decl, ctx } = requireInterface("EmptyInterface");
118
- const analysis = analyzeInterface(decl, ctx.checker);
119
- expect(analysis.name).toBe("EmptyInterface");
120
- expect(analysis.fields).toHaveLength(0);
121
- });
122
- });
123
- // ============================================================================
124
- // Type alias analysis
125
- // ============================================================================
126
- describe("analyzeTypeAlias", () => {
127
- it("succeeds for object type literal aliases", () => {
128
- const { decl, ctx } = requireTypeAlias("SimpleTypeAlias");
129
- const result = analyzeTypeAlias(decl, ctx.checker);
130
- expect(result.ok).toBe(true);
131
- if (result.ok) {
132
- expect(result.analysis.name).toBe("SimpleTypeAlias");
133
- expect(result.analysis.fields).toHaveLength(3);
134
- }
135
- });
136
- it("returns error for non-object type aliases", () => {
137
- const { decl, ctx } = requireTypeAlias("StringAlias");
138
- const result = analyzeTypeAlias(decl, ctx.checker);
139
- expect(result.ok).toBe(false);
140
- if (!result.ok) {
141
- expect(result.error).toContain("StringAlias");
142
- expect(result.error).toContain("not an object type literal");
143
- expect(result.error).toMatch(/line \d+/);
144
- }
145
- });
146
- it("returns error for union type aliases", () => {
147
- const { decl, ctx } = requireTypeAlias("UnionAlias");
148
- const result = analyzeTypeAlias(decl, ctx.checker);
149
- expect(result.ok).toBe(false);
150
- if (!result.ok) {
151
- expect(result.error).toContain("UnionAlias");
152
- }
153
- });
154
- });
155
- // ============================================================================
156
- // @Field_displayName and @Field_description extraction
157
- // ============================================================================
158
- describe("extractJSDocFieldMetadata", () => {
159
- it("extracts @Field_displayName and @Field_description from interface properties", () => {
160
- const result = generateSchemas({
161
- filePath: fixturePath,
162
- typeName: "SimpleConfig",
163
- });
164
- const props = result.jsonSchema.properties ?? {};
165
- expect(props["name"]).toMatchObject({
166
- title: "Full Name",
167
- description: "The user's legal name",
168
- });
169
- });
170
- it("extracts @Field_displayName without @Field_description", () => {
171
- const result = generateSchemas({
172
- filePath: fixturePath,
173
- typeName: "SimpleConfig",
174
- });
175
- const props = result.jsonSchema.properties ?? {};
176
- expect(props["active"]).toHaveProperty("title", "Active");
177
- expect(props["active"]).not.toHaveProperty("description");
178
- });
179
- it("maps @Field_displayName to UI Schema label", () => {
180
- const result = generateSchemas({
181
- filePath: fixturePath,
182
- typeName: "SimpleConfig",
183
- });
184
- const nameField = result.uiSchema.elements.find((e) => e.id === "name");
185
- expect(nameField).toHaveProperty("label", "Full Name");
186
- expect(nameField).toHaveProperty("description", "The user's legal name");
187
- });
188
- it("returns null when no metadata tags are present", () => {
189
- const { decl } = requireInterface("EmptyInterface");
190
- // EmptyInterface has no members, so nothing to extract
191
- for (const member of decl.members) {
192
- const metadata = extractJSDocFieldMetadata(member);
193
- expect(metadata).toBeNull();
194
- }
195
- });
196
- });
197
- // ============================================================================
198
- // Constraint tag extraction on interfaces/type aliases
199
- // ============================================================================
200
- describe("constraint tags on interfaces", () => {
201
- it("applies @Minimum, @Maximum, @MinLength, @MaxLength, @Pattern", () => {
202
- const result = generateSchemas({
203
- filePath: fixturePath,
204
- typeName: "SimpleConfig",
205
- });
206
- const props = result.jsonSchema.properties ?? {};
207
- expect(props["name"]).toMatchObject({ minLength: 1, maxLength: 200 });
208
- expect(props["age"]).toMatchObject({ minimum: 0, maximum: 150 });
209
- expect(props["email"]).toHaveProperty("pattern", "^[^@]+@[^@]+$");
210
- });
211
- it("applies constraints on type aliases", () => {
212
- const result = generateSchemas({
213
- filePath: fixturePath,
214
- typeName: "SimpleTypeAlias",
215
- });
216
- const props = result.jsonSchema.properties ?? {};
217
- expect(props["label"]).toMatchObject({ minLength: 1 });
218
- expect(props["count"]).toMatchObject({ minimum: 0 });
219
- });
220
- it("tracks required vs optional fields", () => {
221
- const result = generateSchemas({
222
- filePath: fixturePath,
223
- typeName: "SimpleConfig",
224
- });
225
- expect(result.jsonSchema.required).toContain("name");
226
- expect(result.jsonSchema.required).toContain("age");
227
- expect(result.jsonSchema.required).toContain("active");
228
- expect(result.jsonSchema.required).not.toContain("email");
229
- });
230
- it("omits required when all fields are optional", () => {
231
- const result = generateSchemas({
232
- filePath: fixturePath,
233
- typeName: "OnlyOptionalFields",
234
- });
235
- expect(result.jsonSchema.required).toBeUndefined();
236
- });
237
- });
238
- // ============================================================================
239
- // @EnumOptions JSON tag
240
- // ============================================================================
241
- describe("@EnumOptions TSDoc tag", () => {
242
- it("parses simple string array", () => {
243
- const result = generateSchemas({
244
- filePath: fixturePath,
245
- typeName: "WithEnumOptions",
246
- });
247
- const statusField = result.uiSchema.elements.find((e) => e.id === "status");
248
- expect(statusField?.options).toEqual(["draft", "active", "archived"]);
249
- });
250
- it("parses labeled object array", () => {
251
- const result = generateSchemas({
252
- filePath: fixturePath,
253
- typeName: "WithEnumOptions",
254
- });
255
- const priorityField = result.uiSchema.elements.find((e) => e.id === "priority");
256
- expect(priorityField?.options).toEqual([
257
- { id: "low", label: "Low Priority" },
258
- { id: "high", label: "High Priority" },
259
- ]);
260
- });
261
- it("parses @EnumOptions on type alias", () => {
262
- const result = generateSchemas({
263
- filePath: fixturePath,
264
- typeName: "TypeAliasWithEnumOptions",
265
- });
266
- const colorField = result.uiSchema.elements.find((e) => e.id === "color");
267
- expect(colorField?.options).toEqual(["red", "green", "blue"]);
268
- });
269
- it("does not add EnumOptions when tag is absent", () => {
270
- const { decl, ctx } = requireInterface("SimpleConfig");
271
- const analysis = analyzeInterface(decl, ctx.checker);
272
- const nameField = analysis.fields.find((f) => f.name === "name");
273
- expect(nameField?.decorators.find((d) => d.name === "EnumOptions")).toBeUndefined();
274
- });
275
- });
276
- // ============================================================================
277
- // Nested type propagation
278
- // ============================================================================
279
- describe("nested interface and type alias propagation", () => {
280
- it("propagates TSDoc constraints from nested interface", () => {
281
- const result = generateSchemas({
282
- filePath: fixturePath,
283
- typeName: "NestedConfig",
284
- });
285
- const address = result.jsonSchema.properties?.["address"];
286
- expect(address["type"]).toBe("object");
287
- const addressProps = address["properties"];
288
- expect(addressProps["street"]).toMatchObject({
289
- title: "Street",
290
- minLength: 1,
291
- maxLength: 200,
292
- });
293
- expect(addressProps["city"]).toMatchObject({
294
- title: "City",
295
- minLength: 1,
296
- });
297
- expect(addressProps["zip"]).toMatchObject({
298
- title: "Zip",
299
- pattern: "^[0-9]{5}$",
300
- });
301
- });
302
- it("propagates TSDoc constraints from nested type alias", () => {
303
- const result = generateSchemas({
304
- filePath: fixturePath,
305
- typeName: "NestedConfig",
306
- });
307
- const contact = result.jsonSchema.properties?.["contact"];
308
- expect(contact["type"]).toBe("object");
309
- const contactProps = contact["properties"];
310
- expect(contactProps["email"]).toMatchObject({
311
- title: "Email",
312
- pattern: "^[^@]+@[^@]+$",
313
- });
314
- expect(contactProps["phone"]).toMatchObject({
315
- title: "Phone",
316
- maxLength: 20,
317
- });
318
- });
319
- it("tracks required fields in nested types", () => {
320
- const result = generateSchemas({
321
- filePath: fixturePath,
322
- typeName: "NestedConfig",
323
- });
324
- const address = result.jsonSchema.properties?.["address"];
325
- expect(address["required"]).toContain("street");
326
- expect(address["required"]).toContain("city");
327
- expect(address["required"]).not.toContain("zip");
328
- const contact = result.jsonSchema.properties?.["contact"];
329
- expect(contact["required"]).toContain("email");
330
- expect(contact["required"]).not.toContain("phone");
331
- });
332
- });
333
- // ============================================================================
334
- // Constrained primitive type aliases
335
- // ============================================================================
336
- describe("constrained primitive type aliases", () => {
337
- it("propagates @Minimum/@Maximum from type Percent = number", () => {
338
- const result = generateSchemas({
339
- filePath: fixturePath,
340
- typeName: "ConfigWithAliasedTypes",
341
- });
342
- const props = result.jsonSchema.properties ?? {};
343
- expect(props["discount"]).toMatchObject({
344
- type: "number",
345
- title: "Discount",
346
- minimum: 0,
347
- maximum: 100,
348
- });
349
- });
350
- it("propagates @MinLength/@MaxLength/@Pattern from type Email = string", () => {
351
- const result = generateSchemas({
352
- filePath: fixturePath,
353
- typeName: "ConfigWithAliasedTypes",
354
- });
355
- const props = result.jsonSchema.properties ?? {};
356
- expect(props["contactEmail"]).toMatchObject({
357
- type: "string",
358
- title: "Contact Email",
359
- minLength: 1,
360
- maxLength: 255,
361
- pattern: "^[^@]+@[^@]+$",
362
- });
363
- });
364
- it("propagates @Field_displayName/@Field_description from annotated type alias", () => {
365
- const result = generateSchemas({
366
- filePath: fixturePath,
367
- typeName: "ConfigWithAliasedTypes",
368
- });
369
- const props = result.jsonSchema.properties ?? {};
370
- // The field's own @Field_displayName "Tax Rate" should take precedence,
371
- // but the alias constraints (@Minimum, @Maximum) should merge in
372
- expect(props["taxRate"]).toMatchObject({
373
- type: "number",
374
- minimum: 0,
375
- maximum: 100,
376
- });
377
- });
378
- });
379
- // ============================================================================
380
- // Finder functions
381
- // ============================================================================
382
- describe("findInterfaceByName", () => {
383
- it("finds an existing interface", () => {
384
- const { decl } = requireInterface("SimpleConfig");
385
- expect(decl.name.text).toBe("SimpleConfig");
386
- });
387
- it("returns null for non-existent interface", () => {
388
- const ctx = getCtx();
389
- const decl = findInterfaceByName(ctx.sourceFile, "DoesNotExist");
390
- expect(decl).toBeNull();
391
- });
392
- });
393
- describe("findTypeAliasByName", () => {
394
- it("finds an existing type alias", () => {
395
- const { decl } = requireTypeAlias("SimpleTypeAlias");
396
- expect(decl.name.text).toBe("SimpleTypeAlias");
397
- });
398
- it("returns null for non-existent type alias", () => {
399
- const ctx = getCtx();
400
- const decl = findTypeAliasByName(ctx.sourceFile, "DoesNotExist");
401
- expect(decl).toBeNull();
402
- });
403
- });
404
- //# sourceMappingURL=interface-types.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interface-types.test.js","sourceRoot":"","sources":["../../src/__tests__/interface-types.test.ts"],"names":[],"mappings":"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"}