tuple.js 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. import { parseDef } from "../parseDef.js";
  2. export function parseTupleDef(def, refs) {
  3. if (def.rest) {
  4. return {
  5. type: "array",
  6. minItems: def.items.length,
  7. items: def.items
  8. .map((x, i) => parseDef(x._def, {
  9. ...refs,
  10. currentPath: [...refs.currentPath, "items", `${i}`],
  11. }))
  12. .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),
  13. additionalItems: parseDef(def.rest._def, {
  14. ...refs,
  15. currentPath: [...refs.currentPath, "additionalItems"],
  16. }),
  17. };
  18. }
  19. else {
  20. return {
  21. type: "array",
  22. minItems: def.items.length,
  23. maxItems: def.items.length,
  24. items: def.items
  25. .map((x, i) => parseDef(x._def, {
  26. ...refs,
  27. currentPath: [...refs.currentPath, "items", `${i}`],
  28. }))
  29. .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),
  30. };
  31. }
  32. }