@formspec/build 0.1.0-alpha.40 → 0.1.0-alpha.41
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/dist/browser.cjs +226 -17
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.js +226 -17
- package/dist/browser.js.map +1 -1
- package/dist/build-alpha.d.ts +10 -0
- package/dist/build-beta.d.ts +10 -0
- package/dist/build-internal.d.ts +10 -0
- package/dist/build.d.ts +10 -0
- package/dist/canonicalize/chain-dsl-canonicalizer.d.ts.map +1 -1
- package/dist/cli.cjs +163 -27
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +163 -27
- package/dist/cli.js.map +1 -1
- package/dist/generators/class-schema.d.ts +5 -0
- package/dist/generators/class-schema.d.ts.map +1 -1
- package/dist/generators/discovered-schema.d.ts.map +1 -1
- package/dist/generators/method-schema.d.ts +9 -2
- package/dist/generators/method-schema.d.ts.map +1 -1
- package/dist/index.cjs +143 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +143 -24
- package/dist/index.js.map +1 -1
- package/dist/internals.cjs +120 -27
- package/dist/internals.cjs.map +1 -1
- package/dist/internals.js +120 -27
- package/dist/internals.js.map +1 -1
- package/dist/json-schema/generator.d.ts +5 -0
- package/dist/json-schema/generator.d.ts.map +1 -1
- package/dist/json-schema/ir-generator.d.ts +5 -0
- package/dist/json-schema/ir-generator.d.ts.map +1 -1
- package/dist/metadata/policy.d.ts +3 -2
- package/dist/metadata/policy.d.ts.map +1 -1
- package/dist/metadata/resolve.d.ts +1 -0
- package/dist/metadata/resolve.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -51,11 +51,35 @@ function normalizeDeclarationPolicy(input) {
|
|
|
51
51
|
displayName: normalizeScalarPolicy(input?.displayName)
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
+
function normalizeEnumMemberDisplayNamePolicy(input) {
|
|
55
|
+
if (input?.mode === "infer-if-missing") {
|
|
56
|
+
return {
|
|
57
|
+
mode: "infer-if-missing",
|
|
58
|
+
infer: input.infer
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (input?.mode === "require-explicit") {
|
|
62
|
+
return {
|
|
63
|
+
mode: "require-explicit",
|
|
64
|
+
infer: () => ""
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
mode: "disabled",
|
|
69
|
+
infer: () => ""
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function normalizeEnumMemberPolicy(input) {
|
|
73
|
+
return {
|
|
74
|
+
displayName: normalizeEnumMemberDisplayNamePolicy(input?.displayName)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
54
77
|
function normalizeMetadataPolicy(input) {
|
|
55
78
|
return {
|
|
56
79
|
type: normalizeDeclarationPolicy(input?.type),
|
|
57
80
|
field: normalizeDeclarationPolicy(input?.field),
|
|
58
|
-
method: normalizeDeclarationPolicy(input?.method)
|
|
81
|
+
method: normalizeDeclarationPolicy(input?.method),
|
|
82
|
+
enumMember: normalizeEnumMemberPolicy(input?.enumMember)
|
|
59
83
|
};
|
|
60
84
|
}
|
|
61
85
|
function getDeclarationMetadataPolicy(policy, declarationKind) {
|
|
@@ -161,6 +185,40 @@ function pickResolvedMetadataValue(baseValue, overlayValue) {
|
|
|
161
185
|
}
|
|
162
186
|
return baseValue ?? overlayValue;
|
|
163
187
|
}
|
|
188
|
+
function resolveEnumMemberDisplayName(current, policy, context) {
|
|
189
|
+
if (current !== void 0) {
|
|
190
|
+
return current;
|
|
191
|
+
}
|
|
192
|
+
if (policy.mode === "require-explicit") {
|
|
193
|
+
throw new Error(
|
|
194
|
+
`Metadata policy requires explicit displayName for enum member "${context.logicalName}" on the ${context.surface} surface.`
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
if (policy.mode !== "infer-if-missing") {
|
|
198
|
+
return void 0;
|
|
199
|
+
}
|
|
200
|
+
const inferredValue = policy.infer(context).trim();
|
|
201
|
+
return inferredValue !== "" ? inferredValue : void 0;
|
|
202
|
+
}
|
|
203
|
+
function resolveEnumTypeMetadata(type, options) {
|
|
204
|
+
const members = type.members.map((member) => {
|
|
205
|
+
const displayName = resolveEnumMemberDisplayName(
|
|
206
|
+
member.displayName,
|
|
207
|
+
options.policy.enumMember.displayName,
|
|
208
|
+
{
|
|
209
|
+
surface: options.surface,
|
|
210
|
+
logicalName: String(member.value),
|
|
211
|
+
memberValue: member.value,
|
|
212
|
+
...options.buildContext !== void 0 && { buildContext: options.buildContext }
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
if (displayName === member.displayName) {
|
|
216
|
+
return member;
|
|
217
|
+
}
|
|
218
|
+
return displayName === void 0 ? { value: member.value } : { value: member.value, displayName };
|
|
219
|
+
});
|
|
220
|
+
return members.some((member, index) => member !== type.members[index]) ? { ...type, members } : type;
|
|
221
|
+
}
|
|
164
222
|
function resolveTypeNodeMetadata(type, options) {
|
|
165
223
|
switch (type.kind) {
|
|
166
224
|
case "array":
|
|
@@ -183,9 +241,10 @@ function resolveTypeNodeMetadata(type, options) {
|
|
|
183
241
|
...type,
|
|
184
242
|
members: type.members.map((member) => resolveTypeNodeMetadata(member, options))
|
|
185
243
|
};
|
|
244
|
+
case "enum":
|
|
245
|
+
return resolveEnumTypeMetadata(type, options);
|
|
186
246
|
case "reference":
|
|
187
247
|
case "primitive":
|
|
188
|
-
case "enum":
|
|
189
248
|
case "dynamic":
|
|
190
249
|
case "custom":
|
|
191
250
|
return type;
|
|
@@ -288,11 +347,10 @@ function getDisplayName(metadata) {
|
|
|
288
347
|
return metadata?.displayName?.value;
|
|
289
348
|
}
|
|
290
349
|
function resolveFormIRMetadata(ir, options) {
|
|
291
|
-
const
|
|
292
|
-
const metadata = resolveResolvedMetadata(ir.metadata, options.policy.type, {
|
|
350
|
+
const metadata = options.resolveRootTypeMetadata === false ? ir.metadata : resolveResolvedMetadata(ir.metadata, options.policy.type, {
|
|
293
351
|
surface: options.surface,
|
|
294
352
|
declarationKind: "type",
|
|
295
|
-
logicalName: rootLogicalName,
|
|
353
|
+
logicalName: options.rootLogicalName ?? ir.name ?? "FormSpec",
|
|
296
354
|
...options.buildContext !== void 0 && { buildContext: options.buildContext }
|
|
297
355
|
});
|
|
298
356
|
return {
|
|
@@ -328,7 +386,7 @@ function canonicalizeChainDSL(form, options) {
|
|
|
328
386
|
const metadataPolicy = normalizeMetadataPolicy(
|
|
329
387
|
options?.metadata ?? _getFormSpecMetadataPolicy(form)
|
|
330
388
|
);
|
|
331
|
-
|
|
389
|
+
const ir = {
|
|
332
390
|
kind: "form-ir",
|
|
333
391
|
irVersion: IR_VERSION,
|
|
334
392
|
elements: canonicalizeElements(form.elements, metadataPolicy),
|
|
@@ -336,6 +394,13 @@ function canonicalizeChainDSL(form, options) {
|
|
|
336
394
|
typeRegistry: {},
|
|
337
395
|
provenance: CHAIN_DSL_PROVENANCE
|
|
338
396
|
};
|
|
397
|
+
return resolveFormIRMetadata(ir, {
|
|
398
|
+
policy: metadataPolicy,
|
|
399
|
+
surface: "chain-dsl",
|
|
400
|
+
// Chain DSL has no root/type-metadata authoring surface, so only resolve
|
|
401
|
+
// field/type-registry metadata and enum-member labels here.
|
|
402
|
+
resolveRootTypeMetadata: false
|
|
403
|
+
});
|
|
339
404
|
}
|
|
340
405
|
function canonicalizeElements(elements, metadataPolicy) {
|
|
341
406
|
return elements.map((element) => canonicalizeElement(element, metadataPolicy));
|
|
@@ -873,17 +938,25 @@ function assertNoSerializedNameCollisions(ir) {
|
|
|
873
938
|
// src/json-schema/ir-generator.ts
|
|
874
939
|
function makeContext(options) {
|
|
875
940
|
const vendorPrefix = options?.vendorPrefix ?? "x-formspec";
|
|
941
|
+
const rawEnumSerialization = options?.enumSerialization;
|
|
876
942
|
if (!vendorPrefix.startsWith("x-")) {
|
|
877
943
|
throw new Error(
|
|
878
944
|
`Invalid vendorPrefix "${vendorPrefix}". Extension JSON Schema keywords must start with "x-".`
|
|
879
945
|
);
|
|
880
946
|
}
|
|
947
|
+
if (rawEnumSerialization !== void 0 && rawEnumSerialization !== "enum" && rawEnumSerialization !== "oneOf") {
|
|
948
|
+
throw new Error(
|
|
949
|
+
`Invalid enumSerialization "${rawEnumSerialization}". Expected "enum" or "oneOf".`
|
|
950
|
+
);
|
|
951
|
+
}
|
|
952
|
+
const enumSerialization = rawEnumSerialization ?? "enum";
|
|
881
953
|
return {
|
|
882
954
|
defs: {},
|
|
883
955
|
typeNameMap: {},
|
|
884
956
|
typeRegistry: {},
|
|
885
957
|
extensionRegistry: options?.extensionRegistry,
|
|
886
|
-
vendorPrefix
|
|
958
|
+
vendorPrefix,
|
|
959
|
+
enumSerialization
|
|
887
960
|
};
|
|
888
961
|
}
|
|
889
962
|
function generateJsonSchemaFromIR(ir, options) {
|
|
@@ -1057,7 +1130,7 @@ function generateTypeNode(type, ctx) {
|
|
|
1057
1130
|
case "primitive":
|
|
1058
1131
|
return generatePrimitiveType(type);
|
|
1059
1132
|
case "enum":
|
|
1060
|
-
return generateEnumType(type);
|
|
1133
|
+
return generateEnumType(type, ctx);
|
|
1061
1134
|
case "array":
|
|
1062
1135
|
return generateArrayType(type, ctx);
|
|
1063
1136
|
case "object":
|
|
@@ -1083,20 +1156,37 @@ function generatePrimitiveType(type) {
|
|
|
1083
1156
|
type: type.primitiveKind === "integer" || type.primitiveKind === "bigint" ? "integer" : type.primitiveKind
|
|
1084
1157
|
};
|
|
1085
1158
|
}
|
|
1086
|
-
function generateEnumType(type) {
|
|
1087
|
-
|
|
1088
|
-
if (hasDisplayNames) {
|
|
1159
|
+
function generateEnumType(type, ctx) {
|
|
1160
|
+
if (ctx.enumSerialization === "oneOf") {
|
|
1089
1161
|
return {
|
|
1090
|
-
oneOf: type.members.map((m) => {
|
|
1091
|
-
const
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
}
|
|
1095
|
-
return entry;
|
|
1096
|
-
})
|
|
1162
|
+
oneOf: type.members.map((m) => ({
|
|
1163
|
+
const: m.value,
|
|
1164
|
+
title: m.displayName ?? String(m.value)
|
|
1165
|
+
}))
|
|
1097
1166
|
};
|
|
1098
1167
|
}
|
|
1099
|
-
|
|
1168
|
+
const schema = { enum: type.members.map((m) => m.value) };
|
|
1169
|
+
const displayNames = buildEnumDisplayNameExtension(type);
|
|
1170
|
+
if (displayNames !== void 0) {
|
|
1171
|
+
schema[`${ctx.vendorPrefix}-display-names`] = displayNames;
|
|
1172
|
+
}
|
|
1173
|
+
return schema;
|
|
1174
|
+
}
|
|
1175
|
+
function buildEnumDisplayNameExtension(type) {
|
|
1176
|
+
if (!type.members.some((member) => member.displayName !== void 0)) {
|
|
1177
|
+
return void 0;
|
|
1178
|
+
}
|
|
1179
|
+
const displayNames = /* @__PURE__ */ Object.create(null);
|
|
1180
|
+
for (const member of type.members) {
|
|
1181
|
+
const key = String(member.value);
|
|
1182
|
+
if (Object.hasOwn(displayNames, key)) {
|
|
1183
|
+
throw new Error(
|
|
1184
|
+
`Enum display-name key "${key}" is ambiguous after stringification. Use oneOf serialization for mixed string/number enum values that collide.`
|
|
1185
|
+
);
|
|
1186
|
+
}
|
|
1187
|
+
displayNames[key] = member.displayName ?? key;
|
|
1188
|
+
}
|
|
1189
|
+
return displayNames;
|
|
1100
1190
|
}
|
|
1101
1191
|
function generateArrayType(type, ctx) {
|
|
1102
1192
|
return {
|
|
@@ -1489,11 +1579,17 @@ function assignVendorPrefixedExtensionKeywords(schema, extensionSchema, vendorPr
|
|
|
1489
1579
|
|
|
1490
1580
|
// src/json-schema/generator.ts
|
|
1491
1581
|
function generateJsonSchema(form, options) {
|
|
1582
|
+
const metadata = options?.metadata;
|
|
1583
|
+
const vendorPrefix = options?.vendorPrefix;
|
|
1584
|
+
const enumSerialization = options?.enumSerialization;
|
|
1492
1585
|
const ir = canonicalizeChainDSL(
|
|
1493
1586
|
form,
|
|
1494
|
-
|
|
1587
|
+
metadata !== void 0 ? { metadata } : void 0
|
|
1495
1588
|
);
|
|
1496
|
-
const internalOptions =
|
|
1589
|
+
const internalOptions = vendorPrefix === void 0 && enumSerialization === void 0 ? void 0 : {
|
|
1590
|
+
...vendorPrefix !== void 0 && { vendorPrefix },
|
|
1591
|
+
...enumSerialization !== void 0 && { enumSerialization }
|
|
1592
|
+
};
|
|
1497
1593
|
return generateJsonSchemaFromIR(ir, internalOptions);
|
|
1498
1594
|
}
|
|
1499
1595
|
|
|
@@ -5465,6 +5561,7 @@ function generateSchemasFromClass(options) {
|
|
|
5465
5561
|
{
|
|
5466
5562
|
extensionRegistry: options.extensionRegistry,
|
|
5467
5563
|
metadata: options.metadata,
|
|
5564
|
+
enumSerialization: options.enumSerialization,
|
|
5468
5565
|
vendorPrefix: options.vendorPrefix
|
|
5469
5566
|
}
|
|
5470
5567
|
);
|
|
@@ -5594,6 +5691,7 @@ function generateSchemasFromDetailedProgramContext(ctx, filePath, typeName, opti
|
|
|
5594
5691
|
{
|
|
5595
5692
|
extensionRegistry: options.extensionRegistry,
|
|
5596
5693
|
metadata: options.metadata,
|
|
5694
|
+
enumSerialization: options.enumSerialization,
|
|
5597
5695
|
vendorPrefix: options.vendorPrefix
|
|
5598
5696
|
}
|
|
5599
5697
|
);
|
|
@@ -5793,7 +5891,7 @@ function toStandaloneJsonSchema(root, typeRegistry, options) {
|
|
|
5793
5891
|
column: 0
|
|
5794
5892
|
}
|
|
5795
5893
|
};
|
|
5796
|
-
const
|
|
5894
|
+
const ir = resolveFormIRMetadata(
|
|
5797
5895
|
{
|
|
5798
5896
|
kind: "form-ir",
|
|
5799
5897
|
name: root.name,
|
|
@@ -5804,8 +5902,17 @@ function toStandaloneJsonSchema(root, typeRegistry, options) {
|
|
|
5804
5902
|
typeRegistry,
|
|
5805
5903
|
provenance: syntheticField.provenance
|
|
5806
5904
|
},
|
|
5905
|
+
{
|
|
5906
|
+
policy: normalizeMetadataPolicy(options?.metadata),
|
|
5907
|
+
surface: "tsdoc",
|
|
5908
|
+
rootLogicalName: root.name
|
|
5909
|
+
}
|
|
5910
|
+
);
|
|
5911
|
+
const schema = generateJsonSchemaFromIR(
|
|
5912
|
+
ir,
|
|
5807
5913
|
{
|
|
5808
5914
|
extensionRegistry: options?.extensionRegistry,
|
|
5915
|
+
enumSerialization: options?.enumSerialization,
|
|
5809
5916
|
vendorPrefix: options?.vendorPrefix
|
|
5810
5917
|
}
|
|
5811
5918
|
);
|
|
@@ -5832,6 +5939,7 @@ function generateSchemasFromAnalysis(analysis, filePath, options) {
|
|
|
5832
5939
|
{ file: filePath },
|
|
5833
5940
|
{
|
|
5834
5941
|
extensionRegistry: options?.extensionRegistry,
|
|
5942
|
+
enumSerialization: options?.enumSerialization,
|
|
5835
5943
|
metadata: options?.metadata,
|
|
5836
5944
|
vendorPrefix: options?.vendorPrefix
|
|
5837
5945
|
}
|
|
@@ -6229,8 +6337,19 @@ function buildFormSchemas(form, options) {
|
|
|
6229
6337
|
};
|
|
6230
6338
|
}
|
|
6231
6339
|
function writeSchemas(form, options) {
|
|
6232
|
-
const {
|
|
6233
|
-
|
|
6340
|
+
const {
|
|
6341
|
+
outDir,
|
|
6342
|
+
name = "schema",
|
|
6343
|
+
indent = 2,
|
|
6344
|
+
vendorPrefix,
|
|
6345
|
+
enumSerialization,
|
|
6346
|
+
metadata
|
|
6347
|
+
} = options;
|
|
6348
|
+
const buildOptions = vendorPrefix === void 0 && enumSerialization === void 0 && metadata === void 0 ? void 0 : {
|
|
6349
|
+
...vendorPrefix !== void 0 && { vendorPrefix },
|
|
6350
|
+
...enumSerialization !== void 0 && { enumSerialization },
|
|
6351
|
+
...metadata !== void 0 && { metadata }
|
|
6352
|
+
};
|
|
6234
6353
|
const { jsonSchema, uiSchema: uiSchema2 } = buildFormSchemas(form, buildOptions);
|
|
6235
6354
|
if (!fs.existsSync(outDir)) {
|
|
6236
6355
|
fs.mkdirSync(outDir, { recursive: true });
|