zod 4.5.4 → 4.6.1
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/compile.cjs +19 -0
- package/index.cjs +19 -0
- package/locales/index.cjs +19 -0
- package/mini/index.cjs +19 -0
- package/package.json +8 -7
- package/src/v3/helpers/errorUtil.ts +1 -1
- package/src/v4/classic/checks.ts +0 -1
- package/src/v4/classic/external.ts +2 -0
- package/src/v4/classic/from-json-schema.ts +248 -25
- package/src/v4/classic/schemas.ts +255 -164
- package/src/v4/classic/tests/assignability.test.ts +59 -9
- package/src/v4/classic/tests/bigint.test.ts +6 -0
- package/src/v4/classic/tests/continuability.test.ts +2 -2
- package/src/v4/classic/tests/cyclic-data.test.ts +274 -0
- package/src/v4/classic/tests/discriminated-unions.test.ts +112 -6
- package/src/v4/classic/tests/enum.test.ts +9 -0
- package/src/v4/classic/tests/error.test.ts +130 -1
- package/src/v4/classic/tests/firstparty.test.ts +4 -0
- package/src/v4/classic/tests/from-json-schema.test.ts +157 -0
- package/src/v4/classic/tests/iban.test.ts +81 -0
- package/src/v4/classic/tests/instance-footprint.test.ts +18 -2
- package/src/v4/classic/tests/instanceof.test.ts +27 -7
- package/src/v4/classic/tests/issue-schema.test.ts +88 -56
- package/src/v4/classic/tests/object.test.ts +56 -0
- package/src/v4/classic/tests/optin-ladder.test.ts +3 -2
- package/src/v4/classic/tests/properties.test.ts +225 -0
- package/src/v4/classic/tests/recursive-types.test.ts +46 -1
- package/src/v4/classic/tests/standard-schema.test.ts +19 -0
- package/src/v4/classic/tests/string.test.ts +25 -0
- package/src/v4/classic/tests/template-literal.test.ts +33 -1
- package/src/v4/classic/tests/to-json-schema.test.ts +147 -3
- package/src/v4/classic/tests/validate.test.ts +569 -0
- package/src/v4/core/api.ts +30 -6
- package/src/v4/core/checks.ts +1 -101
- package/src/v4/core/compile.ts +194 -82
- package/src/v4/core/doc.ts +6 -2
- package/src/v4/core/errors.ts +3 -6
- package/src/v4/core/json-schema-generator.ts +2 -2
- package/src/v4/core/json-schema-processors.ts +226 -68
- package/src/v4/core/memoizer.ts +78 -28
- package/src/v4/core/parse.ts +37 -16
- package/src/v4/core/regexes.ts +10 -4
- package/src/v4/core/schemas.ts +350 -113
- package/src/v4/core/tests/cached.test.ts +54 -0
- package/src/v4/core/tests/compile-generative.test.ts +445 -0
- package/src/v4/core/tests/compile.test.ts +222 -2
- package/src/v4/core/tests/email-regex.test.ts +140 -0
- package/src/v4/core/tests/locales/tg.test.ts +85 -0
- package/src/v4/core/tests/polyfill-collision.test.ts +46 -0
- package/src/v4/core/to-json-schema.ts +10 -8
- package/src/v4/core/util.ts +222 -147
- package/src/v4/core/versions.ts +2 -2
- package/src/v4/core/visit.ts +11 -0
- package/src/v4/locales/ar.ts +1 -0
- package/src/v4/locales/az.ts +1 -0
- package/src/v4/locales/be.ts +1 -0
- package/src/v4/locales/bg.ts +1 -0
- package/src/v4/locales/bn.ts +1 -0
- package/src/v4/locales/ca.ts +1 -0
- package/src/v4/locales/ckb.ts +1 -0
- package/src/v4/locales/cs.ts +1 -0
- package/src/v4/locales/da.ts +1 -0
- package/src/v4/locales/de.ts +1 -0
- package/src/v4/locales/el.ts +1 -0
- package/src/v4/locales/en.ts +1 -0
- package/src/v4/locales/eo.ts +1 -0
- package/src/v4/locales/es.ts +1 -0
- package/src/v4/locales/fa.ts +1 -0
- package/src/v4/locales/fi.ts +1 -0
- package/src/v4/locales/fr-CA.ts +1 -0
- package/src/v4/locales/fr.ts +1 -0
- package/src/v4/locales/gu.ts +1 -0
- package/src/v4/locales/he.ts +1 -0
- package/src/v4/locales/hi.ts +1 -0
- package/src/v4/locales/hr.ts +1 -0
- package/src/v4/locales/hu.ts +1 -0
- package/src/v4/locales/hy.ts +1 -0
- package/src/v4/locales/id.ts +1 -0
- package/src/v4/locales/index.ts +1 -0
- package/src/v4/locales/is.ts +1 -0
- package/src/v4/locales/it.ts +1 -0
- package/src/v4/locales/ja.ts +1 -0
- package/src/v4/locales/ka.ts +1 -0
- package/src/v4/locales/km.ts +1 -0
- package/src/v4/locales/kn.ts +1 -0
- package/src/v4/locales/ko.ts +1 -0
- package/src/v4/locales/lt.ts +1 -0
- package/src/v4/locales/mk.ts +1 -0
- package/src/v4/locales/ms.ts +1 -0
- package/src/v4/locales/ne.ts +1 -0
- package/src/v4/locales/nl.ts +1 -0
- package/src/v4/locales/nn.ts +1 -0
- package/src/v4/locales/no.ts +1 -0
- package/src/v4/locales/ota.ts +1 -0
- package/src/v4/locales/pl.ts +1 -0
- package/src/v4/locales/ps.ts +1 -0
- package/src/v4/locales/pt-BR.ts +1 -0
- package/src/v4/locales/pt.ts +1 -0
- package/src/v4/locales/ro.ts +1 -0
- package/src/v4/locales/ru.ts +1 -0
- package/src/v4/locales/sk.ts +1 -0
- package/src/v4/locales/sl.ts +1 -0
- package/src/v4/locales/sv.ts +1 -0
- package/src/v4/locales/ta.ts +1 -0
- package/src/v4/locales/tg.ts +134 -0
- package/src/v4/locales/th.ts +1 -0
- package/src/v4/locales/tk.ts +1 -0
- package/src/v4/locales/tr.ts +1 -0
- package/src/v4/locales/uk.ts +1 -0
- package/src/v4/locales/ur.ts +1 -0
- package/src/v4/locales/uz.ts +1 -0
- package/src/v4/locales/vi.ts +1 -0
- package/src/v4/locales/yo.ts +1 -0
- package/src/v4/locales/zh-CN.ts +1 -0
- package/src/v4/locales/zh-TW.ts +1 -0
- package/src/v4/mini/checks.ts +0 -1
- package/src/v4/mini/external.ts +2 -0
- package/src/v4/mini/schemas.ts +38 -2
- package/src/v4/mini/tests/checks.test.ts +1 -1
- package/src/v4/mini/tests/computed.test.ts +11 -17
- package/src/v4/mini/tests/index.test.ts +8 -0
- package/src/v4/mini/tests/recursive-types.test.ts +16 -0
- package/src/v4/mini/tests/string.test.ts +16 -0
- package/v3/ZodError.cjs +19 -0
- package/v3/errors.cjs +19 -0
- package/v3/external.cjs +19 -0
- package/v3/helpers/enumUtil.cjs +19 -0
- package/v3/helpers/errorUtil.cjs +20 -1
- package/v3/helpers/errorUtil.js +1 -1
- package/v3/helpers/parseUtil.cjs +19 -0
- package/v3/helpers/partialUtil.cjs +19 -0
- package/v3/helpers/typeAliases.cjs +19 -0
- package/v3/helpers/util.cjs +19 -0
- package/v3/index.cjs +19 -0
- package/v3/standard-schema.cjs +19 -0
- package/v3/types.cjs +19 -0
- package/v4/classic/checks.cjs +20 -2
- package/v4/classic/checks.d.cts +1 -1
- package/v4/classic/checks.d.ts +1 -1
- package/v4/classic/checks.js +1 -1
- package/v4/classic/coerce.cjs +19 -0
- package/v4/classic/compat.cjs +19 -0
- package/v4/classic/deep-partial.cjs +19 -0
- package/v4/classic/errors.cjs +19 -0
- package/v4/classic/external.cjs +22 -1
- package/v4/classic/external.d.cts +1 -1
- package/v4/classic/external.d.ts +1 -1
- package/v4/classic/external.js +1 -1
- package/v4/classic/from-json-schema.cjs +264 -24
- package/v4/classic/from-json-schema.js +245 -24
- package/v4/classic/in-out.cjs +19 -0
- package/v4/classic/index.cjs +19 -0
- package/v4/classic/iso.cjs +19 -0
- package/v4/classic/parse.cjs +19 -0
- package/v4/classic/schemas.cjs +100 -31
- package/v4/classic/schemas.d.cts +17 -1
- package/v4/classic/schemas.d.ts +17 -1
- package/v4/classic/schemas.js +77 -29
- package/v4/core/api.cjs +37 -2
- package/v4/core/api.d.cts +6 -4
- package/v4/core/api.d.ts +6 -4
- package/v4/core/api.js +17 -2
- package/v4/core/checks.cjs +19 -96
- package/v4/core/checks.d.cts +1 -1
- package/v4/core/checks.d.ts +1 -1
- package/v4/core/checks.js +0 -96
- package/v4/core/compile.cjs +165 -66
- package/v4/core/compile.d.cts +18 -4
- package/v4/core/compile.d.ts +18 -4
- package/v4/core/compile.js +146 -67
- package/v4/core/core.cjs +19 -0
- package/v4/core/doc.cjs +26 -2
- package/v4/core/doc.js +7 -2
- package/v4/core/errors.cjs +21 -5
- package/v4/core/errors.js +2 -5
- package/v4/core/index.cjs +19 -0
- package/v4/core/json-schema-generator.cjs +20 -1
- package/v4/core/json-schema-generator.js +2 -2
- package/v4/core/json-schema-processors.cjs +215 -63
- package/v4/core/json-schema-processors.d.cts +17 -0
- package/v4/core/json-schema-processors.d.ts +17 -0
- package/v4/core/json-schema-processors.js +195 -64
- package/v4/core/json-schema.cjs +19 -0
- package/v4/core/memoizer.cjs +114 -23
- package/v4/core/memoizer.js +72 -23
- package/v4/core/parse.cjs +56 -16
- package/v4/core/parse.js +37 -16
- package/v4/core/regexes.cjs +29 -6
- package/v4/core/regexes.d.cts +2 -0
- package/v4/core/regexes.d.ts +2 -0
- package/v4/core/regexes.js +8 -4
- package/v4/core/registries.cjs +19 -0
- package/v4/core/schemas.cjs +322 -95
- package/v4/core/schemas.d.cts +42 -7
- package/v4/core/schemas.d.ts +42 -7
- package/v4/core/schemas.js +301 -94
- package/v4/core/standard-schema.cjs +19 -0
- package/v4/core/to-json-schema.cjs +29 -7
- package/v4/core/to-json-schema.d.cts +7 -3
- package/v4/core/to-json-schema.d.ts +7 -3
- package/v4/core/to-json-schema.js +8 -7
- package/v4/core/util.cjs +181 -143
- package/v4/core/util.d.cts +25 -4
- package/v4/core/util.d.ts +25 -4
- package/v4/core/util.js +160 -143
- package/v4/core/versions.cjs +21 -2
- package/v4/core/versions.d.cts +1 -1
- package/v4/core/versions.d.ts +1 -1
- package/v4/core/versions.js +2 -2
- package/v4/core/visit.cjs +31 -0
- package/v4/core/visit.js +12 -0
- package/v4/index.cjs +19 -0
- package/v4/locales/ar.cjs +1 -0
- package/v4/locales/ar.js +1 -0
- package/v4/locales/az.cjs +1 -0
- package/v4/locales/az.js +1 -0
- package/v4/locales/be.cjs +1 -0
- package/v4/locales/be.js +1 -0
- package/v4/locales/bg.cjs +1 -0
- package/v4/locales/bg.js +1 -0
- package/v4/locales/bn.cjs +1 -0
- package/v4/locales/bn.js +1 -0
- package/v4/locales/ca.cjs +1 -0
- package/v4/locales/ca.js +1 -0
- package/v4/locales/ckb.cjs +1 -0
- package/v4/locales/ckb.js +1 -0
- package/v4/locales/cs.cjs +1 -0
- package/v4/locales/cs.js +1 -0
- package/v4/locales/da.cjs +1 -0
- package/v4/locales/da.js +1 -0
- package/v4/locales/de.cjs +1 -0
- package/v4/locales/de.js +1 -0
- package/v4/locales/el.cjs +1 -0
- package/v4/locales/el.js +1 -0
- package/v4/locales/en.cjs +1 -0
- package/v4/locales/en.js +1 -0
- package/v4/locales/eo.cjs +1 -0
- package/v4/locales/eo.js +1 -0
- package/v4/locales/es.cjs +1 -0
- package/v4/locales/es.js +1 -0
- package/v4/locales/fa.cjs +1 -0
- package/v4/locales/fa.js +1 -0
- package/v4/locales/fi.cjs +1 -0
- package/v4/locales/fi.js +1 -0
- package/v4/locales/fr-CA.cjs +1 -0
- package/v4/locales/fr-CA.js +1 -0
- package/v4/locales/fr.cjs +1 -0
- package/v4/locales/fr.js +1 -0
- package/v4/locales/gu.cjs +1 -0
- package/v4/locales/gu.js +1 -0
- package/v4/locales/he.cjs +1 -0
- package/v4/locales/he.js +1 -0
- package/v4/locales/hi.cjs +1 -0
- package/v4/locales/hi.js +1 -0
- package/v4/locales/hr.cjs +1 -0
- package/v4/locales/hr.js +1 -0
- package/v4/locales/hu.cjs +1 -0
- package/v4/locales/hu.js +1 -0
- package/v4/locales/hy.cjs +1 -0
- package/v4/locales/hy.js +1 -0
- package/v4/locales/id.cjs +1 -0
- package/v4/locales/id.js +1 -0
- package/v4/locales/index.cjs +22 -1
- package/v4/locales/index.d.cts +1 -0
- package/v4/locales/index.d.ts +1 -0
- package/v4/locales/index.js +1 -0
- package/v4/locales/is.cjs +1 -0
- package/v4/locales/is.js +1 -0
- package/v4/locales/it.cjs +1 -0
- package/v4/locales/it.js +1 -0
- package/v4/locales/ja.cjs +1 -0
- package/v4/locales/ja.js +1 -0
- package/v4/locales/ka.cjs +1 -0
- package/v4/locales/ka.js +1 -0
- package/v4/locales/km.cjs +1 -0
- package/v4/locales/km.js +1 -0
- package/v4/locales/kn.cjs +1 -0
- package/v4/locales/kn.js +1 -0
- package/v4/locales/ko.cjs +1 -0
- package/v4/locales/ko.js +1 -0
- package/v4/locales/lt.cjs +1 -0
- package/v4/locales/lt.js +1 -0
- package/v4/locales/mk.cjs +1 -0
- package/v4/locales/mk.js +1 -0
- package/v4/locales/ms.cjs +1 -0
- package/v4/locales/ms.js +1 -0
- package/v4/locales/ne.cjs +1 -0
- package/v4/locales/ne.js +1 -0
- package/v4/locales/nl.cjs +1 -0
- package/v4/locales/nl.js +1 -0
- package/v4/locales/nn.cjs +1 -0
- package/v4/locales/nn.js +1 -0
- package/v4/locales/no.cjs +1 -0
- package/v4/locales/no.js +1 -0
- package/v4/locales/ota.cjs +1 -0
- package/v4/locales/ota.js +1 -0
- package/v4/locales/pl.cjs +1 -0
- package/v4/locales/pl.js +1 -0
- package/v4/locales/ps.cjs +1 -0
- package/v4/locales/ps.js +1 -0
- package/v4/locales/pt-BR.cjs +1 -0
- package/v4/locales/pt-BR.js +1 -0
- package/v4/locales/pt.cjs +1 -0
- package/v4/locales/pt.js +1 -0
- package/v4/locales/ro.cjs +1 -0
- package/v4/locales/ro.js +1 -0
- package/v4/locales/ru.cjs +1 -0
- package/v4/locales/ru.js +1 -0
- package/v4/locales/sk.cjs +1 -0
- package/v4/locales/sk.js +1 -0
- package/v4/locales/sl.cjs +1 -0
- package/v4/locales/sl.js +1 -0
- package/v4/locales/sv.cjs +1 -0
- package/v4/locales/sv.js +1 -0
- package/v4/locales/ta.cjs +1 -0
- package/v4/locales/ta.js +1 -0
- package/v4/locales/tg.cjs +143 -0
- package/v4/locales/tg.d.cts +5 -0
- package/v4/locales/tg.d.ts +4 -0
- package/v4/locales/tg.js +116 -0
- package/v4/locales/th.cjs +1 -0
- package/v4/locales/th.js +1 -0
- package/v4/locales/tk.cjs +1 -0
- package/v4/locales/tk.js +1 -0
- package/v4/locales/tr.cjs +1 -0
- package/v4/locales/tr.js +1 -0
- package/v4/locales/uk.cjs +1 -0
- package/v4/locales/uk.js +1 -0
- package/v4/locales/ur.cjs +1 -0
- package/v4/locales/ur.js +1 -0
- package/v4/locales/uz.cjs +1 -0
- package/v4/locales/uz.js +1 -0
- package/v4/locales/vi.cjs +1 -0
- package/v4/locales/vi.js +1 -0
- package/v4/locales/yo.cjs +1 -0
- package/v4/locales/yo.js +1 -0
- package/v4/locales/zh-CN.cjs +1 -0
- package/v4/locales/zh-CN.js +1 -0
- package/v4/locales/zh-TW.cjs +1 -0
- package/v4/locales/zh-TW.js +1 -0
- package/v4/mini/checks.cjs +20 -2
- package/v4/mini/checks.d.cts +1 -1
- package/v4/mini/checks.d.ts +1 -1
- package/v4/mini/checks.js +1 -1
- package/v4/mini/coerce.cjs +19 -0
- package/v4/mini/deep-partial.cjs +19 -0
- package/v4/mini/external.cjs +22 -1
- package/v4/mini/external.d.cts +1 -1
- package/v4/mini/external.d.ts +1 -1
- package/v4/mini/external.js +1 -1
- package/v4/mini/in-out.cjs +19 -0
- package/v4/mini/index.cjs +19 -0
- package/v4/mini/iso.cjs +19 -0
- package/v4/mini/parse.cjs +19 -0
- package/v4/mini/schemas.cjs +42 -4
- package/v4/mini/schemas.d.cts +8 -0
- package/v4/mini/schemas.d.ts +8 -0
- package/v4/mini/schemas.js +19 -2
- package/v4-mini/index.cjs +19 -0
|
@@ -78,6 +78,8 @@ export interface ZodType<
|
|
|
78
78
|
data: unknown,
|
|
79
79
|
params?: core.ParseContext<core.$ZodIssue>
|
|
80
80
|
) => Promise<parse.ZodSafeParseResult<core.output<this>>>;
|
|
81
|
+
validate(data: unknown, params?: core.ParseContext<core.$ZodIssue>): data is core.input<this>;
|
|
82
|
+
validateAsync(data: unknown, params?: core.ParseContext<core.$ZodIssue>): Promise<boolean>;
|
|
81
83
|
|
|
82
84
|
// encoding/decoding
|
|
83
85
|
encode(data: core.output<this>, params?: core.ParseContext<core.$ZodIssue>): core.input<this>;
|
|
@@ -310,6 +312,12 @@ export const ZodType: core.$constructor<ZodType> = /*@__PURE__*/ core.$construct
|
|
|
310
312
|
set spa(value: ZodType["safeParseAsync"]) {
|
|
311
313
|
util.own(this, "spa", value);
|
|
312
314
|
},
|
|
315
|
+
validate(data, params) {
|
|
316
|
+
return parse.validate(this, data, params);
|
|
317
|
+
},
|
|
318
|
+
validateAsync(data, params) {
|
|
319
|
+
return parse.validateAsync(this, data, params);
|
|
320
|
+
},
|
|
313
321
|
encode: function _encode(data, params) {
|
|
314
322
|
return parse.encode(this, data, params, { callee: _encode });
|
|
315
323
|
},
|
|
@@ -383,59 +391,61 @@ export const _ZodString: core.$constructor<_ZodString> = /*@__PURE__*/ core.$con
|
|
|
383
391
|
ZodType.init(inst, def);
|
|
384
392
|
|
|
385
393
|
inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);
|
|
386
|
-
|
|
387
|
-
const bag = inst._zod.bag;
|
|
388
|
-
inst.format = bag.format ?? null;
|
|
389
|
-
inst.minLength = bag.minimum ?? null;
|
|
390
|
-
inst.maxLength = bag.maximum ?? null;
|
|
391
394
|
},
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
return this.check((checks.includes as any)(...args));
|
|
398
|
-
},
|
|
399
|
-
startsWith(...args) {
|
|
400
|
-
return this.check((checks.startsWith as any)(...args));
|
|
401
|
-
},
|
|
402
|
-
endsWith(...args) {
|
|
403
|
-
return this.check((checks.endsWith as any)(...args));
|
|
404
|
-
},
|
|
405
|
-
min(...args) {
|
|
406
|
-
return this.check((checks.minLength as any)(...args));
|
|
407
|
-
},
|
|
408
|
-
max(...args) {
|
|
409
|
-
return this.check((checks.maxLength as any)(...args));
|
|
410
|
-
},
|
|
411
|
-
length(...args) {
|
|
412
|
-
return this.check((checks.length as any)(...args));
|
|
413
|
-
},
|
|
414
|
-
nonempty(...args) {
|
|
415
|
-
return this.check((checks.minLength as any)(1, ...args));
|
|
416
|
-
},
|
|
417
|
-
lowercase(params) {
|
|
418
|
-
return this.check(checks.lowercase(params));
|
|
419
|
-
},
|
|
420
|
-
uppercase(params) {
|
|
421
|
-
return this.check(checks.uppercase(params));
|
|
422
|
-
},
|
|
423
|
-
trim() {
|
|
424
|
-
return this.check(checks.trim());
|
|
425
|
-
},
|
|
426
|
-
normalize(...args) {
|
|
427
|
-
return this.check(checks.normalize(...args));
|
|
428
|
-
},
|
|
429
|
-
toLowerCase() {
|
|
430
|
-
return this.check(checks.toLowerCase());
|
|
431
|
-
},
|
|
432
|
-
toUpperCase() {
|
|
433
|
-
return this.check(checks.toUpperCase());
|
|
434
|
-
},
|
|
435
|
-
slugify() {
|
|
436
|
-
return this.check(checks.slugify());
|
|
395
|
+
/*@__PURE__*/ util.derived<_ZodString>(
|
|
396
|
+
{
|
|
397
|
+
format: (inst) => processors.aggregateChecks(inst).format ?? null,
|
|
398
|
+
minLength: (inst) => processors.aggregateChecks<number>(inst).minimum ?? null,
|
|
399
|
+
maxLength: (inst) => processors.aggregateChecks<number>(inst).maximum ?? null,
|
|
437
400
|
},
|
|
438
|
-
|
|
401
|
+
{
|
|
402
|
+
regex(...args) {
|
|
403
|
+
return this.check((checks.regex as any)(...args));
|
|
404
|
+
},
|
|
405
|
+
includes(...args) {
|
|
406
|
+
return this.check((checks.includes as any)(...args));
|
|
407
|
+
},
|
|
408
|
+
startsWith(...args) {
|
|
409
|
+
return this.check((checks.startsWith as any)(...args));
|
|
410
|
+
},
|
|
411
|
+
endsWith(...args) {
|
|
412
|
+
return this.check((checks.endsWith as any)(...args));
|
|
413
|
+
},
|
|
414
|
+
min(...args) {
|
|
415
|
+
return this.check((checks.minLength as any)(...args));
|
|
416
|
+
},
|
|
417
|
+
max(...args) {
|
|
418
|
+
return this.check((checks.maxLength as any)(...args));
|
|
419
|
+
},
|
|
420
|
+
length(...args) {
|
|
421
|
+
return this.check((checks.length as any)(...args));
|
|
422
|
+
},
|
|
423
|
+
nonempty(...args) {
|
|
424
|
+
return this.check((checks.minLength as any)(1, ...args));
|
|
425
|
+
},
|
|
426
|
+
lowercase(params) {
|
|
427
|
+
return this.check(checks.lowercase(params));
|
|
428
|
+
},
|
|
429
|
+
uppercase(params) {
|
|
430
|
+
return this.check(checks.uppercase(params));
|
|
431
|
+
},
|
|
432
|
+
trim() {
|
|
433
|
+
return this.check(checks.trim());
|
|
434
|
+
},
|
|
435
|
+
normalize(...args) {
|
|
436
|
+
return this.check(checks.normalize(...args));
|
|
437
|
+
},
|
|
438
|
+
toLowerCase() {
|
|
439
|
+
return this.check(checks.toLowerCase());
|
|
440
|
+
},
|
|
441
|
+
toUpperCase() {
|
|
442
|
+
return this.check(checks.toUpperCase());
|
|
443
|
+
},
|
|
444
|
+
slugify() {
|
|
445
|
+
return this.check(checks.slugify());
|
|
446
|
+
},
|
|
447
|
+
}
|
|
448
|
+
)
|
|
439
449
|
);
|
|
440
450
|
|
|
441
451
|
export interface ZodString extends _ZodString<core.$ZodStringInternals<string>> {
|
|
@@ -1020,6 +1030,19 @@ export function creditCard(params?: string | core.$ZodCreditCardParams): ZodCred
|
|
|
1020
1030
|
return core._creditCard(ZodCreditCard, params);
|
|
1021
1031
|
}
|
|
1022
1032
|
|
|
1033
|
+
// ZodIBAN
|
|
1034
|
+
export interface ZodIBAN extends ZodStringFormat<"iban"> {
|
|
1035
|
+
_zod: core.$ZodIBANInternals;
|
|
1036
|
+
}
|
|
1037
|
+
export const ZodIBAN: core.$constructor<ZodIBAN> = /*@__PURE__*/ core.$constructor("ZodIBAN", (inst, def) => {
|
|
1038
|
+
core.$ZodIBAN.init(inst, def);
|
|
1039
|
+
ZodStringFormat.init(inst, def);
|
|
1040
|
+
});
|
|
1041
|
+
|
|
1042
|
+
export function iban(params?: string | core.$ZodIBANParams): ZodIBAN {
|
|
1043
|
+
return core._iban(ZodIBAN, params);
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1023
1046
|
// ZodJWT
|
|
1024
1047
|
export interface ZodJWT extends ZodStringFormat<"jwt"> {
|
|
1025
1048
|
_zod: core.$ZodJWTInternals;
|
|
@@ -1123,63 +1146,72 @@ export const ZodNumber: core.$constructor<ZodNumber> = /*@__PURE__*/ core.$const
|
|
|
1123
1146
|
ZodType.init(inst, def);
|
|
1124
1147
|
|
|
1125
1148
|
inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);
|
|
1126
|
-
|
|
1127
|
-
const bag = inst._zod.bag;
|
|
1128
|
-
inst.minValue =
|
|
1129
|
-
Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;
|
|
1130
|
-
inst.maxValue =
|
|
1131
|
-
Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;
|
|
1132
|
-
inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5);
|
|
1133
1149
|
inst.isFinite = true;
|
|
1134
|
-
inst.format = bag.format ?? null;
|
|
1135
1150
|
},
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
},
|
|
1152
|
-
max(value, params) {
|
|
1153
|
-
return this.check(checks.lte(value, params));
|
|
1154
|
-
},
|
|
1155
|
-
int(params) {
|
|
1156
|
-
return this.check(int(params));
|
|
1157
|
-
},
|
|
1158
|
-
safe(params) {
|
|
1159
|
-
return this.check(int(params));
|
|
1160
|
-
},
|
|
1161
|
-
positive(params) {
|
|
1162
|
-
return this.check(checks.gt(0, params));
|
|
1163
|
-
},
|
|
1164
|
-
nonnegative(params) {
|
|
1165
|
-
return this.check(checks.gte(0, params));
|
|
1166
|
-
},
|
|
1167
|
-
negative(params) {
|
|
1168
|
-
return this.check(checks.lt(0, params));
|
|
1169
|
-
},
|
|
1170
|
-
nonpositive(params) {
|
|
1171
|
-
return this.check(checks.lte(0, params));
|
|
1172
|
-
},
|
|
1173
|
-
multipleOf(value, params) {
|
|
1174
|
-
return this.check(checks.multipleOf(value, params));
|
|
1175
|
-
},
|
|
1176
|
-
step(value, params) {
|
|
1177
|
-
return this.check(checks.multipleOf(value, params));
|
|
1178
|
-
},
|
|
1179
|
-
finite() {
|
|
1180
|
-
return this;
|
|
1151
|
+
/*@__PURE__*/ util.derived<ZodNumber>(
|
|
1152
|
+
{
|
|
1153
|
+
minValue: (inst) => {
|
|
1154
|
+
const { minimum, exclusiveMinimum } = processors.aggregateChecks<number>(inst);
|
|
1155
|
+
return Math.max(minimum ?? Number.NEGATIVE_INFINITY, exclusiveMinimum ?? Number.NEGATIVE_INFINITY);
|
|
1156
|
+
},
|
|
1157
|
+
maxValue: (inst) => {
|
|
1158
|
+
const { maximum, exclusiveMaximum } = processors.aggregateChecks<number>(inst);
|
|
1159
|
+
return Math.min(maximum ?? Number.POSITIVE_INFINITY, exclusiveMaximum ?? Number.POSITIVE_INFINITY);
|
|
1160
|
+
},
|
|
1161
|
+
isInt: (inst) => {
|
|
1162
|
+
const { isInt, multipleOf } = processors.aggregateChecks(inst);
|
|
1163
|
+
return !!isInt || !!multipleOf?.some(Number.isSafeInteger);
|
|
1164
|
+
},
|
|
1165
|
+
format: (inst) => processors.aggregateChecks(inst).format ?? null,
|
|
1181
1166
|
},
|
|
1182
|
-
|
|
1167
|
+
{
|
|
1168
|
+
gt(value, params) {
|
|
1169
|
+
return this.check(checks.gt(value, params));
|
|
1170
|
+
},
|
|
1171
|
+
gte(value, params) {
|
|
1172
|
+
return this.check(checks.gte(value, params));
|
|
1173
|
+
},
|
|
1174
|
+
min(value, params) {
|
|
1175
|
+
return this.check(checks.gte(value, params));
|
|
1176
|
+
},
|
|
1177
|
+
lt(value, params) {
|
|
1178
|
+
return this.check(checks.lt(value, params));
|
|
1179
|
+
},
|
|
1180
|
+
lte(value, params) {
|
|
1181
|
+
return this.check(checks.lte(value, params));
|
|
1182
|
+
},
|
|
1183
|
+
max(value, params) {
|
|
1184
|
+
return this.check(checks.lte(value, params));
|
|
1185
|
+
},
|
|
1186
|
+
int(params) {
|
|
1187
|
+
return this.check(int(params));
|
|
1188
|
+
},
|
|
1189
|
+
safe(params) {
|
|
1190
|
+
return this.check(int(params));
|
|
1191
|
+
},
|
|
1192
|
+
positive(params) {
|
|
1193
|
+
return this.check(checks.gt(0, params));
|
|
1194
|
+
},
|
|
1195
|
+
nonnegative(params) {
|
|
1196
|
+
return this.check(checks.gte(0, params));
|
|
1197
|
+
},
|
|
1198
|
+
negative(params) {
|
|
1199
|
+
return this.check(checks.lt(0, params));
|
|
1200
|
+
},
|
|
1201
|
+
nonpositive(params) {
|
|
1202
|
+
return this.check(checks.lte(0, params));
|
|
1203
|
+
},
|
|
1204
|
+
multipleOf(value, params) {
|
|
1205
|
+
return this.check(checks.multipleOf(value, params));
|
|
1206
|
+
},
|
|
1207
|
+
step(value, params) {
|
|
1208
|
+
return this.check(checks.multipleOf(value, params));
|
|
1209
|
+
},
|
|
1210
|
+
finite() {
|
|
1211
|
+
return this;
|
|
1212
|
+
},
|
|
1213
|
+
}
|
|
1214
|
+
)
|
|
1183
1215
|
);
|
|
1184
1216
|
|
|
1185
1217
|
export function number(params?: string | core.$ZodNumberParams): ZodNumber {
|
|
@@ -1269,47 +1301,49 @@ export const ZodBigInt: core.$constructor<ZodBigInt> = /*@__PURE__*/ core.$const
|
|
|
1269
1301
|
core.$ZodBigInt.init(inst, def);
|
|
1270
1302
|
ZodType.init(inst, def);
|
|
1271
1303
|
inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);
|
|
1272
|
-
|
|
1273
|
-
const bag = inst._zod.bag;
|
|
1274
|
-
inst.minValue = bag.minimum ?? null;
|
|
1275
|
-
inst.maxValue = bag.maximum ?? null;
|
|
1276
|
-
inst.format = bag.format ?? null;
|
|
1277
1304
|
},
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
return this.check(checks.gte(value, params));
|
|
1284
|
-
},
|
|
1285
|
-
gt(value, params) {
|
|
1286
|
-
return this.check(checks.gt(value, params));
|
|
1287
|
-
},
|
|
1288
|
-
lt(value, params) {
|
|
1289
|
-
return this.check(checks.lt(value, params));
|
|
1290
|
-
},
|
|
1291
|
-
lte(value, params) {
|
|
1292
|
-
return this.check(checks.lte(value, params));
|
|
1293
|
-
},
|
|
1294
|
-
max(value, params) {
|
|
1295
|
-
return this.check(checks.lte(value, params));
|
|
1296
|
-
},
|
|
1297
|
-
positive(params) {
|
|
1298
|
-
return this.check(checks.gt(BigInt(0), params));
|
|
1299
|
-
},
|
|
1300
|
-
negative(params) {
|
|
1301
|
-
return this.check(checks.lt(BigInt(0), params));
|
|
1302
|
-
},
|
|
1303
|
-
nonpositive(params) {
|
|
1304
|
-
return this.check(checks.lte(BigInt(0), params));
|
|
1305
|
-
},
|
|
1306
|
-
nonnegative(params) {
|
|
1307
|
-
return this.check(checks.gte(BigInt(0), params));
|
|
1308
|
-
},
|
|
1309
|
-
multipleOf(value, params) {
|
|
1310
|
-
return this.check(checks.multipleOf(value, params));
|
|
1305
|
+
/*@__PURE__*/ util.derived<ZodBigInt>(
|
|
1306
|
+
{
|
|
1307
|
+
minValue: (inst) => processors.aggregateChecks<bigint>(inst).minimum ?? null,
|
|
1308
|
+
maxValue: (inst) => processors.aggregateChecks<bigint>(inst).maximum ?? null,
|
|
1309
|
+
format: (inst) => processors.aggregateChecks(inst).format ?? null,
|
|
1311
1310
|
},
|
|
1312
|
-
|
|
1311
|
+
{
|
|
1312
|
+
gte(value, params) {
|
|
1313
|
+
return this.check(checks.gte(value, params));
|
|
1314
|
+
},
|
|
1315
|
+
min(value, params) {
|
|
1316
|
+
return this.check(checks.gte(value, params));
|
|
1317
|
+
},
|
|
1318
|
+
gt(value, params) {
|
|
1319
|
+
return this.check(checks.gt(value, params));
|
|
1320
|
+
},
|
|
1321
|
+
lt(value, params) {
|
|
1322
|
+
return this.check(checks.lt(value, params));
|
|
1323
|
+
},
|
|
1324
|
+
lte(value, params) {
|
|
1325
|
+
return this.check(checks.lte(value, params));
|
|
1326
|
+
},
|
|
1327
|
+
max(value, params) {
|
|
1328
|
+
return this.check(checks.lte(value, params));
|
|
1329
|
+
},
|
|
1330
|
+
positive(params) {
|
|
1331
|
+
return this.check(checks.gt(BigInt(0), params));
|
|
1332
|
+
},
|
|
1333
|
+
negative(params) {
|
|
1334
|
+
return this.check(checks.lt(BigInt(0), params));
|
|
1335
|
+
},
|
|
1336
|
+
nonpositive(params) {
|
|
1337
|
+
return this.check(checks.lte(BigInt(0), params));
|
|
1338
|
+
},
|
|
1339
|
+
nonnegative(params) {
|
|
1340
|
+
return this.check(checks.gte(BigInt(0), params));
|
|
1341
|
+
},
|
|
1342
|
+
multipleOf(value, params) {
|
|
1343
|
+
return this.check(checks.multipleOf(value, params));
|
|
1344
|
+
},
|
|
1345
|
+
}
|
|
1346
|
+
)
|
|
1313
1347
|
);
|
|
1314
1348
|
|
|
1315
1349
|
export function bigint(params?: string | core.$ZodBigIntParams): ZodBigInt {
|
|
@@ -1443,18 +1477,30 @@ export interface _ZodDate<T extends core.$ZodDateInternals = core.$ZodDateIntern
|
|
|
1443
1477
|
}
|
|
1444
1478
|
|
|
1445
1479
|
export interface ZodDate extends _ZodDate<core.$ZodDateInternals<Date>> {}
|
|
1446
|
-
export const ZodDate: core.$constructor<ZodDate> = /*@__PURE__*/ core.$constructor
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
inst.max = (value, params) => inst.check(checks.lte(value, params));
|
|
1480
|
+
export const ZodDate: core.$constructor<ZodDate> = /*@__PURE__*/ core.$constructor<ZodDate>(
|
|
1481
|
+
"ZodDate",
|
|
1482
|
+
(inst, def) => {
|
|
1483
|
+
core.$ZodDate.init(inst, def);
|
|
1484
|
+
ZodType.init(inst, def);
|
|
1485
|
+
inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);
|
|
1453
1486
|
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1487
|
+
inst.min = (value, params) => inst.check(checks.gte(value, params));
|
|
1488
|
+
inst.max = (value, params) => inst.check(checks.lte(value, params));
|
|
1489
|
+
},
|
|
1490
|
+
/*@__PURE__*/ util.derived<ZodDate>(
|
|
1491
|
+
{
|
|
1492
|
+
minDate: (inst) => {
|
|
1493
|
+
const { minimum } = processors.aggregateChecks<Date>(inst);
|
|
1494
|
+
return minimum ? new Date(minimum) : null;
|
|
1495
|
+
},
|
|
1496
|
+
maxDate: (inst) => {
|
|
1497
|
+
const { maximum } = processors.aggregateChecks<Date>(inst);
|
|
1498
|
+
return maximum ? new Date(maximum) : null;
|
|
1499
|
+
},
|
|
1500
|
+
},
|
|
1501
|
+
{}
|
|
1502
|
+
)
|
|
1503
|
+
);
|
|
1458
1504
|
|
|
1459
1505
|
export function date(params?: string | core.$ZodDateParams): ZodDate {
|
|
1460
1506
|
return core._date(ZodDate, params);
|
|
@@ -1635,19 +1681,20 @@ export const ZodObject: core.$constructor<ZodObject> = /*@__PURE__*/ core.$const
|
|
|
1635
1681
|
return _enum(Object.keys(this._zod.def.shape));
|
|
1636
1682
|
},
|
|
1637
1683
|
catchall(catchall) {
|
|
1638
|
-
|
|
1684
|
+
// `mergeDefs` rather than a spread: spreading reads `shape`, and resolving it can mint a whole fresh subtree
|
|
1685
|
+
return this.clone(util.mergeDefs(this._zod.def, { catchall: catchall as any }));
|
|
1639
1686
|
},
|
|
1640
1687
|
passthrough() {
|
|
1641
|
-
return this.clone(
|
|
1688
|
+
return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));
|
|
1642
1689
|
},
|
|
1643
1690
|
loose() {
|
|
1644
|
-
return this.clone(
|
|
1691
|
+
return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));
|
|
1645
1692
|
},
|
|
1646
1693
|
strict() {
|
|
1647
|
-
return this.clone(
|
|
1694
|
+
return this.clone(util.mergeDefs(this._zod.def, { catchall: never() }));
|
|
1648
1695
|
},
|
|
1649
1696
|
strip() {
|
|
1650
|
-
return this.clone(
|
|
1697
|
+
return this.clone(util.mergeDefs(this._zod.def, { catchall: undefined }));
|
|
1651
1698
|
},
|
|
1652
1699
|
extend(incoming) {
|
|
1653
1700
|
return util.extend(this, incoming);
|
|
@@ -2060,7 +2107,8 @@ export const ZodEnum: core.$constructor<ZodEnum> = /*@__PURE__*/ core.$construct
|
|
|
2060
2107
|
inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);
|
|
2061
2108
|
|
|
2062
2109
|
inst.enum = def.entries;
|
|
2063
|
-
|
|
2110
|
+
// reuse the parsed value set so a numeric TS enum's reverse-mapping keys stay out
|
|
2111
|
+
inst.options = [...inst._zod.values] as util.EnumValue[];
|
|
2064
2112
|
|
|
2065
2113
|
const keys = new Set(Object.keys(def.entries));
|
|
2066
2114
|
|
|
@@ -2743,6 +2791,28 @@ export const ZodCustom: core.$constructor<ZodCustom> = /*@__PURE__*/ core.$const
|
|
|
2743
2791
|
inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);
|
|
2744
2792
|
});
|
|
2745
2793
|
|
|
2794
|
+
// ZodProperties
|
|
2795
|
+
export interface ZodProperties<Shape extends core.$ZodShape = core.$ZodShape>
|
|
2796
|
+
extends _ZodType<core.$ZodPropertiesInternals<Shape>>,
|
|
2797
|
+
core.$ZodProperties<Shape> {
|
|
2798
|
+
"~standard": ZodStandardSchemaWithJSON<this>;
|
|
2799
|
+
}
|
|
2800
|
+
export const ZodProperties: core.$constructor<ZodProperties> = /*@__PURE__*/ core.$constructor(
|
|
2801
|
+
"ZodProperties",
|
|
2802
|
+
(inst, def) => {
|
|
2803
|
+
_ensureDefaultMemoizer();
|
|
2804
|
+
core.$ZodProperties.init(inst, def);
|
|
2805
|
+
ZodType.init(inst, def);
|
|
2806
|
+
}
|
|
2807
|
+
);
|
|
2808
|
+
|
|
2809
|
+
export function properties<Shape extends core.$ZodShape>(
|
|
2810
|
+
shape: Shape,
|
|
2811
|
+
params?: string | core.$ZodPropertiesParams
|
|
2812
|
+
): ZodProperties<Shape> {
|
|
2813
|
+
return core._properties(ZodProperties, shape, params) as any;
|
|
2814
|
+
}
|
|
2815
|
+
|
|
2746
2816
|
// custom checks
|
|
2747
2817
|
export function check<O = unknown>(fn: core.CheckFn<O>): core.$ZodCheck<O> {
|
|
2748
2818
|
const ch = new core.$ZodCheck({
|
|
@@ -2785,14 +2855,35 @@ type ZodInstanceOfParams = core.Params<
|
|
|
2785
2855
|
core.$ZodIssueCustom,
|
|
2786
2856
|
"type" | "check" | "checks" | "fn" | "abort" | "error" | "params" | "path"
|
|
2787
2857
|
>;
|
|
2858
|
+
|
|
2859
|
+
// ZodInstanceOf
|
|
2860
|
+
export interface ZodInstanceOf<T = unknown> extends ZodCustom<T, T> {
|
|
2861
|
+
properties<Shape extends core.$ZodShape>(
|
|
2862
|
+
shape: Shape,
|
|
2863
|
+
params?: string | core.$ZodPropertiesParams
|
|
2864
|
+
): ZodInstanceOf<T & core.$InferObjectInput<Shape, {}>>;
|
|
2865
|
+
}
|
|
2866
|
+
export const ZodInstanceOf: core.$constructor<ZodInstanceOf> = /*@__PURE__*/ core.$constructor(
|
|
2867
|
+
"ZodInstanceOf",
|
|
2868
|
+
(inst, def) => {
|
|
2869
|
+
ZodCustom.init(inst, def);
|
|
2870
|
+
},
|
|
2871
|
+
{
|
|
2872
|
+
properties(shape: core.$ZodShape, params?: string | core.$ZodPropertiesParams) {
|
|
2873
|
+
// asserts in place, so the narrowed output type is truthful without a wrapper
|
|
2874
|
+
return this.check(properties(shape, params)) as any;
|
|
2875
|
+
},
|
|
2876
|
+
}
|
|
2877
|
+
);
|
|
2878
|
+
|
|
2788
2879
|
function _instanceof<T extends typeof util.Class>(
|
|
2789
2880
|
cls: T,
|
|
2790
2881
|
params: ZodInstanceOfParams = {}
|
|
2791
|
-
):
|
|
2792
|
-
const inst = new
|
|
2882
|
+
): ZodInstanceOf<InstanceType<T>> {
|
|
2883
|
+
const inst = new ZodInstanceOf({
|
|
2793
2884
|
type: "custom",
|
|
2794
2885
|
check: "custom",
|
|
2795
|
-
fn: (data) => data instanceof cls,
|
|
2886
|
+
fn: (data: unknown) => data instanceof cls,
|
|
2796
2887
|
abort: true,
|
|
2797
2888
|
...(util.normalizeParams(params) as any),
|
|
2798
2889
|
});
|
|
@@ -237,6 +237,48 @@ test("toZod", () => {
|
|
|
237
237
|
expectTypeOf<z.input<typeof Transformed>>().toEqualTypeOf<{ count: string }>();
|
|
238
238
|
expectTypeOf<z.output<typeof Transformed>>().toEqualTypeOf<{ count: number }>();
|
|
239
239
|
|
|
240
|
+
// An enum target matches z.enum(...) even though the enum reference is not identical to the union of its members (#6524)
|
|
241
|
+
enum SkillLevel {
|
|
242
|
+
Noob = "noob",
|
|
243
|
+
Pro = "pro",
|
|
244
|
+
}
|
|
245
|
+
enum Rank {
|
|
246
|
+
First = 1,
|
|
247
|
+
Second = 2,
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
z.toZod<SkillLevel>()(z.enum(SkillLevel));
|
|
251
|
+
const Enums = z.toZod<{
|
|
252
|
+
skill: SkillLevel;
|
|
253
|
+
members: SkillLevel.Noob | SkillLevel.Pro;
|
|
254
|
+
rank: Rank;
|
|
255
|
+
maybe: SkillLevel | null;
|
|
256
|
+
list: SkillLevel[];
|
|
257
|
+
nested: { skill: SkillLevel };
|
|
258
|
+
}>()(
|
|
259
|
+
z.object({
|
|
260
|
+
skill: z.enum(SkillLevel),
|
|
261
|
+
members: z.enum(SkillLevel),
|
|
262
|
+
rank: z.enum(Rank),
|
|
263
|
+
maybe: z.enum(SkillLevel).nullable(),
|
|
264
|
+
list: z.array(z.enum(SkillLevel)),
|
|
265
|
+
nested: z.object({ skill: z.enum(SkillLevel) }),
|
|
266
|
+
})
|
|
267
|
+
);
|
|
268
|
+
expectTypeOf<z.output<typeof Enums>["skill"]>().toEqualTypeOf<SkillLevel>();
|
|
269
|
+
|
|
270
|
+
// @ts-expect-error a member subset is not the enum
|
|
271
|
+
z.toZod<{ skill: SkillLevel }>()(z.object({ skill: z.literal(SkillLevel.Noob) }));
|
|
272
|
+
|
|
273
|
+
// @ts-expect-error plain literals do not match a nominal enum target
|
|
274
|
+
z.toZod<{ skill: SkillLevel }>()(z.object({ skill: z.enum(["noob", "pro"]) }));
|
|
275
|
+
|
|
276
|
+
// @ts-expect-error an enum schema does not match a plain literal-union target
|
|
277
|
+
z.toZod<{ skill: "noob" | "pro" }>()(z.object({ skill: z.enum(SkillLevel) }));
|
|
278
|
+
|
|
279
|
+
// @ts-expect-error plain numeric literals do not match a numeric enum target either
|
|
280
|
+
z.toZod<{ rank: Rank }>()(z.object({ rank: z.union([z.literal(1), z.literal(2)]) }));
|
|
281
|
+
|
|
240
282
|
z.toZod<Company>()(
|
|
241
283
|
// @ts-expect-error missing optional keys still fail exact output matching
|
|
242
284
|
z.object({
|
|
@@ -277,24 +319,32 @@ test("toZod", () => {
|
|
|
277
319
|
// @ts-expect-error toZod checks output, not input
|
|
278
320
|
z.toZod<string>()(z.string().transform((value) => value.length));
|
|
279
321
|
|
|
280
|
-
// Exact equality is deliberately the only mode. A bidirectional-assignability mode would accept both of the two cases above — `any` is assignable in both directions by construction, and `readonly` is not part of assignability — so it would silently drop the guarantees the rest of this test pins.
|
|
322
|
+
// Exact equality is deliberately the only mode. A bidirectional-assignability mode would accept both of the two cases above — `any` is assignable in both directions by construction, and `readonly` is not part of assignability — so it would silently drop the guarantees the rest of this test pins.
|
|
323
|
+
|
|
324
|
+
// An intersection and the flat object with the same keys are interchangeable as targets, since the normalizer flattens both.
|
|
281
325
|
type Intersected = { a: number } & { b: string };
|
|
282
|
-
type Flatten<T> = { [K in keyof T]: T[K] } & {};
|
|
283
326
|
const viaAnd = z.object({ a: z.number() }).and(z.object({ b: z.string() }));
|
|
284
327
|
const viaExtend = z.object({ a: z.number() }).safeExtend({ b: z.string() });
|
|
285
328
|
|
|
286
329
|
z.toZod<Intersected>()(viaAnd);
|
|
330
|
+
z.toZod<Intersected>()(viaExtend);
|
|
331
|
+
z.toZod<{ a: number; b: string }>()(viaAnd);
|
|
287
332
|
z.toZod<{ a: number; b: string }>()(viaExtend);
|
|
288
|
-
z.toZod<Flatten<Intersected>>()(viaExtend);
|
|
289
333
|
|
|
290
|
-
// @ts-expect-error
|
|
291
|
-
z.toZod<
|
|
334
|
+
// @ts-expect-error a missing key is still a missing key
|
|
335
|
+
z.toZod<Intersected>()(z.object({ a: z.number() }));
|
|
292
336
|
|
|
293
|
-
//
|
|
294
|
-
z.toZod<
|
|
337
|
+
// `keyof` a function is `never`, so the normalizer must not walk into one — mapping it would erase the signature and make every callable compare equal
|
|
338
|
+
z.toZod<() => string>()(z.custom<() => string>());
|
|
295
339
|
|
|
296
|
-
// @ts-expect-error
|
|
297
|
-
z.toZod<
|
|
340
|
+
// @ts-expect-error an incompatible callable output is still rejected
|
|
341
|
+
z.toZod<() => string>()(z.custom<() => number>());
|
|
342
|
+
|
|
343
|
+
// @ts-expect-error and so is an incompatible function-valued property
|
|
344
|
+
z.toZod<{ cb: (x: number) => void }>()(z.object({ cb: z.custom<(x: string) => void>() }));
|
|
345
|
+
|
|
346
|
+
// @ts-expect-error a method-bearing generic keeps its type arguments
|
|
347
|
+
z.toZod<{ m: Map<string, number> }>()(z.object({ m: z.custom<Map<string, string>>() }));
|
|
298
348
|
});
|
|
299
349
|
|
|
300
350
|
test("checks", () => {
|
|
@@ -53,6 +53,12 @@ test("min max getters", () => {
|
|
|
53
53
|
expect(z.bigint().max(BigInt(5)).max(BigInt(1)).maxValue).toEqual(BigInt(1));
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
+
test("a format check applied after min/max does not widen minValue/maxValue back out", () => {
|
|
57
|
+
const schema = z.bigint().min(0n).max(23n).check(z.int64());
|
|
58
|
+
expect(schema.minValue).toEqual(0n);
|
|
59
|
+
expect(schema.maxValue).toEqual(23n);
|
|
60
|
+
});
|
|
61
|
+
|
|
56
62
|
test("bigint formats are distinct at the type level", () => {
|
|
57
63
|
expectTypeOf(z.int64()._zod.def.format).toEqualTypeOf<"int64">();
|
|
58
64
|
expectTypeOf(z.uint64()._zod.def.format).toEqualTypeOf<"uint64">();
|
|
@@ -40,7 +40,7 @@ test("continuability", () => {
|
|
|
40
40
|
"message": "Invalid email address",
|
|
41
41
|
"origin": "string",
|
|
42
42
|
"path": [],
|
|
43
|
-
"pattern": "/^(
|
|
43
|
+
"pattern": "/^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/",
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"code": "custom",
|
|
@@ -230,7 +230,7 @@ test("continuability", () => {
|
|
|
230
230
|
"message": "Invalid emoji",
|
|
231
231
|
"origin": "string",
|
|
232
232
|
"path": [],
|
|
233
|
-
"pattern": "/^[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$/u",
|
|
233
|
+
"pattern": "/^(?=[\\s\\S]*[\\p{Extended_Pictographic}\\p{Regional_Indicator}\\u20E3])[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$/u",
|
|
234
234
|
},
|
|
235
235
|
{
|
|
236
236
|
"code": "custom",
|