{"version":3,"file":"union.cjs","names":["parseDef"],"sources":["../../../../src/utils/zod-to-json-schema/parsers/union.ts"],"sourcesContent":["import {\n  ZodDiscriminatedUnionDef,\n  ZodLiteralDef,\n  ZodTypeAny,\n  ZodUnionDef,\n} from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { JsonSchema7Type } from \"../parseTypes.js\";\nimport { Refs } from \"../Refs.js\";\n\nexport const primitiveMappings = {\n  ZodString: \"string\",\n  ZodNumber: \"number\",\n  ZodBigInt: \"integer\",\n  ZodBoolean: \"boolean\",\n  ZodNull: \"null\",\n} as const;\ntype ZodPrimitive = keyof typeof primitiveMappings;\ntype JsonSchema7Primitive =\n  (typeof primitiveMappings)[keyof typeof primitiveMappings];\n\nexport type JsonSchema7UnionType =\n  | JsonSchema7PrimitiveUnionType\n  | JsonSchema7AnyOfType;\n\ntype JsonSchema7PrimitiveUnionType =\n  | {\n      type: JsonSchema7Primitive | JsonSchema7Primitive[];\n    }\n  | {\n      type: JsonSchema7Primitive | JsonSchema7Primitive[];\n      enum: (string | number | bigint | boolean | null)[];\n    };\n\ntype JsonSchema7AnyOfType = {\n  anyOf: JsonSchema7Type[];\n};\n\nexport function parseUnionDef(\n  def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n  refs: Refs\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined {\n  if (refs.target === \"openApi3\") return asAnyOf(def, refs);\n\n  const options: readonly ZodTypeAny[] =\n    def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n\n  // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n  if (\n    options.every(\n      (x) =>\n        x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length)\n    )\n  ) {\n    // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n\n    const types = options.reduce((types: JsonSchema7Primitive[], x) => {\n      const type = primitiveMappings[x._def.typeName as ZodPrimitive]; //Can be safely casted due to row 43\n      return type && !types.includes(type) ? [...types, type] : types;\n    }, []);\n\n    return {\n      type: types.length > 1 ? types : types[0],\n    };\n  } else if (\n    options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)\n  ) {\n    // all options literals\n\n    const types = options.reduce(\n      (acc: JsonSchema7Primitive[], x: { _def: ZodLiteralDef }) => {\n        const type = typeof x._def.value;\n        switch (type) {\n          case \"string\":\n          case \"number\":\n          case \"boolean\":\n            return [...acc, type];\n          case \"bigint\":\n            return [...acc, \"integer\" as const];\n          case \"object\":\n            if (x._def.value === null) return [...acc, \"null\" as const];\n            return acc;\n          case \"symbol\":\n          case \"undefined\":\n          case \"function\":\n          default:\n            return acc;\n        }\n      },\n      []\n    );\n\n    if (types.length === options.length) {\n      // all the literals are primitive, as far as null can be considered primitive\n\n      const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n      return {\n        type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n        enum: options.reduce((acc, x) => {\n          return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n        }, [] as (string | number | bigint | boolean | null)[]),\n      };\n    }\n  } else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n    return {\n      type: \"string\",\n      enum: options.reduce(\n        (acc: string[], x) => [\n          ...acc,\n          ...x._def.values.filter((x: string) => !acc.includes(x)),\n        ],\n        []\n      ),\n    };\n  }\n\n  return asAnyOf(def, refs);\n}\n\nconst asAnyOf = (\n  def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n  refs: Refs\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined => {\n  const anyOf = (\n    (def.options instanceof Map\n      ? Array.from(def.options.values())\n      : def.options) as any[]\n  )\n    .map((x, i) =>\n      parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n      })\n    )\n    .filter(\n      (x): x is JsonSchema7Type =>\n        !!x &&\n        (!refs.strictUnions ||\n          (typeof x === \"object\" && Object.keys(x).length > 0))\n    );\n\n  return anyOf.length ? { anyOf } : undefined;\n};\n"],"mappings":";;AAUA,MAAa,oBAAoB;CAC/B,WAAW;CACX,WAAW;CACX,WAAW;CACX,YAAY;CACZ,SAAS;CACV;AAsBD,SAAgB,cACd,KACA,MACkE;AAClE,KAAI,KAAK,WAAW,WAAY,QAAO,QAAQ,KAAK,KAAK;CAEzD,MAAM,UACJ,IAAI,mBAAmB,MAAM,MAAM,KAAK,IAAI,QAAQ,QAAQ,CAAC,GAAG,IAAI;AAGtE,KACE,QAAQ,OACL,MACC,EAAE,KAAK,YAAY,sBAClB,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,KAAK,OAAO,QACrC,EACD;EAGA,MAAM,QAAQ,QAAQ,QAAQ,OAA+B,MAAM;GACjE,MAAM,OAAO,kBAAkB,EAAE,KAAK;AACtC,UAAO,QAAQ,CAAC,MAAM,SAAS,KAAK,GAAG,CAAC,GAAG,OAAO,KAAK,GAAG;KACzD,EAAE,CAAC;AAEN,SAAO,EACL,MAAM,MAAM,SAAS,IAAI,QAAQ,MAAM,IACxC;YAED,QAAQ,OAAO,MAAM,EAAE,KAAK,aAAa,gBAAgB,CAAC,EAAE,YAAY,EACxE;EAGA,MAAM,QAAQ,QAAQ,QACnB,KAA6B,MAA+B;GAC3D,MAAM,OAAO,OAAO,EAAE,KAAK;AAC3B,WAAQ,MAAR;IACE,KAAK;IACL,KAAK;IACL,KAAK,UACH,QAAO,CAAC,GAAG,KAAK,KAAK;IACvB,KAAK,SACH,QAAO,CAAC,GAAG,KAAK,UAAmB;IACrC,KAAK;AACH,SAAI,EAAE,KAAK,UAAU,KAAM,QAAO,CAAC,GAAG,KAAK,OAAgB;AAC3D,YAAO;IAIT,QACE,QAAO;;KAGb,EAAE,CACH;AAED,MAAI,MAAM,WAAW,QAAQ,QAAQ;GAGnC,MAAM,cAAc,MAAM,QAAQ,GAAG,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;AACjE,UAAO;IACL,MAAM,YAAY,SAAS,IAAI,cAAc,YAAY;IACzD,MAAM,QAAQ,QAAQ,KAAK,MAAM;AAC/B,YAAO,IAAI,SAAS,EAAE,KAAK,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,EAAE,KAAK,MAAM;OAC/D,EAAE,CAAkD;IACxD;;YAEM,QAAQ,OAAO,MAAM,EAAE,KAAK,aAAa,UAAU,CAC5D,QAAO;EACL,MAAM;EACN,MAAM,QAAQ,QACX,KAAe,MAAM,CACpB,GAAG,KACH,GAAG,EAAE,KAAK,OAAO,QAAQ,MAAc,CAAC,IAAI,SAAS,EAAE,CAAC,CACzD,EACD,EAAE,CACH;EACF;AAGH,QAAO,QAAQ,KAAK,KAAK;;AAG3B,MAAM,WACJ,KACA,SACqE;CACrE,MAAM,SACH,IAAI,mBAAmB,MACpB,MAAM,KAAK,IAAI,QAAQ,QAAQ,CAAC,GAChC,IAAI,SAEP,KAAK,GAAG,MACPA,iBAAAA,SAAS,EAAE,MAAM;EACf,GAAG;EACH,aAAa;GAAC,GAAG,KAAK;GAAa;GAAS,GAAG;GAAI;EACpD,CAAC,CACH,CACA,QACE,MACC,CAAC,CAAC,MACD,CAAC,KAAK,gBACJ,OAAO,MAAM,YAAY,OAAO,KAAK,EAAE,CAAC,SAAS,GACvD;AAEH,QAAO,MAAM,SAAS,EAAE,OAAO,GAAG,KAAA"}