nullable.mjs 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. import { parseDef } from "../parseDef.mjs";
  2. import { primitiveMappings } from "./union.mjs";
  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' || refs.nullableStrategy === 'property') {
  7. return {
  8. type: primitiveMappings[def.innerType._def.typeName],
  9. nullable: true,
  10. };
  11. }
  12. return {
  13. type: [primitiveMappings[def.innerType._def.typeName], 'null'],
  14. };
  15. }
  16. if (refs.target === 'openApi3') {
  17. const base = parseDef(def.innerType._def, {
  18. ...refs,
  19. currentPath: [...refs.currentPath],
  20. });
  21. if (base && '$ref' in base)
  22. return { allOf: [base], nullable: true };
  23. return base && { ...base, nullable: true };
  24. }
  25. const base = parseDef(def.innerType._def, {
  26. ...refs,
  27. currentPath: [...refs.currentPath, 'anyOf', '0'],
  28. });
  29. return base && { anyOf: [base, { type: 'null' }] };
  30. }
  31. //# sourceMappingURL=nullable.mjs.map