@formspec/build 0.1.0-alpha.8 → 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 +14 -14
- package/dist/__tests__/analyzer-edge-cases.test.d.ts +13 -0
- package/dist/__tests__/analyzer-edge-cases.test.d.ts.map +1 -0
- package/dist/__tests__/analyzer-edge-cases.test.js +376 -0
- package/dist/__tests__/analyzer-edge-cases.test.js.map +1 -0
- package/dist/__tests__/analyzer.test.d.ts +5 -0
- package/dist/__tests__/analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/analyzer.test.js +190 -0
- package/dist/__tests__/analyzer.test.js.map +1 -0
- package/dist/__tests__/cli.test.js.map +1 -1
- package/dist/__tests__/codegen.test.d.ts +5 -0
- package/dist/__tests__/codegen.test.d.ts.map +1 -0
- package/dist/__tests__/codegen.test.js +506 -0
- package/dist/__tests__/codegen.test.js.map +1 -0
- package/dist/__tests__/decorator-pipeline.test.d.ts +11 -0
- package/dist/__tests__/decorator-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/decorator-pipeline.test.js +460 -0
- package/dist/__tests__/decorator-pipeline.test.js.map +1 -0
- package/dist/__tests__/edge-cases.test.js +1 -3
- package/dist/__tests__/edge-cases.test.js.map +1 -1
- package/dist/__tests__/fixtures/edge-cases.d.ts +110 -0
- package/dist/__tests__/fixtures/edge-cases.d.ts.map +1 -0
- package/dist/__tests__/fixtures/edge-cases.js +137 -0
- package/dist/__tests__/fixtures/edge-cases.js.map +1 -0
- package/dist/__tests__/fixtures/example-a-builtins.d.ts +12 -0
- package/dist/__tests__/fixtures/example-a-builtins.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-a-builtins.js +100 -0
- package/dist/__tests__/fixtures/example-a-builtins.js.map +1 -0
- package/dist/__tests__/fixtures/example-b-decorators.d.ts +5 -0
- package/dist/__tests__/fixtures/example-b-decorators.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-b-decorators.js +5 -0
- package/dist/__tests__/fixtures/example-b-decorators.js.map +1 -0
- package/dist/__tests__/fixtures/example-b-extended.d.ts +5 -0
- package/dist/__tests__/fixtures/example-b-extended.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-b-extended.js +60 -0
- package/dist/__tests__/fixtures/example-b-extended.js.map +1 -0
- package/dist/__tests__/fixtures/example-c-custom.d.ts +5 -0
- package/dist/__tests__/fixtures/example-c-custom.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-c-custom.js +61 -0
- package/dist/__tests__/fixtures/example-c-custom.js.map +1 -0
- package/dist/__tests__/fixtures/example-c-decorators.d.ts +5 -0
- package/dist/__tests__/fixtures/example-c-decorators.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-c-decorators.js +4 -0
- package/dist/__tests__/fixtures/example-c-decorators.js.map +1 -0
- package/dist/__tests__/fixtures/example-d-mixed-decorators.d.ts +6 -0
- package/dist/__tests__/fixtures/example-d-mixed-decorators.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-d-mixed-decorators.js +75 -0
- package/dist/__tests__/fixtures/example-d-mixed-decorators.js.map +1 -0
- package/dist/__tests__/fixtures/example-e-decorators.d.ts +11 -0
- package/dist/__tests__/fixtures/example-e-decorators.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-e-decorators.js +10 -0
- package/dist/__tests__/fixtures/example-e-decorators.js.map +1 -0
- package/dist/__tests__/fixtures/example-e-no-namespace.d.ts +5 -0
- package/dist/__tests__/fixtures/example-e-no-namespace.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-e-no-namespace.js +61 -0
- package/dist/__tests__/fixtures/example-e-no-namespace.js.map +1 -0
- package/dist/__tests__/fixtures/example-jsdoc-constraints.d.ts +16 -0
- package/dist/__tests__/fixtures/example-jsdoc-constraints.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-jsdoc-constraints.js +98 -0
- package/dist/__tests__/fixtures/example-jsdoc-constraints.js.map +1 -0
- package/dist/__tests__/fixtures/example-nested-class.d.ts +45 -0
- package/dist/__tests__/fixtures/example-nested-class.d.ts.map +1 -0
- package/dist/__tests__/fixtures/example-nested-class.js +248 -0
- package/dist/__tests__/fixtures/example-nested-class.js.map +1 -0
- package/dist/__tests__/fixtures/sample-forms.d.ts +55 -0
- package/dist/__tests__/fixtures/sample-forms.d.ts.map +1 -0
- package/dist/__tests__/fixtures/sample-forms.js +78 -0
- package/dist/__tests__/fixtures/sample-forms.js.map +1 -0
- package/dist/__tests__/generator.test.js +6 -6
- package/dist/__tests__/generator.test.js.map +1 -1
- package/dist/__tests__/integration.test.js +1 -3
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/__tests__/jsdoc-constraints.test.d.ts +10 -0
- package/dist/__tests__/jsdoc-constraints.test.d.ts.map +1 -0
- package/dist/__tests__/jsdoc-constraints.test.js +199 -0
- package/dist/__tests__/jsdoc-constraints.test.js.map +1 -0
- package/dist/__tests__/write-schemas.test.js.map +1 -1
- package/dist/analyzer/class-analyzer.d.ts +85 -0
- package/dist/analyzer/class-analyzer.d.ts.map +1 -0
- package/dist/analyzer/class-analyzer.js +215 -0
- package/dist/analyzer/class-analyzer.js.map +1 -0
- package/dist/analyzer/decorator-extractor.d.ts +78 -0
- package/dist/analyzer/decorator-extractor.d.ts.map +1 -0
- package/dist/analyzer/decorator-extractor.js +336 -0
- package/dist/analyzer/decorator-extractor.js.map +1 -0
- package/dist/analyzer/jsdoc-constraints.d.ts +27 -0
- package/dist/analyzer/jsdoc-constraints.d.ts.map +1 -0
- package/dist/analyzer/jsdoc-constraints.js +91 -0
- package/dist/analyzer/jsdoc-constraints.js.map +1 -0
- package/dist/analyzer/program.d.ts +37 -0
- package/dist/analyzer/program.d.ts.map +1 -0
- package/dist/analyzer/program.js +87 -0
- package/dist/analyzer/program.js.map +1 -0
- package/dist/analyzer/type-converter.d.ts +75 -0
- package/dist/analyzer/type-converter.d.ts.map +1 -0
- package/dist/analyzer/type-converter.js +436 -0
- package/dist/analyzer/type-converter.js.map +1 -0
- package/dist/browser.d.ts +3 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/build.d.ts +196 -2
- package/dist/cli.js +1 -3
- package/dist/cli.js.map +1 -1
- package/dist/codegen/index.d.ts +75 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +597 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/generators/class-schema.d.ts +84 -0
- package/dist/generators/class-schema.d.ts.map +1 -0
- package/dist/generators/class-schema.js +91 -0
- package/dist/generators/class-schema.js.map +1 -0
- package/dist/generators/method-schema.d.ts +67 -0
- package/dist/generators/method-schema.d.ts.map +1 -0
- package/dist/generators/method-schema.js +108 -0
- package/dist/generators/method-schema.js.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/internals.d.ts +19 -0
- package/dist/internals.d.ts.map +1 -0
- package/dist/internals.js +22 -0
- package/dist/internals.js.map +1 -0
- package/dist/json-schema/generator.d.ts.map +1 -1
- package/dist/json-schema/generator.js +1 -2
- package/dist/json-schema/generator.js.map +1 -1
- package/dist/json-schema/types.d.ts +28 -0
- package/dist/json-schema/types.d.ts.map +1 -1
- package/dist/json-schema/types.js +27 -1
- package/dist/json-schema/types.js.map +1 -1
- package/dist/ui-schema/generator.d.ts.map +1 -1
- package/dist/ui-schema/generator.js +1 -3
- package/dist/ui-schema/generator.js.map +1 -1
- package/dist/ui-schema/types.d.ts.map +1 -1
- package/package.json +11 -3
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type converter for transforming TypeScript types to JSON Schema and FormSpec.
|
|
3
|
+
*
|
|
4
|
+
* Converts TypeScript types (extracted via type checker) to:
|
|
5
|
+
* - JSON Schema definitions
|
|
6
|
+
* - FormSpec field definitions
|
|
7
|
+
*/
|
|
8
|
+
import * as ts from "typescript";
|
|
9
|
+
import { analyzeField } from "./class-analyzer.js";
|
|
10
|
+
import { setSchemaExtension } from "../json-schema/types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Attempts to find a class declaration for the given type and extract
|
|
13
|
+
* FieldInfo for each property via analyzeField.
|
|
14
|
+
*
|
|
15
|
+
* Returns null for non-class types (interfaces, type aliases, inline objects),
|
|
16
|
+
* preserving existing structural-only behavior for those cases.
|
|
17
|
+
*/
|
|
18
|
+
function getClassFieldInfoMap(type, checker) {
|
|
19
|
+
const symbol = type.getSymbol();
|
|
20
|
+
if (!symbol?.declarations)
|
|
21
|
+
return null;
|
|
22
|
+
const classDecl = symbol.declarations.find(ts.isClassDeclaration);
|
|
23
|
+
if (!classDecl)
|
|
24
|
+
return null;
|
|
25
|
+
const map = new Map();
|
|
26
|
+
for (const member of classDecl.members) {
|
|
27
|
+
if (ts.isPropertyDeclaration(member) && ts.isIdentifier(member.name)) {
|
|
28
|
+
const fieldInfo = analyzeField(member, checker);
|
|
29
|
+
if (fieldInfo)
|
|
30
|
+
map.set(fieldInfo.name, fieldInfo);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return map;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Iterates the properties of an object type and resolves each property's
|
|
37
|
+
* type, optionality, and class-level field info (decorators/JSDoc).
|
|
38
|
+
*
|
|
39
|
+
* This is the single source of truth for nested property analysis, used
|
|
40
|
+
* by both the JSON Schema and FormSpec field generation paths.
|
|
41
|
+
*/
|
|
42
|
+
function getObjectPropertyInfos(type, checker) {
|
|
43
|
+
const classFieldMap = getClassFieldInfoMap(type, checker);
|
|
44
|
+
const result = [];
|
|
45
|
+
for (const prop of type.getProperties()) {
|
|
46
|
+
const declaration = prop.valueDeclaration ?? prop.declarations?.[0];
|
|
47
|
+
if (!declaration)
|
|
48
|
+
continue;
|
|
49
|
+
const propType = checker.getTypeOfSymbolAtLocation(prop, declaration);
|
|
50
|
+
const optional = !!(prop.flags & ts.SymbolFlags.Optional);
|
|
51
|
+
const fieldInfo = classFieldMap?.get(prop.name) ?? undefined;
|
|
52
|
+
result.push({ name: prop.name, type: propType, optional, fieldInfo });
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Converts a TypeScript type to JSON Schema and FormSpec field type.
|
|
58
|
+
*
|
|
59
|
+
* @param type - The TypeScript type to convert
|
|
60
|
+
* @param checker - TypeScript type checker
|
|
61
|
+
* @returns Conversion result with JSON Schema and FormSpec type
|
|
62
|
+
*/
|
|
63
|
+
export function convertType(type, checker) {
|
|
64
|
+
return convertTypeInternal(type, checker, new Set());
|
|
65
|
+
}
|
|
66
|
+
function convertTypeInternal(type, checker, visiting) {
|
|
67
|
+
// Handle primitive types
|
|
68
|
+
if (type.flags & ts.TypeFlags.String) {
|
|
69
|
+
return { jsonSchema: { type: "string" }, formSpecFieldType: "text" };
|
|
70
|
+
}
|
|
71
|
+
if (type.flags & ts.TypeFlags.Number) {
|
|
72
|
+
return { jsonSchema: { type: "number" }, formSpecFieldType: "number" };
|
|
73
|
+
}
|
|
74
|
+
if (type.flags & ts.TypeFlags.Boolean) {
|
|
75
|
+
return { jsonSchema: { type: "boolean" }, formSpecFieldType: "boolean" };
|
|
76
|
+
}
|
|
77
|
+
if (type.flags & ts.TypeFlags.Null) {
|
|
78
|
+
return { jsonSchema: { type: "null" }, formSpecFieldType: "null" };
|
|
79
|
+
}
|
|
80
|
+
if (type.flags & ts.TypeFlags.Undefined) {
|
|
81
|
+
return { jsonSchema: {}, formSpecFieldType: "undefined" };
|
|
82
|
+
}
|
|
83
|
+
// Handle literal types
|
|
84
|
+
if (type.isStringLiteral()) {
|
|
85
|
+
return {
|
|
86
|
+
jsonSchema: { const: type.value },
|
|
87
|
+
formSpecFieldType: "enum",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (type.isNumberLiteral()) {
|
|
91
|
+
return {
|
|
92
|
+
jsonSchema: { const: type.value },
|
|
93
|
+
formSpecFieldType: "number",
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Handle union types (including string literal unions for enums)
|
|
97
|
+
if (type.isUnion()) {
|
|
98
|
+
return convertUnionType(type, checker, visiting);
|
|
99
|
+
}
|
|
100
|
+
// Handle array types
|
|
101
|
+
if (checker.isArrayType(type)) {
|
|
102
|
+
return convertArrayType(type, checker, visiting);
|
|
103
|
+
}
|
|
104
|
+
// Handle object types
|
|
105
|
+
if (type.flags & ts.TypeFlags.Object) {
|
|
106
|
+
return convertObjectType(type, checker, visiting);
|
|
107
|
+
}
|
|
108
|
+
// Fallback
|
|
109
|
+
return { jsonSchema: {}, formSpecFieldType: "unknown" };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Converts a union type to JSON Schema.
|
|
113
|
+
*/
|
|
114
|
+
function convertUnionType(type, checker, visiting) {
|
|
115
|
+
const types = type.types;
|
|
116
|
+
// Filter out null and undefined for analysis
|
|
117
|
+
// Note: undefined is filtered out since JSON Schema doesn't have an undefined type
|
|
118
|
+
// Optional fields are handled via the 'required' array, not the type
|
|
119
|
+
const nonNullTypes = types.filter((t) => !(t.flags & (ts.TypeFlags.Null | ts.TypeFlags.Undefined)));
|
|
120
|
+
const hasNull = types.some((t) => t.flags & ts.TypeFlags.Null);
|
|
121
|
+
// Check if this is a boolean type (true | false in TypeScript)
|
|
122
|
+
// TypeScript represents `boolean` as a union of `true | false` literal types
|
|
123
|
+
const isBooleanUnion = nonNullTypes.length === 2 && nonNullTypes.every((t) => t.flags & ts.TypeFlags.BooleanLiteral);
|
|
124
|
+
if (isBooleanUnion) {
|
|
125
|
+
const result = {
|
|
126
|
+
jsonSchema: { type: "boolean" },
|
|
127
|
+
formSpecFieldType: "boolean",
|
|
128
|
+
};
|
|
129
|
+
if (hasNull) {
|
|
130
|
+
result.jsonSchema = { oneOf: [{ type: "boolean" }, { type: "null" }] };
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
// Check if all types are string literals (enum pattern)
|
|
135
|
+
const allStringLiterals = nonNullTypes.every((t) => t.isStringLiteral());
|
|
136
|
+
if (allStringLiterals && nonNullTypes.length > 0) {
|
|
137
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TypeScript doesn't narrow array types from `every` predicate
|
|
138
|
+
const enumValues = nonNullTypes.map((t) => t.value);
|
|
139
|
+
const result = {
|
|
140
|
+
jsonSchema: { enum: enumValues },
|
|
141
|
+
formSpecFieldType: "enum",
|
|
142
|
+
};
|
|
143
|
+
if (hasNull) {
|
|
144
|
+
result.jsonSchema = { oneOf: [{ enum: enumValues }, { type: "null" }] };
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
// Check if all types are number literals
|
|
149
|
+
const allNumberLiterals = nonNullTypes.every((t) => t.isNumberLiteral());
|
|
150
|
+
if (allNumberLiterals && nonNullTypes.length > 0) {
|
|
151
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TypeScript doesn't narrow array types from `every` predicate
|
|
152
|
+
const enumValues = nonNullTypes.map((t) => t.value);
|
|
153
|
+
const result = {
|
|
154
|
+
jsonSchema: { enum: enumValues },
|
|
155
|
+
formSpecFieldType: "enum",
|
|
156
|
+
};
|
|
157
|
+
if (hasNull) {
|
|
158
|
+
result.jsonSchema = { oneOf: [{ enum: enumValues }, { type: "null" }] };
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
// Handle nullable types (T | null or T | undefined) with single non-null type
|
|
163
|
+
if (nonNullTypes.length === 1 && nonNullTypes[0]) {
|
|
164
|
+
const result = convertTypeInternal(nonNullTypes[0], checker, visiting);
|
|
165
|
+
// Make it nullable in JSON Schema
|
|
166
|
+
if (hasNull) {
|
|
167
|
+
result.jsonSchema = { oneOf: [result.jsonSchema, { type: "null" }] };
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
// General union - use oneOf (filter out undefined which isn't valid in JSON Schema)
|
|
172
|
+
const schemas = nonNullTypes.map((t) => convertTypeInternal(t, checker, visiting).jsonSchema);
|
|
173
|
+
if (hasNull) {
|
|
174
|
+
schemas.push({ type: "null" });
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
jsonSchema: { oneOf: schemas },
|
|
178
|
+
formSpecFieldType: "union",
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Converts an array type to JSON Schema.
|
|
183
|
+
*/
|
|
184
|
+
function convertArrayType(type, checker, visiting) {
|
|
185
|
+
const typeArgs = type.typeArguments;
|
|
186
|
+
const elementType = typeArgs?.[0];
|
|
187
|
+
const itemSchema = elementType
|
|
188
|
+
? convertTypeInternal(elementType, checker, visiting).jsonSchema
|
|
189
|
+
: {};
|
|
190
|
+
return {
|
|
191
|
+
jsonSchema: {
|
|
192
|
+
type: "array",
|
|
193
|
+
items: itemSchema,
|
|
194
|
+
},
|
|
195
|
+
formSpecFieldType: "array",
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Converts an object type to JSON Schema.
|
|
200
|
+
*/
|
|
201
|
+
function convertObjectType(type, checker, visiting) {
|
|
202
|
+
// Circular reference guard
|
|
203
|
+
if (visiting.has(type)) {
|
|
204
|
+
return { jsonSchema: { type: "object" }, formSpecFieldType: "object" };
|
|
205
|
+
}
|
|
206
|
+
visiting.add(type);
|
|
207
|
+
const properties = {};
|
|
208
|
+
const required = [];
|
|
209
|
+
for (const propInfo of getObjectPropertyInfos(type, checker)) {
|
|
210
|
+
const propSchema = convertTypeInternal(propInfo.type, checker, visiting).jsonSchema;
|
|
211
|
+
// Apply decorator/JSDoc constraints from the class declaration if available
|
|
212
|
+
properties[propInfo.name] = propInfo.fieldInfo
|
|
213
|
+
? applyDecoratorsToSchema(propSchema, propInfo.fieldInfo.decorators, propInfo.fieldInfo)
|
|
214
|
+
: propSchema;
|
|
215
|
+
if (!propInfo.optional) {
|
|
216
|
+
required.push(propInfo.name);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
visiting.delete(type);
|
|
220
|
+
return {
|
|
221
|
+
jsonSchema: {
|
|
222
|
+
type: "object",
|
|
223
|
+
properties,
|
|
224
|
+
...(required.length > 0 ? { required } : {}),
|
|
225
|
+
},
|
|
226
|
+
formSpecFieldType: "object",
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Creates a FormSpec field definition from a field's type and decorators.
|
|
231
|
+
*
|
|
232
|
+
* @param fieldName - The field name
|
|
233
|
+
* @param type - The TypeScript type
|
|
234
|
+
* @param decorators - Decorators applied to the field
|
|
235
|
+
* @param optional - Whether the field is optional
|
|
236
|
+
* @param checker - TypeScript type checker
|
|
237
|
+
* @returns FormSpec field definition
|
|
238
|
+
*/
|
|
239
|
+
export function createFormSpecField(fieldName, type, decorators, optional, checker, visitedTypes = new Set()) {
|
|
240
|
+
const { formSpecFieldType } = convertType(type, checker);
|
|
241
|
+
const field = {
|
|
242
|
+
_field: formSpecFieldType,
|
|
243
|
+
id: fieldName,
|
|
244
|
+
};
|
|
245
|
+
// Apply optionality
|
|
246
|
+
if (!optional) {
|
|
247
|
+
field.required = true;
|
|
248
|
+
}
|
|
249
|
+
// For object types, recursively add nested fields.
|
|
250
|
+
// Note: visitedTypes guards against circular references independently from
|
|
251
|
+
// the `visiting` set in convertTypeInternal — they protect different recursion
|
|
252
|
+
// paths (FormSpec field generation vs JSON Schema generation).
|
|
253
|
+
if (formSpecFieldType === "object" && type.flags & ts.TypeFlags.Object) {
|
|
254
|
+
if (!visitedTypes.has(type)) {
|
|
255
|
+
visitedTypes.add(type);
|
|
256
|
+
const nestedFields = [];
|
|
257
|
+
for (const propInfo of getObjectPropertyInfos(type, checker)) {
|
|
258
|
+
nestedFields.push(createFormSpecField(propInfo.name, propInfo.type, propInfo.fieldInfo?.decorators ?? [], propInfo.optional, checker, visitedTypes));
|
|
259
|
+
}
|
|
260
|
+
visitedTypes.delete(type);
|
|
261
|
+
if (nestedFields.length > 0) {
|
|
262
|
+
field.fields = nestedFields;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// Apply decorator values
|
|
267
|
+
for (const dec of decorators) {
|
|
268
|
+
applyDecoratorToField(field, dec);
|
|
269
|
+
}
|
|
270
|
+
return field;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Applies a decorator's values to a FormSpec field.
|
|
274
|
+
*
|
|
275
|
+
* Note: Custom decorator extensions (x-formspec-*) are only emitted in JSON Schema
|
|
276
|
+
* via `applyDecoratorsToSchema`, not here. The FormSpecField interface does not
|
|
277
|
+
* carry extension data — extensions are a schema-level concern.
|
|
278
|
+
*
|
|
279
|
+
* @param field - The FormSpec field to modify
|
|
280
|
+
* @param decorator - The decorator information to apply
|
|
281
|
+
*/
|
|
282
|
+
function applyDecoratorToField(field, decorator) {
|
|
283
|
+
const { args } = decorator;
|
|
284
|
+
const resolved = decorator.resolved;
|
|
285
|
+
// If this is an extended decorator, map it to the built-in it extends
|
|
286
|
+
const effectiveName = resolved?.extendsBuiltin ?? decorator.name;
|
|
287
|
+
switch (effectiveName) {
|
|
288
|
+
case "Field": {
|
|
289
|
+
// Field takes an object with displayName, description, placeholder
|
|
290
|
+
const opts = args[0];
|
|
291
|
+
if (typeof opts === "object" && opts !== null && !Array.isArray(opts)) {
|
|
292
|
+
if (typeof opts["displayName"] === "string") {
|
|
293
|
+
field.label = opts["displayName"];
|
|
294
|
+
}
|
|
295
|
+
if (typeof opts["description"] === "string") {
|
|
296
|
+
field.description = opts["description"];
|
|
297
|
+
}
|
|
298
|
+
if (typeof opts["placeholder"] === "string") {
|
|
299
|
+
field.placeholder = opts["placeholder"];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
case "Minimum":
|
|
305
|
+
if (typeof args[0] === "number") {
|
|
306
|
+
field.min = args[0];
|
|
307
|
+
}
|
|
308
|
+
break;
|
|
309
|
+
case "Maximum":
|
|
310
|
+
if (typeof args[0] === "number") {
|
|
311
|
+
field.max = args[0];
|
|
312
|
+
}
|
|
313
|
+
break;
|
|
314
|
+
case "MinLength":
|
|
315
|
+
if (typeof args[0] === "number") {
|
|
316
|
+
field.minLength = args[0];
|
|
317
|
+
}
|
|
318
|
+
break;
|
|
319
|
+
case "MaxLength":
|
|
320
|
+
if (typeof args[0] === "number") {
|
|
321
|
+
field.maxLength = args[0];
|
|
322
|
+
}
|
|
323
|
+
break;
|
|
324
|
+
case "Pattern":
|
|
325
|
+
if (typeof args[0] === "string") {
|
|
326
|
+
field.pattern = args[0];
|
|
327
|
+
}
|
|
328
|
+
break;
|
|
329
|
+
case "EnumOptions":
|
|
330
|
+
if (Array.isArray(args[0])) {
|
|
331
|
+
field.options = args[0];
|
|
332
|
+
}
|
|
333
|
+
break;
|
|
334
|
+
case "ShowWhen":
|
|
335
|
+
if (typeof args[0] === "object" && args[0] !== null) {
|
|
336
|
+
field.showWhen = args[0];
|
|
337
|
+
}
|
|
338
|
+
break;
|
|
339
|
+
case "Group":
|
|
340
|
+
if (typeof args[0] === "string") {
|
|
341
|
+
field.group = args[0];
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Applies decorator constraints to a JSON Schema.
|
|
348
|
+
*
|
|
349
|
+
* @param schema - The base JSON Schema
|
|
350
|
+
* @param decorators - Decorators to apply
|
|
351
|
+
* @param fieldInfo - Optional field info for deprecated/default values
|
|
352
|
+
* @returns Modified JSON Schema with constraints
|
|
353
|
+
*/
|
|
354
|
+
export function applyDecoratorsToSchema(schema, decorators, fieldInfo) {
|
|
355
|
+
const result = { ...schema };
|
|
356
|
+
for (const dec of decorators) {
|
|
357
|
+
const { args } = dec;
|
|
358
|
+
const resolved = dec.resolved;
|
|
359
|
+
// If this is an extended decorator, map it to the built-in it extends
|
|
360
|
+
const effectiveName = resolved?.extendsBuiltin ?? dec.name;
|
|
361
|
+
switch (effectiveName) {
|
|
362
|
+
case "Field": {
|
|
363
|
+
// Field takes an object: { displayName, description?, placeholder? }
|
|
364
|
+
const opts = args[0];
|
|
365
|
+
if (typeof opts === "object" && opts !== null && !Array.isArray(opts)) {
|
|
366
|
+
if (typeof opts["displayName"] === "string") {
|
|
367
|
+
result.title = opts["displayName"];
|
|
368
|
+
}
|
|
369
|
+
if (typeof opts["description"] === "string") {
|
|
370
|
+
result.description = opts["description"];
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
case "Minimum":
|
|
376
|
+
if (typeof args[0] === "number") {
|
|
377
|
+
result.minimum = args[0];
|
|
378
|
+
}
|
|
379
|
+
break;
|
|
380
|
+
case "Maximum":
|
|
381
|
+
if (typeof args[0] === "number") {
|
|
382
|
+
result.maximum = args[0];
|
|
383
|
+
}
|
|
384
|
+
break;
|
|
385
|
+
case "ExclusiveMinimum":
|
|
386
|
+
if (typeof args[0] === "number") {
|
|
387
|
+
result.exclusiveMinimum = args[0];
|
|
388
|
+
}
|
|
389
|
+
break;
|
|
390
|
+
case "ExclusiveMaximum":
|
|
391
|
+
if (typeof args[0] === "number") {
|
|
392
|
+
result.exclusiveMaximum = args[0];
|
|
393
|
+
}
|
|
394
|
+
break;
|
|
395
|
+
case "MinLength":
|
|
396
|
+
if (typeof args[0] === "number") {
|
|
397
|
+
result.minLength = args[0];
|
|
398
|
+
}
|
|
399
|
+
break;
|
|
400
|
+
case "MaxLength":
|
|
401
|
+
if (typeof args[0] === "number") {
|
|
402
|
+
result.maxLength = args[0];
|
|
403
|
+
}
|
|
404
|
+
break;
|
|
405
|
+
case "Pattern":
|
|
406
|
+
if (typeof args[0] === "string") {
|
|
407
|
+
result.pattern = args[0];
|
|
408
|
+
}
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
// Emit x-formspec-* for custom decorators with a valid extensionName.
|
|
412
|
+
// Extension names must be lowercase alphanumeric with hyphens (e.g., "title-field", "priority").
|
|
413
|
+
if (resolved?.extensionName && /^[a-z][a-z0-9-]*$/.test(resolved.extensionName)) {
|
|
414
|
+
const key = `x-formspec-${resolved.extensionName}`;
|
|
415
|
+
if (resolved.isMarker) {
|
|
416
|
+
setSchemaExtension(result, key, true);
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
// Parameterized: use first argument as value
|
|
420
|
+
setSchemaExtension(result, key, args[0] ?? true);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// Apply deprecated and default from FieldInfo
|
|
425
|
+
if (fieldInfo) {
|
|
426
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated -- `deprecated` is a FieldInfo flag tracking @deprecated JSDoc, not itself deprecated
|
|
427
|
+
if (fieldInfo.deprecated) {
|
|
428
|
+
result.deprecated = true;
|
|
429
|
+
}
|
|
430
|
+
if (fieldInfo.defaultValue !== undefined) {
|
|
431
|
+
result.default = fieldInfo.defaultValue;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
return result;
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=type-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-converter.js","sourceRoot":"","sources":["../../src/analyzer/type-converter.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.d.ts
CHANGED
|
@@ -18,8 +18,9 @@
|
|
|
18
18
|
import type { FormElement, FormSpec } from "@formspec/core";
|
|
19
19
|
import { generateJsonSchema } from "./json-schema/generator.js";
|
|
20
20
|
import { generateUiSchema } from "./ui-schema/generator.js";
|
|
21
|
-
export type { JSONSchema7, JSONSchemaType, } from "./json-schema/types.js";
|
|
22
|
-
export
|
|
21
|
+
export type { JSONSchema7, JSONSchemaType, ExtendedJSONSchema7, FormSpecSchemaExtensions, } from "./json-schema/types.js";
|
|
22
|
+
export { setSchemaExtension, getSchemaExtension } from "./json-schema/types.js";
|
|
23
|
+
export type { UISchema, UISchemaElement, UISchemaElementBase, UISchemaElementType, ControlElement, VerticalLayout, HorizontalLayout, GroupLayout, Rule, RuleEffect, RuleConditionSchema, SchemaBasedCondition, } from "./ui-schema/types.js";
|
|
23
24
|
export { generateJsonSchema } from "./json-schema/generator.js";
|
|
24
25
|
export { generateUiSchema } from "./ui-schema/generator.js";
|
|
25
26
|
/**
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EACV,WAAW,EACX,cAAc,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EACV,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,YAAY,EACV,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,IAAI,EACJ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAC3D,yCAAyC;IACzC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAKjG"}
|
package/dist/browser.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { generateJsonSchema } from "./json-schema/generator.js";
|
|
19
19
|
import { generateUiSchema } from "./ui-schema/generator.js";
|
|
20
|
+
export { setSchemaExtension, getSchemaExtension } from "./json-schema/types.js";
|
|
20
21
|
// Re-export individual generators
|
|
21
22
|
export { generateJsonSchema } from "./json-schema/generator.js";
|
|
22
23
|
export { generateUiSchema } from "./ui-schema/generator.js";
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAU5D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAiBhF,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAY5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAAmC,IAAiB;IAClF,OAAO;QACL,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC;QACpC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC;KACjC,CAAC;AACJ,CAAC"}
|