@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,550 +0,0 @@
1
- /**
2
- * Code generation for FormSpec type metadata.
3
- *
4
- * Generates a TypeScript file that patches decorated classes with
5
- * their extracted type metadata, enabling runtime schema generation
6
- * as an alternative to a TypeScript transformer.
7
- *
8
- * Usage:
9
- * formspec codegen ./src/forms.ts -o ./src/__formspec_types__.ts
10
- *
11
- * Then in your code:
12
- * import './__formspec_types__'; // Patches all decorated classes
13
- * import { UserForm } from './forms';
14
- * import { toFormSpec } from '@formspec/decorators';
15
- * const spec = toFormSpec(UserForm);
16
- */
17
- import * as ts from "typescript";
18
- import * as path from "path";
19
- import * as fs from "fs";
20
- /**
21
- * Finds all decorated classes in the given source files.
22
- */
23
- export function findDecoratedClasses(files, baseDir) {
24
- const program = ts.createProgram(files, {
25
- target: ts.ScriptTarget.ESNext,
26
- module: ts.ModuleKind.ESNext,
27
- moduleResolution: ts.ModuleResolutionKind.NodeNext,
28
- experimentalDecorators: true,
29
- strict: true,
30
- });
31
- const checker = program.getTypeChecker();
32
- const results = [];
33
- for (const sourceFile of program.getSourceFiles()) {
34
- if (sourceFile.isDeclarationFile)
35
- continue;
36
- if (!files.some((f) => path.resolve(f) === sourceFile.fileName))
37
- continue;
38
- ts.forEachChild(sourceFile, (node) => {
39
- if (ts.isClassDeclaration(node) && hasDecoratedProperties(node)) {
40
- const className = node.name?.text;
41
- if (!className)
42
- return;
43
- const typeMetadata = extractTypeMetadata(node, checker);
44
- const relativePath = path.relative(baseDir, sourceFile.fileName);
45
- const exported = isClassExported(node, sourceFile);
46
- results.push({
47
- name: className,
48
- sourcePath: relativePath.replace(/\.tsx?$/, ""),
49
- typeMetadata,
50
- isExported: exported,
51
- });
52
- }
53
- });
54
- }
55
- return results;
56
- }
57
- /**
58
- * Checks if a class has any decorated properties.
59
- */
60
- function hasDecoratedProperties(node) {
61
- return node.members.some((member) => {
62
- if (!ts.isPropertyDeclaration(member))
63
- return false;
64
- const decorators = ts.getDecorators(member);
65
- return decorators !== undefined && decorators.length > 0;
66
- });
67
- }
68
- /**
69
- * Checks if a class is exported from its source file.
70
- *
71
- * A class is considered exported if:
72
- * 1. It has the 'export' modifier directly (export class Foo {})
73
- * 2. It has 'export default' modifiers (export default class Foo {})
74
- * 3. It's referenced in a named export declaration (export { Foo })
75
- */
76
- function isClassExported(classNode, sourceFile) {
77
- const className = classNode.name?.text;
78
- if (!className)
79
- return false;
80
- // Check for direct export modifier (export class Foo or export default class Foo)
81
- const modifiers = ts.getModifiers(classNode);
82
- if (modifiers) {
83
- const hasExport = modifiers.some((mod) => mod.kind === ts.SyntaxKind.ExportKeyword);
84
- if (hasExport)
85
- return true;
86
- }
87
- // Check for named exports (export { Foo } or export { Foo as Bar })
88
- for (const statement of sourceFile.statements) {
89
- if (ts.isExportDeclaration(statement) && statement.exportClause) {
90
- if (ts.isNamedExports(statement.exportClause)) {
91
- for (const element of statement.exportClause.elements) {
92
- // Check if this export refers to our class
93
- // element.name is the exported name, element.propertyName is the local name (if renamed)
94
- const localName = element.propertyName?.text ?? element.name.text;
95
- if (localName === className) {
96
- return true;
97
- }
98
- }
99
- }
100
- }
101
- }
102
- return false;
103
- }
104
- /**
105
- * Extracts type metadata for all properties in a class.
106
- */
107
- function extractTypeMetadata(classNode, checker) {
108
- const metadata = {};
109
- for (const member of classNode.members) {
110
- if (!ts.isPropertyDeclaration(member))
111
- continue;
112
- if (!member.name || !ts.isIdentifier(member.name))
113
- continue;
114
- const symbol = checker.getSymbolAtLocation(member.name);
115
- if (!symbol)
116
- continue;
117
- const type = checker.getTypeOfSymbolAtLocation(symbol, member);
118
- const fieldName = member.name.text;
119
- const isOptional = !!(symbol.flags & ts.SymbolFlags.Optional);
120
- const typeInfo = convertTypeToMetadata(type, checker);
121
- if (isOptional) {
122
- typeInfo.optional = true;
123
- }
124
- metadata[fieldName] = typeInfo;
125
- }
126
- return metadata;
127
- }
128
- /**
129
- * Converts a TypeScript type to serializable metadata.
130
- */
131
- function convertTypeToMetadata(type, checker, visited = new Set()) {
132
- // Cycle detection for object types only
133
- const isObjectType = (type.flags & ts.TypeFlags.Object) !== 0;
134
- if (isObjectType) {
135
- if (visited.has(type)) {
136
- return { type: "unknown" };
137
- }
138
- visited.add(type);
139
- }
140
- // Handle union types
141
- if (type.isUnion()) {
142
- const types = type.types;
143
- const nonNullTypes = types.filter((t) => !(t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)));
144
- const hasNull = types.some((t) => t.flags & ts.TypeFlags.Null);
145
- // Boolean union (true | false)
146
- const isBooleanUnion = nonNullTypes.length === 2 &&
147
- nonNullTypes.every((t) => t.flags & ts.TypeFlags.BooleanLiteral);
148
- if (isBooleanUnion) {
149
- const result = { type: "boolean" };
150
- if (hasNull)
151
- result.nullable = true;
152
- return result;
153
- }
154
- // String literal union = enum
155
- const allStringLiterals = nonNullTypes.every((t) => t.isStringLiteral());
156
- if (allStringLiterals && nonNullTypes.length > 0) {
157
- const result = {
158
- type: "enum",
159
- values: nonNullTypes.map((t) => t.value),
160
- };
161
- if (hasNull)
162
- result.nullable = true;
163
- return result;
164
- }
165
- // Number literal union = enum
166
- const allNumberLiterals = nonNullTypes.every((t) => t.isNumberLiteral());
167
- if (allNumberLiterals && nonNullTypes.length > 0) {
168
- const result = {
169
- type: "enum",
170
- values: nonNullTypes.map((t) => t.value),
171
- };
172
- if (hasNull)
173
- result.nullable = true;
174
- return result;
175
- }
176
- // Nullable single type
177
- if (nonNullTypes.length === 1 && nonNullTypes[0]) {
178
- const result = convertTypeToMetadata(nonNullTypes[0], checker, visited);
179
- if (hasNull)
180
- result.nullable = true;
181
- return result;
182
- }
183
- return { type: "unknown" };
184
- }
185
- // Primitives
186
- if (type.flags & ts.TypeFlags.String)
187
- return { type: "string" };
188
- if (type.flags & ts.TypeFlags.Number)
189
- return { type: "number" };
190
- if (type.flags & ts.TypeFlags.Boolean)
191
- return { type: "boolean" };
192
- // String literal
193
- if (type.isStringLiteral()) {
194
- return { type: "enum", values: [type.value] };
195
- }
196
- // Number literal
197
- if (type.isNumberLiteral()) {
198
- return { type: "enum", values: [type.value] };
199
- }
200
- // Arrays
201
- if (checker.isArrayType(type)) {
202
- const typeArgs = type.typeArguments;
203
- return {
204
- type: "array",
205
- itemType: typeArgs?.[0]
206
- ? convertTypeToMetadata(typeArgs[0], checker, visited)
207
- : { type: "unknown" },
208
- };
209
- }
210
- // Objects
211
- if (type.flags & ts.TypeFlags.Object) {
212
- const properties = {};
213
- for (const prop of type.getProperties()) {
214
- // Skip properties without declarations (can't determine type safely)
215
- const declaration = prop.valueDeclaration ?? prop.declarations?.[0];
216
- if (!declaration)
217
- continue;
218
- const propType = checker.getTypeOfSymbolAtLocation(prop, declaration);
219
- const propOptional = !!(prop.flags & ts.SymbolFlags.Optional);
220
- const propMeta = convertTypeToMetadata(propType, checker, visited);
221
- if (propOptional)
222
- propMeta.optional = true;
223
- properties[prop.name] = propMeta;
224
- }
225
- if (Object.keys(properties).length > 0) {
226
- return { type: "object", properties };
227
- }
228
- return { type: "object" };
229
- }
230
- return { type: "unknown" };
231
- }
232
- /**
233
- * Generates the codegen output file content.
234
- */
235
- export function generateCodegenOutput(classes, outputPath, baseDir) {
236
- const outputDir = path.dirname(path.resolve(outputPath));
237
- const lines = [
238
- "/**",
239
- " * Auto-generated by FormSpec CLI.",
240
- " * DO NOT EDIT - changes will be overwritten.",
241
- " *",
242
- " * This file provides:",
243
- " * - Type metadata patches for runtime schema generation",
244
- " * - Inferred schema types (e.g., UserFormSchema)",
245
- " * - Type-safe FormSpec accessors (e.g., getUserFormFormSpec())",
246
- " *",
247
- " * Usage:",
248
- " * import { UserFormSchema, getUserFormFormSpec } from './__formspec_types__';",
249
- " *",
250
- " * const data: UserFormSchema = { name: 'Alice', country: 'us' };",
251
- " * const spec = getUserFormFormSpec();",
252
- " */",
253
- "",
254
- "/* eslint-disable @typescript-eslint/no-explicit-any */",
255
- "",
256
- ];
257
- // Generate imports
258
- lines.push(`import { toFormSpec } from "@formspec/decorators";`);
259
- for (const cls of classes) {
260
- // Compute absolute source path, then relative from output dir
261
- const absoluteSourcePath = path.resolve(baseDir, cls.sourcePath);
262
- const importPath = getRelativeImportPath(outputDir, absoluteSourcePath);
263
- lines.push(`import { ${cls.name} } from "${importPath}";`);
264
- }
265
- lines.push("");
266
- lines.push("// =============================================================================");
267
- lines.push("// Type Metadata Patches");
268
- lines.push("// =============================================================================");
269
- lines.push("");
270
- // Generate patches
271
- for (const cls of classes) {
272
- const metadataJson = JSON.stringify(cls.typeMetadata, null, 2)
273
- .split("\n")
274
- .map((line, i) => (i === 0 ? line : " " + line))
275
- .join("\n");
276
- lines.push(`(${cls.name} as any).__formspec_types__ = ${metadataJson};`);
277
- lines.push("");
278
- }
279
- lines.push("// =============================================================================");
280
- lines.push("// Inferred Schema Types");
281
- lines.push("// =============================================================================");
282
- lines.push("");
283
- // Generate schema types
284
- for (const cls of classes) {
285
- lines.push(generateSchemaType(cls));
286
- lines.push("");
287
- }
288
- lines.push("// =============================================================================");
289
- lines.push("// Type-Safe FormSpec Accessors");
290
- lines.push("// =============================================================================");
291
- lines.push("");
292
- // Generate typed accessors
293
- for (const cls of classes) {
294
- lines.push(generateTypedAccessor(cls));
295
- lines.push("");
296
- }
297
- return lines.join("\n");
298
- }
299
- /**
300
- * Converts TypeMetadata to a TypeScript type string.
301
- */
302
- function metadataToTypeString(metadata) {
303
- const baseType = metadataToBaseTypeString(metadata);
304
- // Handle nullable and optional modifiers
305
- if (metadata.nullable && metadata.optional) {
306
- return `${baseType} | null | undefined`;
307
- }
308
- if (metadata.nullable) {
309
- return `${baseType} | null`;
310
- }
311
- if (metadata.optional) {
312
- return `${baseType} | undefined`;
313
- }
314
- return baseType;
315
- }
316
- /**
317
- * Checks if a property key needs to be quoted in TypeScript object types.
318
- *
319
- * Property keys need quoting if they:
320
- * - Contain characters invalid in JavaScript identifiers (spaces, hyphens, etc.)
321
- * - Are reserved JavaScript/TypeScript keywords (class, function, etc.)
322
- *
323
- * @param key - The property name to check
324
- * @returns true if the key requires quotes, false otherwise
325
- */
326
- function needsPropertyQuoting(key) {
327
- // Valid JS identifier: starts with letter/underscore/$, followed by alphanumeric/_/$
328
- const validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
329
- if (!validIdentifier.test(key)) {
330
- return true;
331
- }
332
- // Reserved words that need quoting (comprehensive list including ES6+)
333
- const reservedWords = new Set([
334
- // Keywords
335
- "break", "case", "catch", "continue", "debugger", "default", "delete",
336
- "do", "else", "finally", "for", "function", "if", "in", "instanceof",
337
- "new", "return", "switch", "this", "throw", "try", "typeof", "var",
338
- "void", "while", "with", "class", "const", "enum", "export", "extends",
339
- "import", "super", "implements", "interface", "let", "package", "private",
340
- "protected", "public", "static", "yield",
341
- // ES6+ keywords
342
- "async", "await",
343
- // Literal values (not technically keywords but best to quote)
344
- "null", "true", "false",
345
- // Accessor keywords
346
- "get", "set",
347
- // Strict mode reserved
348
- "arguments", "eval",
349
- ]);
350
- return reservedWords.has(key);
351
- }
352
- /**
353
- * Escapes a property key for safe use in TypeScript type definitions.
354
- *
355
- * Wraps keys in double quotes if they need quoting, using JSON.stringify
356
- * for robust escaping of special characters.
357
- *
358
- * @param key - The property name to escape
359
- * @returns The escaped key, quoted if necessary
360
- */
361
- function escapePropertyKey(key) {
362
- if (needsPropertyQuoting(key)) {
363
- return JSON.stringify(key);
364
- }
365
- return key;
366
- }
367
- /**
368
- * Converts TypeMetadata to base type string (without null/optional modifiers).
369
- */
370
- function metadataToBaseTypeString(metadata) {
371
- switch (metadata.type) {
372
- case "string":
373
- return "string";
374
- case "number":
375
- return "number";
376
- case "boolean":
377
- return "boolean";
378
- case "enum":
379
- if (metadata.values && metadata.values.length > 0) {
380
- return metadata.values
381
- .map((v) => (typeof v === "string" ? JSON.stringify(v) : String(v)))
382
- .join(" | ");
383
- }
384
- return "string";
385
- case "array":
386
- if (metadata.itemType) {
387
- const itemType = metadataToTypeString(metadata.itemType);
388
- // Wrap union types in parentheses for array
389
- if (itemType.includes("|")) {
390
- return `(${itemType})[]`;
391
- }
392
- return `${itemType}[]`;
393
- }
394
- return "unknown[]";
395
- case "object":
396
- if (metadata.properties && Object.keys(metadata.properties).length > 0) {
397
- const props = Object.entries(metadata.properties)
398
- .map(([key, propMeta]) => {
399
- const optional = propMeta.optional ? "?" : "";
400
- return `${escapePropertyKey(key)}${optional}: ${metadataToTypeString(propMeta)}`;
401
- })
402
- .join("; ");
403
- return `{ ${props} }`;
404
- }
405
- return "Record<string, unknown>";
406
- default:
407
- return "unknown";
408
- }
409
- }
410
- /**
411
- * Generates a TypeScript schema type for a class.
412
- */
413
- function generateSchemaType(cls) {
414
- const props = Object.entries(cls.typeMetadata)
415
- .map(([fieldName, metadata]) => {
416
- const optional = metadata.optional ? "?" : "";
417
- const typeStr = metadataToTypeString(metadata);
418
- return ` ${escapePropertyKey(fieldName)}${optional}: ${typeStr};`;
419
- })
420
- .join("\n");
421
- return `export type ${cls.name}Schema = {\n${props}\n};`;
422
- }
423
- /**
424
- * Maps TypeMetadata type strings to FormSpec field type strings.
425
- *
426
- * TypeMetadata uses generic type names (string, number), while FormSpec
427
- * uses more specific field type names (text, number, enum).
428
- *
429
- * @param type - The TypeMetadata type string
430
- * @returns The corresponding FormSpec field type
431
- */
432
- function metadataTypeToFieldType(type) {
433
- switch (type) {
434
- case "string":
435
- return "text";
436
- case "number":
437
- return "number";
438
- case "boolean":
439
- return "boolean";
440
- case "enum":
441
- return "enum";
442
- case "array":
443
- return "array";
444
- case "object":
445
- return "object";
446
- default:
447
- return "text";
448
- }
449
- }
450
- /**
451
- * Generates typed FormSpec accessor for a class.
452
- *
453
- * Creates three exports:
454
- * 1. Element tuple type (e.g., UserFormElements) - Exact readonly array type
455
- * representing each field with its literal types preserved
456
- * 2. FormSpec result type (e.g., UserFormFormSpec) - Type alias wrapping the elements
457
- * 3. Accessor function (e.g., getUserFormFormSpec()) - Returns FormSpec with full
458
- * type information for autocomplete and type checking
459
- *
460
- * These types enable the same level of type inference as the Chain DSL.
461
- *
462
- * @param cls - The decorated class information
463
- * @returns TypeScript code defining the accessor function and types
464
- */
465
- function generateTypedAccessor(cls) {
466
- const lines = [];
467
- // Generate the element type as a tuple
468
- const elementTypes = Object.entries(cls.typeMetadata).map(([fieldName, metadata]) => {
469
- const fieldType = metadataTypeToFieldType(metadata.type);
470
- const required = !metadata.optional;
471
- let elementType = `{ readonly _field: "${fieldType}"; readonly id: "${fieldName}"; readonly required: ${required}`;
472
- // Add options for enum types
473
- if (metadata.type === "enum" && metadata.values) {
474
- const optionValues = metadata.values
475
- .map((v) => (typeof v === "string" ? JSON.stringify(v) : String(v)))
476
- .join(", ");
477
- elementType += `; readonly options: readonly [${optionValues}]`;
478
- }
479
- elementType += " }";
480
- return elementType;
481
- });
482
- // Export element tuple type
483
- lines.push(`export type ${cls.name}Elements = readonly [\n ${elementTypes.join(",\n ")}\n];`);
484
- lines.push("");
485
- // Export typed FormSpec result type
486
- lines.push(`export type ${cls.name}FormSpec = { readonly elements: ${cls.name}Elements };`);
487
- lines.push("");
488
- // Export typed accessor function
489
- lines.push(`/**`);
490
- lines.push(` * Type-safe FormSpec accessor for ${cls.name}.`);
491
- lines.push(` * Returns the same result as toFormSpec(${cls.name}) but with full type information.`);
492
- lines.push(` */`);
493
- lines.push(`export function get${cls.name}FormSpec(): ${cls.name}FormSpec {`);
494
- lines.push(` return toFormSpec(${cls.name}) as unknown as ${cls.name}FormSpec;`);
495
- lines.push(`}`);
496
- return lines.join("\n");
497
- }
498
- /**
499
- * Gets a relative import path from output to source.
500
- */
501
- function getRelativeImportPath(outputDir, sourcePath) {
502
- // sourcePath is already relative to baseDir
503
- let relativePath = path.relative(outputDir, sourcePath);
504
- // Ensure it starts with ./ or ../
505
- if (!relativePath.startsWith(".")) {
506
- relativePath = "./" + relativePath;
507
- }
508
- // Use forward slashes for imports
509
- relativePath = relativePath.replace(/\\/g, "/");
510
- // Add .js extension for ESM compatibility
511
- return relativePath + ".js";
512
- }
513
- /**
514
- * Runs the code generation.
515
- */
516
- export function runCodegen(options) {
517
- const baseDir = options.baseDir ?? path.dirname(options.output);
518
- const absoluteFiles = options.files.map((f) => path.resolve(f));
519
- console.log(`Scanning ${absoluteFiles.length} file(s) for decorated classes...`);
520
- const classes = findDecoratedClasses(absoluteFiles, baseDir);
521
- if (classes.length === 0) {
522
- console.log("No decorated classes found.");
523
- return;
524
- }
525
- console.log(`Found ${classes.length} decorated class(es):`);
526
- for (const cls of classes) {
527
- const fieldCount = Object.keys(cls.typeMetadata).length;
528
- console.log(` - ${cls.name} (${fieldCount} field(s))`);
529
- }
530
- // Check for unexported classes and warn
531
- const unexported = classes.filter((cls) => !cls.isExported);
532
- if (unexported.length > 0) {
533
- console.warn(`\n⚠️ Warning: The following decorated classes are not exported from their source files:`);
534
- for (const cls of unexported) {
535
- console.warn(` - ${cls.name} (${cls.sourcePath})`);
536
- }
537
- console.warn(`\n The generated code will fail to compile because it cannot import these classes.`);
538
- console.warn(` To fix this, add 'export' to the class declaration, for example:`);
539
- console.warn(` export class YourClassName { ... }\n`);
540
- }
541
- const output = generateCodegenOutput(classes, options.output, baseDir);
542
- // Ensure output directory exists
543
- const outputDir = path.dirname(options.output);
544
- if (!fs.existsSync(outputDir)) {
545
- fs.mkdirSync(outputDir, { recursive: true });
546
- }
547
- fs.writeFileSync(options.output, output);
548
- console.log(`\nGenerated: ${options.output}`);
549
- }
550
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAoDzB;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAe,EACf,OAAe;IAEf,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;QACtC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;QAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM;QAC5B,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ;QAClD,sBAAsB,EAAE,IAAI;QAC5B,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,MAAM,OAAO,GAAyB,EAAE,CAAC;IAEzC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;QAClD,IAAI,UAAU,CAAC,iBAAiB;YAAE,SAAS;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAE1E,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;gBAClC,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACxD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAEnD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,SAAS;oBACf,UAAU,EAAE,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;oBAC/C,YAAY;oBACZ,UAAU,EAAE,QAAQ;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,IAAyB;IACvD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAClC,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,SAA8B,EAC9B,UAAyB;IAEzB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,kFAAkF;IAClF,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAClD,CAAC;QACF,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC;IAC7B,CAAC;IAED,oEAAoE;IACpE,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9C,IAAI,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAChE,IAAI,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9C,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;oBACtD,2CAA2C;oBAC3C,yFAAyF;oBACzF,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBAClE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;wBAC5B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,SAA8B,EAC9B,OAAuB;IAEvB,MAAM,QAAQ,GAAiC,EAAE,CAAC;IAElD,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAAE,SAAS;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS;QAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;IACjC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,IAAa,EACb,OAAuB,EACvB,UAAwB,IAAI,GAAG,EAAE;IAEjC,wCAAwC;IACxC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CACjE,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE/D,+BAA+B;QAC/B,MAAM,cAAc,GAClB,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEnE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,MAAM,GAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACjD,IAAI,OAAO;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,8BAA8B;QAC9B,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACzE,IAAI,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAiB;gBAC3B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAA0B,CAAC,KAAK,CAAC;aACnE,CAAC;YACF,IAAI,OAAO;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,8BAA8B;QAC9B,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QACzE,IAAI,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAiB;gBAC3B,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAA0B,CAAC,KAAK,CAAC;aACnE,CAAC;YACF,IAAI,OAAO;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,uBAAuB;QACvB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,OAAO;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,aAAa;IACb,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChE,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChE,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAElE,iBAAiB;IACjB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,iBAAiB;IACjB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,SAAS;IACT,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAI,IAAyB,CAAC,aAAa,CAAC;QAC1D,OAAO;YACL,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACrB,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;gBACtD,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;SACxB,CAAC;IACJ,CAAC;IAED,UAAU;IACV,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,UAAU,GAAiC,EAAE,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACxC,qEAAqE;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,WAAW;gBAAE,SAAS;YAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,yBAAyB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,YAAY;gBAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;QACnC,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA6B,EAC7B,UAAkB,EAClB,OAAe;IAEf,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAa;QACtB,KAAK;QACL,oCAAoC;QACpC,+CAA+C;QAC/C,IAAI;QACJ,wBAAwB;QACxB,0DAA0D;QAC1D,mDAAmD;QACnD,iEAAiE;QACjE,IAAI;QACJ,WAAW;QACX,kFAAkF;QAClF,IAAI;QACJ,qEAAqE;QACrE,0CAA0C;QAC1C,KAAK;QACL,EAAE;QACF,yDAAyD;QACzD,EAAE;KACH,CAAC;IAEF,mBAAmB;IACnB,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACjE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,8DAA8D;QAC9D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,YAAY,UAAU,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,mBAAmB;IACnB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;aAC3D,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;aAChD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,iCAAiC,YAAY,GAAG,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,wBAAwB;IACxB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IAC/F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,2BAA2B;IAC3B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAAsB;IAClD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEpD,yCAAyC;IACzC,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC3C,OAAO,GAAG,QAAQ,qBAAqB,CAAC;IAC1C,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,GAAG,QAAQ,SAAS,CAAC;IAC9B,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,GAAG,QAAQ,cAAc,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,oBAAoB,CAAC,GAAW;IACvC,qFAAqF;IACrF,MAAM,eAAe,GAAG,4BAA4B,CAAC;IACrD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,uEAAuE;IACvE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC5B,WAAW;QACX,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ;QACrE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY;QACpE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK;QAClE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS;QACtE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;QACzE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO;QACxC,gBAAgB;QAChB,OAAO,EAAE,OAAO;QAChB,8DAA8D;QAC9D,MAAM,EAAE,MAAM,EAAE,OAAO;QACvB,oBAAoB;QACpB,KAAK,EAAE,KAAK;QACZ,uBAAuB;QACvB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;IACH,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,QAAsB;IACtD,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,QAAQ,CAAC,MAAM;qBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnE,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO;YACV,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACtB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACzD,4CAA4C;gBAC5C,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,OAAO,IAAI,QAAQ,KAAK,CAAC;gBAC3B,CAAC;gBACD,OAAO,GAAG,QAAQ,IAAI,CAAC;YACzB,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,IAAI,QAAQ,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;qBAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE;oBACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,QAAQ,KAAK,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnF,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO,KAAK,KAAK,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,yBAAyB,CAAC;QACnC;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAuB;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,KAAK,iBAAiB,CAAC,SAAS,CAAC,GAAG,QAAQ,KAAK,OAAO,GAAG,CAAC;IACrE,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,eAAe,GAAG,CAAC,IAAI,eAAe,KAAK,MAAM,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CAAC,IAAY;IAC3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,qBAAqB,CAAC,GAAuB;IACpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,uCAAuC;IACvC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CACvD,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAEpC,IAAI,WAAW,GAAG,uBAAuB,SAAS,oBAAoB,SAAS,yBAAyB,QAAQ,EAAE,CAAC;QAEnH,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnE,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,WAAW,IAAI,iCAAiC,YAAY,GAAG,CAAC;QAClE,CAAC;QAED,WAAW,IAAI,IAAI,CAAC;QACpB,OAAO,WAAW,CAAC;IACrB,CAAC,CACF,CAAC;IAEF,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CACR,eAAe,GAAG,CAAC,IAAI,4BAA4B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CACpF,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oCAAoC;IACpC,KAAK,CAAC,IAAI,CACR,eAAe,GAAG,CAAC,IAAI,mCAAmC,GAAG,CAAC,IAAI,aAAa,CAChF,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,sCAAsC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,4CAA4C,GAAG,CAAC,IAAI,mCAAmC,CAAC,CAAC;IACpG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CACR,sBAAsB,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,IAAI,YAAY,CAClE,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEhB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,SAAiB,EAAE,UAAkB;IAClE,4CAA4C;IAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAExD,kCAAkC;IAClC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,YAAY,GAAG,IAAI,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,kCAAkC;IAClC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEhD,0CAA0C;IAC1C,OAAO,YAAY,GAAG,KAAK,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAuB;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,YAAY,aAAa,CAAC,MAAM,mCAAmC,CAAC,CAAC;IAEjF,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;IAC5D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,wCAAwC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CACV,0FAA0F,CAC3F,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEvE,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAChD,CAAC"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Class schema generator.
3
- *
4
- * Generates JSON Schema and FormSpec/UI Schema from statically analyzed
5
- * class fields and decorators.
6
- */
7
- import type * as ts from "typescript";
8
- import type { ClassAnalysis, FieldInfo } from "../analyzer/class-analyzer.js";
9
- import { type JsonSchema, type FormSpecField } from "../analyzer/type-converter.js";
10
- /**
11
- * Generated schemas for a class.
12
- */
13
- export interface ClassSchemas {
14
- /** JSON Schema for validation */
15
- jsonSchema: JsonSchema;
16
- /** FormSpec/UI Schema for rendering */
17
- uxSpec: {
18
- elements: FormSpecField[];
19
- };
20
- }
21
- /**
22
- * Generates JSON Schema and FormSpec from a class analysis.
23
- *
24
- * Uses static type information and decorator metadata to build
25
- * complete schema definitions for a class's fields.
26
- *
27
- * @param analysis - The class analysis result
28
- * @param checker - TypeScript type checker
29
- * @returns Generated JSON Schema and FormSpec
30
- */
31
- export declare function generateClassSchemas(analysis: ClassAnalysis, checker: ts.TypeChecker): ClassSchemas;
32
- /**
33
- * Generates JSON Schema for a single field.
34
- *
35
- * Useful for generating schemas for method return types
36
- * or individual field extraction.
37
- *
38
- * @param field - The field information
39
- * @param checker - TypeScript type checker
40
- * @returns JSON Schema for the field's type
41
- */
42
- export declare function generateFieldSchema(field: FieldInfo, checker: ts.TypeChecker): JsonSchema;
43
- //# sourceMappingURL=class-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class-schema.d.ts","sourceRoot":"","sources":["../../src/generators/class-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,+BAA+B,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,uCAAuC;IACvC,MAAM,EAAE;QACN,QAAQ,EAAE,aAAa,EAAE,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,YAAY,CAwCd;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,UAAU,CAGZ"}