@formspec/build 0.1.0-alpha.40 → 0.1.0-alpha.42

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.
@@ -119,6 +119,11 @@ export interface StaticSchemaGenerationOptions {
119
119
  * @defaultValue "x-formspec"
120
120
  */
121
121
  readonly vendorPrefix?: string | undefined;
122
+ /**
123
+ * JSON Schema representation to use for static enums.
124
+ * @defaultValue "enum"
125
+ */
126
+ readonly enumSerialization?: "enum" | "oneOf";
122
127
  /** Metadata resolution policy for static schema generation. */
123
128
  readonly metadata?: MetadataPolicyInput | undefined;
124
129
  /** Discriminator-specific schema generation behavior. */
@@ -1 +1 @@
1
- {"version":3,"file":"class-schema.d.ts","sourceRoot":"","sources":["../../src/generators/class-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"class-schema.d.ts","sourceRoot":"","sources":["../../src/generators/class-schema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"discovered-schema.d.ts","sourceRoot":"","sources":["../../src/generators/discovered-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovered-schema.d.ts","sourceRoot":"","sources":["../../src/generators/discovered-schema.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import type * as ts from "typescript";
8
8
  import type { MethodInfo } from "../analyzer/class-analyzer.js";
9
- import { type JsonSchema2020 } from "../json-schema/ir-generator.js";
9
+ import { type GenerateJsonSchemaFromIROptions, type JsonSchema2020 } from "../json-schema/ir-generator.js";
10
10
  /**
11
11
  * Runtime-loaded FormSpec schemas, compatible with the CLI's FormSpecSchemas type.
12
12
  */
@@ -40,6 +40,13 @@ export interface MethodParamsSchemas {
40
40
  /** Name of the FormSpec export used (if any) */
41
41
  formSpecExport: string | null;
42
42
  }
43
+ /**
44
+ * Options for generating method schemas.
45
+ */
46
+ export interface GenerateMethodSchemasOptions {
47
+ /** JSON Schema representation to use for static enums. */
48
+ readonly enumSerialization?: GenerateJsonSchemaFromIROptions["enumSerialization"] | undefined;
49
+ }
43
50
  /**
44
51
  * Generates schemas for a method's parameters and return type.
45
52
  *
@@ -52,7 +59,7 @@ export interface MethodParamsSchemas {
52
59
  * @param loadedFormSpecs - Map of FormSpec export names to their schemas
53
60
  * @returns Generated method schemas
54
61
  */
55
- export declare function generateMethodSchemas(method: MethodInfo, checker: ts.TypeChecker, loadedFormSpecs: Map<string, LoadedFormSpecSchemas>): MethodSchemas;
62
+ export declare function generateMethodSchemas(method: MethodInfo, checker: ts.TypeChecker, loadedFormSpecs: Map<string, LoadedFormSpecSchemas>, options?: GenerateMethodSchemasOptions): MethodSchemas;
56
63
  /**
57
64
  * Collects all FormSpec export names referenced by methods.
58
65
  *
@@ -1 +1 @@
1
- {"version":3,"file":"method-schema.d.ts","sourceRoot":"","sources":["../../src/generators/method-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,+BAA+B,CAAC;AAG/E,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAG/F;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;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,cAAc,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gDAAgD;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAgED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAClD,aAAa,CAYf;AAmED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAY5E"}
1
+ {"version":3,"file":"method-schema.d.ts","sourceRoot":"","sources":["../../src/generators/method-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,+BAA+B,CAAC;AAG/E,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAGxC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;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,cAAc,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gDAAgD;IAChD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,0DAA0D;IAC1D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,+BAA+B,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;CAC/F;AAyED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EACnD,OAAO,CAAC,EAAE,4BAA4B,GACrC,aAAa,CAYf;AAoED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAY5E"}
package/dist/index.cjs CHANGED
@@ -110,11 +110,35 @@ function normalizeDeclarationPolicy(input) {
110
110
  displayName: normalizeScalarPolicy(input?.displayName)
111
111
  };
112
112
  }
113
+ function normalizeEnumMemberDisplayNamePolicy(input) {
114
+ if (input?.mode === "infer-if-missing") {
115
+ return {
116
+ mode: "infer-if-missing",
117
+ infer: input.infer
118
+ };
119
+ }
120
+ if (input?.mode === "require-explicit") {
121
+ return {
122
+ mode: "require-explicit",
123
+ infer: () => ""
124
+ };
125
+ }
126
+ return {
127
+ mode: "disabled",
128
+ infer: () => ""
129
+ };
130
+ }
131
+ function normalizeEnumMemberPolicy(input) {
132
+ return {
133
+ displayName: normalizeEnumMemberDisplayNamePolicy(input?.displayName)
134
+ };
135
+ }
113
136
  function normalizeMetadataPolicy(input) {
114
137
  return {
115
138
  type: normalizeDeclarationPolicy(input?.type),
116
139
  field: normalizeDeclarationPolicy(input?.field),
117
- method: normalizeDeclarationPolicy(input?.method)
140
+ method: normalizeDeclarationPolicy(input?.method),
141
+ enumMember: normalizeEnumMemberPolicy(input?.enumMember)
118
142
  };
119
143
  }
120
144
  function getDeclarationMetadataPolicy(policy, declarationKind) {
@@ -220,6 +244,40 @@ function pickResolvedMetadataValue(baseValue, overlayValue) {
220
244
  }
221
245
  return baseValue ?? overlayValue;
222
246
  }
247
+ function resolveEnumMemberDisplayName(current, policy, context) {
248
+ if (current !== void 0) {
249
+ return current;
250
+ }
251
+ if (policy.mode === "require-explicit") {
252
+ throw new Error(
253
+ `Metadata policy requires explicit displayName for enum member "${context.logicalName}" on the ${context.surface} surface.`
254
+ );
255
+ }
256
+ if (policy.mode !== "infer-if-missing") {
257
+ return void 0;
258
+ }
259
+ const inferredValue = policy.infer(context).trim();
260
+ return inferredValue !== "" ? inferredValue : void 0;
261
+ }
262
+ function resolveEnumTypeMetadata(type, options) {
263
+ const members = type.members.map((member) => {
264
+ const displayName = resolveEnumMemberDisplayName(
265
+ member.displayName,
266
+ options.policy.enumMember.displayName,
267
+ {
268
+ surface: options.surface,
269
+ logicalName: String(member.value),
270
+ memberValue: member.value,
271
+ ...options.buildContext !== void 0 && { buildContext: options.buildContext }
272
+ }
273
+ );
274
+ if (displayName === member.displayName) {
275
+ return member;
276
+ }
277
+ return displayName === void 0 ? { value: member.value } : { value: member.value, displayName };
278
+ });
279
+ return members.some((member, index) => member !== type.members[index]) ? { ...type, members } : type;
280
+ }
223
281
  function resolveTypeNodeMetadata(type, options) {
224
282
  switch (type.kind) {
225
283
  case "array":
@@ -242,9 +300,10 @@ function resolveTypeNodeMetadata(type, options) {
242
300
  ...type,
243
301
  members: type.members.map((member) => resolveTypeNodeMetadata(member, options))
244
302
  };
303
+ case "enum":
304
+ return resolveEnumTypeMetadata(type, options);
245
305
  case "reference":
246
306
  case "primitive":
247
- case "enum":
248
307
  case "dynamic":
249
308
  case "custom":
250
309
  return type;
@@ -347,11 +406,10 @@ function getDisplayName(metadata) {
347
406
  return metadata?.displayName?.value;
348
407
  }
349
408
  function resolveFormIRMetadata(ir, options) {
350
- const rootLogicalName = options.rootLogicalName ?? ir.name ?? "FormSpec";
351
- const metadata = resolveResolvedMetadata(ir.metadata, options.policy.type, {
409
+ const metadata = options.resolveRootTypeMetadata === false ? ir.metadata : resolveResolvedMetadata(ir.metadata, options.policy.type, {
352
410
  surface: options.surface,
353
411
  declarationKind: "type",
354
- logicalName: rootLogicalName,
412
+ logicalName: options.rootLogicalName ?? ir.name ?? "FormSpec",
355
413
  ...options.buildContext !== void 0 && { buildContext: options.buildContext }
356
414
  });
357
415
  return {
@@ -387,7 +445,7 @@ function canonicalizeChainDSL(form, options) {
387
445
  const metadataPolicy = normalizeMetadataPolicy(
388
446
  options?.metadata ?? (0, import_internals._getFormSpecMetadataPolicy)(form)
389
447
  );
390
- return {
448
+ const ir = {
391
449
  kind: "form-ir",
392
450
  irVersion: import_internals.IR_VERSION,
393
451
  elements: canonicalizeElements(form.elements, metadataPolicy),
@@ -395,6 +453,13 @@ function canonicalizeChainDSL(form, options) {
395
453
  typeRegistry: {},
396
454
  provenance: CHAIN_DSL_PROVENANCE
397
455
  };
456
+ return resolveFormIRMetadata(ir, {
457
+ policy: metadataPolicy,
458
+ surface: "chain-dsl",
459
+ // Chain DSL has no root/type-metadata authoring surface, so only resolve
460
+ // field/type-registry metadata and enum-member labels here.
461
+ resolveRootTypeMetadata: false
462
+ });
398
463
  }
399
464
  function canonicalizeElements(elements, metadataPolicy) {
400
465
  return elements.map((element) => canonicalizeElement(element, metadataPolicy));
@@ -932,17 +997,25 @@ function assertNoSerializedNameCollisions(ir) {
932
997
  // src/json-schema/ir-generator.ts
933
998
  function makeContext(options) {
934
999
  const vendorPrefix = options?.vendorPrefix ?? "x-formspec";
1000
+ const rawEnumSerialization = options?.enumSerialization;
935
1001
  if (!vendorPrefix.startsWith("x-")) {
936
1002
  throw new Error(
937
1003
  `Invalid vendorPrefix "${vendorPrefix}". Extension JSON Schema keywords must start with "x-".`
938
1004
  );
939
1005
  }
1006
+ if (rawEnumSerialization !== void 0 && rawEnumSerialization !== "enum" && rawEnumSerialization !== "oneOf") {
1007
+ throw new Error(
1008
+ `Invalid enumSerialization "${rawEnumSerialization}". Expected "enum" or "oneOf".`
1009
+ );
1010
+ }
1011
+ const enumSerialization = rawEnumSerialization ?? "enum";
940
1012
  return {
941
1013
  defs: {},
942
1014
  typeNameMap: {},
943
1015
  typeRegistry: {},
944
1016
  extensionRegistry: options?.extensionRegistry,
945
- vendorPrefix
1017
+ vendorPrefix,
1018
+ enumSerialization
946
1019
  };
947
1020
  }
948
1021
  function generateJsonSchemaFromIR(ir, options) {
@@ -1116,7 +1189,7 @@ function generateTypeNode(type, ctx) {
1116
1189
  case "primitive":
1117
1190
  return generatePrimitiveType(type);
1118
1191
  case "enum":
1119
- return generateEnumType(type);
1192
+ return generateEnumType(type, ctx);
1120
1193
  case "array":
1121
1194
  return generateArrayType(type, ctx);
1122
1195
  case "object":
@@ -1142,20 +1215,37 @@ function generatePrimitiveType(type) {
1142
1215
  type: type.primitiveKind === "integer" || type.primitiveKind === "bigint" ? "integer" : type.primitiveKind
1143
1216
  };
1144
1217
  }
1145
- function generateEnumType(type) {
1146
- const hasDisplayNames = type.members.some((m) => m.displayName !== void 0);
1147
- if (hasDisplayNames) {
1218
+ function generateEnumType(type, ctx) {
1219
+ if (ctx.enumSerialization === "oneOf") {
1148
1220
  return {
1149
- oneOf: type.members.map((m) => {
1150
- const entry = { const: m.value };
1151
- if (m.displayName !== void 0) {
1152
- entry.title = m.displayName;
1153
- }
1154
- return entry;
1155
- })
1221
+ oneOf: type.members.map((m) => ({
1222
+ const: m.value,
1223
+ title: m.displayName ?? String(m.value)
1224
+ }))
1156
1225
  };
1157
1226
  }
1158
- return { enum: type.members.map((m) => m.value) };
1227
+ const schema = { enum: type.members.map((m) => m.value) };
1228
+ const displayNames = buildEnumDisplayNameExtension(type);
1229
+ if (displayNames !== void 0) {
1230
+ schema[`${ctx.vendorPrefix}-display-names`] = displayNames;
1231
+ }
1232
+ return schema;
1233
+ }
1234
+ function buildEnumDisplayNameExtension(type) {
1235
+ if (!type.members.some((member) => member.displayName !== void 0)) {
1236
+ return void 0;
1237
+ }
1238
+ const displayNames = /* @__PURE__ */ Object.create(null);
1239
+ for (const member of type.members) {
1240
+ const key = String(member.value);
1241
+ if (Object.hasOwn(displayNames, key)) {
1242
+ throw new Error(
1243
+ `Enum display-name key "${key}" is ambiguous after stringification. Use oneOf serialization for mixed string/number enum values that collide.`
1244
+ );
1245
+ }
1246
+ displayNames[key] = member.displayName ?? key;
1247
+ }
1248
+ return displayNames;
1159
1249
  }
1160
1250
  function generateArrayType(type, ctx) {
1161
1251
  return {
@@ -1504,6 +1594,66 @@ function generateCustomType(type, ctx) {
1504
1594
  }
1505
1595
  return registration.toJsonSchema(type.payload, ctx.vendorPrefix);
1506
1596
  }
1597
+ var JSON_SCHEMA_STRUCTURAL_KEYWORDS = /* @__PURE__ */ new Set([
1598
+ "$schema",
1599
+ "$ref",
1600
+ "$defs",
1601
+ "$id",
1602
+ "$anchor",
1603
+ "$dynamicRef",
1604
+ "$dynamicAnchor",
1605
+ "$vocabulary",
1606
+ "$comment",
1607
+ "type",
1608
+ "enum",
1609
+ "const",
1610
+ "properties",
1611
+ "patternProperties",
1612
+ "additionalProperties",
1613
+ "required",
1614
+ "items",
1615
+ "prefixItems",
1616
+ "additionalItems",
1617
+ "contains",
1618
+ "allOf",
1619
+ "oneOf",
1620
+ "anyOf",
1621
+ "not",
1622
+ "if",
1623
+ "then",
1624
+ "else",
1625
+ "minimum",
1626
+ "maximum",
1627
+ "exclusiveMinimum",
1628
+ "exclusiveMaximum",
1629
+ "multipleOf",
1630
+ "minLength",
1631
+ "maxLength",
1632
+ "pattern",
1633
+ "minItems",
1634
+ "maxItems",
1635
+ "uniqueItems",
1636
+ "minProperties",
1637
+ "maxProperties",
1638
+ "minContains",
1639
+ "maxContains",
1640
+ "format",
1641
+ "title",
1642
+ "description",
1643
+ "default",
1644
+ "deprecated",
1645
+ "readOnly",
1646
+ "writeOnly",
1647
+ "examples",
1648
+ "dependentRequired",
1649
+ "dependentSchemas",
1650
+ "propertyNames",
1651
+ "unevaluatedItems",
1652
+ "unevaluatedProperties",
1653
+ "contentEncoding",
1654
+ "contentMediaType",
1655
+ "contentSchema"
1656
+ ]);
1507
1657
  function applyCustomConstraint(schema, constraint, ctx) {
1508
1658
  const registration = ctx.extensionRegistry?.findConstraint(constraint.constraintId);
1509
1659
  if (registration === void 0) {
@@ -1511,12 +1661,25 @@ function applyCustomConstraint(schema, constraint, ctx) {
1511
1661
  `Cannot generate JSON Schema for custom constraint "${constraint.constraintId}" without a matching extension registration`
1512
1662
  );
1513
1663
  }
1514
- assignVendorPrefixedExtensionKeywords(
1515
- schema,
1516
- registration.toJsonSchema(constraint.payload, ctx.vendorPrefix),
1517
- ctx.vendorPrefix,
1518
- `custom constraint "${constraint.constraintId}"`
1519
- );
1664
+ const extensionSchema = registration.toJsonSchema(constraint.payload, ctx.vendorPrefix);
1665
+ if (registration.emitsVocabularyKeywords) {
1666
+ const target = schema;
1667
+ for (const [key, value] of Object.entries(extensionSchema)) {
1668
+ if (JSON_SCHEMA_STRUCTURAL_KEYWORDS.has(key)) {
1669
+ throw new Error(
1670
+ `Custom constraint "${constraint.constraintId}" with emitsVocabularyKeywords must not overwrite standard JSON Schema keyword "${key}"`
1671
+ );
1672
+ }
1673
+ target[key] = value;
1674
+ }
1675
+ } else {
1676
+ assignVendorPrefixedExtensionKeywords(
1677
+ schema,
1678
+ extensionSchema,
1679
+ ctx.vendorPrefix,
1680
+ `custom constraint "${constraint.constraintId}"`
1681
+ );
1682
+ }
1520
1683
  }
1521
1684
  function applyCustomAnnotation(schema, annotation, ctx) {
1522
1685
  const registration = ctx.extensionRegistry?.findAnnotation(annotation.annotationId);
@@ -1548,11 +1711,17 @@ function assignVendorPrefixedExtensionKeywords(schema, extensionSchema, vendorPr
1548
1711
 
1549
1712
  // src/json-schema/generator.ts
1550
1713
  function generateJsonSchema(form, options) {
1714
+ const metadata = options?.metadata;
1715
+ const vendorPrefix = options?.vendorPrefix;
1716
+ const enumSerialization = options?.enumSerialization;
1551
1717
  const ir = canonicalizeChainDSL(
1552
1718
  form,
1553
- options?.metadata !== void 0 ? { metadata: options.metadata } : void 0
1719
+ metadata !== void 0 ? { metadata } : void 0
1554
1720
  );
1555
- const internalOptions = options?.vendorPrefix === void 0 ? void 0 : { vendorPrefix: options.vendorPrefix };
1721
+ const internalOptions = vendorPrefix === void 0 && enumSerialization === void 0 ? void 0 : {
1722
+ ...vendorPrefix !== void 0 && { vendorPrefix },
1723
+ ...enumSerialization !== void 0 && { enumSerialization }
1724
+ };
1556
1725
  return generateJsonSchemaFromIR(ir, internalOptions);
1557
1726
  }
1558
1727
 
@@ -5487,6 +5656,7 @@ function generateSchemasFromClass(options) {
5487
5656
  {
5488
5657
  extensionRegistry: options.extensionRegistry,
5489
5658
  metadata: options.metadata,
5659
+ enumSerialization: options.enumSerialization,
5490
5660
  vendorPrefix: options.vendorPrefix
5491
5661
  }
5492
5662
  );
@@ -5616,6 +5786,7 @@ function generateSchemasFromDetailedProgramContext(ctx, filePath, typeName, opti
5616
5786
  {
5617
5787
  extensionRegistry: options.extensionRegistry,
5618
5788
  metadata: options.metadata,
5789
+ enumSerialization: options.enumSerialization,
5619
5790
  vendorPrefix: options.vendorPrefix
5620
5791
  }
5621
5792
  );
@@ -5815,7 +5986,7 @@ function toStandaloneJsonSchema(root, typeRegistry, options) {
5815
5986
  column: 0
5816
5987
  }
5817
5988
  };
5818
- const schema = generateJsonSchemaFromIR(
5989
+ const ir = resolveFormIRMetadata(
5819
5990
  {
5820
5991
  kind: "form-ir",
5821
5992
  name: root.name,
@@ -5826,8 +5997,17 @@ function toStandaloneJsonSchema(root, typeRegistry, options) {
5826
5997
  typeRegistry,
5827
5998
  provenance: syntheticField.provenance
5828
5999
  },
6000
+ {
6001
+ policy: normalizeMetadataPolicy(options?.metadata),
6002
+ surface: "tsdoc",
6003
+ rootLogicalName: root.name
6004
+ }
6005
+ );
6006
+ const schema = generateJsonSchemaFromIR(
6007
+ ir,
5829
6008
  {
5830
6009
  extensionRegistry: options?.extensionRegistry,
6010
+ enumSerialization: options?.enumSerialization,
5831
6011
  vendorPrefix: options?.vendorPrefix
5832
6012
  }
5833
6013
  );
@@ -5854,6 +6034,7 @@ function generateSchemasFromAnalysis(analysis, filePath, options) {
5854
6034
  { file: filePath },
5855
6035
  {
5856
6036
  extensionRegistry: options?.extensionRegistry,
6037
+ enumSerialization: options?.enumSerialization,
5857
6038
  metadata: options?.metadata,
5858
6039
  vendorPrefix: options?.vendorPrefix
5859
6040
  }
@@ -6251,8 +6432,19 @@ function buildFormSchemas(form, options) {
6251
6432
  };
6252
6433
  }
6253
6434
  function writeSchemas(form, options) {
6254
- const { outDir, name = "schema", indent = 2, vendorPrefix, metadata } = options;
6255
- const buildOptions = vendorPrefix === void 0 && metadata === void 0 ? void 0 : { vendorPrefix, metadata };
6435
+ const {
6436
+ outDir,
6437
+ name = "schema",
6438
+ indent = 2,
6439
+ vendorPrefix,
6440
+ enumSerialization,
6441
+ metadata
6442
+ } = options;
6443
+ const buildOptions = vendorPrefix === void 0 && enumSerialization === void 0 && metadata === void 0 ? void 0 : {
6444
+ ...vendorPrefix !== void 0 && { vendorPrefix },
6445
+ ...enumSerialization !== void 0 && { enumSerialization },
6446
+ ...metadata !== void 0 && { metadata }
6447
+ };
6256
6448
  const { jsonSchema, uiSchema: uiSchema2 } = buildFormSchemas(form, buildOptions);
6257
6449
  if (!fs.existsSync(outDir)) {
6258
6450
  fs.mkdirSync(outDir, { recursive: true });