flavor-code 1.2.13 → 1.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +9 -1
  2. package/README.zh-CN.md +9 -1
  3. package/dist/agent/planner.d.ts +2 -0
  4. package/dist/{app-Z3YWFIBB.js → app-3KW2FTVJ.js} +2 -2
  5. package/dist/astgraph/db.mjs +237 -237
  6. package/dist/astgraph/extract.mjs +239 -239
  7. package/dist/astgraph/flavor-plugin.json +25 -25
  8. package/dist/astgraph/grammars.mjs +68 -68
  9. package/dist/astgraph/index.js +301 -301
  10. package/dist/astgraph/indexer.mjs +175 -175
  11. package/dist/astgraph/query.mjs +165 -165
  12. package/dist/astgraph/resolve.mjs +93 -93
  13. package/dist/astgraph/vendor/tree-sitter.js +3980 -3980
  14. package/dist/astgraph/vendor/zod/LICENSE +21 -21
  15. package/dist/astgraph/vendor/zod/index.js +4 -4
  16. package/dist/astgraph/vendor/zod/locales/index.js +1 -1
  17. package/dist/astgraph/vendor/zod/locales/package.json +7 -7
  18. package/dist/astgraph/vendor/zod/package.json +135 -135
  19. package/dist/astgraph/vendor/zod/v4/classic/checks.js +1 -1
  20. package/dist/astgraph/vendor/zod/v4/classic/coerce.js +17 -17
  21. package/dist/astgraph/vendor/zod/v4/classic/compat.js +31 -31
  22. package/dist/astgraph/vendor/zod/v4/classic/errors.js +48 -48
  23. package/dist/astgraph/vendor/zod/v4/classic/external.js +20 -20
  24. package/dist/astgraph/vendor/zod/v4/classic/from-json-schema.js +599 -599
  25. package/dist/astgraph/vendor/zod/v4/classic/index.js +4 -4
  26. package/dist/astgraph/vendor/zod/v4/classic/iso.js +30 -30
  27. package/dist/astgraph/vendor/zod/v4/classic/package.json +7 -7
  28. package/dist/astgraph/vendor/zod/v4/classic/parse.js +15 -15
  29. package/dist/astgraph/vendor/zod/v4/classic/schemas.js +1395 -1395
  30. package/dist/astgraph/vendor/zod/v4/core/api.js +1087 -1087
  31. package/dist/astgraph/vendor/zod/v4/core/checks.js +575 -575
  32. package/dist/astgraph/vendor/zod/v4/core/core.js +78 -78
  33. package/dist/astgraph/vendor/zod/v4/core/doc.js +35 -35
  34. package/dist/astgraph/vendor/zod/v4/core/errors.js +185 -185
  35. package/dist/astgraph/vendor/zod/v4/core/index.js +16 -16
  36. package/dist/astgraph/vendor/zod/v4/core/json-schema-generator.js +95 -95
  37. package/dist/astgraph/vendor/zod/v4/core/json-schema-processors.js +601 -601
  38. package/dist/astgraph/vendor/zod/v4/core/json-schema.js +1 -1
  39. package/dist/astgraph/vendor/zod/v4/core/package.json +7 -7
  40. package/dist/astgraph/vendor/zod/v4/core/parse.js +93 -93
  41. package/dist/astgraph/vendor/zod/v4/core/regexes.js +139 -139
  42. package/dist/astgraph/vendor/zod/v4/core/registries.js +51 -51
  43. package/dist/astgraph/vendor/zod/v4/core/schemas.js +2239 -2239
  44. package/dist/astgraph/vendor/zod/v4/core/standard-schema.js +1 -1
  45. package/dist/astgraph/vendor/zod/v4/core/to-json-schema.js +448 -448
  46. package/dist/astgraph/vendor/zod/v4/core/util.js +674 -674
  47. package/dist/astgraph/vendor/zod/v4/core/versions.js +5 -5
  48. package/dist/astgraph/vendor/zod/v4/index.js +3 -3
  49. package/dist/astgraph/vendor/zod/v4/locales/ar.js +106 -106
  50. package/dist/astgraph/vendor/zod/v4/locales/az.js +105 -105
  51. package/dist/astgraph/vendor/zod/v4/locales/be.js +156 -156
  52. package/dist/astgraph/vendor/zod/v4/locales/bg.js +120 -120
  53. package/dist/astgraph/vendor/zod/v4/locales/ca.js +107 -107
  54. package/dist/astgraph/vendor/zod/v4/locales/cs.js +111 -111
  55. package/dist/astgraph/vendor/zod/v4/locales/da.js +115 -115
  56. package/dist/astgraph/vendor/zod/v4/locales/de.js +108 -108
  57. package/dist/astgraph/vendor/zod/v4/locales/el.js +109 -109
  58. package/dist/astgraph/vendor/zod/v4/locales/en.js +113 -113
  59. package/dist/astgraph/vendor/zod/v4/locales/eo.js +109 -109
  60. package/dist/astgraph/vendor/zod/v4/locales/es.js +132 -132
  61. package/dist/astgraph/vendor/zod/v4/locales/fa.js +114 -114
  62. package/dist/astgraph/vendor/zod/v4/locales/fi.js +112 -112
  63. package/dist/astgraph/vendor/zod/v4/locales/fr-CA.js +107 -107
  64. package/dist/astgraph/vendor/zod/v4/locales/fr.js +125 -125
  65. package/dist/astgraph/vendor/zod/v4/locales/he.js +214 -214
  66. package/dist/astgraph/vendor/zod/v4/locales/hr.js +122 -122
  67. package/dist/astgraph/vendor/zod/v4/locales/hu.js +108 -108
  68. package/dist/astgraph/vendor/zod/v4/locales/hy.js +147 -147
  69. package/dist/astgraph/vendor/zod/v4/locales/id.js +106 -106
  70. package/dist/astgraph/vendor/zod/v4/locales/index.js +52 -52
  71. package/dist/astgraph/vendor/zod/v4/locales/is.js +109 -109
  72. package/dist/astgraph/vendor/zod/v4/locales/it.js +108 -108
  73. package/dist/astgraph/vendor/zod/v4/locales/ja.js +107 -107
  74. package/dist/astgraph/vendor/zod/v4/locales/ka.js +112 -112
  75. package/dist/astgraph/vendor/zod/v4/locales/kh.js +5 -5
  76. package/dist/astgraph/vendor/zod/v4/locales/km.js +110 -110
  77. package/dist/astgraph/vendor/zod/v4/locales/ko.js +111 -111
  78. package/dist/astgraph/vendor/zod/v4/locales/lt.js +203 -203
  79. package/dist/astgraph/vendor/zod/v4/locales/mk.js +109 -109
  80. package/dist/astgraph/vendor/zod/v4/locales/ms.js +107 -107
  81. package/dist/astgraph/vendor/zod/v4/locales/nl.js +110 -110
  82. package/dist/astgraph/vendor/zod/v4/locales/no.js +108 -108
  83. package/dist/astgraph/vendor/zod/v4/locales/ota.js +109 -109
  84. package/dist/astgraph/vendor/zod/v4/locales/package.json +7 -7
  85. package/dist/astgraph/vendor/zod/v4/locales/pl.js +109 -109
  86. package/dist/astgraph/vendor/zod/v4/locales/ps.js +114 -114
  87. package/dist/astgraph/vendor/zod/v4/locales/pt.js +108 -108
  88. package/dist/astgraph/vendor/zod/v4/locales/ro.js +119 -119
  89. package/dist/astgraph/vendor/zod/v4/locales/ru.js +156 -156
  90. package/dist/astgraph/vendor/zod/v4/locales/sl.js +109 -109
  91. package/dist/astgraph/vendor/zod/v4/locales/sv.js +110 -110
  92. package/dist/astgraph/vendor/zod/v4/locales/ta.js +110 -110
  93. package/dist/astgraph/vendor/zod/v4/locales/th.js +110 -110
  94. package/dist/astgraph/vendor/zod/v4/locales/tr.js +105 -105
  95. package/dist/astgraph/vendor/zod/v4/locales/ua.js +5 -5
  96. package/dist/astgraph/vendor/zod/v4/locales/uk.js +108 -108
  97. package/dist/astgraph/vendor/zod/v4/locales/ur.js +110 -110
  98. package/dist/astgraph/vendor/zod/v4/locales/uz.js +110 -110
  99. package/dist/astgraph/vendor/zod/v4/locales/vi.js +108 -108
  100. package/dist/astgraph/vendor/zod/v4/locales/yo.js +107 -107
  101. package/dist/astgraph/vendor/zod/v4/locales/zh-CN.js +109 -109
  102. package/dist/astgraph/vendor/zod/v4/locales/zh-TW.js +107 -107
  103. package/dist/astgraph/vendor/zod/v4/mini/checks.js +1 -1
  104. package/dist/astgraph/vendor/zod/v4/mini/coerce.js +22 -22
  105. package/dist/astgraph/vendor/zod/v4/mini/external.js +14 -14
  106. package/dist/astgraph/vendor/zod/v4/mini/index.js +3 -3
  107. package/dist/astgraph/vendor/zod/v4/mini/iso.js +34 -34
  108. package/dist/astgraph/vendor/zod/v4/mini/package.json +7 -7
  109. package/dist/astgraph/vendor/zod/v4/mini/parse.js +1 -1
  110. package/dist/astgraph/vendor/zod/v4/mini/schemas.js +961 -961
  111. package/dist/astgraph/vendor/zod/v4/package.json +7 -7
  112. package/dist/{chunk-Y5MZDG7I.js → chunk-5TG3E2EJ.js} +3253 -1909
  113. package/dist/{chunk-G6Q2Y2A7.js → chunk-BKARQJQZ.js} +1 -1
  114. package/dist/{chunk-XFCJXRJ2.js → chunk-IG4Z23CL.js} +6 -0
  115. package/dist/cli.js +80 -18
  116. package/dist/config/schema.d.ts +6 -0
  117. package/dist/desktop/main.js +6216 -4807
  118. package/dist/desktop-renderer/assets/{index-CCnSpff0.js → index-BCJjMvbX.js} +1 -1
  119. package/dist/desktop-renderer/index.html +1 -1
  120. package/dist/evolve/loader.d.ts +21 -0
  121. package/dist/evolve/service.d.ts +37 -0
  122. package/dist/evolve/store.d.ts +117 -0
  123. package/dist/git/insights.d.ts +52 -0
  124. package/dist/git/service.d.ts +43 -0
  125. package/dist/git/tools.d.ts +9 -0
  126. package/dist/hooks/types.d.ts +5 -1
  127. package/dist/{load-6ZMEBHSG.js → load-GKA7P6RJ.js} +1 -1
  128. package/dist/plugins/host.d.ts +9 -0
  129. package/dist/plugins/types.d.ts +1 -0
  130. package/dist/sdk/index.js +3 -3
  131. package/dist/session/store.d.ts +1 -0
  132. package/dist/tools/shell.d.ts +13 -0
  133. package/dist/ui/commands.d.ts +11 -2
  134. package/dist/ui/session.d.ts +3 -0
  135. package/package.json +1 -1
  136. package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +303 -1
