zod 4.0.4 → 4.0.6
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.
- package/package.json +1 -1
- package/src/v3/tests/string.test.ts +2 -2
- package/src/v3/types.ts +3 -1
- package/src/v4/classic/compat.ts +2 -39
- package/src/v4/classic/errors.ts +9 -2
- package/src/v4/classic/schemas.ts +11 -9
- package/src/v4/classic/tests/catch.test.ts +4 -5
- package/src/v4/classic/tests/discriminated-unions.test.ts +41 -0
- package/src/v4/classic/tests/error-utils.test.ts +43 -0
- package/src/v4/classic/tests/literal.test.ts +25 -0
- package/src/v4/classic/tests/partial.test.ts +193 -0
- package/src/v4/classic/tests/pickomit.test.ts +5 -5
- package/src/v4/classic/tests/preprocess.test.ts +4 -15
- package/src/v4/classic/tests/record.test.ts +15 -1
- package/src/v4/classic/tests/recursive-types.test.ts +67 -0
- package/src/v4/classic/tests/string.test.ts +81 -4
- package/src/v4/classic/tests/template-literal.test.ts +3 -0
- package/src/v4/classic/tests/to-json-schema.test.ts +1 -0
- package/src/v4/classic/tests/transform.test.ts +110 -0
- package/src/v4/classic/tests/union.test.ts +45 -3
- package/src/v4/core/checks.ts +2 -2
- package/src/v4/core/errors.ts +8 -15
- package/src/v4/core/regexes.ts +1 -1
- package/src/v4/core/registries.ts +3 -2
- package/src/v4/core/schemas.ts +93 -99
- package/src/v4/core/to-json-schema.ts +1 -0
- package/src/v4/core/util.ts +175 -115
- package/src/v4/core/versions.ts +1 -1
- package/src/v4/locales/bg.ts +136 -0
- package/src/v4/locales/da.ts +141 -0
- package/src/v4/locales/index.ts +2 -0
- package/src/v4/locales/is.ts +127 -0
- package/src/v4/mini/schemas.ts +3 -1
- package/v3/types.cjs +2 -0
- package/v3/types.d.cts +4 -1
- package/v3/types.d.ts +4 -1
- package/v3/types.js +2 -0
- package/v4/classic/compat.cjs +1 -37
- package/v4/classic/compat.d.cts +1 -37
- package/v4/classic/compat.d.ts +1 -37
- package/v4/classic/compat.js +1 -37
- package/v4/classic/errors.cjs +9 -2
- package/v4/classic/errors.js +9 -2
- package/v4/classic/schemas.cjs +5 -3
- package/v4/classic/schemas.d.cts +3 -3
- package/v4/classic/schemas.d.ts +3 -3
- package/v4/classic/schemas.js +5 -3
- package/v4/core/checks.d.cts +2 -2
- package/v4/core/checks.d.ts +2 -2
- package/v4/core/errors.cjs +4 -9
- package/v4/core/errors.d.cts +4 -6
- package/v4/core/errors.d.ts +4 -6
- package/v4/core/errors.js +4 -9
- package/v4/core/regexes.cjs +1 -1
- package/v4/core/regexes.d.cts +1 -1
- package/v4/core/regexes.d.ts +1 -1
- package/v4/core/regexes.js +1 -1
- package/v4/core/registries.cjs +2 -1
- package/v4/core/registries.d.cts +1 -1
- package/v4/core/registries.d.ts +1 -1
- package/v4/core/registries.js +2 -1
- package/v4/core/schemas.cjs +49 -88
- package/v4/core/schemas.d.cts +10 -4
- package/v4/core/schemas.d.ts +10 -4
- package/v4/core/schemas.js +49 -88
- package/v4/core/to-json-schema.cjs +1 -0
- package/v4/core/to-json-schema.js +1 -0
- package/v4/core/util.cjs +163 -112
- package/v4/core/util.d.cts +1 -0
- package/v4/core/util.d.ts +1 -0
- package/v4/core/util.js +162 -112
- package/v4/core/versions.cjs +1 -1
- package/v4/core/versions.js +1 -1
- package/v4/locales/bg.cjs +156 -0
- package/v4/locales/bg.d.cts +5 -0
- package/v4/locales/bg.d.ts +5 -0
- package/v4/locales/bg.js +128 -0
- package/v4/locales/da.cjs +157 -0
- package/v4/locales/da.d.cts +4 -0
- package/v4/locales/da.d.ts +4 -0
- package/v4/locales/da.js +131 -0
- package/v4/locales/index.cjs +5 -1
- package/v4/locales/index.d.cts +2 -0
- package/v4/locales/index.d.ts +2 -0
- package/v4/locales/index.js +2 -0
- package/v4/locales/is.cjs +145 -0
- package/v4/locales/is.d.cts +5 -0
- package/v4/locales/is.d.ts +5 -0
- package/v4/locales/is.js +117 -0
- package/v4/mini/schemas.cjs +3 -1
- package/v4/mini/schemas.js +3 -1
package/v4/core/errors.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { $ZodCheck, $ZodStringFormats } from "./checks.cjs";
|
|
2
2
|
import { $constructor } from "./core.cjs";
|
|
3
3
|
import type { $ZodType } from "./schemas.cjs";
|
|
4
|
+
import type { StandardSchemaV1 } from "./standard-schema.cjs";
|
|
4
5
|
import * as util from "./util.cjs";
|
|
5
6
|
export interface $ZodIssueBase {
|
|
6
7
|
readonly code?: string;
|
|
@@ -107,7 +108,7 @@ type RawIssue<T extends $ZodIssueBase> = util.Flatten<util.MakePartial<T, "messa
|
|
|
107
108
|
readonly input?: unknown;
|
|
108
109
|
/** The schema or check that originated this issue. */
|
|
109
110
|
readonly inst?: $ZodType | $ZodCheck;
|
|
110
|
-
/**
|
|
111
|
+
/** If `true`, Zod will continue executing validation despite this issue. */
|
|
111
112
|
readonly continue?: boolean | undefined;
|
|
112
113
|
} & Record<string, any>>;
|
|
113
114
|
export interface $ZodErrorMap<T extends $ZodIssueBase = $ZodIssue> {
|
|
@@ -202,9 +203,6 @@ export declare function treeifyError<T, U>(error: $ZodError<T>, mapper?: (issue:
|
|
|
202
203
|
* ✖ Invalid input: expected number
|
|
203
204
|
* ```
|
|
204
205
|
*/
|
|
205
|
-
export declare function toDotPath(
|
|
206
|
-
|
|
207
|
-
issues: $ZodIssueBase[];
|
|
208
|
-
}
|
|
209
|
-
export declare function prettifyError(error: BaseError): string;
|
|
206
|
+
export declare function toDotPath(_path: readonly (string | number | symbol | StandardSchemaV1.PathSegment)[]): string;
|
|
207
|
+
export declare function prettifyError(error: StandardSchemaV1.FailureResult): string;
|
|
210
208
|
export {};
|
package/v4/core/errors.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { $ZodCheck, $ZodStringFormats } from "./checks.js";
|
|
2
2
|
import { $constructor } from "./core.js";
|
|
3
3
|
import type { $ZodType } from "./schemas.js";
|
|
4
|
+
import type { StandardSchemaV1 } from "./standard-schema.js";
|
|
4
5
|
import * as util from "./util.js";
|
|
5
6
|
export interface $ZodIssueBase {
|
|
6
7
|
readonly code?: string;
|
|
@@ -107,7 +108,7 @@ type RawIssue<T extends $ZodIssueBase> = util.Flatten<util.MakePartial<T, "messa
|
|
|
107
108
|
readonly input?: unknown;
|
|
108
109
|
/** The schema or check that originated this issue. */
|
|
109
110
|
readonly inst?: $ZodType | $ZodCheck;
|
|
110
|
-
/**
|
|
111
|
+
/** If `true`, Zod will continue executing validation despite this issue. */
|
|
111
112
|
readonly continue?: boolean | undefined;
|
|
112
113
|
} & Record<string, any>>;
|
|
113
114
|
export interface $ZodErrorMap<T extends $ZodIssueBase = $ZodIssue> {
|
|
@@ -202,9 +203,6 @@ export declare function treeifyError<T, U>(error: $ZodError<T>, mapper?: (issue:
|
|
|
202
203
|
* ✖ Invalid input: expected number
|
|
203
204
|
* ```
|
|
204
205
|
*/
|
|
205
|
-
export declare function toDotPath(
|
|
206
|
-
|
|
207
|
-
issues: $ZodIssueBase[];
|
|
208
|
-
}
|
|
209
|
-
export declare function prettifyError(error: BaseError): string;
|
|
206
|
+
export declare function toDotPath(_path: readonly (string | number | symbol | StandardSchemaV1.PathSegment)[]): string;
|
|
207
|
+
export declare function prettifyError(error: StandardSchemaV1.FailureResult): string;
|
|
210
208
|
export {};
|
package/v4/core/errors.js
CHANGED
|
@@ -10,13 +10,7 @@ const initializer = (inst, def) => {
|
|
|
10
10
|
value: def,
|
|
11
11
|
enumerable: false,
|
|
12
12
|
});
|
|
13
|
-
|
|
14
|
-
get() {
|
|
15
|
-
return JSON.stringify(def, util.jsonStringifyReplacer, 2);
|
|
16
|
-
},
|
|
17
|
-
enumerable: true,
|
|
18
|
-
// configurable: false,
|
|
19
|
-
});
|
|
13
|
+
inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);
|
|
20
14
|
Object.defineProperty(inst, "toString", {
|
|
21
15
|
value: () => inst.message,
|
|
22
16
|
enumerable: false,
|
|
@@ -163,8 +157,9 @@ export function treeifyError(error, _mapper) {
|
|
|
163
157
|
* ✖ Invalid input: expected number
|
|
164
158
|
* ```
|
|
165
159
|
*/
|
|
166
|
-
export function toDotPath(
|
|
160
|
+
export function toDotPath(_path) {
|
|
167
161
|
const segs = [];
|
|
162
|
+
const path = _path.map((seg) => (typeof seg === "object" ? seg.key : seg));
|
|
168
163
|
for (const seg of path) {
|
|
169
164
|
if (typeof seg === "number")
|
|
170
165
|
segs.push(`[${seg}]`);
|
|
@@ -183,7 +178,7 @@ export function toDotPath(path) {
|
|
|
183
178
|
export function prettifyError(error) {
|
|
184
179
|
const lines = [];
|
|
185
180
|
// sort by path length
|
|
186
|
-
const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);
|
|
181
|
+
const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);
|
|
187
182
|
// Process each issue
|
|
188
183
|
for (const issue of issues) {
|
|
189
184
|
lines.push(`✖ ${issue.message}`);
|
package/v4/core/regexes.cjs
CHANGED
|
@@ -16,7 +16,7 @@ exports.duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\
|
|
|
16
16
|
exports.extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
|
|
17
17
|
/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */
|
|
18
18
|
exports.guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
|
|
19
|
-
/** Returns a regex for validating an RFC 4122 UUID.
|
|
19
|
+
/** Returns a regex for validating an RFC 9562/4122 UUID.
|
|
20
20
|
*
|
|
21
21
|
* @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */
|
|
22
22
|
const uuid = (version) => {
|
package/v4/core/regexes.d.cts
CHANGED
|
@@ -10,7 +10,7 @@ export declare const duration: RegExp;
|
|
|
10
10
|
export declare const extendedDuration: RegExp;
|
|
11
11
|
/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */
|
|
12
12
|
export declare const guid: RegExp;
|
|
13
|
-
/** Returns a regex for validating an RFC 4122 UUID.
|
|
13
|
+
/** Returns a regex for validating an RFC 9562/4122 UUID.
|
|
14
14
|
*
|
|
15
15
|
* @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */
|
|
16
16
|
export declare const uuid: (version?: number | undefined) => RegExp;
|
package/v4/core/regexes.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare const duration: RegExp;
|
|
|
10
10
|
export declare const extendedDuration: RegExp;
|
|
11
11
|
/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */
|
|
12
12
|
export declare const guid: RegExp;
|
|
13
|
-
/** Returns a regex for validating an RFC 4122 UUID.
|
|
13
|
+
/** Returns a regex for validating an RFC 9562/4122 UUID.
|
|
14
14
|
*
|
|
15
15
|
* @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */
|
|
16
16
|
export declare const uuid: (version?: number | undefined) => RegExp;
|
package/v4/core/regexes.js
CHANGED
|
@@ -10,7 +10,7 @@ export const duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=
|
|
|
10
10
|
export const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
|
|
11
11
|
/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */
|
|
12
12
|
export const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;
|
|
13
|
-
/** Returns a regex for validating an RFC 4122 UUID.
|
|
13
|
+
/** Returns a regex for validating an RFC 9562/4122 UUID.
|
|
14
14
|
*
|
|
15
15
|
* @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */
|
|
16
16
|
export const uuid = (version) => {
|
package/v4/core/registries.cjs
CHANGED
|
@@ -40,7 +40,8 @@ class $ZodRegistry {
|
|
|
40
40
|
if (p) {
|
|
41
41
|
const pm = { ...(this.get(p) ?? {}) };
|
|
42
42
|
delete pm.id; // do not inherit id
|
|
43
|
-
|
|
43
|
+
const f = { ...pm, ...this._map.get(schema) };
|
|
44
|
+
return Object.keys(f).length ? f : undefined;
|
|
44
45
|
}
|
|
45
46
|
return this._map.get(schema);
|
|
46
47
|
}
|
package/v4/core/registries.d.cts
CHANGED
|
@@ -9,7 +9,7 @@ export type $replace<Meta, S extends $ZodType> = Meta extends $output ? core.out
|
|
|
9
9
|
}) => $replace<R, S> : Meta extends object ? {
|
|
10
10
|
[K in keyof Meta]: $replace<Meta[K], S>;
|
|
11
11
|
} : Meta;
|
|
12
|
-
type MetadataType =
|
|
12
|
+
type MetadataType = object | undefined;
|
|
13
13
|
export declare class $ZodRegistry<Meta extends MetadataType = MetadataType, Schema extends $ZodType = $ZodType> {
|
|
14
14
|
_meta: Meta;
|
|
15
15
|
_schema: Schema;
|
package/v4/core/registries.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type $replace<Meta, S extends $ZodType> = Meta extends $output ? core.out
|
|
|
9
9
|
}) => $replace<R, S> : Meta extends object ? {
|
|
10
10
|
[K in keyof Meta]: $replace<Meta[K], S>;
|
|
11
11
|
} : Meta;
|
|
12
|
-
type MetadataType =
|
|
12
|
+
type MetadataType = object | undefined;
|
|
13
13
|
export declare class $ZodRegistry<Meta extends MetadataType = MetadataType, Schema extends $ZodType = $ZodType> {
|
|
14
14
|
_meta: Meta;
|
|
15
15
|
_schema: Schema;
|
package/v4/core/registries.js
CHANGED
|
@@ -36,7 +36,8 @@ export class $ZodRegistry {
|
|
|
36
36
|
if (p) {
|
|
37
37
|
const pm = { ...(this.get(p) ?? {}) };
|
|
38
38
|
delete pm.id; // do not inherit id
|
|
39
|
-
|
|
39
|
+
const f = { ...pm, ...this._map.get(schema) };
|
|
40
|
+
return Object.keys(f).length ? f : undefined;
|
|
40
41
|
}
|
|
41
42
|
return this._map.get(schema);
|
|
42
43
|
}
|
package/v4/core/schemas.cjs
CHANGED
|
@@ -187,9 +187,10 @@ exports.$ZodURL = core.$constructor("$ZodURL", (inst, def) => {
|
|
|
187
187
|
exports.$ZodStringFormat.init(inst, def);
|
|
188
188
|
inst._zod.check = (payload) => {
|
|
189
189
|
try {
|
|
190
|
-
|
|
191
|
-
const
|
|
192
|
-
|
|
190
|
+
// Trim whitespace from input
|
|
191
|
+
const trimmed = payload.value.trim();
|
|
192
|
+
// @ts-ignore
|
|
193
|
+
const url = new URL(trimmed);
|
|
193
194
|
if (def.hostname) {
|
|
194
195
|
def.hostname.lastIndex = 0;
|
|
195
196
|
if (!def.hostname.test(url.hostname)) {
|
|
@@ -218,12 +219,14 @@ exports.$ZodURL = core.$constructor("$ZodURL", (inst, def) => {
|
|
|
218
219
|
});
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
|
-
//
|
|
222
|
-
if (
|
|
223
|
-
|
|
222
|
+
// Set the output value based on normalize flag
|
|
223
|
+
if (def.normalize) {
|
|
224
|
+
// Use normalized URL
|
|
225
|
+
payload.value = url.href;
|
|
224
226
|
}
|
|
225
227
|
else {
|
|
226
|
-
|
|
228
|
+
// Preserve the original input (trimmed)
|
|
229
|
+
payload.value = trimmed;
|
|
227
230
|
}
|
|
228
231
|
return;
|
|
229
232
|
}
|
|
@@ -299,6 +302,7 @@ exports.$ZodIPv6 = core.$constructor("$ZodIPv6", (inst, def) => {
|
|
|
299
302
|
});
|
|
300
303
|
inst._zod.check = (payload) => {
|
|
301
304
|
try {
|
|
305
|
+
// @ts-ignore
|
|
302
306
|
new URL(`http://[${payload.value}]`);
|
|
303
307
|
// return;
|
|
304
308
|
}
|
|
@@ -330,6 +334,7 @@ exports.$ZodCIDRv6 = core.$constructor("$ZodCIDRv6", (inst, def) => {
|
|
|
330
334
|
throw new Error();
|
|
331
335
|
if (prefixNum < 0 || prefixNum > 128)
|
|
332
336
|
throw new Error();
|
|
337
|
+
// @ts-ignore
|
|
333
338
|
new URL(`http://[${address}]`);
|
|
334
339
|
}
|
|
335
340
|
catch {
|
|
@@ -350,6 +355,7 @@ function isValidBase64(data) {
|
|
|
350
355
|
if (data.length % 4 !== 0)
|
|
351
356
|
return false;
|
|
352
357
|
try {
|
|
358
|
+
// @ts-ignore
|
|
353
359
|
atob(data);
|
|
354
360
|
return true;
|
|
355
361
|
}
|
|
@@ -414,6 +420,7 @@ function isValidJWT(token, algorithm = null) {
|
|
|
414
420
|
const [header] = tokensParts;
|
|
415
421
|
if (!header)
|
|
416
422
|
return false;
|
|
423
|
+
// @ts-ignore
|
|
417
424
|
const parsedHeader = JSON.parse(atob(header));
|
|
418
425
|
if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT")
|
|
419
426
|
return false;
|
|
@@ -684,36 +691,16 @@ exports.$ZodArray = core.$constructor("$ZodArray", (inst, def) => {
|
|
|
684
691
|
return payload; //handleArrayResultsAsync(parseResults, final);
|
|
685
692
|
};
|
|
686
693
|
});
|
|
687
|
-
function
|
|
688
|
-
// if(isOptional)
|
|
694
|
+
function handlePropertyResult(result, final, key, input) {
|
|
689
695
|
if (result.issues.length) {
|
|
690
696
|
final.issues.push(...util.prefixIssues(key, result.issues));
|
|
691
697
|
}
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
function handleOptionalObjectResult(result, final, key, input) {
|
|
695
|
-
if (result.issues.length) {
|
|
696
|
-
// validation failed against value schema
|
|
697
|
-
if (input[key] === undefined) {
|
|
698
|
-
// if input was undefined, ignore the error
|
|
699
|
-
if (key in input) {
|
|
700
|
-
final.value[key] = undefined;
|
|
701
|
-
}
|
|
702
|
-
else {
|
|
703
|
-
final.value[key] = result.value;
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
else {
|
|
707
|
-
final.issues.push(...util.prefixIssues(key, result.issues));
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
else if (result.value === undefined) {
|
|
711
|
-
// validation returned `undefined`
|
|
712
|
-
if (key in input)
|
|
698
|
+
if (result.value === undefined) {
|
|
699
|
+
if (key in input) {
|
|
713
700
|
final.value[key] = undefined;
|
|
701
|
+
}
|
|
714
702
|
}
|
|
715
703
|
else {
|
|
716
|
-
// non-undefined value
|
|
717
704
|
final.value[key] = result.value;
|
|
718
705
|
}
|
|
719
706
|
}
|
|
@@ -765,42 +752,25 @@ exports.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
|
|
|
765
752
|
// A: preserve key order {
|
|
766
753
|
doc.write(`const newResult = {}`);
|
|
767
754
|
for (const key of normalized.keys) {
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
doc.write(`
|
|
755
|
+
const id = ids[key];
|
|
756
|
+
const k = util.esc(key);
|
|
757
|
+
doc.write(`const ${id} = ${parseStr(key)};`);
|
|
758
|
+
doc.write(`
|
|
773
759
|
if (${id}.issues.length) {
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
}))
|
|
784
|
-
);
|
|
760
|
+
payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
|
|
761
|
+
...iss,
|
|
762
|
+
path: iss.path ? [${k}, ...iss.path] : [${k}]
|
|
763
|
+
})));
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
if (${id}.value === undefined) {
|
|
767
|
+
if (${k} in input) {
|
|
768
|
+
newResult[${k}] = undefined;
|
|
785
769
|
}
|
|
786
|
-
} else if (${id}.value === undefined) {
|
|
787
|
-
if (${k} in input) newResult[${k}] = undefined;
|
|
788
770
|
} else {
|
|
789
771
|
newResult[${k}] = ${id}.value;
|
|
790
772
|
}
|
|
791
|
-
|
|
792
|
-
}
|
|
793
|
-
else {
|
|
794
|
-
const id = ids[key];
|
|
795
|
-
// const id = ids[key];
|
|
796
|
-
doc.write(`const ${id} = ${parseStr(key)};`);
|
|
797
|
-
doc.write(`
|
|
798
|
-
if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
|
|
799
|
-
...iss,
|
|
800
|
-
path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]
|
|
801
|
-
})));`);
|
|
802
|
-
doc.write(`newResult[${util.esc(key)}] = ${id}.value`);
|
|
803
|
-
}
|
|
773
|
+
`);
|
|
804
774
|
}
|
|
805
775
|
doc.write(`payload.value = newResult;`);
|
|
806
776
|
doc.write(`return payload;`);
|
|
@@ -838,33 +808,16 @@ exports.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
|
|
|
838
808
|
const shape = value.shape;
|
|
839
809
|
for (const key of value.keys) {
|
|
840
810
|
const el = shape[key];
|
|
841
|
-
// do not add omitted optional keys
|
|
842
|
-
// if (!(key in input)) {
|
|
843
|
-
// if (optionalKeys.has(key)) continue;
|
|
844
|
-
// payload.issues.push({
|
|
845
|
-
// code: "invalid_type",
|
|
846
|
-
// path: [key],
|
|
847
|
-
// expected: "nonoptional",
|
|
848
|
-
// note: `Missing required key: "${key}"`,
|
|
849
|
-
// input,
|
|
850
|
-
// inst,
|
|
851
|
-
// });
|
|
852
|
-
// }
|
|
853
811
|
const r = el._zod.run({ value: input[key], issues: [] }, ctx);
|
|
854
|
-
const isOptional = el._zod.optin === "optional" && el._zod.optout === "optional";
|
|
855
812
|
if (r instanceof Promise) {
|
|
856
|
-
proms.push(r.then((r) =>
|
|
857
|
-
}
|
|
858
|
-
else if (isOptional) {
|
|
859
|
-
handleOptionalObjectResult(r, payload, key, input);
|
|
813
|
+
proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));
|
|
860
814
|
}
|
|
861
815
|
else {
|
|
862
|
-
|
|
816
|
+
handlePropertyResult(r, payload, key, input);
|
|
863
817
|
}
|
|
864
818
|
}
|
|
865
819
|
}
|
|
866
820
|
if (!catchall) {
|
|
867
|
-
// return payload;
|
|
868
821
|
return proms.length ? Promise.all(proms).then(() => payload) : payload;
|
|
869
822
|
}
|
|
870
823
|
const unrecognized = [];
|
|
@@ -881,10 +834,10 @@ exports.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
|
|
|
881
834
|
}
|
|
882
835
|
const r = _catchall.run({ value: input[key], issues: [] }, ctx);
|
|
883
836
|
if (r instanceof Promise) {
|
|
884
|
-
proms.push(r.then((r) =>
|
|
837
|
+
proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));
|
|
885
838
|
}
|
|
886
839
|
else {
|
|
887
|
-
|
|
840
|
+
handlePropertyResult(r, payload, key, input);
|
|
888
841
|
}
|
|
889
842
|
}
|
|
890
843
|
if (unrecognized.length) {
|
|
@@ -909,6 +862,11 @@ function handleUnionResults(results, final, inst, ctx) {
|
|
|
909
862
|
return final;
|
|
910
863
|
}
|
|
911
864
|
}
|
|
865
|
+
const nonaborted = results.filter((r) => !util.aborted(r));
|
|
866
|
+
if (nonaborted.length > 0) {
|
|
867
|
+
final.value = nonaborted[0].value;
|
|
868
|
+
return nonaborted[0];
|
|
869
|
+
}
|
|
912
870
|
final.issues.push({
|
|
913
871
|
code: "invalid_union",
|
|
914
872
|
input: final.value,
|
|
@@ -984,7 +942,7 @@ core.$constructor("$ZodDiscriminatedUnion", (inst, def) => {
|
|
|
984
942
|
const opts = def.options;
|
|
985
943
|
const map = new Map();
|
|
986
944
|
for (const o of opts) {
|
|
987
|
-
const values = o._zod.propValues[def.discriminator];
|
|
945
|
+
const values = o._zod.propValues?.[def.discriminator];
|
|
988
946
|
if (!values || values.size === 0)
|
|
989
947
|
throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`);
|
|
990
948
|
for (const v of values) {
|
|
@@ -1374,14 +1332,15 @@ function handleSetResult(result, final) {
|
|
|
1374
1332
|
exports.$ZodEnum = core.$constructor("$ZodEnum", (inst, def) => {
|
|
1375
1333
|
exports.$ZodType.init(inst, def);
|
|
1376
1334
|
const values = util.getEnumValues(def.entries);
|
|
1377
|
-
|
|
1335
|
+
const valuesSet = new Set(values);
|
|
1336
|
+
inst._zod.values = valuesSet;
|
|
1378
1337
|
inst._zod.pattern = new RegExp(`^(${values
|
|
1379
1338
|
.filter((k) => util.propertyKeyTypes.has(typeof k))
|
|
1380
1339
|
.map((o) => (typeof o === "string" ? util.escapeRegex(o) : o.toString()))
|
|
1381
1340
|
.join("|")})$`);
|
|
1382
1341
|
inst._zod.parse = (payload, _ctx) => {
|
|
1383
1342
|
const input = payload.value;
|
|
1384
|
-
if (
|
|
1343
|
+
if (valuesSet.has(input)) {
|
|
1385
1344
|
return payload;
|
|
1386
1345
|
}
|
|
1387
1346
|
payload.issues.push({
|
|
@@ -1397,7 +1356,7 @@ exports.$ZodLiteral = core.$constructor("$ZodLiteral", (inst, def) => {
|
|
|
1397
1356
|
exports.$ZodType.init(inst, def);
|
|
1398
1357
|
inst._zod.values = new Set(def.values);
|
|
1399
1358
|
inst._zod.pattern = new RegExp(`^(${def.values
|
|
1400
|
-
.map((o) => (typeof o === "string" ? util.escapeRegex(o) : o ? o.toString() : String(o)))
|
|
1359
|
+
.map((o) => (typeof o === "string" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))
|
|
1401
1360
|
.join("|")})$`);
|
|
1402
1361
|
inst._zod.parse = (payload, _ctx) => {
|
|
1403
1362
|
const input = payload.value;
|
|
@@ -1417,6 +1376,7 @@ exports.$ZodFile = core.$constructor("$ZodFile", (inst, def) => {
|
|
|
1417
1376
|
exports.$ZodType.init(inst, def);
|
|
1418
1377
|
inst._zod.parse = (payload, _ctx) => {
|
|
1419
1378
|
const input = payload.value;
|
|
1379
|
+
// @ts-ignore
|
|
1420
1380
|
if (input instanceof File)
|
|
1421
1381
|
return payload;
|
|
1422
1382
|
payload.issues.push({
|
|
@@ -1562,7 +1522,7 @@ exports.$ZodSuccess = core.$constructor("$ZodSuccess", (inst, def) => {
|
|
|
1562
1522
|
});
|
|
1563
1523
|
exports.$ZodCatch = core.$constructor("$ZodCatch", (inst, def) => {
|
|
1564
1524
|
exports.$ZodType.init(inst, def);
|
|
1565
|
-
inst._zod
|
|
1525
|
+
util.defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
|
|
1566
1526
|
util.defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
|
|
1567
1527
|
util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
|
|
1568
1528
|
inst._zod.parse = (payload, ctx) => {
|
|
@@ -1617,6 +1577,7 @@ exports.$ZodPipe = core.$constructor("$ZodPipe", (inst, def) => {
|
|
|
1617
1577
|
util.defineLazy(inst._zod, "values", () => def.in._zod.values);
|
|
1618
1578
|
util.defineLazy(inst._zod, "optin", () => def.in._zod.optin);
|
|
1619
1579
|
util.defineLazy(inst._zod, "optout", () => def.out._zod.optout);
|
|
1580
|
+
util.defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
|
|
1620
1581
|
inst._zod.parse = (payload, ctx) => {
|
|
1621
1582
|
const left = def.in._zod.run(payload, ctx);
|
|
1622
1583
|
if (left instanceof Promise) {
|
package/v4/core/schemas.d.cts
CHANGED
|
@@ -54,6 +54,7 @@ export interface _$ZodTypeInternals {
|
|
|
54
54
|
* Todo: unions?
|
|
55
55
|
*/
|
|
56
56
|
values?: util.PrimitiveSet | undefined;
|
|
57
|
+
/** Default value bubbled up from */
|
|
57
58
|
/** @internal A set of literal discriminators used for the fast path in discriminated unions. */
|
|
58
59
|
propValues?: util.PropValues | undefined;
|
|
59
60
|
/** @internal This flag indicates that a schema validation can be represented with a regular expression. Used to determine allowable schemas in z.templateLiteral(). */
|
|
@@ -148,6 +149,7 @@ export declare const $ZodEmail: core.$constructor<$ZodEmail>;
|
|
|
148
149
|
export interface $ZodURLDef extends $ZodStringFormatDef<"url"> {
|
|
149
150
|
hostname?: RegExp | undefined;
|
|
150
151
|
protocol?: RegExp | undefined;
|
|
152
|
+
normalize?: boolean | undefined;
|
|
151
153
|
}
|
|
152
154
|
export interface $ZodURLInternals extends $ZodStringFormatInternals<"url"> {
|
|
153
155
|
def: $ZodURLDef;
|
|
@@ -762,9 +764,12 @@ export interface $ZodLiteral<T extends util.Literal = util.Literal> extends $Zod
|
|
|
762
764
|
}
|
|
763
765
|
export declare const $ZodLiteral: core.$constructor<$ZodLiteral>;
|
|
764
766
|
type _File = typeof globalThis extends {
|
|
765
|
-
File: new (...args: any[]) => any;
|
|
766
|
-
} ? InstanceType<
|
|
767
|
-
|
|
767
|
+
File: infer F extends new (...args: any[]) => any;
|
|
768
|
+
} ? InstanceType<F> : {};
|
|
769
|
+
/** Do not reference this directly. */
|
|
770
|
+
export interface File extends _File {
|
|
771
|
+
type: string;
|
|
772
|
+
size: number;
|
|
768
773
|
}
|
|
769
774
|
export interface $ZodFileDef extends $ZodTypeDef {
|
|
770
775
|
type: "file";
|
|
@@ -902,7 +907,7 @@ export interface $ZodCatchDef<T extends SomeType = $ZodType> extends $ZodTypeDef
|
|
|
902
907
|
innerType: T;
|
|
903
908
|
catchValue: (ctx: $ZodCatchCtx) => unknown;
|
|
904
909
|
}
|
|
905
|
-
export interface $ZodCatchInternals<T extends SomeType = $ZodType> extends $ZodTypeInternals<core.output<T>, core.input<T
|
|
910
|
+
export interface $ZodCatchInternals<T extends SomeType = $ZodType> extends $ZodTypeInternals<core.output<T>, core.input<T>> {
|
|
906
911
|
def: $ZodCatchDef<T>;
|
|
907
912
|
optin: T["_zod"]["optin"];
|
|
908
913
|
optout: T["_zod"]["optout"];
|
|
@@ -935,6 +940,7 @@ export interface $ZodPipeInternals<A extends SomeType = $ZodType, B extends Some
|
|
|
935
940
|
values: A["_zod"]["values"];
|
|
936
941
|
optin: A["_zod"]["optin"];
|
|
937
942
|
optout: B["_zod"]["optout"];
|
|
943
|
+
propValues: A["_zod"]["propValues"];
|
|
938
944
|
}
|
|
939
945
|
export interface $ZodPipe<A extends SomeType = $ZodType, B extends SomeType = $ZodType> extends $ZodType {
|
|
940
946
|
_zod: $ZodPipeInternals<A, B>;
|
package/v4/core/schemas.d.ts
CHANGED
|
@@ -54,6 +54,7 @@ export interface _$ZodTypeInternals {
|
|
|
54
54
|
* Todo: unions?
|
|
55
55
|
*/
|
|
56
56
|
values?: util.PrimitiveSet | undefined;
|
|
57
|
+
/** Default value bubbled up from */
|
|
57
58
|
/** @internal A set of literal discriminators used for the fast path in discriminated unions. */
|
|
58
59
|
propValues?: util.PropValues | undefined;
|
|
59
60
|
/** @internal This flag indicates that a schema validation can be represented with a regular expression. Used to determine allowable schemas in z.templateLiteral(). */
|
|
@@ -148,6 +149,7 @@ export declare const $ZodEmail: core.$constructor<$ZodEmail>;
|
|
|
148
149
|
export interface $ZodURLDef extends $ZodStringFormatDef<"url"> {
|
|
149
150
|
hostname?: RegExp | undefined;
|
|
150
151
|
protocol?: RegExp | undefined;
|
|
152
|
+
normalize?: boolean | undefined;
|
|
151
153
|
}
|
|
152
154
|
export interface $ZodURLInternals extends $ZodStringFormatInternals<"url"> {
|
|
153
155
|
def: $ZodURLDef;
|
|
@@ -762,9 +764,12 @@ export interface $ZodLiteral<T extends util.Literal = util.Literal> extends $Zod
|
|
|
762
764
|
}
|
|
763
765
|
export declare const $ZodLiteral: core.$constructor<$ZodLiteral>;
|
|
764
766
|
type _File = typeof globalThis extends {
|
|
765
|
-
File: new (...args: any[]) => any;
|
|
766
|
-
} ? InstanceType<
|
|
767
|
-
|
|
767
|
+
File: infer F extends new (...args: any[]) => any;
|
|
768
|
+
} ? InstanceType<F> : {};
|
|
769
|
+
/** Do not reference this directly. */
|
|
770
|
+
export interface File extends _File {
|
|
771
|
+
type: string;
|
|
772
|
+
size: number;
|
|
768
773
|
}
|
|
769
774
|
export interface $ZodFileDef extends $ZodTypeDef {
|
|
770
775
|
type: "file";
|
|
@@ -902,7 +907,7 @@ export interface $ZodCatchDef<T extends SomeType = $ZodType> extends $ZodTypeDef
|
|
|
902
907
|
innerType: T;
|
|
903
908
|
catchValue: (ctx: $ZodCatchCtx) => unknown;
|
|
904
909
|
}
|
|
905
|
-
export interface $ZodCatchInternals<T extends SomeType = $ZodType> extends $ZodTypeInternals<core.output<T>, core.input<T
|
|
910
|
+
export interface $ZodCatchInternals<T extends SomeType = $ZodType> extends $ZodTypeInternals<core.output<T>, core.input<T>> {
|
|
906
911
|
def: $ZodCatchDef<T>;
|
|
907
912
|
optin: T["_zod"]["optin"];
|
|
908
913
|
optout: T["_zod"]["optout"];
|
|
@@ -935,6 +940,7 @@ export interface $ZodPipeInternals<A extends SomeType = $ZodType, B extends Some
|
|
|
935
940
|
values: A["_zod"]["values"];
|
|
936
941
|
optin: A["_zod"]["optin"];
|
|
937
942
|
optout: B["_zod"]["optout"];
|
|
943
|
+
propValues: A["_zod"]["propValues"];
|
|
938
944
|
}
|
|
939
945
|
export interface $ZodPipe<A extends SomeType = $ZodType, B extends SomeType = $ZodType> extends $ZodType {
|
|
940
946
|
_zod: $ZodPipeInternals<A, B>;
|