util.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. export var util;
  2. (function (util) {
  3. util.assertEqual = (_) => { };
  4. function assertIs(_arg) { }
  5. util.assertIs = assertIs;
  6. function assertNever(_x) {
  7. throw new Error();
  8. }
  9. util.assertNever = assertNever;
  10. util.arrayToEnum = (items) => {
  11. const obj = {};
  12. for (const item of items) {
  13. obj[item] = item;
  14. }
  15. return obj;
  16. };
  17. util.getValidEnumValues = (obj) => {
  18. const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== "number");
  19. const filtered = {};
  20. for (const k of validKeys) {
  21. filtered[k] = obj[k];
  22. }
  23. return util.objectValues(filtered);
  24. };
  25. util.objectValues = (obj) => {
  26. return util.objectKeys(obj).map(function (e) {
  27. return obj[e];
  28. });
  29. };
  30. util.objectKeys = typeof Object.keys === "function" // eslint-disable-line ban/ban
  31. ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban
  32. : (object) => {
  33. const keys = [];
  34. for (const key in object) {
  35. if (Object.prototype.hasOwnProperty.call(object, key)) {
  36. keys.push(key);
  37. }
  38. }
  39. return keys;
  40. };
  41. util.find = (arr, checker) => {
  42. for (const item of arr) {
  43. if (checker(item))
  44. return item;
  45. }
  46. return undefined;
  47. };
  48. util.isInteger = typeof Number.isInteger === "function"
  49. ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban
  50. : (val) => typeof val === "number" && Number.isFinite(val) && Math.floor(val) === val;
  51. function joinValues(array, separator = " | ") {
  52. return array.map((val) => (typeof val === "string" ? `'${val}'` : val)).join(separator);
  53. }
  54. util.joinValues = joinValues;
  55. util.jsonStringifyReplacer = (_, value) => {
  56. if (typeof value === "bigint") {
  57. return value.toString();
  58. }
  59. return value;
  60. };
  61. })(util || (util = {}));
  62. export var objectUtil;
  63. (function (objectUtil) {
  64. objectUtil.mergeShapes = (first, second) => {
  65. return {
  66. ...first,
  67. ...second, // second overwrites first
  68. };
  69. };
  70. })(objectUtil || (objectUtil = {}));
  71. export const ZodParsedType = util.arrayToEnum([
  72. "string",
  73. "nan",
  74. "number",
  75. "integer",
  76. "float",
  77. "boolean",
  78. "date",
  79. "bigint",
  80. "symbol",
  81. "function",
  82. "undefined",
  83. "null",
  84. "array",
  85. "object",
  86. "unknown",
  87. "promise",
  88. "void",
  89. "never",
  90. "map",
  91. "set",
  92. ]);
  93. export const getParsedType = (data) => {
  94. const t = typeof data;
  95. switch (t) {
  96. case "undefined":
  97. return ZodParsedType.undefined;
  98. case "string":
  99. return ZodParsedType.string;
  100. case "number":
  101. return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;
  102. case "boolean":
  103. return ZodParsedType.boolean;
  104. case "function":
  105. return ZodParsedType.function;
  106. case "bigint":
  107. return ZodParsedType.bigint;
  108. case "symbol":
  109. return ZodParsedType.symbol;
  110. case "object":
  111. if (Array.isArray(data)) {
  112. return ZodParsedType.array;
  113. }
  114. if (data === null) {
  115. return ZodParsedType.null;
  116. }
  117. if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
  118. return ZodParsedType.promise;
  119. }
  120. if (typeof Map !== "undefined" && data instanceof Map) {
  121. return ZodParsedType.map;
  122. }
  123. if (typeof Set !== "undefined" && data instanceof Set) {
  124. return ZodParsedType.set;
  125. }
  126. if (typeof Date !== "undefined" && data instanceof Date) {
  127. return ZodParsedType.date;
  128. }
  129. return ZodParsedType.object;
  130. default:
  131. return ZodParsedType.unknown;
  132. }
  133. };