@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 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))];