{"version":3,"file":"parseDef.cjs","names":["ignoreOverride","selectParser","getRelativePath","parseAnyDef"],"sources":["../../../src/utils/zod-to-json-schema/parseDef.ts"],"sourcesContent":["import { ZodTypeDef } from \"zod/v3\";\nimport { Refs, Seen } from \"./Refs.js\";\nimport { ignoreOverride } from \"./Options.js\";\nimport { JsonSchema7Type } from \"./parseTypes.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\n\nexport function parseDef(\n  def: ZodTypeDef,\n  refs: Refs,\n  forceResolution = false // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n  const seenItem = refs.seen.get(def);\n\n  if (refs.override) {\n    const overrideResult = refs.override?.(\n      def,\n      refs,\n      seenItem,\n      forceResolution\n    );\n\n    if (overrideResult !== ignoreOverride) {\n      return overrideResult;\n    }\n  }\n\n  if (seenItem && !forceResolution) {\n    const seenSchema = get$ref(seenItem, refs);\n\n    if (seenSchema !== undefined) {\n      return seenSchema;\n    }\n  }\n\n  const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n  refs.seen.set(def, newItem);\n\n  const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n  // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n  const jsonSchema =\n    typeof jsonSchemaOrGetter === \"function\"\n      ? parseDef(jsonSchemaOrGetter(), refs)\n      : jsonSchemaOrGetter;\n\n  if (jsonSchema) {\n    addMeta(def, refs, jsonSchema);\n  }\n\n  if (refs.postProcess) {\n    const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n    newItem.jsonSchema = jsonSchema;\n\n    return postProcessResult;\n  }\n\n  newItem.jsonSchema = jsonSchema;\n\n  return jsonSchema;\n}\n\nconst get$ref = (\n  item: Seen,\n  refs: Refs\n):\n  | {\n      $ref: string;\n    }\n  | {}\n  | undefined => {\n  switch (refs.$refStrategy) {\n    case \"root\":\n      return { $ref: item.path.join(\"/\") };\n    case \"relative\":\n      return { $ref: getRelativePath(refs.currentPath, item.path) };\n    case \"none\":\n    case \"seen\": {\n      if (\n        item.path.length < refs.currentPath.length &&\n        item.path.every((value, index) => refs.currentPath[index] === value)\n      ) {\n        console.warn(\n          `Recursive reference detected at ${refs.currentPath.join(\n            \"/\"\n          )}! Defaulting to any`\n        );\n\n        return parseAnyDef(refs);\n      }\n\n      return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n    }\n  }\n};\n\nconst addMeta = (\n  def: ZodTypeDef,\n  refs: Refs,\n  jsonSchema: JsonSchema7Type\n): JsonSchema7Type => {\n  if (def.description) {\n    jsonSchema.description = def.description;\n\n    if (refs.markdownDescription) {\n      jsonSchema.markdownDescription = def.description;\n    }\n  }\n  return jsonSchema;\n};\n"],"mappings":";;;;;AAQA,SAAgB,SACd,KACA,MACA,kBAAkB,OACW;CAC7B,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;CAElC,IAAI,KAAK,UAAU;EACjB,MAAM,iBAAiB,KAAK,WAC1B,KACA,MACA,UACA,eACF;EAEA,IAAI,mBAAmBA,gBAAAA,gBACrB,OAAO;CAEX;CAEA,IAAI,YAAY,CAAC,iBAAiB;EAChC,MAAM,aAAa,QAAQ,UAAU,IAAI;EAEzC,IAAI,eAAe,KAAA,GACjB,OAAO;CAEX;CAEA,MAAM,UAAgB;EAAE;EAAK,MAAM,KAAK;EAAa,YAAY,KAAA;CAAU;CAE3E,KAAK,KAAK,IAAI,KAAK,OAAO;CAE1B,MAAM,qBAAqBC,qBAAAA,aAAa,KAAM,IAAY,UAAU,IAAI;CAGxE,MAAM,aACJ,OAAO,uBAAuB,aAC1B,SAAS,mBAAmB,GAAG,IAAI,IACnC;CAEN,IAAI,YACF,QAAQ,KAAK,MAAM,UAAU;CAG/B,IAAI,KAAK,aAAa;EACpB,MAAM,oBAAoB,KAAK,YAAY,YAAY,KAAK,IAAI;EAEhE,QAAQ,aAAa;EAErB,OAAO;CACT;CAEA,QAAQ,aAAa;CAErB,OAAO;AACT;AAEA,MAAM,WACJ,MACA,SAMe;CACf,QAAQ,KAAK,cAAb;EACE,KAAK,QACH,OAAO,EAAE,MAAM,KAAK,KAAK,KAAK,GAAG,EAAE;EACrC,KAAK,YACH,OAAO,EAAE,MAAMC,wBAAAA,gBAAgB,KAAK,aAAa,KAAK,IAAI,EAAE;EAC9D,KAAK;EACL,KAAK;GACH,IACE,KAAK,KAAK,SAAS,KAAK,YAAY,UACpC,KAAK,KAAK,OAAO,OAAO,UAAU,KAAK,YAAY,WAAW,KAAK,GACnE;IACA,QAAQ,KACN,mCAAmC,KAAK,YAAY,KAClD,GACF,EAAE,oBACJ;IAEA,OAAOC,YAAAA,YAAY,IAAI;GACzB;GAEA,OAAO,KAAK,iBAAiB,SAASA,YAAAA,YAAY,IAAI,IAAI,KAAA;CAE9D;AACF;AAEA,MAAM,WACJ,KACA,MACA,eACoB;CACpB,IAAI,IAAI,aAAa;EACnB,WAAW,cAAc,IAAI;EAE7B,IAAI,KAAK,qBACP,WAAW,sBAAsB,IAAI;CAEzC;CACA,OAAO;AACT"}