nullable.js 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import { parseDef } from "../parseDef.js";
  2. import { primitiveMappings } from "./union.js";
  3. export function parseNullableDef(def, refs) {
  4. if (["ZodString", "ZodNumber", "ZodBigInt", "ZodBoolean", "ZodNull"].includes(def.innerType._def.typeName) &&
  5. (!def.innerType._def.checks || !def.innerType._def.checks.length)) {
  6. if (refs.target === "openApi3") {
  7. return {
  8. type: primitiveMappings[def.innerType._def.typeName],
  9. nullable: true,
  10. };
  11. }
  12. return {
  13. type: [
  14. primitiveMappings[def.innerType._def.typeName],
  15. "null",
  16. ],
  17. };
  18. }
  19. if (refs.target === "openApi3") {
  20. const base = parseDef(def.innerType._def, {
  21. ...refs,
  22. currentPath: [...refs.currentPath],
  23. });
  24. if (base && "$ref" in base)
  25. return { allOf: [base], nullable: true };
  26. return base && { ...base, nullable: true };
  27. }
  28. const base = parseDef(def.innerType._def, {
  29. ...refs,
  30. currentPath: [...refs.currentPath, "anyOf", "0"],
  31. });
  32. return base && { anyOf: [base, { type: "null" }] };
  33. }