@sanity/schema 5.0.0-next-major.20251212101828 → 5.0.0-next-major.20251215132654
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/lib/_internal.js +29 -8
- package/lib/_internal.js.map +1 -1
- package/package.json +7 -7
package/lib/_internal.js
CHANGED
|
@@ -2314,7 +2314,7 @@ const documentDefaultFields = (typeName) => ({
|
|
|
2314
2314
|
["email", { type: "string" }]
|
|
2315
2315
|
]);
|
|
2316
2316
|
function extractSchema(schemaDef, extractOptions = {}) {
|
|
2317
|
-
const inlineFields = /* @__PURE__ */ new Set(), documentTypes = /* @__PURE__ */ new Map(), schema = [], sortedSchemaTypeNames = sortByDependencies(schemaDef);
|
|
2317
|
+
const inlineFields = /* @__PURE__ */ new Set(), documentTypes = /* @__PURE__ */ new Map(), schema = [], generatedTypes = /* @__PURE__ */ new Map(), sortedSchemaTypeNames = sortByDependencies(schemaDef);
|
|
2318
2318
|
sortedSchemaTypeNames.forEach((typeName) => {
|
|
2319
2319
|
const schemaType = schemaDef.get(typeName);
|
|
2320
2320
|
if (schemaType === void 0)
|
|
@@ -2322,6 +2322,18 @@ function extractSchema(schemaDef, extractOptions = {}) {
|
|
|
2322
2322
|
const base = convertBaseType(schemaType);
|
|
2323
2323
|
base !== null && (base.type === "type" && inlineFields.add(schemaType), base.type === "document" && documentTypes.set(typeName, base), schema.push(base));
|
|
2324
2324
|
});
|
|
2325
|
+
function getGeneratedTypeName(typeName, suffix) {
|
|
2326
|
+
const name = generatedTypes.get(typeName);
|
|
2327
|
+
if (name) return name;
|
|
2328
|
+
for (let i = 0; i < 5; i++) {
|
|
2329
|
+
const uniqueName = `${typeName}${suffix}${i || ""}`;
|
|
2330
|
+
if (!sortedSchemaTypeNames.includes(uniqueName))
|
|
2331
|
+
return generatedTypes.set(typeName, uniqueName), uniqueName;
|
|
2332
|
+
}
|
|
2333
|
+
throw new Error(
|
|
2334
|
+
`Unable to generate unique type name for ${typeName}.`
|
|
2335
|
+
);
|
|
2336
|
+
}
|
|
2325
2337
|
function convertBaseType(schemaType) {
|
|
2326
2338
|
let typeName;
|
|
2327
2339
|
if (schemaType.type ? typeName = schemaType.type.name : "jsonType" in schemaType && (typeName = schemaType.jsonType), typeName === "document" && isObjectType(schemaType)) {
|
|
@@ -2432,6 +2444,22 @@ function extractSchema(schemaDef, extractOptions = {}) {
|
|
|
2432
2444
|
} : of[0]
|
|
2433
2445
|
};
|
|
2434
2446
|
}
|
|
2447
|
+
function createReferenceTypeNodeDefintion(reference2) {
|
|
2448
|
+
const references = gatherReferenceNames(reference2);
|
|
2449
|
+
for (const name of references)
|
|
2450
|
+
generatedTypes.has(name) || schema.push({
|
|
2451
|
+
type: "type",
|
|
2452
|
+
name: getGeneratedTypeName(name, ".reference"),
|
|
2453
|
+
value: createReferenceTypeNode(name)
|
|
2454
|
+
});
|
|
2455
|
+
return references.length === 1 ? { type: "inline", name: getGeneratedTypeName(references[0], ".reference") } : {
|
|
2456
|
+
type: "union",
|
|
2457
|
+
of: references.map((name) => ({
|
|
2458
|
+
type: "inline",
|
|
2459
|
+
name: getGeneratedTypeName(name, ".reference")
|
|
2460
|
+
}))
|
|
2461
|
+
};
|
|
2462
|
+
}
|
|
2435
2463
|
return schema;
|
|
2436
2464
|
}
|
|
2437
2465
|
function createKeyField() {
|
|
@@ -2521,13 +2549,6 @@ function createNumberTypeNodeDefintion(numberSchemaType) {
|
|
|
2521
2549
|
type: "number"
|
|
2522
2550
|
};
|
|
2523
2551
|
}
|
|
2524
|
-
function createReferenceTypeNodeDefintion(reference2) {
|
|
2525
|
-
const references = gatherReferenceNames(reference2);
|
|
2526
|
-
return references.length === 1 ? createReferenceTypeNode(references[0]) : {
|
|
2527
|
-
type: "union",
|
|
2528
|
-
of: references.map((name) => createReferenceTypeNode(name))
|
|
2529
|
-
};
|
|
2530
|
-
}
|
|
2531
2552
|
function gatherReferenceNames(type) {
|
|
2532
2553
|
const allReferences = gatherReferenceTypes(type);
|
|
2533
2554
|
return [...new Set(allReferences.map((ref) => ref.name))];
|