@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.
- package/README.md +50 -37
- package/dist/__tests__/analyzer.test.d.ts +4 -1
- package/dist/__tests__/analyzer.test.d.ts.map +1 -1
- package/dist/__tests__/analyzer.test.js +9 -80
- package/dist/__tests__/analyzer.test.js.map +1 -1
- package/dist/__tests__/codegen.test.d.ts +4 -1
- package/dist/__tests__/codegen.test.d.ts.map +1 -1
- package/dist/__tests__/codegen.test.js +30 -478
- package/dist/__tests__/codegen.test.js.map +1 -1
- package/dist/__tests__/edge-cases.test.d.ts +5 -7
- package/dist/__tests__/edge-cases.test.d.ts.map +1 -1
- package/dist/__tests__/edge-cases.test.js +12 -275
- package/dist/__tests__/edge-cases.test.js.map +1 -1
- package/dist/__tests__/fixtures/edge-cases.d.ts +2 -2
- package/dist/__tests__/fixtures/edge-cases.d.ts.map +1 -1
- package/dist/__tests__/fixtures/edge-cases.js +4 -2
- package/dist/__tests__/fixtures/edge-cases.js.map +1 -1
- package/dist/__tests__/integration.test.js +45 -18
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/index.js +46 -26
- package/dist/index.js.map +1 -1
- package/dist/output/writer.d.ts +5 -5
- package/dist/output/writer.d.ts.map +1 -1
- package/dist/output/writer.js +13 -13
- package/dist/output/writer.js.map +1 -1
- package/dist/runtime/formspec-loader.d.ts.map +1 -1
- package/dist/runtime/formspec-loader.js +1 -3
- package/dist/runtime/formspec-loader.js.map +1 -1
- package/package.json +4 -4
- package/dist/analyzer/class-analyzer.d.ts +0 -75
- package/dist/analyzer/class-analyzer.d.ts.map +0 -1
- package/dist/analyzer/class-analyzer.js +0 -151
- package/dist/analyzer/class-analyzer.js.map +0 -1
- package/dist/analyzer/decorator-extractor.d.ts +0 -87
- package/dist/analyzer/decorator-extractor.d.ts.map +0 -1
- package/dist/analyzer/decorator-extractor.js +0 -193
- package/dist/analyzer/decorator-extractor.js.map +0 -1
- package/dist/analyzer/program.d.ts +0 -37
- package/dist/analyzer/program.d.ts.map +0 -1
- package/dist/analyzer/program.js +0 -89
- package/dist/analyzer/program.js.map +0 -1
- package/dist/analyzer/type-converter.d.ts +0 -97
- package/dist/analyzer/type-converter.d.ts.map +0 -1
- package/dist/analyzer/type-converter.js +0 -353
- package/dist/analyzer/type-converter.js.map +0 -1
- package/dist/codegen/index.d.ts +0 -76
- package/dist/codegen/index.d.ts.map +0 -1
- package/dist/codegen/index.js +0 -550
- package/dist/codegen/index.js.map +0 -1
- package/dist/generators/class-schema.d.ts +0 -43
- package/dist/generators/class-schema.d.ts.map +0 -1
- package/dist/generators/class-schema.js +0 -61
- package/dist/generators/class-schema.js.map +0 -1
- package/dist/generators/method-schema.d.ts +0 -57
- package/dist/generators/method-schema.d.ts.map +0 -1
- package/dist/generators/method-schema.js +0 -108
- package/dist/generators/method-schema.js.map +0 -1
|
@@ -1,61 +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 { convertType, applyDecoratorsToSchema, createFormSpecField, } from "../analyzer/type-converter.js";
|
|
8
|
-
/**
|
|
9
|
-
* Generates JSON Schema and FormSpec from a class analysis.
|
|
10
|
-
*
|
|
11
|
-
* Uses static type information and decorator metadata to build
|
|
12
|
-
* complete schema definitions for a class's fields.
|
|
13
|
-
*
|
|
14
|
-
* @param analysis - The class analysis result
|
|
15
|
-
* @param checker - TypeScript type checker
|
|
16
|
-
* @returns Generated JSON Schema and FormSpec
|
|
17
|
-
*/
|
|
18
|
-
export function generateClassSchemas(analysis, checker) {
|
|
19
|
-
const properties = {};
|
|
20
|
-
const required = [];
|
|
21
|
-
const uxElements = [];
|
|
22
|
-
for (const field of analysis.fields) {
|
|
23
|
-
// Generate JSON Schema for field
|
|
24
|
-
const { jsonSchema: baseSchema } = convertType(field.type, checker);
|
|
25
|
-
const fieldSchema = applyDecoratorsToSchema(baseSchema, field.decorators);
|
|
26
|
-
properties[field.name] = fieldSchema;
|
|
27
|
-
// Track required fields
|
|
28
|
-
if (!field.optional) {
|
|
29
|
-
required.push(field.name);
|
|
30
|
-
}
|
|
31
|
-
// Generate FormSpec field
|
|
32
|
-
const formSpecField = createFormSpecField(field.name, field.type, field.decorators, field.optional, checker);
|
|
33
|
-
uxElements.push(formSpecField);
|
|
34
|
-
}
|
|
35
|
-
// Build complete JSON Schema
|
|
36
|
-
const jsonSchema = {
|
|
37
|
-
type: "object",
|
|
38
|
-
properties,
|
|
39
|
-
...(required.length > 0 ? { required } : {}),
|
|
40
|
-
};
|
|
41
|
-
// Build FormSpec/UI Schema
|
|
42
|
-
const uxSpec = {
|
|
43
|
-
elements: uxElements,
|
|
44
|
-
};
|
|
45
|
-
return { jsonSchema, uxSpec };
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Generates JSON Schema for a single field.
|
|
49
|
-
*
|
|
50
|
-
* Useful for generating schemas for method return types
|
|
51
|
-
* or individual field extraction.
|
|
52
|
-
*
|
|
53
|
-
* @param field - The field information
|
|
54
|
-
* @param checker - TypeScript type checker
|
|
55
|
-
* @returns JSON Schema for the field's type
|
|
56
|
-
*/
|
|
57
|
-
export function generateFieldSchema(field, checker) {
|
|
58
|
-
const { jsonSchema: baseSchema } = convertType(field.type, checker);
|
|
59
|
-
return applyDecoratorsToSchema(baseSchema, field.decorators);
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=class-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"class-schema.js","sourceRoot":"","sources":["../../src/generators/class-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,mBAAmB,GAGpB,MAAM,+BAA+B,CAAC;AAcvC;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAuB,EACvB,OAAuB;IAEvB,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,iCAAiC;QACjC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1E,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;QAErC,wBAAwB;QACxB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,0BAA0B;QAC1B,MAAM,aAAa,GAAG,mBAAmB,CACvC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,QAAQ,EACd,OAAO,CACR,CAAC;QACF,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAe;QAC7B,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;IAEF,2BAA2B;IAC3B,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,UAAU;KACrB,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,OAAuB;IAEvB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpE,OAAO,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Method schema generator.
|
|
3
|
-
*
|
|
4
|
-
* Generates schemas for method parameters and return types:
|
|
5
|
-
* - Parameters using FormSpec (InferSchema<typeof X>) → runtime generation
|
|
6
|
-
* - Parameters with regular types → static type conversion
|
|
7
|
-
* - Return types → static type conversion
|
|
8
|
-
*/
|
|
9
|
-
import type * as ts from "typescript";
|
|
10
|
-
import type { MethodInfo } from "../analyzer/class-analyzer.js";
|
|
11
|
-
import { type JsonSchema } from "../analyzer/type-converter.js";
|
|
12
|
-
import type { FormSpecSchemas } from "../runtime/formspec-loader.js";
|
|
13
|
-
/**
|
|
14
|
-
* Generated schemas for a method.
|
|
15
|
-
*/
|
|
16
|
-
export interface MethodSchemas {
|
|
17
|
-
/** Method name */
|
|
18
|
-
name: string;
|
|
19
|
-
/** Parameter schemas (from FormSpec or static analysis) */
|
|
20
|
-
params: MethodParamsSchemas | null;
|
|
21
|
-
/** Return type schema */
|
|
22
|
-
returnType: JsonSchema;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Parameter schemas for a method.
|
|
26
|
-
*/
|
|
27
|
-
export interface MethodParamsSchemas {
|
|
28
|
-
/** JSON Schema for parameters */
|
|
29
|
-
jsonSchema: JsonSchema;
|
|
30
|
-
/** UI Schema / FormSpec for parameters (if available) */
|
|
31
|
-
uxSpec: object | null;
|
|
32
|
-
/** Name of the FormSpec export used (if any) */
|
|
33
|
-
formSpecExport: string | null;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Generates schemas for a method's parameters and return type.
|
|
37
|
-
*
|
|
38
|
-
* If a parameter references a FormSpec via `InferSchema<typeof X>`,
|
|
39
|
-
* the schemas are taken from the loaded FormSpec at runtime.
|
|
40
|
-
* Otherwise, schemas are generated from static type analysis.
|
|
41
|
-
*
|
|
42
|
-
* @param method - The method information from static analysis
|
|
43
|
-
* @param checker - TypeScript type checker
|
|
44
|
-
* @param loadedFormSpecs - Map of FormSpec export names to their schemas
|
|
45
|
-
* @returns Generated method schemas
|
|
46
|
-
*/
|
|
47
|
-
export declare function generateMethodSchemas(method: MethodInfo, checker: ts.TypeChecker, loadedFormSpecs: Map<string, FormSpecSchemas>): MethodSchemas;
|
|
48
|
-
/**
|
|
49
|
-
* Collects all FormSpec export names referenced by methods.
|
|
50
|
-
*
|
|
51
|
-
* Use this to determine which exports to load at runtime.
|
|
52
|
-
*
|
|
53
|
-
* @param methods - Array of method infos
|
|
54
|
-
* @returns Set of FormSpec export names
|
|
55
|
-
*/
|
|
56
|
-
export declare function collectFormSpecReferences(methods: MethodInfo[]): Set<string>;
|
|
57
|
-
//# sourceMappingURL=method-schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"method-schema.d.ts","sourceRoot":"","sources":["../../src/generators/method-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,yBAAyB;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,yDAAyD;IACzD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gDAAgD;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAC5C,aAAa,CAYf;AAuED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,UAAU,EAAE,GACpB,GAAG,CAAC,MAAM,CAAC,CAYb"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Method schema generator.
|
|
3
|
-
*
|
|
4
|
-
* Generates schemas for method parameters and return types:
|
|
5
|
-
* - Parameters using FormSpec (InferSchema<typeof X>) → runtime generation
|
|
6
|
-
* - Parameters with regular types → static type conversion
|
|
7
|
-
* - Return types → static type conversion
|
|
8
|
-
*/
|
|
9
|
-
import { convertType } from "../analyzer/type-converter.js";
|
|
10
|
-
/**
|
|
11
|
-
* Generates schemas for a method's parameters and return type.
|
|
12
|
-
*
|
|
13
|
-
* If a parameter references a FormSpec via `InferSchema<typeof X>`,
|
|
14
|
-
* the schemas are taken from the loaded FormSpec at runtime.
|
|
15
|
-
* Otherwise, schemas are generated from static type analysis.
|
|
16
|
-
*
|
|
17
|
-
* @param method - The method information from static analysis
|
|
18
|
-
* @param checker - TypeScript type checker
|
|
19
|
-
* @param loadedFormSpecs - Map of FormSpec export names to their schemas
|
|
20
|
-
* @returns Generated method schemas
|
|
21
|
-
*/
|
|
22
|
-
export function generateMethodSchemas(method, checker, loadedFormSpecs) {
|
|
23
|
-
// Generate return type schema from static analysis
|
|
24
|
-
const returnType = convertType(method.returnType, checker).jsonSchema;
|
|
25
|
-
// Handle parameters
|
|
26
|
-
const params = generateParamsSchemas(method.parameters, checker, loadedFormSpecs);
|
|
27
|
-
return {
|
|
28
|
-
name: method.name,
|
|
29
|
-
params,
|
|
30
|
-
returnType,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Generates schemas for method parameters.
|
|
35
|
-
*/
|
|
36
|
-
function generateParamsSchemas(parameters, checker, loadedFormSpecs) {
|
|
37
|
-
if (parameters.length === 0) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
// Check if any parameter uses InferSchema<typeof X>
|
|
41
|
-
for (const param of parameters) {
|
|
42
|
-
if (param.formSpecExportName) {
|
|
43
|
-
const formSpec = loadedFormSpecs.get(param.formSpecExportName);
|
|
44
|
-
if (formSpec) {
|
|
45
|
-
// Use runtime-generated schemas from FormSpec
|
|
46
|
-
// Cast JSONSchema7 to our JsonSchema type (structurally compatible)
|
|
47
|
-
return {
|
|
48
|
-
jsonSchema: formSpec.jsonSchema,
|
|
49
|
-
uxSpec: formSpec.uiSchema,
|
|
50
|
-
formSpecExport: param.formSpecExportName,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
// FormSpec not found - fall back to static analysis
|
|
54
|
-
console.warn(`Warning: FormSpec export "${param.formSpecExportName}" not found, using static analysis`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Generate from static type analysis
|
|
58
|
-
if (parameters.length === 1 && parameters[0]) {
|
|
59
|
-
// Single parameter - use its type directly
|
|
60
|
-
const param = parameters[0];
|
|
61
|
-
const jsonSchema = convertType(param.type, checker).jsonSchema;
|
|
62
|
-
return {
|
|
63
|
-
jsonSchema,
|
|
64
|
-
uxSpec: null,
|
|
65
|
-
formSpecExport: null,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
// Multiple parameters - create object schema
|
|
69
|
-
const properties = {};
|
|
70
|
-
const required = [];
|
|
71
|
-
for (const param of parameters) {
|
|
72
|
-
const paramSchema = convertType(param.type, checker).jsonSchema;
|
|
73
|
-
properties[param.name] = paramSchema;
|
|
74
|
-
// Only non-optional parameters should be marked as required
|
|
75
|
-
if (!param.optional) {
|
|
76
|
-
required.push(param.name);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
jsonSchema: {
|
|
81
|
-
type: "object",
|
|
82
|
-
properties,
|
|
83
|
-
required,
|
|
84
|
-
},
|
|
85
|
-
uxSpec: null,
|
|
86
|
-
formSpecExport: null,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Collects all FormSpec export names referenced by methods.
|
|
91
|
-
*
|
|
92
|
-
* Use this to determine which exports to load at runtime.
|
|
93
|
-
*
|
|
94
|
-
* @param methods - Array of method infos
|
|
95
|
-
* @returns Set of FormSpec export names
|
|
96
|
-
*/
|
|
97
|
-
export function collectFormSpecReferences(methods) {
|
|
98
|
-
const references = new Set();
|
|
99
|
-
for (const method of methods) {
|
|
100
|
-
for (const param of method.parameters) {
|
|
101
|
-
if (param.formSpecExportName) {
|
|
102
|
-
references.add(param.formSpecExportName);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return references;
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=method-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"method-schema.js","sourceRoot":"","sources":["../../src/generators/method-schema.ts"],"names":[],"mappings":"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"}
|