@@ -1,674 +1,674 @@
1
- import { globalConfig } from "./core.js";
2
- // functions
3
- export function assertEqual(val) {
4
- return val;
5
- }
6
- export function assertNotEqual(val) {
7
- return val;
8
- }
9
- export function assertIs(_arg) { }
10
- export function assertNever(_x) {
11
- throw new Error("Unexpected value in exhaustive check");
12
- }
13
- export function assert(_) { }
14
- export function getEnumValues(entries) {
15
- const numericValues = Object.values(entries).filter((v) => typeof v === "number");
16
- const values = Object.entries(entries)
17
- .filter(([k, _]) => numericValues.indexOf(+k) === -1)
18
- .map(([_, v]) => v);
19
- return values;
20
- }
21
- export function joinValues(array, separator = "|") {
22
- return array.map((val) => stringifyPrimitive(val)).join(separator);
23
- }
24
- export function jsonStringifyReplacer(_, value) {
25
- if (typeof value === "bigint")
26
- return value.toString();
27
- return value;
28
- }
29
- export function cached(getter) {
30
- const set = false;
31
- return {
32
- get value() {
33
- if (!set) {
34
- const value = getter();
35
- Object.defineProperty(this, "value", { value });
36
- return value;
37
- }
38
- throw new Error("cached value already set");
39
- },
40
- };
41
- }
42
- export function nullish(input) {
43
- return input === null || input === undefined;
44
- }
45
- export function cleanRegex(source) {
46
- const start = source.startsWith("^") ? 1 : 0;
47
- const end = source.endsWith("$") ? source.length - 1 : source.length;
48
- return source.slice(start, end);
49
- }
50
- export function floatSafeRemainder(val, step) {
51
- const ratio = val / step;
52
- const roundedRatio = Math.round(ratio);
53
- // Use a relative epsilon scaled to the magnitude of the result
54
- const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);
55
- if (Math.abs(ratio - roundedRatio) < tolerance)
56
- return 0;
57
- return ratio - roundedRatio;
58
- }
59
- const EVALUATING = /* @__PURE__*/ Symbol("evaluating");
60
- export function defineLazy(object, key, getter) {
61
- let value = undefined;
62
- Object.defineProperty(object, key, {
63
- get() {
64
- if (value === EVALUATING) {
65
- // Circular reference detected, return undefined to break the cycle
66
- return undefined;
67
- }
68
- if (value === undefined) {
69
- value = EVALUATING;
70
- value = getter();
71
- }
72
- return value;
73
- },
74
- set(v) {
75
- Object.defineProperty(object, key, {
76
- value: v,
77
- // configurable: true,
78
- });
79
- // object[key] = v;
80
- },
81
- configurable: true,
82
- });
83
- }
84
- export function objectClone(obj) {
85
- return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
86
- }
87
- export function assignProp(target, prop, value) {
88
- Object.defineProperty(target, prop, {
89
- value,
90
- writable: true,
91
- enumerable: true,
92
- configurable: true,
93
- });
94
- }
95
- export function mergeDefs(...defs) {
96
- const mergedDescriptors = {};
97
- for (const def of defs) {
98
- const descriptors = Object.getOwnPropertyDescriptors(def);
99
- Object.assign(mergedDescriptors, descriptors);
100
- }
101
- return Object.defineProperties({}, mergedDescriptors);
102
- }
103
- export function cloneDef(schema) {
104
- return mergeDefs(schema._zod.def);
105
- }
106
- export function getElementAtPath(obj, path) {
107
- if (!path)
108
- return obj;
109
- return path.reduce((acc, key) => acc?.[key], obj);
110
- }
111
- export function promiseAllObject(promisesObj) {
112
- const keys = Object.keys(promisesObj);
113
- const promises = keys.map((key) => promisesObj[key]);
114
- return Promise.all(promises).then((results) => {
115
- const resolvedObj = {};
116
- for (let i = 0; i < keys.length; i++) {
117
- resolvedObj[keys[i]] = results[i];
118
- }
119
- return resolvedObj;
120
- });
121
- }
122
- export function randomString(length = 10) {
123
- const chars = "abcdefghijklmnopqrstuvwxyz";
124
- let str = "";
125
- for (let i = 0; i < length; i++) {
126
- str += chars[Math.floor(Math.random() * chars.length)];
127
- }
128
- return str;
129
- }
130
- export function esc(str) {
131
- return JSON.stringify(str);
132
- }
133
- export function slugify(input) {
134
- return input
135
- .toLowerCase()
136
- .trim()
137
- .replace(/[^\w\s-]/g, "")
138
- .replace(/[\s_-]+/g, "-")
139
- .replace(/^-+|-+$/g, "");
140
- }
141
- export const captureStackTrace = ("captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => { });
142
- export function isObject(data) {
143
- return typeof data === "object" && data !== null && !Array.isArray(data);
144
- }
145
- export const allowsEval = /* @__PURE__*/ cached(() => {
146
- // Skip the probe under `jitless`: strict CSPs report the caught `new Function`
147
- // as a `securitypolicyviolation` even though the throw is swallowed.
148
- if (globalConfig.jitless) {
149
- return false;
150
- }
151
- // @ts-ignore
152
- if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) {
153
- return false;
154
- }
155
- try {
156
- const F = Function;
157
- new F("");
158
- return true;
159
- }
160
- catch (_) {
161
- return false;
162
- }
163
- });
164
- export function isPlainObject(o) {
165
- if (isObject(o) === false)
166
- return false;
167
- // modified constructor
168
- const ctor = o.constructor;
169
- if (ctor === undefined)
170
- return true;
171
- if (typeof ctor !== "function")
172
- return true;
173
- // modified prototype
174
- const prot = ctor.prototype;
175
- if (isObject(prot) === false)
176
- return false;
177
- // ctor doesn't have static `isPrototypeOf`
178
- if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
179
- return false;
180
- }
181
- return true;
182
- }
183
- export function shallowClone(o) {
184
- if (isPlainObject(o))
185
- return { ...o };
186
- if (Array.isArray(o))
187
- return [...o];
188
- if (o instanceof Map)
189
- return new Map(o);
190
- if (o instanceof Set)
191
- return new Set(o);
192
- return o;
193
- }
194
- export function numKeys(data) {
195
- let keyCount = 0;
196
- for (const key in data) {
197
- if (Object.prototype.hasOwnProperty.call(data, key)) {
198
- keyCount++;
199
- }
200
- }
201
- return keyCount;
202
- }
203
- export const getParsedType = (data) => {
204
- const t = typeof data;
205
- switch (t) {
206
- case "undefined":
207
- return "undefined";
208
- case "string":
209
- return "string";
210
- case "number":
211
- return Number.isNaN(data) ? "nan" : "number";
212
- case "boolean":
213
- return "boolean";
214
- case "function":
215
- return "function";
216
- case "bigint":
217
- return "bigint";
218
- case "symbol":
219
- return "symbol";
220
- case "object":
221
- if (Array.isArray(data)) {
222
- return "array";
223
- }
224
- if (data === null) {
225
- return "null";
226
- }
227
- if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
228
- return "promise";
229
- }
230
- if (typeof Map !== "undefined" && data instanceof Map) {
231
- return "map";
232
- }
233
- if (typeof Set !== "undefined" && data instanceof Set) {
234
- return "set";
235
- }
236
- if (typeof Date !== "undefined" && data instanceof Date) {
237
- return "date";
238
- }
239
- // @ts-ignore
240
- if (typeof File !== "undefined" && data instanceof File) {
241
- return "file";
242
- }
243
- return "object";
244
- default:
245
- throw new Error(`Unknown data type: ${t}`);
246
- }
247
- };
248
- export const propertyKeyTypes = /* @__PURE__*/ new Set(["string", "number", "symbol"]);
249
- export const primitiveTypes = /* @__PURE__*/ new Set([
250
- "string",
251
- "number",
252
- "bigint",
253
- "boolean",
254
- "symbol",
255
- "undefined",
256
- ]);
257
- export function escapeRegex(str) {
258
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
259
- }
260
- // zod-specific utils
261
- export function clone(inst, def, params) {
262
- const cl = new inst._zod.constr(def ?? inst._zod.def);
263
- if (!def || params?.parent)
264
- cl._zod.parent = inst;
265
- return cl;
266
- }
267
- export function normalizeParams(_params) {
268
- const params = _params;
269
- if (!params)
270
- return {};
271
- if (typeof params === "string")
272
- return { error: () => params };
273
- if (params?.message !== undefined) {
274
- if (params?.error !== undefined)
275
- throw new Error("Cannot specify both `message` and `error` params");
276
- params.error = params.message;
277
- }
278
- delete params.message;
279
- if (typeof params.error === "string")
280
- return { ...params, error: () => params.error };
281
- return params;
282
- }
283
- export function createTransparentProxy(getter) {
284
- let target;
285
- return new Proxy({}, {
286
- get(_, prop, receiver) {
287
- target ?? (target = getter());
288
- return Reflect.get(target, prop, receiver);
289
- },
290
- set(_, prop, value, receiver) {
291
- target ?? (target = getter());
292
- return Reflect.set(target, prop, value, receiver);
293
- },
294
- has(_, prop) {
295
- target ?? (target = getter());
296
- return Reflect.has(target, prop);
297
- },
298
- deleteProperty(_, prop) {
299
- target ?? (target = getter());
300
- return Reflect.deleteProperty(target, prop);
301
- },
302
- ownKeys(_) {
303
- target ?? (target = getter());
304
- return Reflect.ownKeys(target);
305
- },
306
- getOwnPropertyDescriptor(_, prop) {
307
- target ?? (target = getter());
308
- return Reflect.getOwnPropertyDescriptor(target, prop);
309
- },
310
- defineProperty(_, prop, descriptor) {
311
- target ?? (target = getter());
312
- return Reflect.defineProperty(target, prop, descriptor);
313
- },
314
- });
315
- }
316
- export function stringifyPrimitive(value) {
317
- if (typeof value === "bigint")
318
- return value.toString() + "n";
319
- if (typeof value === "string")
320
- return `"${value}"`;
321
- return `${value}`;
322
- }
323
- export function optionalKeys(shape) {
324
- return Object.keys(shape).filter((k) => {
325
- return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional";
326
- });
327
- }
328
- export const NUMBER_FORMAT_RANGES = {
329
- safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],
330
- int32: [-2147483648, 2147483647],
331
- uint32: [0, 4294967295],
332
- float32: [-3.4028234663852886e38, 3.4028234663852886e38],
333
- float64: [-Number.MAX_VALUE, Number.MAX_VALUE],
334
- };
335
- export const BIGINT_FORMAT_RANGES = {
336
- int64: [/* @__PURE__*/ BigInt("-9223372036854775808"), /* @__PURE__*/ BigInt("9223372036854775807")],
337
- uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt("18446744073709551615")],
338
- };
339
- export function pick(schema, mask) {
340
- const currDef = schema._zod.def;
341
- const checks = currDef.checks;
342
- const hasChecks = checks && checks.length > 0;
343
- if (hasChecks) {
344
- throw new Error(".pick() cannot be used on object schemas containing refinements");
345
- }
346
- const def = mergeDefs(schema._zod.def, {
347
- get shape() {
348
- const newShape = {};
349
- for (const key in mask) {
350
- if (!(key in currDef.shape)) {
351
- throw new Error(`Unrecognized key: "${key}"`);
352
- }
353
- if (!mask[key])
354
- continue;
355
- newShape[key] = currDef.shape[key];
356
- }
357
- assignProp(this, "shape", newShape); // self-caching
358
- return newShape;
359
- },
360
- checks: [],
361
- });
362
- return clone(schema, def);
363
- }
364
- export function omit(schema, mask) {
365
- const currDef = schema._zod.def;
366
- const checks = currDef.checks;
367
- const hasChecks = checks && checks.length > 0;
368
- if (hasChecks) {
369
- throw new Error(".omit() cannot be used on object schemas containing refinements");
370
- }
371
- const def = mergeDefs(schema._zod.def, {
372
- get shape() {
373
- const newShape = { ...schema._zod.def.shape };
374
- for (const key in mask) {
375
- if (!(key in currDef.shape)) {
376
- throw new Error(`Unrecognized key: "${key}"`);
377
- }
378
- if (!mask[key])
379
- continue;
380
- delete newShape[key];
381
- }
382
- assignProp(this, "shape", newShape); // self-caching
383
- return newShape;
384
- },
385
- checks: [],
386
- });
387
- return clone(schema, def);
388
- }
389
- export function extend(schema, shape) {
390
- if (!isPlainObject(shape)) {
391
- throw new Error("Invalid input to extend: expected a plain object");
392
- }
393
- const checks = schema._zod.def.checks;
394
- const hasChecks = checks && checks.length > 0;
395
- if (hasChecks) {
396
- // Only throw if new shape overlaps with existing shape
397
- // Use getOwnPropertyDescriptor to check key existence without accessing values
398
- const existingShape = schema._zod.def.shape;
399
- for (const key in shape) {
400
- if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {
401
- throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.");
402
- }
403
- }
404
- }
405
- const def = mergeDefs(schema._zod.def, {
406
- get shape() {
407
- const _shape = { ...schema._zod.def.shape, ...shape };
408
- assignProp(this, "shape", _shape); // self-caching
409
- return _shape;
410
- },
411
- });
412
- return clone(schema, def);
413
- }
414
- export function safeExtend(schema, shape) {
415
- if (!isPlainObject(shape)) {
416
- throw new Error("Invalid input to safeExtend: expected a plain object");
417
- }
418
- const def = mergeDefs(schema._zod.def, {
419
- get shape() {
420
- const _shape = { ...schema._zod.def.shape, ...shape };
421
- assignProp(this, "shape", _shape); // self-caching
422
- return _shape;
423
- },
424
- });
425
- return clone(schema, def);
426
- }
427
- export function merge(a, b) {
428
- if (a._zod.def.checks?.length) {
429
- throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");
430
- }
431
- const def = mergeDefs(a._zod.def, {
432
- get shape() {
433
- const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };
434
- assignProp(this, "shape", _shape); // self-caching
435
- return _shape;
436
- },
437
- get catchall() {
438
- return b._zod.def.catchall;
439
- },
440
- checks: b._zod.def.checks ?? [],
441
- });
442
- return clone(a, def);
443
- }
444
- export function partial(Class, schema, mask) {
445
- const currDef = schema._zod.def;
446
- const checks = currDef.checks;
447
- const hasChecks = checks && checks.length > 0;
448
- if (hasChecks) {
449
- throw new Error(".partial() cannot be used on object schemas containing refinements");
450
- }
451
- const def = mergeDefs(schema._zod.def, {
452
- get shape() {
453
- const oldShape = schema._zod.def.shape;
454
- const shape = { ...oldShape };
455
- if (mask) {
456
- for (const key in mask) {
457
- if (!(key in oldShape)) {
458
- throw new Error(`Unrecognized key: "${key}"`);
459
- }
460
- if (!mask[key])
461
- continue;
462
- // if (oldShape[key]!._zod.optin === "optional") continue;
463
- shape[key] = Class
464
- ? new Class({
465
- type: "optional",
466
- innerType: oldShape[key],
467
- })
468
- : oldShape[key];
469
- }
470
- }
471
- else {
472
- for (const key in oldShape) {
473
- // if (oldShape[key]!._zod.optin === "optional") continue;
474
- shape[key] = Class
475
- ? new Class({
476
- type: "optional",
477
- innerType: oldShape[key],
478
- })
479
- : oldShape[key];
480
- }
481
- }
482
- assignProp(this, "shape", shape); // self-caching
483
- return shape;
484
- },
485
- checks: [],
486
- });
487
- return clone(schema, def);
488
- }
489
- export function required(Class, schema, mask) {
490
- const def = mergeDefs(schema._zod.def, {
491
- get shape() {
492
- const oldShape = schema._zod.def.shape;
493
- const shape = { ...oldShape };
494
- if (mask) {
495
- for (const key in mask) {
496
- if (!(key in shape)) {
497
- throw new Error(`Unrecognized key: "${key}"`);
498
- }
499
- if (!mask[key])
500
- continue;
501
- // overwrite with non-optional
502
- shape[key] = new Class({
503
- type: "nonoptional",
504
- innerType: oldShape[key],
505
- });
506
- }
507
- }
508
- else {
509
- for (const key in oldShape) {
510
- // overwrite with non-optional
511
- shape[key] = new Class({
512
- type: "nonoptional",
513
- innerType: oldShape[key],
514
- });
515
- }
516
- }
517
- assignProp(this, "shape", shape); // self-caching
518
- return shape;
519
- },
520
- });
521
- return clone(schema, def);
522
- }
523
- // invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom
524
- export function aborted(x, startIndex = 0) {
525
- if (x.aborted === true)
526
- return true;
527
- for (let i = startIndex; i < x.issues.length; i++) {
528
- if (x.issues[i]?.continue !== true) {
529
- return true;
530
- }
531
- }
532
- return false;
533
- }
534
- // Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).
535
- // Used to respect `abort: true` in .refine() even for checks that have a `when` function.
536
- export function explicitlyAborted(x, startIndex = 0) {
537
- if (x.aborted === true)
538
- return true;
539
- for (let i = startIndex; i < x.issues.length; i++) {
540
- if (x.issues[i]?.continue === false) {
541
- return true;
542
- }
543
- }
544
- return false;
545
- }
546
- export function prefixIssues(path, issues) {
547
- return issues.map((iss) => {
548
- var _a;
549
- (_a = iss).path ?? (_a.path = []);
550
- iss.path.unshift(path);
551
- return iss;
552
- });
553
- }
554
- export function unwrapMessage(message) {
555
- return typeof message === "string" ? message : message?.message;
556
- }
557
- export function finalizeIssue(iss, ctx, config) {
558
- const message = iss.message
559
- ? iss.message
560
- : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??
561
- unwrapMessage(ctx?.error?.(iss)) ??
562
- unwrapMessage(config.customError?.(iss)) ??
563
- unwrapMessage(config.localeError?.(iss)) ??
564
- "Invalid input");
565
- const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;
566
- rest.path ?? (rest.path = []);
567
- rest.message = message;
568
- if (ctx?.reportInput) {
569
- rest.input = _input;
570
- }
571
- return rest;
572
- }
573
- export function getSizableOrigin(input) {
574
- if (input instanceof Set)
575
- return "set";
576
- if (input instanceof Map)
577
- return "map";
578
- // @ts-ignore
579
- if (input instanceof File)
580
- return "file";
581
- return "unknown";
582
- }
583
- export function getLengthableOrigin(input) {
584
- if (Array.isArray(input))
585
- return "array";
586
- if (typeof input === "string")
587
- return "string";
588
- return "unknown";
589
- }
590
- export function parsedType(data) {
591
- const t = typeof data;
592
- switch (t) {
593
- case "number": {
594
- return Number.isNaN(data) ? "nan" : "number";
595
- }
596
- case "object": {
597
- if (data === null) {
598
- return "null";
599
- }
600
- if (Array.isArray(data)) {
601
- return "array";
602
- }
603
- const obj = data;
604
- if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) {
605
- return obj.constructor.name;
606
- }
607
- }
608
- }
609
- return t;
610
- }
611
- export function issue(...args) {
612
- const [iss, input, inst] = args;
613
- if (typeof iss === "string") {
614
- return {
615
- message: iss,
616
- code: "custom",
617
- input,
618
- inst,
619
- };
620
- }
621
- return { ...iss };
622
- }
623
- export function cleanEnum(obj) {
624
- return Object.entries(obj)
625
- .filter(([k, _]) => {
626
- // return true if NaN, meaning it's not a number, thus a string key
627
- return Number.isNaN(Number.parseInt(k, 10));
628
- })
629
- .map((el) => el[1]);
630
- }
631
- // Codec utility functions
632
- export function base64ToUint8Array(base64) {
633
- const binaryString = atob(base64);
634
- const bytes = new Uint8Array(binaryString.length);
635
- for (let i = 0; i < binaryString.length; i++) {
636
- bytes[i] = binaryString.charCodeAt(i);
637
- }
638
- return bytes;
639
- }
640
- export function uint8ArrayToBase64(bytes) {
641
- let binaryString = "";
642
- for (let i = 0; i < bytes.length; i++) {
643
- binaryString += String.fromCharCode(bytes[i]);
644
- }
645
- return btoa(binaryString);
646
- }
647
- export function base64urlToUint8Array(base64url) {
648
- const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
649
- const padding = "=".repeat((4 - (base64.length % 4)) % 4);
650
- return base64ToUint8Array(base64 + padding);
651
- }
652
- export function uint8ArrayToBase64url(bytes) {
653
- return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
654
- }
655
- export function hexToUint8Array(hex) {
656
- const cleanHex = hex.replace(/^0x/, "");
657
- if (cleanHex.length % 2 !== 0) {
658
- throw new Error("Invalid hex string length");
659
- }
660
- const bytes = new Uint8Array(cleanHex.length / 2);
661
- for (let i = 0; i < cleanHex.length; i += 2) {
662
- bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);
663
- }
664
- return bytes;
665
- }
666
- export function uint8ArrayToHex(bytes) {
667
- return Array.from(bytes)
668
- .map((b) => b.toString(16).padStart(2, "0"))
669
- .join("");
670
- }
671
- // instanceof
672
- export class Class {
673
- constructor(..._args) { }
674
- }
1
+ import { globalConfig } from "./core.js";
2
+ // functions
3
+ export function assertEqual(val) {
4
+ return val;
5
+ }
6
+ export function assertNotEqual(val) {
7
+ return val;
8
+ }
9
+ export function assertIs(_arg) { }
10
+ export function assertNever(_x) {
11
+ throw new Error("Unexpected value in exhaustive check");
12
+ }
13
+ export function assert(_) { }
14
+ export function getEnumValues(entries) {
15
+ const numericValues = Object.values(entries).filter((v) => typeof v === "number");
16
+ const values = Object.entries(entries)
17
+ .filter(([k, _]) => numericValues.indexOf(+k) === -1)
18
+ .map(([_, v]) => v);
19
+ return values;
20
+ }
21
+ export function joinValues(array, separator = "|") {
22
+ return array.map((val) => stringifyPrimitive(val)).join(separator);
23
+ }
24
+ export function jsonStringifyReplacer(_, value) {
25
+ if (typeof value === "bigint")
26
+ return value.toString();
27
+ return value;
28
+ }
29
+ export function cached(getter) {
30
+ const set = false;
31
+ return {
32
+ get value() {
33
+ if (!set) {
34
+ const value = getter();
35
+ Object.defineProperty(this, "value", { value });
36
+ return value;
37
+ }
38
+ throw new Error("cached value already set");
39
+ },
40
+ };
41
+ }
42
+ export function nullish(input) {
43
+ return input === null || input === undefined;
44
+ }
45
+ export function cleanRegex(source) {
46
+ const start = source.startsWith("^") ? 1 : 0;
47
+ const end = source.endsWith("$") ? source.length - 1 : source.length;
48
+ return source.slice(start, end);
49
+ }
50
+ export function floatSafeRemainder(val, step) {
51
+ const ratio = val / step;
52
+ const roundedRatio = Math.round(ratio);
53
+ // Use a relative epsilon scaled to the magnitude of the result
54
+ const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);
55
+ if (Math.abs(ratio - roundedRatio) < tolerance)
56
+ return 0;
57
+ return ratio - roundedRatio;
58
+ }
59
+ const EVALUATING = /* @__PURE__*/ Symbol("evaluating");
60
+ export function defineLazy(object, key, getter) {
61
+ let value = undefined;
62
+ Object.defineProperty(object, key, {
63
+ get() {
64
+ if (value === EVALUATING) {
65
+ // Circular reference detected, return undefined to break the cycle
66
+ return undefined;
67
+ }
68
+ if (value === undefined) {
69
+ value = EVALUATING;
70
+ value = getter();
71
+ }
72
+ return value;
73
+ },
74
+ set(v) {
75
+ Object.defineProperty(object, key, {
76
+ value: v,
77
+ // configurable: true,
78
+ });
79
+ // object[key] = v;
80
+ },
81
+ configurable: true,
82
+ });
83
+ }
84
+ export function objectClone(obj) {
85
+ return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
86
+ }
87
+ export function assignProp(target, prop, value) {
88
+ Object.defineProperty(target, prop, {
89
+ value,
90
+ writable: true,
91
+ enumerable: true,
92
+ configurable: true,
93
+ });
94
+ }
95
+ export function mergeDefs(...defs) {
96
+ const mergedDescriptors = {};
97
+ for (const def of defs) {
98
+ const descriptors = Object.getOwnPropertyDescriptors(def);
99
+ Object.assign(mergedDescriptors, descriptors);
100
+ }
101
+ return Object.defineProperties({}, mergedDescriptors);
102
+ }
103
+ export function cloneDef(schema) {
104
+ return mergeDefs(schema._zod.def);
105
+ }
106
+ export function getElementAtPath(obj, path) {
107
+ if (!path)
108
+ return obj;
109
+ return path.reduce((acc, key) => acc?.[key], obj);
110
+ }
111
+ export function promiseAllObject(promisesObj) {
112
+ const keys = Object.keys(promisesObj);
113
+ const promises = keys.map((key) => promisesObj[key]);
114
+ return Promise.all(promises).then((results) => {
115
+ const resolvedObj = {};
116
+ for (let i = 0; i < keys.length; i++) {
117
+ resolvedObj[keys[i]] = results[i];
118
+ }
119
+ return resolvedObj;
120
+ });
121
+ }
122
+ export function randomString(length = 10) {
123
+ const chars = "abcdefghijklmnopqrstuvwxyz";
124
+ let str = "";
125
+ for (let i = 0; i < length; i++) {
126
+ str += chars[Math.floor(Math.random() * chars.length)];
127
+ }
128
+ return str;
129
+ }
130
+ export function esc(str) {
131
+ return JSON.stringify(str);
132
+ }
133
+ export function slugify(input) {
134
+ return input
135
+ .toLowerCase()
136
+ .trim()
137
+ .replace(/[^\w\s-]/g, "")
138
+ .replace(/[\s_-]+/g, "-")
139
+ .replace(/^-+|-+$/g, "");
140
+ }
141
+ export const captureStackTrace = ("captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => { });
142
+ export function isObject(data) {
143
+ return typeof data === "object" && data !== null && !Array.isArray(data);
144
+ }
145
+ export const allowsEval = /* @__PURE__*/ cached(() => {
146
+ // Skip the probe under `jitless`: strict CSPs report the caught `new Function`
147
+ // as a `securitypolicyviolation` even though the throw is swallowed.
148
+ if (globalConfig.jitless) {
149
+ return false;
150
+ }
151
+ // @ts-ignore
152
+ if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) {
153
+ return false;
154
+ }
155
+ try {
156
+ const F = Function;
157
+ new F("");
158
+ return true;
159
+ }
160
+ catch (_) {
161
+ return false;
162
+ }
163
+ });
164
+ export function isPlainObject(o) {
165
+ if (isObject(o) === false)
166
+ return false;
167
+ // modified constructor
168
+ const ctor = o.constructor;
169
+ if (ctor === undefined)
170
+ return true;
171
+ if (typeof ctor !== "function")
172
+ return true;
173
+ // modified prototype
174
+ const prot = ctor.prototype;
175
+ if (isObject(prot) === false)
176
+ return false;
177
+ // ctor doesn't have static `isPrototypeOf`
178
+ if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
179
+ return false;
180
+ }
181
+ return true;
182
+ }
183
+ export function shallowClone(o) {
184
+ if (isPlainObject(o))
185
+ return { ...o };
186
+ if (Array.isArray(o))
187
+ return [...o];
188
+ if (o instanceof Map)
189
+ return new Map(o);
190
+ if (o instanceof Set)
191
+ return new Set(o);
192
+ return o;
193
+ }
194
+ export function numKeys(data) {
195
+ let keyCount = 0;
196
+ for (const key in data) {
197
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
198
+ keyCount++;
199
+ }
200
+ }
201
+ return keyCount;
202
+ }
203
+ export const getParsedType = (data) => {
204
+ const t = typeof data;
205
+ switch (t) {
206
+ case "undefined":
207
+ return "undefined";
208
+ case "string":
209
+ return "string";
210
+ case "number":
211
+ return Number.isNaN(data) ? "nan" : "number";
212
+ case "boolean":
213
+ return "boolean";
214
+ case "function":
215
+ return "function";
216
+ case "bigint":
217
+ return "bigint";
218
+ case "symbol":
219
+ return "symbol";
220
+ case "object":
221
+ if (Array.isArray(data)) {
222
+ return "array";
223
+ }
224
+ if (data === null) {
225
+ return "null";
226
+ }
227
+ if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") {
228
+ return "promise";
229
+ }
230
+ if (typeof Map !== "undefined" && data instanceof Map) {
231
+ return "map";
232
+ }
233
+ if (typeof Set !== "undefined" && data instanceof Set) {
234
+ return "set";
235
+ }
236
+ if (typeof Date !== "undefined" && data instanceof Date) {
237
+ return "date";
238
+ }
239
+ // @ts-ignore
240
+ if (typeof File !== "undefined" && data instanceof File) {
241
+ return "file";
242
+ }
243
+ return "object";
244
+ default:
245
+ throw new Error(`Unknown data type: ${t}`);
246
+ }
247
+ };
248
+ export const propertyKeyTypes = /* @__PURE__*/ new Set(["string", "number", "symbol"]);
249
+ export const primitiveTypes = /* @__PURE__*/ new Set([
250
+ "string",
251
+ "number",
252
+ "bigint",
253
+ "boolean",
254
+ "symbol",
255
+ "undefined",
256
+ ]);
257
+ export function escapeRegex(str) {
258
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
259
+ }
260
+ // zod-specific utils
261
+ export function clone(inst, def, params) {
262
+ const cl = new inst._zod.constr(def ?? inst._zod.def);
263
+ if (!def || params?.parent)
264
+ cl._zod.parent = inst;
265
+ return cl;
266
+ }
267
+ export function normalizeParams(_params) {
268
+ const params = _params;
269
+ if (!params)
270
+ return {};
271
+ if (typeof params === "string")
272
+ return { error: () => params };
273
+ if (params?.message !== undefined) {
274
+ if (params?.error !== undefined)
275
+ throw new Error("Cannot specify both `message` and `error` params");
276
+ params.error = params.message;
277
+ }
278
+ delete params.message;
279
+ if (typeof params.error === "string")
280
+ return { ...params, error: () => params.error };
281
+ return params;
282
+ }
283
+ export function createTransparentProxy(getter) {
284
+ let target;
285
+ return new Proxy({}, {
286
+ get(_, prop, receiver) {
287
+ target ?? (target = getter());
288
+ return Reflect.get(target, prop, receiver);
289
+ },
290
+ set(_, prop, value, receiver) {
291
+ target ?? (target = getter());
292
+ return Reflect.set(target, prop, value, receiver);
293
+ },
294
+ has(_, prop) {
295
+ target ?? (target = getter());
296
+ return Reflect.has(target, prop);
297
+ },
298
+ deleteProperty(_, prop) {
299
+ target ?? (target = getter());
300
+ return Reflect.deleteProperty(target, prop);
301
+ },
302
+ ownKeys(_) {
303
+ target ?? (target = getter());
304
+ return Reflect.ownKeys(target);
305
+ },
306
+ getOwnPropertyDescriptor(_, prop) {
307
+ target ?? (target = getter());
308
+ return Reflect.getOwnPropertyDescriptor(target, prop);
309
+ },
310
+ defineProperty(_, prop, descriptor) {
311
+ target ?? (target = getter());
312
+ return Reflect.defineProperty(target, prop, descriptor);
313
+ },
314
+ });
315
+ }
316
+ export function stringifyPrimitive(value) {
317
+ if (typeof value === "bigint")
318
+ return value.toString() + "n";
319
+ if (typeof value === "string")
320
+ return `"${value}"`;
321
+ return `${value}`;
322
+ }
323
+ export function optionalKeys(shape) {
324
+ return Object.keys(shape).filter((k) => {
325
+ return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional";
326
+ });
327
+ }
328
+ export const NUMBER_FORMAT_RANGES = {
329
+ safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],
330
+ int32: [-2147483648, 2147483647],
331
+ uint32: [0, 4294967295],
332
+ float32: [-3.4028234663852886e38, 3.4028234663852886e38],
333
+ float64: [-Number.MAX_VALUE, Number.MAX_VALUE],
334
+ };
335
+ export const BIGINT_FORMAT_RANGES = {
336
+ int64: [/* @__PURE__*/ BigInt("-9223372036854775808"), /* @__PURE__*/ BigInt("9223372036854775807")],
337
+ uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt("18446744073709551615")],
338
+ };
339
+ export function pick(schema, mask) {
340
+ const currDef = schema._zod.def;
341
+ const checks = currDef.checks;
342
+ const hasChecks = checks && checks.length > 0;
343
+ if (hasChecks) {
344
+ throw new Error(".pick() cannot be used on object schemas containing refinements");
345
+ }
346
+ const def = mergeDefs(schema._zod.def, {
347
+ get shape() {
348
+ const newShape = {};
349
+ for (const key in mask) {
350
+ if (!(key in currDef.shape)) {
351
+ throw new Error(`Unrecognized key: "${key}"`);
352
+ }
353
+ if (!mask[key])
354
+ continue;
355
+ newShape[key] = currDef.shape[key];
356
+ }
357
+ assignProp(this, "shape", newShape); // self-caching
358
+ return newShape;
359
+ },
360
+ checks: [],
361
+ });
362
+ return clone(schema, def);
363
+ }
364
+ export function omit(schema, mask) {
365
+ const currDef = schema._zod.def;
366
+ const checks = currDef.checks;
367
+ const hasChecks = checks && checks.length > 0;
368
+ if (hasChecks) {
369
+ throw new Error(".omit() cannot be used on object schemas containing refinements");
370
+ }
371
+ const def = mergeDefs(schema._zod.def, {
372
+ get shape() {
373
+ const newShape = { ...schema._zod.def.shape };
374
+ for (const key in mask) {
375
+ if (!(key in currDef.shape)) {
376
+ throw new Error(`Unrecognized key: "${key}"`);
377
+ }
378
+ if (!mask[key])
379
+ continue;
380
+ delete newShape[key];
381
+ }
382
+ assignProp(this, "shape", newShape); // self-caching
383
+ return newShape;
384
+ },
385
+ checks: [],
386
+ });
387
+ return clone(schema, def);
388
+ }
389
+ export function extend(schema, shape) {
390
+ if (!isPlainObject(shape)) {
391
+ throw new Error("Invalid input to extend: expected a plain object");
392
+ }
393
+ const checks = schema._zod.def.checks;
394
+ const hasChecks = checks && checks.length > 0;
395
+ if (hasChecks) {
396
+ // Only throw if new shape overlaps with existing shape
397
+ // Use getOwnPropertyDescriptor to check key existence without accessing values
398
+ const existingShape = schema._zod.def.shape;
399
+ for (const key in shape) {
400
+ if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {
401
+ throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.");
402
+ }
403
+ }
404
+ }
405
+ const def = mergeDefs(schema._zod.def, {
406
+ get shape() {
407
+ const _shape = { ...schema._zod.def.shape, ...shape };
408
+ assignProp(this, "shape", _shape); // self-caching
409
+ return _shape;
410
+ },
411
+ });
412
+ return clone(schema, def);
413
+ }
414
+ export function safeExtend(schema, shape) {
415
+ if (!isPlainObject(shape)) {
416
+ throw new Error("Invalid input to safeExtend: expected a plain object");
417
+ }
418
+ const def = mergeDefs(schema._zod.def, {
419
+ get shape() {
420
+ const _shape = { ...schema._zod.def.shape, ...shape };
421
+ assignProp(this, "shape", _shape); // self-caching
422
+ return _shape;
423
+ },
424
+ });
425
+ return clone(schema, def);
426
+ }
427
+ export function merge(a, b) {
428
+ if (a._zod.def.checks?.length) {
429
+ throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");
430
+ }
431
+ const def = mergeDefs(a._zod.def, {
432
+ get shape() {
433
+ const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };
434
+ assignProp(this, "shape", _shape); // self-caching
435
+ return _shape;
436
+ },
437
+ get catchall() {
438
+ return b._zod.def.catchall;
439
+ },
440
+ checks: b._zod.def.checks ?? [],
441
+ });
442
+ return clone(a, def);
443
+ }
444
+ export function partial(Class, schema, mask) {
445
+ const currDef = schema._zod.def;
446
+ const checks = currDef.checks;
447
+ const hasChecks = checks && checks.length > 0;
448
+ if (hasChecks) {
449
+ throw new Error(".partial() cannot be used on object schemas containing refinements");
450
+ }
451
+ const def = mergeDefs(schema._zod.def, {
452
+ get shape() {
453
+ const oldShape = schema._zod.def.shape;
454
+ const shape = { ...oldShape };
455
+ if (mask) {
456
+ for (const key in mask) {
457
+ if (!(key in oldShape)) {
458
+ throw new Error(`Unrecognized key: "${key}"`);
459
+ }
460
+ if (!mask[key])
461
+ continue;
462
+ // if (oldShape[key]!._zod.optin === "optional") continue;
463
+ shape[key] = Class
464
+ ? new Class({
465
+ type: "optional",
466
+ innerType: oldShape[key],
467
+ })
468
+ : oldShape[key];
469
+ }
470
+ }
471
+ else {
472
+ for (const key in oldShape) {
473
+ // if (oldShape[key]!._zod.optin === "optional") continue;
474
+ shape[key] = Class
475
+ ? new Class({
476
+ type: "optional",
477
+ innerType: oldShape[key],
478
+ })
479
+ : oldShape[key];
480
+ }
481
+ }
482
+ assignProp(this, "shape", shape); // self-caching
483
+ return shape;
484
+ },
485
+ checks: [],
486
+ });
487
+ return clone(schema, def);
488
+ }
489
+ export function required(Class, schema, mask) {
490
+ const def = mergeDefs(schema._zod.def, {
491
+ get shape() {
492
+ const oldShape = schema._zod.def.shape;
493
+ const shape = { ...oldShape };
494
+ if (mask) {
495
+ for (const key in mask) {
496
+ if (!(key in shape)) {
497
+ throw new Error(`Unrecognized key: "${key}"`);
498
+ }
499
+ if (!mask[key])
500
+ continue;
501
+ // overwrite with non-optional
502
+ shape[key] = new Class({
503
+ type: "nonoptional",
504
+ innerType: oldShape[key],
505
+ });
506
+ }
507
+ }
508
+ else {
509
+ for (const key in oldShape) {
510
+ // overwrite with non-optional
511
+ shape[key] = new Class({
512
+ type: "nonoptional",
513
+ innerType: oldShape[key],
514
+ });
515
+ }
516
+ }
517
+ assignProp(this, "shape", shape); // self-caching
518
+ return shape;
519
+ },
520
+ });
521
+ return clone(schema, def);
522
+ }
523
+ // invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom
524
+ export function aborted(x, startIndex = 0) {
525
+ if (x.aborted === true)
526
+ return true;
527
+ for (let i = startIndex; i < x.issues.length; i++) {
528
+ if (x.issues[i]?.continue !== true) {
529
+ return true;
530
+ }
531
+ }
532
+ return false;
533
+ }
534
+ // Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).
535
+ // Used to respect `abort: true` in .refine() even for checks that have a `when` function.
536
+ export function explicitlyAborted(x, startIndex = 0) {
537
+ if (x.aborted === true)
538
+ return true;
539
+ for (let i = startIndex; i < x.issues.length; i++) {
540
+ if (x.issues[i]?.continue === false) {
541
+ return true;
542
+ }
543
+ }
544
+ return false;
545
+ }
546
+ export function prefixIssues(path, issues) {
547
+ return issues.map((iss) => {
548
+ var _a;
549
+ (_a = iss).path ?? (_a.path = []);
550
+ iss.path.unshift(path);
551
+ return iss;
552
+ });
553
+ }
554
+ export function unwrapMessage(message) {
555
+ return typeof message === "string" ? message : message?.message;
556
+ }
557
+ export function finalizeIssue(iss, ctx, config) {
558
+ const message = iss.message
559
+ ? iss.message
560
+ : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??
561
+ unwrapMessage(ctx?.error?.(iss)) ??
562
+ unwrapMessage(config.customError?.(iss)) ??
563
+ unwrapMessage(config.localeError?.(iss)) ??
564
+ "Invalid input");
565
+ const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;
566
+ rest.path ?? (rest.path = []);
567
+ rest.message = message;
568
+ if (ctx?.reportInput) {
569
+ rest.input = _input;
570
+ }
571
+ return rest;
572
+ }
573
+ export function getSizableOrigin(input) {
574
+ if (input instanceof Set)
575
+ return "set";
576
+ if (input instanceof Map)
577
+ return "map";
578
+ // @ts-ignore
579
+ if (input instanceof File)
580
+ return "file";
581
+ return "unknown";
582
+ }
583
+ export function getLengthableOrigin(input) {
584
+ if (Array.isArray(input))
585
+ return "array";
586
+ if (typeof input === "string")
587
+ return "string";
588
+ return "unknown";
589
+ }
590
+ export function parsedType(data) {
591
+ const t = typeof data;
592
+ switch (t) {
593
+ case "number": {
594
+ return Number.isNaN(data) ? "nan" : "number";
595
+ }
596
+ case "object": {
597
+ if (data === null) {
598
+ return "null";
599
+ }
600
+ if (Array.isArray(data)) {
601
+ return "array";
602
+ }
603
+ const obj = data;
604
+ if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) {
605
+ return obj.constructor.name;
606
+ }
607
+ }
608
+ }
609
+ return t;
610
+ }
611
+ export function issue(...args) {
612
+ const [iss, input, inst] = args;
613
+ if (typeof iss === "string") {
614
+ return {
615
+ message: iss,
616
+ code: "custom",
617
+ input,
618
+ inst,
619
+ };
620
+ }
621
+ return { ...iss };
622
+ }
623
+ export function cleanEnum(obj) {
624
+ return Object.entries(obj)
625
+ .filter(([k, _]) => {
626
+ // return true if NaN, meaning it's not a number, thus a string key
627
+ return Number.isNaN(Number.parseInt(k, 10));
628
+ })
629
+ .map((el) => el[1]);
630
+ }
631
+ // Codec utility functions
632
+ export function base64ToUint8Array(base64) {
633
+ const binaryString = atob(base64);
634
+ const bytes = new Uint8Array(binaryString.length);
635
+ for (let i = 0; i < binaryString.length; i++) {
636
+ bytes[i] = binaryString.charCodeAt(i);
637
+ }
638
+ return bytes;
639
+ }
640
+ export function uint8ArrayToBase64(bytes) {
641
+ let binaryString = "";
642
+ for (let i = 0; i < bytes.length; i++) {
643
+ binaryString += String.fromCharCode(bytes[i]);
644
+ }
645
+ return btoa(binaryString);
646
+ }
647
+ export function base64urlToUint8Array(base64url) {
648
+ const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
649
+ const padding = "=".repeat((4 - (base64.length % 4)) % 4);
650
+ return base64ToUint8Array(base64 + padding);
651
+ }
652
+ export function uint8ArrayToBase64url(bytes) {
653
+ return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
654
+ }
655
+ export function hexToUint8Array(hex) {
656
+ const cleanHex = hex.replace(/^0x/, "");
657
+ if (cleanHex.length % 2 !== 0) {
658
+ throw new Error("Invalid hex string length");
659
+ }
660
+ const bytes = new Uint8Array(cleanHex.length / 2);
661
+ for (let i = 0; i < cleanHex.length; i += 2) {
662
+ bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);
663
+ }
664
+ return bytes;
665
+ }
666
+ export function uint8ArrayToHex(bytes) {
667
+ return Array.from(bytes)
668
+ .map((b) => b.toString(16).padStart(2, "0"))
669
+ .join("");
670
+ }
671
+ // instanceof
672
+ export class Class {
673
+ constructor(..._args) { }
674
+ }