@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.
Files changed (136) hide show
  1. package/README.md +14 -14
  2. package/dist/__tests__/analyzer-edge-cases.test.d.ts +13 -0
  3. package/dist/__tests__/analyzer-edge-cases.test.d.ts.map +1 -0
  4. package/dist/__tests__/analyzer-edge-cases.test.js +376 -0
  5. package/dist/__tests__/analyzer-edge-cases.test.js.map +1 -0
  6. package/dist/__tests__/analyzer.test.d.ts +5 -0
  7. package/dist/__tests__/analyzer.test.d.ts.map +1 -0
  8. package/dist/__tests__/analyzer.test.js +190 -0
  9. package/dist/__tests__/analyzer.test.js.map +1 -0
  10. package/dist/__tests__/cli.test.js.map +1 -1
  11. package/dist/__tests__/codegen.test.d.ts +5 -0
  12. package/dist/__tests__/codegen.test.d.ts.map +1 -0
  13. package/dist/__tests__/codegen.test.js +506 -0
  14. package/dist/__tests__/codegen.test.js.map +1 -0
  15. package/dist/__tests__/decorator-pipeline.test.d.ts +11 -0
  16. package/dist/__tests__/decorator-pipeline.test.d.ts.map +1 -0
  17. package/dist/__tests__/decorator-pipeline.test.js +460 -0
  18. package/dist/__tests__/decorator-pipeline.test.js.map +1 -0
  19. package/dist/__tests__/edge-cases.test.js +1 -3
  20. package/dist/__tests__/edge-cases.test.js.map +1 -1
  21. package/dist/__tests__/fixtures/edge-cases.d.ts +110 -0
  22. package/dist/__tests__/fixtures/edge-cases.d.ts.map +1 -0
  23. package/dist/__tests__/fixtures/edge-cases.js +137 -0
  24. package/dist/__tests__/fixtures/edge-cases.js.map +1 -0
  25. package/dist/__tests__/fixtures/example-a-builtins.d.ts +12 -0
  26. package/dist/__tests__/fixtures/example-a-builtins.d.ts.map +1 -0
  27. package/dist/__tests__/fixtures/example-a-builtins.js +100 -0
  28. package/dist/__tests__/fixtures/example-a-builtins.js.map +1 -0
  29. package/dist/__tests__/fixtures/example-b-decorators.d.ts +5 -0
  30. package/dist/__tests__/fixtures/example-b-decorators.d.ts.map +1 -0
  31. package/dist/__tests__/fixtures/example-b-decorators.js +5 -0
  32. package/dist/__tests__/fixtures/example-b-decorators.js.map +1 -0
  33. package/dist/__tests__/fixtures/example-b-extended.d.ts +5 -0
  34. package/dist/__tests__/fixtures/example-b-extended.d.ts.map +1 -0
  35. package/dist/__tests__/fixtures/example-b-extended.js +60 -0
  36. package/dist/__tests__/fixtures/example-b-extended.js.map +1 -0
  37. package/dist/__tests__/fixtures/example-c-custom.d.ts +5 -0
  38. package/dist/__tests__/fixtures/example-c-custom.d.ts.map +1 -0
  39. package/dist/__tests__/fixtures/example-c-custom.js +61 -0
  40. package/dist/__tests__/fixtures/example-c-custom.js.map +1 -0
  41. package/dist/__tests__/fixtures/example-c-decorators.d.ts +5 -0
  42. package/dist/__tests__/fixtures/example-c-decorators.d.ts.map +1 -0
  43. package/dist/__tests__/fixtures/example-c-decorators.js +4 -0
  44. package/dist/__tests__/fixtures/example-c-decorators.js.map +1 -0
  45. package/dist/__tests__/fixtures/example-d-mixed-decorators.d.ts +6 -0
  46. package/dist/__tests__/fixtures/example-d-mixed-decorators.d.ts.map +1 -0
  47. package/dist/__tests__/fixtures/example-d-mixed-decorators.js +75 -0
  48. package/dist/__tests__/fixtures/example-d-mixed-decorators.js.map +1 -0
  49. package/dist/__tests__/fixtures/example-e-decorators.d.ts +11 -0
  50. package/dist/__tests__/fixtures/example-e-decorators.d.ts.map +1 -0
  51. package/dist/__tests__/fixtures/example-e-decorators.js +10 -0
  52. package/dist/__tests__/fixtures/example-e-decorators.js.map +1 -0
  53. package/dist/__tests__/fixtures/example-e-no-namespace.d.ts +5 -0
  54. package/dist/__tests__/fixtures/example-e-no-namespace.d.ts.map +1 -0
  55. package/dist/__tests__/fixtures/example-e-no-namespace.js +61 -0
  56. package/dist/__tests__/fixtures/example-e-no-namespace.js.map +1 -0
  57. package/dist/__tests__/fixtures/example-jsdoc-constraints.d.ts +16 -0
  58. package/dist/__tests__/fixtures/example-jsdoc-constraints.d.ts.map +1 -0
  59. package/dist/__tests__/fixtures/example-jsdoc-constraints.js +98 -0
  60. package/dist/__tests__/fixtures/example-jsdoc-constraints.js.map +1 -0
  61. package/dist/__tests__/fixtures/example-nested-class.d.ts +45 -0
  62. package/dist/__tests__/fixtures/example-nested-class.d.ts.map +1 -0
  63. package/dist/__tests__/fixtures/example-nested-class.js +248 -0
  64. package/dist/__tests__/fixtures/example-nested-class.js.map +1 -0
  65. package/dist/__tests__/fixtures/sample-forms.d.ts +55 -0
  66. package/dist/__tests__/fixtures/sample-forms.d.ts.map +1 -0
  67. package/dist/__tests__/fixtures/sample-forms.js +78 -0
  68. package/dist/__tests__/fixtures/sample-forms.js.map +1 -0
  69. package/dist/__tests__/generator.test.js +6 -6
  70. package/dist/__tests__/generator.test.js.map +1 -1
  71. package/dist/__tests__/integration.test.js +1 -3
  72. package/dist/__tests__/integration.test.js.map +1 -1
  73. package/dist/__tests__/jsdoc-constraints.test.d.ts +10 -0
  74. package/dist/__tests__/jsdoc-constraints.test.d.ts.map +1 -0
  75. package/dist/__tests__/jsdoc-constraints.test.js +199 -0
  76. package/dist/__tests__/jsdoc-constraints.test.js.map +1 -0
  77. package/dist/__tests__/write-schemas.test.js.map +1 -1
  78. package/dist/analyzer/class-analyzer.d.ts +85 -0
  79. package/dist/analyzer/class-analyzer.d.ts.map +1 -0
  80. package/dist/analyzer/class-analyzer.js +215 -0
  81. package/dist/analyzer/class-analyzer.js.map +1 -0
  82. package/dist/analyzer/decorator-extractor.d.ts +78 -0
  83. package/dist/analyzer/decorator-extractor.d.ts.map +1 -0
  84. package/dist/analyzer/decorator-extractor.js +336 -0
  85. package/dist/analyzer/decorator-extractor.js.map +1 -0
  86. package/dist/analyzer/jsdoc-constraints.d.ts +27 -0
  87. package/dist/analyzer/jsdoc-constraints.d.ts.map +1 -0
  88. package/dist/analyzer/jsdoc-constraints.js +91 -0
  89. package/dist/analyzer/jsdoc-constraints.js.map +1 -0
  90. package/dist/analyzer/program.d.ts +37 -0
  91. package/dist/analyzer/program.d.ts.map +1 -0
  92. package/dist/analyzer/program.js +87 -0
  93. package/dist/analyzer/program.js.map +1 -0
  94. package/dist/analyzer/type-converter.d.ts +75 -0
  95. package/dist/analyzer/type-converter.d.ts.map +1 -0
  96. package/dist/analyzer/type-converter.js +436 -0
  97. package/dist/analyzer/type-converter.js.map +1 -0
  98. package/dist/browser.d.ts +3 -2
  99. package/dist/browser.d.ts.map +1 -1
  100. package/dist/browser.js +1 -0
  101. package/dist/browser.js.map +1 -1
  102. package/dist/build.d.ts +196 -2
  103. package/dist/cli.js +1 -3
  104. package/dist/cli.js.map +1 -1
  105. package/dist/codegen/index.d.ts +75 -0
  106. package/dist/codegen/index.d.ts.map +1 -0
  107. package/dist/codegen/index.js +597 -0
  108. package/dist/codegen/index.js.map +1 -0
  109. package/dist/generators/class-schema.d.ts +84 -0
  110. package/dist/generators/class-schema.d.ts.map +1 -0
  111. package/dist/generators/class-schema.js +91 -0
  112. package/dist/generators/class-schema.js.map +1 -0
  113. package/dist/generators/method-schema.d.ts +67 -0
  114. package/dist/generators/method-schema.d.ts.map +1 -0
  115. package/dist/generators/method-schema.js +108 -0
  116. package/dist/generators/method-schema.js.map +1 -0
  117. package/dist/index.d.ts +8 -2
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +9 -1
  120. package/dist/index.js.map +1 -1
  121. package/dist/internals.d.ts +19 -0
  122. package/dist/internals.d.ts.map +1 -0
  123. package/dist/internals.js +22 -0
  124. package/dist/internals.js.map +1 -0
  125. package/dist/json-schema/generator.d.ts.map +1 -1
  126. package/dist/json-schema/generator.js +1 -2
  127. package/dist/json-schema/generator.js.map +1 -1
  128. package/dist/json-schema/types.d.ts +28 -0
  129. package/dist/json-schema/types.d.ts.map +1 -1
  130. package/dist/json-schema/types.js +27 -1
  131. package/dist/json-schema/types.js.map +1 -1
  132. package/dist/ui-schema/generator.d.ts.map +1 -1
  133. package/dist/ui-schema/generator.js +1 -3
  134. package/dist/ui-schema/generator.js.map +1 -1
  135. package/dist/ui-schema/types.d.ts.map +1 -1
  136. 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":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAkB,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAA4B,MAAM,yBAAyB,CAAC;AAoCvF;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,IAAa,EACb,OAAuB;IAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,YAAY;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrE,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,SAAS;gBAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAoBD;;;;;;GAMG;AACH,SAAS,sBAAsB,CAC7B,IAAmB,EACnB,OAAuB;IAEvB,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW;YAAE,SAAS;QAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,yBAAyB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QAE7D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAa,EAAE,OAAuB;IAChE,OAAO,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAa,EACb,OAAuB,EACvB,QAAsB;IAEtB,yBAAyB;IACzB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IACzE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACxC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC;IAC5D,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC3B,OAAO;YACL,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACjC,iBAAiB,EAAE,MAAM;SAC1B,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAC3B,OAAO;YACL,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACjC,iBAAiB,EAAE,QAAQ;SAC5B,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,qBAAqB;IACrB,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACrC,OAAO,iBAAiB,CAAC,IAAqB,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,WAAW;IACX,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAkB,EAClB,OAAuB,EACvB,QAAsB;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAEzB,6CAA6C;IAC7C,mFAAmF;IACnF,qEAAqE;IACrE,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;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE/D,+DAA+D;IAC/D,6EAA6E;IAC7E,MAAM,cAAc,GAClB,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAEhG,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAyB;YACnC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YAC/B,iBAAiB,EAAE,SAAS;SAC7B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wDAAwD;IACxD,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACzE,IAAI,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,4IAA4I;QAC5I,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAA0B,CAAC,KAAK,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAyB;YACnC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAChC,iBAAiB,EAAE,MAAM;SAC1B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yCAAyC;IACzC,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACzE,IAAI,iBAAiB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,4IAA4I;QAC5I,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAA0B,CAAC,KAAK,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAyB;YACnC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAChC,iBAAiB,EAAE,MAAM;SAC1B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8EAA8E;IAC9E,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvE,kCAAkC;QAClC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,oFAAoF;IACpF,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9F,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO;QACL,UAAU,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QAC9B,iBAAiB,EAAE,OAAO;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAa,EACb,OAAuB,EACvB,QAAsB;IAEtB,MAAM,QAAQ,GAAI,IAAyB,CAAC,aAAa,CAAC;IAC1D,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG,WAAW;QAC5B,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAU;QAChE,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,UAAU,EAAE;YACV,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,UAAU;SAClB;QACD,iBAAiB,EAAE,OAAO;KAC3B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAmB,EACnB,OAAuB,EACvB,QAAsB;IAEtB,2BAA2B;IAC3B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IACzE,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEnB,MAAM,UAAU,GAAwC,EAAE,CAAC;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,QAAQ,IAAI,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC;QAEpF,4EAA4E;QAC5E,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS;YAC5C,CAAC,CAAC,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;YACxF,CAAC,CAAC,UAAU,CAAC;QAEf,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEtB,OAAO;QACL,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C;QACD,iBAAiB,EAAE,QAAQ;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,IAAa,EACb,UAA2B,EAC3B,QAAiB,EACjB,OAAuB,EACvB,eAAe,IAAI,GAAG,EAAW;IAEjC,MAAM,EAAE,iBAAiB,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAkB;QAC3B,MAAM,EAAE,iBAAiB;QACzB,EAAE,EAAE,SAAS;KACd,CAAC;IAEF,oBAAoB;IACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,mDAAmD;IACnD,2EAA2E;IAC3E,+EAA+E;IAC/E,+DAA+D;IAC/D,IAAI,iBAAiB,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEvB,MAAM,YAAY,GAAoB,EAAE,CAAC;YACzC,KAAK,MAAM,QAAQ,IAAI,sBAAsB,CAAC,IAAqB,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC9E,YAAY,CAAC,IAAI,CACf,mBAAmB,CACjB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,EACpC,QAAQ,CAAC,QAAQ,EACjB,OAAO,EACP,YAAY,CACb,CACF,CAAC;YACJ,CAAC;YAED,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,KAAoB,EAAE,SAAwB;IAC3E,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IAEpC,sEAAsE;IACtE,MAAM,aAAa,GAAG,QAAQ,EAAE,cAAc,IAAI,SAAS,CAAC,IAAI,CAAC;IAEjE,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,mEAAmE;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC5C,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC5C,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1C,CAAC;gBACD,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC5C,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,SAAS;YACZ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,MAAM;QAER,KAAK,SAAS;YACZ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,MAAM;QAER,KAAK,WAAW;YACd,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM;QAER,KAAK,WAAW;YACd,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM;QAER,KAAK,SAAS;YACZ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM;QAER,KAAK,aAAa;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAA+C,CAAC;YACxE,CAAC;YACD,MAAM;QAER,KAAK,UAAU;YACb,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;YACrC,CAAC;YACD,MAAM;QAER,KAAK,OAAO;YACV,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YACD,MAAM;IACV,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA2B,EAC3B,UAA2B,EAC3B,SAAqB;IAErB,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,sEAAsE;QACtE,MAAM,aAAa,GAAG,QAAQ,EAAE,cAAc,IAAI,GAAG,CAAC,IAAI,CAAC;QAE3D,QAAQ,aAAa,EAAE,CAAC;YACtB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,qEAAqE;gBACrE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtE,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAC5C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;oBACrC,CAAC;oBACD,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAC5C,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,SAAS;gBACZ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBACD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBACD,MAAM;YAER,KAAK,kBAAkB;gBACrB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM;YAER,KAAK,kBAAkB;gBACrB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM;YAER,KAAK,WAAW;gBACd,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM;YAER,KAAK,WAAW;gBACd,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBACD,MAAM;QACV,CAAC;QAED,sEAAsE;QACtE,iGAAiG;QACjG,IAAI,QAAQ,EAAE,aAAa,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAChF,MAAM,GAAG,GAAG,cAAc,QAAQ,CAAC,aAAa,EAAW,CAAC;YAC5D,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACtB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,SAAS,EAAE,CAAC;QACd,kJAAkJ;QAClJ,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,SAAS,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
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 type { UISchema, UISchemaElement, UISchemaElementType, ControlElement, VerticalLayout, HorizontalLayout, GroupLayout, Rule, RuleEffect, SchemaBasedCondition, } from "./ui-schema/types.js";
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
  /**
@@ -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,GACf,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,IAAI,EACJ,UAAU,EACV,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,EAC/D,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,WAAW,CAKb"}
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";
@@ -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;AAqB5D,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAY5D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAiB;IAEjB,OAAO;QACL,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC;QACpC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC;KACjC,CAAC;AACJ,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"}