fullstacked 0.12.1-1358 → 0.12.1-1364
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/fullstacked_modules/@fullstacked/ai-agent/ai-agent.js +55352 -53576
- package/fullstacked_modules/@fullstacked/ai-agent/index.ts +0 -1
- package/fullstacked_modules/@fullstacked/ai-agent/lock.json +157 -152
- package/fullstacked_modules/@fullstacked/ai-agent/package.json +13 -13
- package/fullstacked_modules/@fullstacked/ai-agent/src/providers/ollama.ts +2 -2
- package/fullstacked_modules/@fullstacked/ui/index.js +6 -1
- package/fullstacked_modules/build/build.ts +16 -12
- package/fullstacked_modules/build/sass.ts +28 -19
- package/fullstacked_modules/zod/README.md +4 -4
- package/fullstacked_modules/zod/index.cjs +2 -2
- package/fullstacked_modules/zod/index.d.cts +2 -2
- package/fullstacked_modules/zod/index.d.ts +2 -2
- package/fullstacked_modules/zod/index.js +2 -2
- package/fullstacked_modules/zod/locales/index.cjs +17 -0
- package/fullstacked_modules/zod/locales/index.d.cts +1 -0
- package/fullstacked_modules/zod/locales/index.d.ts +1 -0
- package/fullstacked_modules/zod/locales/index.js +1 -0
- package/fullstacked_modules/zod/locales/package.json +6 -0
- package/fullstacked_modules/zod/mini/index.cjs +17 -0
- package/fullstacked_modules/zod/mini/index.d.cts +1 -0
- package/fullstacked_modules/zod/mini/index.d.ts +1 -0
- package/fullstacked_modules/zod/mini/index.js +1 -0
- package/fullstacked_modules/zod/mini/package.json +6 -0
- package/fullstacked_modules/zod/package.json +29 -12
- package/fullstacked_modules/zod/src/index.ts +2 -2
- package/fullstacked_modules/zod/src/locales/index.ts +1 -0
- package/fullstacked_modules/zod/src/mini/index.ts +1 -0
- package/fullstacked_modules/zod/src/v3/ZodError.ts +1 -1
- package/fullstacked_modules/zod/src/v3/tests/object.test.ts +2 -2
- package/fullstacked_modules/zod/src/v3/tests/string.test.ts +2 -2
- package/fullstacked_modules/zod/src/v3/types.ts +3 -1
- package/fullstacked_modules/zod/src/v4/classic/checks.ts +1 -0
- package/fullstacked_modules/zod/src/v4/classic/compat.ts +4 -0
- package/fullstacked_modules/zod/src/v4/classic/errors.ts +9 -2
- package/fullstacked_modules/zod/src/v4/classic/external.ts +1 -1
- package/fullstacked_modules/zod/src/v4/classic/parse.ts +49 -0
- package/fullstacked_modules/zod/src/v4/classic/schemas.ts +224 -81
- package/fullstacked_modules/zod/src/v4/classic/tests/array.test.ts +6 -6
- package/fullstacked_modules/zod/src/v4/classic/tests/catch.test.ts +29 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/continuability.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/classic/tests/datetime.test.ts +6 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/default.test.ts +52 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +42 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/error-utils.test.ts +70 -2
- package/fullstacked_modules/zod/src/v4/classic/tests/file.test.ts +9 -4
- package/fullstacked_modules/zod/src/v4/classic/tests/firstparty.test.ts +4 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/function.test.ts +71 -31
- package/fullstacked_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/index.test.ts +15 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/literal.test.ts +25 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/nonoptional.test.ts +15 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/number.test.ts +23 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/object.test.ts +48 -2
- package/fullstacked_modules/zod/src/v4/classic/tests/optional.test.ts +13 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/partial.test.ts +193 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/pickomit.test.ts +5 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/pipe.test.ts +25 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/prefault.test.ts +37 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/preprocess.test.ts +5 -21
- package/fullstacked_modules/zod/src/v4/classic/tests/record.test.ts +15 -1
- package/fullstacked_modules/zod/src/v4/classic/tests/recursive-types.test.ts +226 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/refine.test.ts +78 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/set.test.ts +5 -3
- package/fullstacked_modules/zod/src/v4/classic/tests/string-formats.test.ts +16 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/string.test.ts +204 -5
- package/fullstacked_modules/zod/src/v4/classic/tests/stringbool.test.ts +40 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/template-literal.test.ts +14 -9
- package/fullstacked_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +315 -7
- package/fullstacked_modules/zod/src/v4/classic/tests/transform.test.ts +111 -0
- package/fullstacked_modules/zod/src/v4/classic/tests/tuple.test.ts +2 -2
- package/fullstacked_modules/zod/src/v4/classic/tests/union.test.ts +90 -3
- package/fullstacked_modules/zod/src/v4/core/api.ts +160 -133
- package/fullstacked_modules/zod/src/v4/core/checks.ts +6 -2
- package/fullstacked_modules/zod/src/v4/core/core.ts +9 -28
- package/fullstacked_modules/zod/src/v4/core/doc.ts +2 -2
- package/fullstacked_modules/zod/src/v4/core/errors.ts +49 -60
- package/fullstacked_modules/zod/src/v4/core/index.ts +0 -1
- package/fullstacked_modules/zod/src/v4/core/json-schema.ts +7 -3
- package/fullstacked_modules/zod/src/v4/core/parse.ts +101 -0
- package/fullstacked_modules/zod/src/v4/core/regexes.ts +56 -14
- package/fullstacked_modules/zod/src/v4/core/registries.ts +5 -4
- package/fullstacked_modules/zod/src/v4/core/schemas.ts +705 -230
- package/fullstacked_modules/zod/src/v4/core/tests/extend.test.ts +18 -0
- package/fullstacked_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/fullstacked_modules/zod/src/v4/core/to-json-schema.ts +100 -33
- package/fullstacked_modules/zod/src/v4/core/util.ts +237 -102
- package/fullstacked_modules/zod/src/v4/core/versions.ts +2 -2
- package/fullstacked_modules/zod/src/v4/locales/bg.ts +136 -0
- package/fullstacked_modules/zod/src/v4/locales/da.ts +141 -0
- package/fullstacked_modules/zod/src/v4/locales/es.ts +44 -10
- package/fullstacked_modules/zod/src/v4/locales/index.ts +8 -0
- package/fullstacked_modules/zod/src/v4/locales/is.ts +127 -0
- package/fullstacked_modules/zod/src/v4/locales/ka.ts +138 -0
- package/fullstacked_modules/zod/src/v4/locales/kh.ts +3 -122
- package/fullstacked_modules/zod/src/v4/locales/km.ts +126 -0
- package/fullstacked_modules/zod/src/v4/locales/lt.ts +265 -0
- package/fullstacked_modules/zod/src/v4/locales/ua.ts +3 -122
- package/fullstacked_modules/zod/src/v4/locales/uk.ts +126 -0
- package/fullstacked_modules/zod/src/v4/locales/yo.ts +131 -0
- package/fullstacked_modules/zod/src/v4/mini/external.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/parse.ts +14 -1
- package/fullstacked_modules/zod/src/v4/mini/schemas.ts +186 -40
- package/fullstacked_modules/zod/src/v4/mini/tests/assignability.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/fullstacked_modules/zod/src/v4/mini/tests/computed.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/error.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/index.test.ts +29 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/number.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/object.test.ts +16 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/prototypes.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/recursive-types.test.ts +1 -1
- package/fullstacked_modules/zod/src/v4/mini/tests/string.test.ts +17 -1
- package/fullstacked_modules/zod/v3/ZodError.cjs +1 -1
- package/fullstacked_modules/zod/v3/ZodError.d.cts +6 -6
- package/fullstacked_modules/zod/v3/ZodError.d.ts +6 -6
- package/fullstacked_modules/zod/v3/ZodError.js +1 -1
- package/fullstacked_modules/zod/v3/locales/en.cjs +1 -0
- package/fullstacked_modules/zod/v3/locales/en.d.cts +1 -1
- package/fullstacked_modules/zod/v3/package.json +6 -0
- package/fullstacked_modules/zod/v3/types.cjs +2 -0
- package/fullstacked_modules/zod/v3/types.d.cts +4 -1
- package/fullstacked_modules/zod/v3/types.d.ts +4 -1
- package/fullstacked_modules/zod/v3/types.js +2 -0
- package/fullstacked_modules/zod/v4/classic/checks.d.cts +1 -1
- package/fullstacked_modules/zod/v4/classic/checks.d.ts +1 -1
- package/fullstacked_modules/zod/v4/classic/compat.cjs +5 -1
- package/fullstacked_modules/zod/v4/classic/compat.d.cts +4 -0
- package/fullstacked_modules/zod/v4/classic/compat.d.ts +4 -0
- package/fullstacked_modules/zod/v4/classic/compat.js +4 -0
- package/fullstacked_modules/zod/v4/classic/errors.cjs +9 -2
- package/fullstacked_modules/zod/v4/classic/errors.js +9 -2
- package/fullstacked_modules/zod/v4/classic/external.cjs +2 -2
- package/fullstacked_modules/zod/v4/classic/external.d.cts +1 -1
- package/fullstacked_modules/zod/v4/classic/external.d.ts +1 -1
- package/fullstacked_modules/zod/v4/classic/external.js +1 -1
- package/fullstacked_modules/zod/v4/classic/package.json +6 -0
- package/fullstacked_modules/zod/v4/classic/parse.cjs +10 -1
- package/fullstacked_modules/zod/v4/classic/parse.d.cts +8 -0
- package/fullstacked_modules/zod/v4/classic/parse.d.ts +8 -0
- package/fullstacked_modules/zod/v4/classic/parse.js +9 -0
- package/fullstacked_modules/zod/v4/classic/schemas.cjs +90 -48
- package/fullstacked_modules/zod/v4/classic/schemas.d.cts +70 -27
- package/fullstacked_modules/zod/v4/classic/schemas.d.ts +70 -27
- package/fullstacked_modules/zod/v4/classic/schemas.js +81 -47
- package/fullstacked_modules/zod/v4/core/api.cjs +52 -31
- package/fullstacked_modules/zod/v4/core/api.d.cts +87 -76
- package/fullstacked_modules/zod/v4/core/api.d.ts +87 -76
- package/fullstacked_modules/zod/v4/core/api.js +50 -31
- package/fullstacked_modules/zod/v4/core/checks.cjs +4 -0
- package/fullstacked_modules/zod/v4/core/checks.d.cts +2 -2
- package/fullstacked_modules/zod/v4/core/checks.d.ts +2 -2
- package/fullstacked_modules/zod/v4/core/checks.js +4 -0
- package/fullstacked_modules/zod/v4/core/core.cjs +8 -1
- package/fullstacked_modules/zod/v4/core/core.d.cts +5 -2
- package/fullstacked_modules/zod/v4/core/core.d.ts +5 -2
- package/fullstacked_modules/zod/v4/core/core.js +6 -0
- package/fullstacked_modules/zod/v4/core/doc.d.cts +1 -1
- package/fullstacked_modules/zod/v4/core/doc.d.ts +1 -1
- package/fullstacked_modules/zod/v4/core/errors.cjs +6 -19
- package/fullstacked_modules/zod/v4/core/errors.d.cts +24 -22
- package/fullstacked_modules/zod/v4/core/errors.d.ts +24 -22
- package/fullstacked_modules/zod/v4/core/errors.js +6 -19
- package/fullstacked_modules/zod/v4/core/index.cjs +0 -1
- package/fullstacked_modules/zod/v4/core/index.d.cts +0 -1
- package/fullstacked_modules/zod/v4/core/index.d.ts +0 -1
- package/fullstacked_modules/zod/v4/core/index.js +0 -1
- package/fullstacked_modules/zod/v4/core/json-schema.d.cts +4 -3
- package/fullstacked_modules/zod/v4/core/json-schema.d.ts +4 -3
- package/fullstacked_modules/zod/v4/core/package.json +6 -0
- package/fullstacked_modules/zod/v4/core/parse.cjs +45 -1
- package/fullstacked_modules/zod/v4/core/parse.d.cts +24 -0
- package/fullstacked_modules/zod/v4/core/parse.d.ts +24 -0
- package/fullstacked_modules/zod/v4/core/parse.js +36 -0
- package/fullstacked_modules/zod/v4/core/regexes.cjs +49 -16
- package/fullstacked_modules/zod/v4/core/regexes.d.cts +18 -2
- package/fullstacked_modules/zod/v4/core/regexes.d.ts +18 -2
- package/fullstacked_modules/zod/v4/core/regexes.js +46 -14
- package/fullstacked_modules/zod/v4/core/registries.cjs +4 -3
- package/fullstacked_modules/zod/v4/core/registries.d.cts +2 -2
- package/fullstacked_modules/zod/v4/core/registries.d.ts +2 -2
- package/fullstacked_modules/zod/v4/core/registries.js +4 -3
- package/fullstacked_modules/zod/v4/core/schemas.cjs +409 -171
- package/fullstacked_modules/zod/v4/core/schemas.d.cts +88 -16
- package/fullstacked_modules/zod/v4/core/schemas.d.ts +88 -16
- package/fullstacked_modules/zod/v4/core/schemas.js +408 -170
- package/fullstacked_modules/zod/v4/core/to-json-schema.cjs +97 -31
- package/fullstacked_modules/zod/v4/core/to-json-schema.d.cts +5 -3
- package/fullstacked_modules/zod/v4/core/to-json-schema.d.ts +5 -3
- package/fullstacked_modules/zod/v4/core/to-json-schema.js +97 -31
- package/fullstacked_modules/zod/v4/core/util.cjs +220 -101
- package/fullstacked_modules/zod/v4/core/util.d.cts +14 -0
- package/fullstacked_modules/zod/v4/core/util.d.ts +14 -0
- package/fullstacked_modules/zod/v4/core/util.js +209 -101
- package/fullstacked_modules/zod/v4/core/versions.cjs +2 -2
- package/fullstacked_modules/zod/v4/core/versions.d.cts +1 -1
- package/fullstacked_modules/zod/v4/core/versions.d.ts +1 -1
- package/fullstacked_modules/zod/v4/core/versions.js +2 -2
- package/fullstacked_modules/zod/v4/locales/ar.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ar.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/az.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/az.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/be.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/be.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/bg.cjs +156 -0
- package/fullstacked_modules/zod/v4/locales/bg.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/bg.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/bg.js +128 -0
- package/fullstacked_modules/zod/v4/locales/ca.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ca.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/cs.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/cs.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/da.cjs +158 -0
- package/fullstacked_modules/zod/v4/locales/da.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/da.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/da.js +131 -0
- package/fullstacked_modules/zod/v4/locales/de.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/de.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/es.cjs +43 -10
- package/fullstacked_modules/zod/v4/locales/es.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/es.js +42 -10
- package/fullstacked_modules/zod/v4/locales/fa.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fa.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/fi.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fi.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/fr-CA.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fr-CA.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/fr.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/fr.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/he.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/he.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/hu.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/hu.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/id.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/id.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/index.cjs +17 -1
- package/fullstacked_modules/zod/v4/locales/index.d.cts +8 -0
- package/fullstacked_modules/zod/v4/locales/index.d.ts +8 -0
- package/fullstacked_modules/zod/v4/locales/index.js +8 -0
- package/fullstacked_modules/zod/v4/locales/is.cjs +145 -0
- package/fullstacked_modules/zod/v4/locales/is.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/is.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/is.js +117 -0
- package/fullstacked_modules/zod/v4/locales/it.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/it.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ja.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ja.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ka.cjs +153 -0
- package/fullstacked_modules/zod/v4/locales/ka.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/ka.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/ka.js +125 -0
- package/fullstacked_modules/zod/v4/locales/kh.cjs +6 -137
- package/fullstacked_modules/zod/v4/locales/kh.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/kh.d.ts +1 -0
- package/fullstacked_modules/zod/v4/locales/kh.js +3 -115
- package/fullstacked_modules/zod/v4/locales/km.cjs +144 -0
- package/fullstacked_modules/zod/v4/locales/km.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/km.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/km.js +117 -0
- package/fullstacked_modules/zod/v4/locales/ko.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ko.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/lt.cjs +258 -0
- package/fullstacked_modules/zod/v4/locales/lt.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/lt.d.ts +5 -0
- package/fullstacked_modules/zod/v4/locales/lt.js +230 -0
- package/fullstacked_modules/zod/v4/locales/mk.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/mk.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ms.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ms.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/nl.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/nl.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/no.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/no.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ota.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ota.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/package.json +6 -0
- package/fullstacked_modules/zod/v4/locales/pl.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/pl.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ps.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ps.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/pt.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/pt.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ru.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ru.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/sl.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/sl.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/sv.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/sv.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ta.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ta.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/th.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/th.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ua.cjs +6 -137
- package/fullstacked_modules/zod/v4/locales/ua.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/ua.d.ts +1 -0
- package/fullstacked_modules/zod/v4/locales/ua.js +3 -115
- package/fullstacked_modules/zod/v4/locales/uk.cjs +144 -0
- package/fullstacked_modules/zod/v4/locales/uk.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/uk.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/uk.js +117 -0
- package/fullstacked_modules/zod/v4/locales/ur.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/ur.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/vi.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/vi.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/yo.cjs +142 -0
- package/fullstacked_modules/zod/v4/locales/yo.d.cts +5 -0
- package/fullstacked_modules/zod/v4/locales/yo.d.ts +4 -0
- package/fullstacked_modules/zod/v4/locales/yo.js +115 -0
- package/fullstacked_modules/zod/v4/locales/zh-CN.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/zh-CN.d.cts +2 -1
- package/fullstacked_modules/zod/v4/locales/zh-TW.cjs +1 -0
- package/fullstacked_modules/zod/v4/locales/zh-TW.d.cts +2 -1
- package/fullstacked_modules/zod/v4/mini/external.cjs +2 -2
- package/fullstacked_modules/zod/v4/mini/external.d.cts +1 -1
- package/fullstacked_modules/zod/v4/mini/external.d.ts +1 -1
- package/fullstacked_modules/zod/v4/mini/external.js +1 -1
- package/fullstacked_modules/zod/v4/mini/package.json +6 -0
- package/fullstacked_modules/zod/v4/mini/parse.cjs +9 -1
- package/fullstacked_modules/zod/v4/mini/parse.d.cts +1 -1
- package/fullstacked_modules/zod/v4/mini/parse.d.ts +1 -1
- package/fullstacked_modules/zod/v4/mini/parse.js +1 -1
- package/fullstacked_modules/zod/v4/mini/schemas.cjs +77 -24
- package/fullstacked_modules/zod/v4/mini/schemas.d.cts +56 -5
- package/fullstacked_modules/zod/v4/mini/schemas.d.ts +56 -5
- package/fullstacked_modules/zod/v4/mini/schemas.js +66 -23
- package/fullstacked_modules/zod/v4/package.json +6 -0
- package/fullstacked_modules/zod/v4-mini/package.json +6 -0
- package/index.js +20 -12
- package/package.json +1 -1
- package/fullstacked_modules/@fullstacked/ai-agent/story.txt +0 -7
- package/fullstacked_modules/@fullstacked/ai-agent/summary.txt +0 -7
- package/fullstacked_modules/zod/src/v4/core/function.ts +0 -176
- package/fullstacked_modules/zod/v4/core/function.cjs +0 -102
- package/fullstacked_modules/zod/v4/core/function.d.cts +0 -52
- package/fullstacked_modules/zod/v4/core/function.d.ts +0 -52
- package/fullstacked_modules/zod/v4/core/function.js +0 -75
|
@@ -321,7 +321,7 @@ test("all errors", () => {
|
|
|
321
321
|
});
|
|
322
322
|
|
|
323
323
|
const schema = z.strictObject({
|
|
324
|
-
username: z.string(),
|
|
324
|
+
username: z.string().brand<"username">(),
|
|
325
325
|
favoriteNumbers: z.array(z.number()),
|
|
326
326
|
nesting: z.object({
|
|
327
327
|
a: z.string(),
|
|
@@ -336,8 +336,33 @@ const result = schema.safeParse({
|
|
|
336
336
|
extra: 1234,
|
|
337
337
|
});
|
|
338
338
|
|
|
339
|
+
const tree = z.treeifyError(result.error!);
|
|
340
|
+
|
|
341
|
+
expectTypeOf(tree).toEqualTypeOf<{
|
|
342
|
+
errors: string[];
|
|
343
|
+
properties?: {
|
|
344
|
+
username?: {
|
|
345
|
+
errors: string[];
|
|
346
|
+
};
|
|
347
|
+
favoriteNumbers?: {
|
|
348
|
+
errors: string[];
|
|
349
|
+
items?: {
|
|
350
|
+
errors: string[];
|
|
351
|
+
}[];
|
|
352
|
+
};
|
|
353
|
+
nesting?: {
|
|
354
|
+
errors: string[];
|
|
355
|
+
properties?: {
|
|
356
|
+
a?: {
|
|
357
|
+
errors: string[];
|
|
358
|
+
};
|
|
359
|
+
};
|
|
360
|
+
};
|
|
361
|
+
};
|
|
362
|
+
}>();
|
|
363
|
+
|
|
339
364
|
test("z.treeifyError", () => {
|
|
340
|
-
expect(
|
|
365
|
+
expect(tree).toMatchInlineSnapshot(`
|
|
341
366
|
{
|
|
342
367
|
"errors": [
|
|
343
368
|
"Unrecognized key: "extra"",
|
|
@@ -525,3 +550,46 @@ test("disc union treeify/format", () => {
|
|
|
525
550
|
}
|
|
526
551
|
`);
|
|
527
552
|
});
|
|
553
|
+
|
|
554
|
+
test("update message after adding issues", () => {
|
|
555
|
+
const e = new z.ZodError([]);
|
|
556
|
+
e.addIssue({
|
|
557
|
+
code: "custom",
|
|
558
|
+
message: "message",
|
|
559
|
+
input: "asdf",
|
|
560
|
+
path: [],
|
|
561
|
+
});
|
|
562
|
+
expect(e.message).toMatchInlineSnapshot(`
|
|
563
|
+
"[
|
|
564
|
+
{
|
|
565
|
+
"code": "custom",
|
|
566
|
+
"message": "message",
|
|
567
|
+
"input": "asdf",
|
|
568
|
+
"path": []
|
|
569
|
+
}
|
|
570
|
+
]"
|
|
571
|
+
`);
|
|
572
|
+
|
|
573
|
+
e.addIssue({
|
|
574
|
+
code: "custom",
|
|
575
|
+
message: "message",
|
|
576
|
+
input: "asdf",
|
|
577
|
+
path: [],
|
|
578
|
+
});
|
|
579
|
+
expect(e.message).toMatchInlineSnapshot(`
|
|
580
|
+
"[
|
|
581
|
+
{
|
|
582
|
+
"code": "custom",
|
|
583
|
+
"message": "message",
|
|
584
|
+
"input": "asdf",
|
|
585
|
+
"path": []
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"code": "custom",
|
|
589
|
+
"message": "message",
|
|
590
|
+
"input": "asdf",
|
|
591
|
+
"path": []
|
|
592
|
+
}
|
|
593
|
+
]"
|
|
594
|
+
`);
|
|
595
|
+
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
// @ts-ignore
|
|
2
1
|
import { File as WebFile } from "@web-std/file";
|
|
3
2
|
|
|
4
|
-
import { afterEach, beforeEach, expect, test } from "vitest";
|
|
3
|
+
import { afterEach, beforeEach, expect, expectTypeOf, test } from "vitest";
|
|
5
4
|
|
|
6
5
|
import * as z from "zod/v4";
|
|
7
6
|
|
|
@@ -27,6 +26,10 @@ test("passing validations", () => {
|
|
|
27
26
|
expect(() => mimeCheck.parse(new File([""], "test.txt", { type: "text/csv" }))).toThrow();
|
|
28
27
|
});
|
|
29
28
|
|
|
29
|
+
test("types", () => {
|
|
30
|
+
expectTypeOf(z.file().parse(new File([], "test.txt"))).toEqualTypeOf(new File([], "test.txt"));
|
|
31
|
+
});
|
|
32
|
+
|
|
30
33
|
test("failing validations", () => {
|
|
31
34
|
expect(minCheck.safeParse(new File(["1234"], "test.txt"))).toMatchInlineSnapshot(`
|
|
32
35
|
{
|
|
@@ -35,8 +38,9 @@ test("failing validations", () => {
|
|
|
35
38
|
"origin": "file",
|
|
36
39
|
"code": "too_small",
|
|
37
40
|
"minimum": 5,
|
|
41
|
+
"inclusive": true,
|
|
38
42
|
"path": [],
|
|
39
|
-
"message": "Too small: expected file to have
|
|
43
|
+
"message": "Too small: expected file to have >=5 bytes"
|
|
40
44
|
}
|
|
41
45
|
]],
|
|
42
46
|
"success": false,
|
|
@@ -49,8 +53,9 @@ test("failing validations", () => {
|
|
|
49
53
|
"origin": "file",
|
|
50
54
|
"code": "too_big",
|
|
51
55
|
"maximum": 8,
|
|
56
|
+
"inclusive": true,
|
|
52
57
|
"path": [],
|
|
53
|
-
"message": "Too big: expected file to have
|
|
58
|
+
"message": "Too big: expected file to have <=8 bytes"
|
|
54
59
|
}
|
|
55
60
|
]],
|
|
56
61
|
"success": false,
|
|
@@ -82,6 +82,8 @@ test("first party switch", () => {
|
|
|
82
82
|
break;
|
|
83
83
|
case "lazy":
|
|
84
84
|
break;
|
|
85
|
+
case "function":
|
|
86
|
+
break;
|
|
85
87
|
default:
|
|
86
88
|
expectTypeOf(def).toEqualTypeOf<never>();
|
|
87
89
|
}
|
|
@@ -168,6 +170,8 @@ test("$ZodSchemaTypes", () => {
|
|
|
168
170
|
break;
|
|
169
171
|
case "lazy":
|
|
170
172
|
break;
|
|
173
|
+
case "function":
|
|
174
|
+
break;
|
|
171
175
|
|
|
172
176
|
default:
|
|
173
177
|
expectTypeOf(type).toEqualTypeOf<never>();
|
|
@@ -32,38 +32,38 @@ test("function inference 1", () => {
|
|
|
32
32
|
expectTypeOf<func1>().toEqualTypeOf<(k: string) => number>();
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
35
|
+
test("method parsing", () => {
|
|
36
|
+
const methodObject = z.object({
|
|
37
|
+
property: z.number(),
|
|
38
|
+
method: z
|
|
39
|
+
.function()
|
|
40
|
+
.input(z.tuple([z.string()]))
|
|
41
|
+
.output(z.number()),
|
|
42
|
+
});
|
|
43
|
+
const methodInstance = {
|
|
44
|
+
property: 3,
|
|
45
|
+
method: function (s: string) {
|
|
46
|
+
return s.length + this.property;
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
const parsed = methodObject.parse(methodInstance);
|
|
50
|
+
expect(parsed.method("length=8")).toBe(11); // 8 length + 3 property
|
|
51
|
+
});
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
53
|
+
test("async method parsing", async () => {
|
|
54
|
+
const methodObject = z.object({
|
|
55
|
+
property: z.number(),
|
|
56
|
+
method: z.function().input([z.string()]).output(z.promise(z.number())),
|
|
57
|
+
});
|
|
58
|
+
const methodInstance = {
|
|
59
|
+
property: 3,
|
|
60
|
+
method: async function (s: string) {
|
|
61
|
+
return s.length + this.property;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
const parsed = methodObject.parse(methodInstance);
|
|
65
|
+
expect(await parsed.method("length=8")).toBe(11); // 8 length + 3 property
|
|
66
|
+
});
|
|
67
67
|
|
|
68
68
|
test("args method", () => {
|
|
69
69
|
const t1 = z.function();
|
|
@@ -130,6 +130,46 @@ test("valid function run", () => {
|
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
+
const args3 = [
|
|
134
|
+
z.object({
|
|
135
|
+
f1: z.number(),
|
|
136
|
+
f2: z.string().nullable(),
|
|
137
|
+
f3: z.array(z.boolean().optional()).optional(),
|
|
138
|
+
}),
|
|
139
|
+
] as const;
|
|
140
|
+
const returns3 = z.union([z.string(), z.number()]);
|
|
141
|
+
|
|
142
|
+
const func3 = z.function({
|
|
143
|
+
input: args3,
|
|
144
|
+
output: returns3,
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("function inference 3", () => {
|
|
148
|
+
type func3 = (typeof func3)["_input"];
|
|
149
|
+
|
|
150
|
+
expectTypeOf<func3>().toEqualTypeOf<
|
|
151
|
+
(arg: {
|
|
152
|
+
f3?: (boolean | undefined)[] | undefined;
|
|
153
|
+
f1: number;
|
|
154
|
+
f2: string | null;
|
|
155
|
+
}) => string | number
|
|
156
|
+
>();
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
test("valid function run", () => {
|
|
160
|
+
const validFunc3Instance = func3.implement((_x) => {
|
|
161
|
+
_x.f2;
|
|
162
|
+
_x.f3![0];
|
|
163
|
+
return "adf" as any;
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
validFunc3Instance({
|
|
167
|
+
f1: 21,
|
|
168
|
+
f2: "asdf",
|
|
169
|
+
f3: [true, false],
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
133
173
|
test("input validation error", () => {
|
|
134
174
|
const schema = z.function({
|
|
135
175
|
input: z.tuple([z.string()]),
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { expect, expectTypeOf, test } from "vitest";
|
|
2
|
+
import { type ZodCustomStringFormat, hash } from "zod"; // adjust path as needed
|
|
3
|
+
|
|
4
|
+
test("hash() API — types and runtime across all alg/enc combinations", async () => {
|
|
5
|
+
const { createHash } = await import("node:crypto");
|
|
6
|
+
|
|
7
|
+
type Alg = "md5" | "sha1" | "sha256" | "sha384" | "sha512";
|
|
8
|
+
// type Enc = "hex" | "base64" | "base64url";
|
|
9
|
+
|
|
10
|
+
const toB64Url = (b64: string) => b64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
|
|
11
|
+
|
|
12
|
+
const makeDigests = (alg: Alg, input: string) => {
|
|
13
|
+
const buf = createHash(alg).update(input).digest();
|
|
14
|
+
const hex = buf.toString("hex");
|
|
15
|
+
const base64 = buf.toString("base64");
|
|
16
|
+
const base64url = toB64Url(base64);
|
|
17
|
+
return { hex, base64, base64url };
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const algs: ReadonlyArray<Alg> = ["md5", "sha1", "sha256", "sha384", "sha512"];
|
|
21
|
+
const input = "zodasklfjaasdf";
|
|
22
|
+
|
|
23
|
+
// --- Type-level checks (ensure the literal format string is encoded in the return type)
|
|
24
|
+
expectTypeOf(hash("md5")).toEqualTypeOf<ZodCustomStringFormat<"md5_hex">>();
|
|
25
|
+
expectTypeOf(hash("sha1")).toEqualTypeOf<ZodCustomStringFormat<"sha1_hex">>();
|
|
26
|
+
expectTypeOf(hash("sha256", { enc: "base64" as const })).toEqualTypeOf<ZodCustomStringFormat<"sha256_base64">>();
|
|
27
|
+
expectTypeOf(hash("sha384", { enc: "base64url" as const })).toEqualTypeOf<
|
|
28
|
+
ZodCustomStringFormat<"sha384_base64url">
|
|
29
|
+
>();
|
|
30
|
+
|
|
31
|
+
// Test generic format types are correctly inferred and Enc defaults to "hex"
|
|
32
|
+
expectTypeOf(hash("sha256")).toEqualTypeOf<ZodCustomStringFormat<"sha256_hex">>();
|
|
33
|
+
|
|
34
|
+
// --- Runtime matrix (success + a few sharp-edged failures per combo)
|
|
35
|
+
for (const alg of algs) {
|
|
36
|
+
const { hex, base64, base64url } = makeDigests(alg, input);
|
|
37
|
+
|
|
38
|
+
// Success cases
|
|
39
|
+
expect(hash(alg).parse(hex)).toBe(hex); // default enc=hex
|
|
40
|
+
expect(hash(alg, { enc: "hex" }).parse(hex)).toBe(hex);
|
|
41
|
+
expect(hash(alg, { enc: "base64" }).parse(base64)).toBe(base64);
|
|
42
|
+
expect(hash(alg, { enc: "base64url" }).parse(base64url)).toBe(base64url);
|
|
43
|
+
|
|
44
|
+
// Failure cases (wrong encoding to schema)
|
|
45
|
+
expect(() => hash(alg, { enc: "hex" }).parse(base64)).toThrow();
|
|
46
|
+
expect(() => hash(alg, { enc: "base64" }).parse(hex)).toThrow();
|
|
47
|
+
expect(() => hash(alg, { enc: "base64url" }).parse(base64)).toThrow();
|
|
48
|
+
|
|
49
|
+
// Encoding-specific failures
|
|
50
|
+
// hex: uppercase allowed, wrong length should fail
|
|
51
|
+
hash(alg, { enc: "hex" }).parse(hex.toUpperCase());
|
|
52
|
+
expect(() => hash(alg, { enc: "hex" }).parse(hex.slice(0, -1))).toThrow();
|
|
53
|
+
|
|
54
|
+
// base64: missing required padding should fail (only for algorithms that require padding)
|
|
55
|
+
if (base64.includes("=")) {
|
|
56
|
+
const base64NoPad = base64.replace(/=+$/g, "");
|
|
57
|
+
expect(() => hash(alg, { enc: "base64" }).parse(base64NoPad)).toThrow();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// base64url: adding padding or using invalid characters should fail
|
|
61
|
+
expect(() => hash(alg, { enc: "base64url" }).parse(base64url + "=")).toThrow();
|
|
62
|
+
expect(() => hash(alg, { enc: "base64url" }).parse(base64url + "!")).toThrow();
|
|
63
|
+
|
|
64
|
+
// Param object present but enc omitted should still default to hex at runtime
|
|
65
|
+
const schemaWithEmptyParams = hash(alg, {} as any);
|
|
66
|
+
expect(schemaWithEmptyParams.parse(hex)).toBe(hex);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
@@ -827,3 +827,18 @@ test("def typing", () => {
|
|
|
827
827
|
z.string().catch("fallback").def.type satisfies "catch";
|
|
828
828
|
z.file().def.type satisfies "file";
|
|
829
829
|
});
|
|
830
|
+
|
|
831
|
+
test("runtime type property exists and returns correct values", () => {
|
|
832
|
+
const stringSchema = z.string();
|
|
833
|
+
expect(stringSchema.type).toBe("string");
|
|
834
|
+
});
|
|
835
|
+
|
|
836
|
+
test("type narrowing works with type property", () => {
|
|
837
|
+
type ArrayOrRecord = z.ZodArray<z.ZodString> | z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
838
|
+
const arraySchema = z.array(z.string()) as ArrayOrRecord;
|
|
839
|
+
|
|
840
|
+
if (arraySchema.type === "array") {
|
|
841
|
+
expectTypeOf(arraySchema).toEqualTypeOf<z.ZodArray<z.ZodString>>();
|
|
842
|
+
expect(arraySchema.element).toBeDefined();
|
|
843
|
+
}
|
|
844
|
+
});
|
|
@@ -90,3 +90,28 @@ test("readonly", () => {
|
|
|
90
90
|
const a = ["asdf"] as const;
|
|
91
91
|
z.literal(a);
|
|
92
92
|
});
|
|
93
|
+
|
|
94
|
+
test("literal pattern", () => {
|
|
95
|
+
expect(z.literal(1.1)._zod.pattern).toMatchInlineSnapshot(`/\\^\\(1\\\\\\.1\\)\\$/`);
|
|
96
|
+
|
|
97
|
+
expect(z.templateLiteral([z.literal(1.1)]).safeParse("1.1")).toMatchInlineSnapshot(`
|
|
98
|
+
{
|
|
99
|
+
"data": "1.1",
|
|
100
|
+
"success": true,
|
|
101
|
+
}
|
|
102
|
+
`);
|
|
103
|
+
expect(z.templateLiteral([z.literal(1.1)]).safeParse("1n1")).toMatchInlineSnapshot(`
|
|
104
|
+
{
|
|
105
|
+
"error": [ZodError: [
|
|
106
|
+
{
|
|
107
|
+
"code": "invalid_format",
|
|
108
|
+
"format": "template_literal",
|
|
109
|
+
"pattern": "^(1\\\\.1)$",
|
|
110
|
+
"path": [],
|
|
111
|
+
"message": "Invalid input"
|
|
112
|
+
}
|
|
113
|
+
]],
|
|
114
|
+
"success": false,
|
|
115
|
+
}
|
|
116
|
+
`);
|
|
117
|
+
});
|
|
@@ -84,3 +84,18 @@ test("nonoptional in object", () => {
|
|
|
84
84
|
]]
|
|
85
85
|
`);
|
|
86
86
|
});
|
|
87
|
+
|
|
88
|
+
test("encoding", () => {
|
|
89
|
+
const schema = z.string().optional().nonoptional();
|
|
90
|
+
expect(z.encode(schema, "hello")).toEqual("hello");
|
|
91
|
+
expect(() => z.encode(schema, undefined as any)).toThrowErrorMatchingInlineSnapshot(`
|
|
92
|
+
[ZodError: [
|
|
93
|
+
{
|
|
94
|
+
"code": "invalid_type",
|
|
95
|
+
"expected": "nonoptional",
|
|
96
|
+
"path": [],
|
|
97
|
+
"message": "Invalid input: expected nonoptional, received undefined"
|
|
98
|
+
}
|
|
99
|
+
]]
|
|
100
|
+
`);
|
|
101
|
+
});
|
|
@@ -114,6 +114,29 @@ test(".nonnegative() validation", () => {
|
|
|
114
114
|
expect(() => schema.parse(-1)).toThrow();
|
|
115
115
|
});
|
|
116
116
|
|
|
117
|
+
test("multipleOf", () => {
|
|
118
|
+
const numbers = {
|
|
119
|
+
number3: 5.123,
|
|
120
|
+
number6: 5.123456,
|
|
121
|
+
number7: 5.1234567,
|
|
122
|
+
number8: 5.12345678,
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const schemas = {
|
|
126
|
+
schema6: z.number().multipleOf(0.000001),
|
|
127
|
+
schema7: z.number().multipleOf(0.0000001),
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
expect(() => schemas.schema6.parse(numbers.number3)).not.toThrow();
|
|
131
|
+
expect(() => schemas.schema6.parse(numbers.number6)).not.toThrow();
|
|
132
|
+
expect(() => schemas.schema6.parse(numbers.number7)).toThrow();
|
|
133
|
+
expect(() => schemas.schema6.parse(numbers.number8)).toThrow();
|
|
134
|
+
expect(() => schemas.schema7.parse(numbers.number3)).not.toThrow();
|
|
135
|
+
expect(() => schemas.schema7.parse(numbers.number6)).not.toThrow();
|
|
136
|
+
expect(() => schemas.schema7.parse(numbers.number7)).not.toThrow();
|
|
137
|
+
expect(() => schemas.schema7.parse(numbers.number8)).toThrow();
|
|
138
|
+
});
|
|
139
|
+
|
|
117
140
|
test(".multipleOf() with positive divisor", () => {
|
|
118
141
|
const schema = z.number().multipleOf(5);
|
|
119
142
|
expect(schema.parse(15)).toEqual(15);
|
|
@@ -162,13 +162,13 @@ test("catchall overrides strict", () => {
|
|
|
162
162
|
});
|
|
163
163
|
});
|
|
164
164
|
|
|
165
|
-
test("optional keys are unset",
|
|
165
|
+
test("optional keys are unset", () => {
|
|
166
166
|
const SNamedEntity = z.object({
|
|
167
167
|
id: z.string(),
|
|
168
168
|
set: z.string().optional(),
|
|
169
169
|
unset: z.string().optional(),
|
|
170
170
|
});
|
|
171
|
-
const result =
|
|
171
|
+
const result = SNamedEntity.parse({
|
|
172
172
|
id: "asdf",
|
|
173
173
|
set: undefined,
|
|
174
174
|
});
|
|
@@ -261,6 +261,21 @@ test("inferred enum type", async () => {
|
|
|
261
261
|
expectTypeOf<Enum>().toEqualTypeOf<"a" | "b">();
|
|
262
262
|
});
|
|
263
263
|
|
|
264
|
+
test("z.keyof returns enum", () => {
|
|
265
|
+
const User = z.object({ name: z.string(), age: z.number() });
|
|
266
|
+
const keysSchema = z.keyof(User);
|
|
267
|
+
expect(keysSchema.enum).toEqual({
|
|
268
|
+
name: "name",
|
|
269
|
+
age: "age",
|
|
270
|
+
});
|
|
271
|
+
expect(keysSchema._zod.def.entries).toEqual({
|
|
272
|
+
name: "name",
|
|
273
|
+
age: "age",
|
|
274
|
+
});
|
|
275
|
+
type Keys = z.infer<typeof keysSchema>;
|
|
276
|
+
expectTypeOf<Keys>().toEqualTypeOf<"name" | "age">();
|
|
277
|
+
});
|
|
278
|
+
|
|
264
279
|
test("inferred partial object type with optional properties", async () => {
|
|
265
280
|
const Partial = z.object({ a: z.string(), b: z.string().optional() }).partial();
|
|
266
281
|
type Partial = z.infer<typeof Partial>;
|
|
@@ -420,6 +435,17 @@ test("extend() should have power to override existing key", () => {
|
|
|
420
435
|
expectTypeOf<PersonWithNumberAsLastName>().toEqualTypeOf<{ firstName: string; lastName: number }>();
|
|
421
436
|
});
|
|
422
437
|
|
|
438
|
+
test("safeExtend() maintains refinements", () => {
|
|
439
|
+
const schema = z.object({ name: z.string().min(1) });
|
|
440
|
+
const extended = schema.safeExtend({ name: z.string().min(2) });
|
|
441
|
+
expect(() => extended.parse({ name: "" })).toThrow();
|
|
442
|
+
expect(extended.parse({ name: "ab" })).toEqual({ name: "ab" });
|
|
443
|
+
type Extended = z.infer<typeof extended>;
|
|
444
|
+
expectTypeOf<Extended>().toEqualTypeOf<{ name: string }>();
|
|
445
|
+
// @ts-expect-error
|
|
446
|
+
schema.safeExtend({ name: z.number() });
|
|
447
|
+
});
|
|
448
|
+
|
|
423
449
|
test("passthrough index signature", () => {
|
|
424
450
|
const a = z.object({ a: z.string() });
|
|
425
451
|
type a = z.infer<typeof a>;
|
|
@@ -561,3 +587,23 @@ test("index signature in shape", () => {
|
|
|
561
587
|
|
|
562
588
|
expectTypeOf<schema>().toEqualTypeOf<Record<string, string>>();
|
|
563
589
|
});
|
|
590
|
+
|
|
591
|
+
test("extent() on object with refinements should throw", () => {
|
|
592
|
+
const schema = z
|
|
593
|
+
.object({
|
|
594
|
+
a: z.string(),
|
|
595
|
+
})
|
|
596
|
+
.refine(() => true);
|
|
597
|
+
|
|
598
|
+
expect(() => schema.extend({ b: z.string() })).toThrow();
|
|
599
|
+
});
|
|
600
|
+
|
|
601
|
+
test("safeExtend() on object with refinements should not throw", () => {
|
|
602
|
+
const schema = z
|
|
603
|
+
.object({
|
|
604
|
+
a: z.string(),
|
|
605
|
+
})
|
|
606
|
+
.refine(() => true);
|
|
607
|
+
|
|
608
|
+
expect(() => schema.safeExtend({ b: z.string() })).not.toThrow();
|
|
609
|
+
});
|
|
@@ -121,3 +121,16 @@ test("pipe optionality inside objects", () => {
|
|
|
121
121
|
e: string;
|
|
122
122
|
}>();
|
|
123
123
|
});
|
|
124
|
+
|
|
125
|
+
test("optional prop with pipe", () => {
|
|
126
|
+
const schema = z.object({
|
|
127
|
+
id: z
|
|
128
|
+
.union([z.number(), z.string().nullish()])
|
|
129
|
+
.transform((val) => (val === null || val === undefined ? val : Number(val)))
|
|
130
|
+
.pipe(z.number())
|
|
131
|
+
.optional(),
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
schema.parse({});
|
|
135
|
+
schema.parse({}, { jitless: true });
|
|
136
|
+
});
|