@oxog/vld 2.0.3 → 2.2.5
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/CHANGELOG.md +120 -1
- package/README.md +1296 -1171
- package/dist/chunks/errors-core-Cqi4-9ew.js +1 -0
- package/dist/chunks/index-CkbfQQ4n.js +1 -0
- package/dist/chunks/index-yjpbvFgw.js +1 -0
- package/dist/chunks/ip-validation-g5LWgy9t.js +1 -0
- package/dist/chunks/security-Dy24T8N7.js +1 -0
- package/dist/cjs/chunks/errors-core-DKPohm9I.cjs +1 -0
- package/dist/cjs/chunks/index-BEV9nG0N.cjs +1 -0
- package/dist/cjs/chunks/index-ZjHAxYdA.cjs +1 -0
- package/dist/cjs/chunks/ip-validation-BZqPamPC.cjs +1 -0
- package/dist/cjs/chunks/security-aXZVI7qW.cjs +1 -0
- package/dist/cjs/cli/bin.cjs +2 -0
- package/dist/cjs/cli/index.cjs +1 -0
- package/dist/cjs/codecs/index.cjs +1 -0
- package/dist/cjs/coercion/index.cjs +1 -0
- package/dist/cjs/compat/emitter.cjs +1 -0
- package/dist/cjs/compat/result.cjs +1 -0
- package/dist/cjs/errors.cjs +1 -387
- package/dist/cjs/index.cjs +1 -10759
- package/dist/cjs/kernel.cjs +1 -0
- package/dist/cjs/locales/af.cjs +1 -0
- package/dist/cjs/locales/ar.cjs +1 -0
- package/dist/cjs/locales/bn.cjs +1 -0
- package/dist/cjs/locales/da.cjs +1 -0
- package/dist/cjs/locales/de.cjs +1 -0
- package/dist/cjs/locales/en.cjs +1 -0
- package/dist/cjs/locales/es-MX.cjs +1 -0
- package/dist/cjs/locales/es.cjs +1 -0
- package/dist/cjs/locales/fi.cjs +1 -0
- package/dist/cjs/locales/fr.cjs +1 -0
- package/dist/cjs/locales/hi.cjs +1 -0
- package/dist/cjs/locales/id.cjs +1 -0
- package/dist/cjs/locales/index.cjs +1 -2877
- package/dist/cjs/locales/it.cjs +1 -0
- package/dist/cjs/locales/ja.cjs +1 -0
- package/dist/cjs/locales/ko.cjs +1 -0
- package/dist/cjs/locales/lazy.cjs +1 -3169
- package/dist/cjs/locales/nl.cjs +1 -0
- package/dist/cjs/locales/no.cjs +1 -0
- package/dist/cjs/locales/pl.cjs +1 -0
- package/dist/cjs/locales/pt-BR.cjs +1 -0
- package/dist/cjs/locales/pt.cjs +1 -0
- package/dist/cjs/locales/ru.cjs +1 -0
- package/dist/cjs/locales/runtime.cjs +1 -0
- package/dist/cjs/locales/sv.cjs +1 -0
- package/dist/cjs/locales/sw.cjs +1 -0
- package/dist/cjs/locales/th.cjs +1 -0
- package/dist/cjs/locales/tr.cjs +1 -0
- package/dist/cjs/locales/vi.cjs +1 -0
- package/dist/cjs/locales/zh.cjs +1 -0
- package/dist/cjs/mini.cjs +1 -7474
- package/dist/cjs/pigment.cjs +1 -0
- package/dist/cjs/plugins/index.cjs +1 -0
- package/dist/cjs/registry.cjs +1 -0
- package/dist/cjs/v3/index.cjs +1 -0
- package/dist/cjs/v4/core/index.cjs +1 -0
- package/dist/cjs/v4/index.cjs +1 -0
- package/dist/cjs/v4/locales/index.cjs +1 -0
- package/dist/cjs/v4/mini/index.cjs +1 -0
- package/dist/cjs/v4-mini/index.cjs +1 -0
- package/dist/cjs/validators/any.cjs +1 -0
- package/dist/cjs/validators/array.cjs +1 -0
- package/dist/cjs/validators/base.cjs +1 -0
- package/dist/cjs/validators/base64.cjs +1 -0
- package/dist/cjs/validators/bigint.cjs +1 -0
- package/dist/cjs/validators/boolean.cjs +1 -0
- package/dist/cjs/validators/codec.cjs +1 -0
- package/dist/cjs/validators/custom.cjs +1 -0
- package/dist/cjs/validators/date.cjs +1 -0
- package/dist/cjs/validators/discriminated-union.cjs +1 -0
- package/dist/cjs/validators/enum.cjs +1 -0
- package/dist/cjs/validators/file.cjs +1 -0
- package/dist/cjs/validators/function.cjs +1 -0
- package/dist/cjs/validators/hex.cjs +1 -0
- package/dist/cjs/validators/index.cjs +1 -0
- package/dist/cjs/validators/intersection.cjs +1 -0
- package/dist/cjs/validators/json.cjs +1 -0
- package/dist/cjs/validators/lazy.cjs +1 -0
- package/dist/cjs/validators/literal.cjs +1 -0
- package/dist/cjs/validators/map.cjs +1 -0
- package/dist/cjs/validators/nan.cjs +1 -0
- package/dist/cjs/validators/never.cjs +1 -0
- package/dist/cjs/validators/null.cjs +1 -0
- package/dist/cjs/validators/number.cjs +1 -0
- package/dist/cjs/validators/object.cjs +1 -0
- package/dist/cjs/validators/promise.cjs +1 -0
- package/dist/cjs/validators/record.cjs +1 -0
- package/dist/cjs/validators/set.cjs +1 -0
- package/dist/cjs/validators/string-bool.cjs +1 -0
- package/dist/cjs/validators/string-formats.cjs +1 -0
- package/dist/cjs/validators/string.cjs +1 -0
- package/dist/cjs/validators/symbol.cjs +1 -0
- package/dist/cjs/validators/template-literal.cjs +1 -0
- package/dist/cjs/validators/tuple.cjs +1 -0
- package/dist/cjs/validators/uint8array.cjs +1 -0
- package/dist/cjs/validators/undefined.cjs +1 -0
- package/dist/cjs/validators/union.cjs +1 -0
- package/dist/cjs/validators/unknown.cjs +1 -0
- package/dist/cjs/validators/void.cjs +1 -0
- package/dist/cjs/validators/xor.cjs +1 -0
- package/dist/cli/bin.d.ts +0 -1
- package/dist/cli/bin.js +2 -0
- package/dist/cli/commands/benchmark.d.ts +1 -2
- package/dist/cli/commands/validate.d.ts +1 -2
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +1 -0
- package/dist/codecs/index.d.ts +21 -4
- package/dist/codecs/index.js +1 -4
- package/dist/coercion/bigint.d.ts +2 -3
- package/dist/coercion/boolean.d.ts +3 -3
- package/dist/coercion/date.d.ts +3 -3
- package/dist/coercion/index.d.ts +5 -6
- package/dist/coercion/index.js +1 -111
- package/dist/coercion/number.d.ts +2 -3
- package/dist/coercion/string.d.ts +2 -3
- package/dist/compat/emitter.d.ts +0 -1
- package/dist/compat/emitter.js +1 -181
- package/dist/compat/index.d.ts +4 -5
- package/dist/compat/result.d.ts +1 -2
- package/dist/compat/result.js +1 -171
- package/dist/errors-core.d.ts +58 -0
- package/dist/errors.d.ts +4 -54
- package/dist/errors.js +1 -235
- package/dist/events.d.ts +3 -4
- package/dist/index.d.ts +1093 -851
- package/dist/index.js +1 -855
- package/dist/kernel.d.ts +2 -3
- package/dist/kernel.js +1 -405
- package/dist/locales/af.d.ts +1 -2
- package/dist/locales/af.js +1 -107
- package/dist/locales/ar.d.ts +1 -2
- package/dist/locales/ar.js +1 -107
- package/dist/locales/bn.d.ts +1 -2
- package/dist/locales/bn.js +1 -107
- package/dist/locales/da.d.ts +1 -2
- package/dist/locales/da.js +1 -107
- package/dist/locales/de.d.ts +1 -2
- package/dist/locales/de.js +1 -107
- package/dist/locales/en.d.ts +1 -2
- package/dist/locales/en.js +1 -107
- package/dist/locales/es-MX.d.ts +1 -2
- package/dist/locales/es-MX.js +1 -106
- package/dist/locales/es.d.ts +1 -2
- package/dist/locales/es.js +1 -95
- package/dist/locales/fi.d.ts +1 -2
- package/dist/locales/fi.js +1 -107
- package/dist/locales/fr.d.ts +1 -2
- package/dist/locales/fr.js +1 -95
- package/dist/locales/hi.d.ts +1 -2
- package/dist/locales/hi.js +1 -107
- package/dist/locales/id.d.ts +1 -2
- package/dist/locales/id.js +1 -107
- package/dist/locales/index.d.ts +10 -15
- package/dist/locales/index.js +1 -3
- package/dist/locales/it.d.ts +1 -2
- package/dist/locales/it.js +1 -107
- package/dist/locales/ja.d.ts +1 -2
- package/dist/locales/ja.js +1 -107
- package/dist/locales/ko.d.ts +1 -2
- package/dist/locales/ko.js +1 -107
- package/dist/locales/lazy.d.ts +4 -26
- package/dist/locales/lazy.js +1 -220
- package/dist/locales/nl.d.ts +1 -2
- package/dist/locales/nl.js +1 -107
- package/dist/locales/no.d.ts +1 -2
- package/dist/locales/no.js +1 -107
- package/dist/locales/pl.d.ts +1 -2
- package/dist/locales/pl.js +1 -107
- package/dist/locales/pt-BR.d.ts +1 -2
- package/dist/locales/pt-BR.js +1 -107
- package/dist/locales/pt.d.ts +1 -2
- package/dist/locales/pt.js +1 -107
- package/dist/locales/ru.d.ts +1 -2
- package/dist/locales/ru.js +1 -107
- package/dist/locales/runtime.d.ts +10 -0
- package/dist/locales/runtime.js +1 -0
- package/dist/locales/sv.d.ts +1 -2
- package/dist/locales/sv.js +1 -107
- package/dist/locales/sw.d.ts +1 -2
- package/dist/locales/sw.js +1 -107
- package/dist/locales/th.d.ts +1 -2
- package/dist/locales/th.js +1 -107
- package/dist/locales/tr.d.ts +1 -2
- package/dist/locales/tr.js +1 -107
- package/dist/locales/types.d.ts +0 -1
- package/dist/locales/vi.d.ts +1 -2
- package/dist/locales/vi.js +1 -107
- package/dist/locales/zh.d.ts +1 -2
- package/dist/locales/zh.js +1 -107
- package/dist/logger.d.ts +0 -1
- package/dist/mini.d.ts +67 -68
- package/dist/mini.js +1 -132
- package/dist/pigment.d.ts +0 -1
- package/dist/pigment.js +1 -178
- package/dist/plugins/index.d.ts +2 -3
- package/dist/plugins/index.js +1 -0
- package/dist/plugins/types.d.ts +4 -5
- package/dist/registry.d.ts +23 -0
- package/dist/registry.js +1 -0
- package/dist/utils/codec-utils.d.ts +0 -1
- package/dist/utils/deep-merge.d.ts +0 -1
- package/dist/utils/ip-validation.d.ts +0 -1
- package/dist/utils/json-schema.d.ts +26 -7
- package/dist/utils/security.d.ts +2 -6
- package/dist/v3/index.d.ts +2 -0
- package/dist/v3/index.js +1 -0
- package/dist/v4/core/index.d.ts +272 -0
- package/dist/v4/core/index.js +1 -0
- package/dist/v4/index.d.ts +4 -0
- package/dist/v4/index.js +1 -0
- package/dist/v4/locales/index.d.ts +57 -0
- package/dist/v4/locales/index.js +1 -0
- package/dist/v4/mini/index.d.ts +2 -0
- package/dist/v4/mini/index.js +1 -0
- package/dist/v4-mini/index.d.ts +22 -0
- package/dist/v4-mini/index.js +1 -0
- package/dist/validators/any.d.ts +7 -2
- package/dist/validators/any.js +1 -0
- package/dist/validators/array.d.ts +16 -2
- package/dist/validators/array.js +1 -0
- package/dist/validators/base.d.ts +213 -14
- package/dist/validators/base.js +1 -0
- package/dist/validators/base64.d.ts +1 -2
- package/dist/validators/base64.js +1 -0
- package/dist/validators/bigint.d.ts +21 -3
- package/dist/validators/bigint.js +1 -0
- package/dist/validators/boolean.d.ts +13 -4
- package/dist/validators/boolean.js +1 -0
- package/dist/validators/codec.d.ts +9 -2
- package/dist/validators/codec.js +1 -0
- package/dist/validators/custom.d.ts +15 -2
- package/dist/validators/custom.js +1 -0
- package/dist/validators/date.d.ts +19 -3
- package/dist/validators/date.js +1 -0
- package/dist/validators/discriminated-union.d.ts +6 -5
- package/dist/validators/discriminated-union.js +1 -0
- package/dist/validators/enum.d.ts +10 -7
- package/dist/validators/enum.js +1 -0
- package/dist/validators/file.d.ts +7 -2
- package/dist/validators/file.js +1 -0
- package/dist/validators/function.d.ts +11 -5
- package/dist/validators/function.js +1 -0
- package/dist/validators/hex.d.ts +1 -2
- package/dist/validators/hex.js +1 -0
- package/dist/validators/index.d.ts +38 -39
- package/dist/validators/index.js +1 -515
- package/dist/validators/intersection.d.ts +1 -2
- package/dist/validators/intersection.js +1 -0
- package/dist/validators/json.d.ts +1 -2
- package/dist/validators/json.js +1 -0
- package/dist/validators/lazy.d.ts +5 -9
- package/dist/validators/lazy.js +1 -0
- package/dist/validators/literal.d.ts +9 -5
- package/dist/validators/literal.js +1 -0
- package/dist/validators/map.d.ts +15 -2
- package/dist/validators/map.js +1 -0
- package/dist/validators/nan.d.ts +2 -3
- package/dist/validators/nan.js +1 -0
- package/dist/validators/never.d.ts +1 -2
- package/dist/validators/never.js +1 -0
- package/dist/validators/null.d.ts +3 -3
- package/dist/validators/null.js +1 -0
- package/dist/validators/number.d.ts +75 -27
- package/dist/validators/number.js +1 -0
- package/dist/validators/object.d.ts +42 -11
- package/dist/validators/object.js +1 -0
- package/dist/validators/promise.d.ts +15 -10
- package/dist/validators/promise.js +1 -0
- package/dist/validators/record.d.ts +21 -9
- package/dist/validators/record.js +1 -0
- package/dist/validators/set.d.ts +11 -2
- package/dist/validators/set.js +1 -0
- package/dist/validators/string-bool.d.ts +7 -10
- package/dist/validators/string-bool.js +1 -0
- package/dist/validators/string-formats.d.ts +64 -65
- package/dist/validators/string-formats.js +1 -0
- package/dist/validators/string.d.ts +84 -26
- package/dist/validators/string.js +1 -0
- package/dist/validators/symbol.d.ts +8 -3
- package/dist/validators/symbol.js +1 -0
- package/dist/validators/template-literal.d.ts +1 -2
- package/dist/validators/template-literal.js +1 -0
- package/dist/validators/tuple.d.ts +29 -12
- package/dist/validators/tuple.js +1 -0
- package/dist/validators/uint8array.d.ts +3 -4
- package/dist/validators/uint8array.js +1 -0
- package/dist/validators/undefined.d.ts +3 -3
- package/dist/validators/undefined.js +1 -0
- package/dist/validators/union.d.ts +7 -4
- package/dist/validators/union.js +1 -0
- package/dist/validators/unknown.d.ts +7 -2
- package/dist/validators/unknown.js +1 -0
- package/dist/validators/void.d.ts +3 -2
- package/dist/validators/void.js +1 -0
- package/dist/validators/xor.d.ts +4 -5
- package/dist/validators/xor.js +1 -0
- package/package.json +239 -154
- package/dist/chunks/bigint-CRS0QVsy.js +0 -1854
- package/dist/chunks/bigint-CRS0QVsy.js.map +0 -1
- package/dist/chunks/date-50JV_Mfj.js +0 -506
- package/dist/chunks/date-50JV_Mfj.js.map +0 -1
- package/dist/chunks/index-DO8CFMxD.js +0 -894
- package/dist/chunks/index-DO8CFMxD.js.map +0 -1
- package/dist/chunks/json-Cp4WO0M9.js +0 -2021
- package/dist/chunks/json-Cp4WO0M9.js.map +0 -1
- package/dist/chunks/unknown-Dhzri_T-.js +0 -28
- package/dist/chunks/unknown-Dhzri_T-.js.map +0 -1
- package/dist/cjs/errors.cjs.map +0 -1
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/locales/index.cjs.map +0 -1
- package/dist/cjs/locales/lazy.cjs.map +0 -1
- package/dist/cjs/mini.cjs.map +0 -1
- package/dist/cli/bin.d.ts.map +0 -1
- package/dist/cli/commands/benchmark.d.ts.map +0 -1
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/codecs/index.d.ts.map +0 -1
- package/dist/codecs/index.js.map +0 -1
- package/dist/coercion/bigint.d.ts.map +0 -1
- package/dist/coercion/boolean.d.ts.map +0 -1
- package/dist/coercion/date.d.ts.map +0 -1
- package/dist/coercion/index.d.ts.map +0 -1
- package/dist/coercion/index.js.map +0 -1
- package/dist/coercion/number.d.ts.map +0 -1
- package/dist/coercion/string.d.ts.map +0 -1
- package/dist/compat/emitter.d.ts.map +0 -1
- package/dist/compat/emitter.js.map +0 -1
- package/dist/compat/index.d.ts.map +0 -1
- package/dist/compat/result.d.ts.map +0 -1
- package/dist/compat/result.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/events.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kernel.d.ts.map +0 -1
- package/dist/kernel.js.map +0 -1
- package/dist/locales/af.d.ts.map +0 -1
- package/dist/locales/af.js.map +0 -1
- package/dist/locales/ar.d.ts.map +0 -1
- package/dist/locales/ar.js.map +0 -1
- package/dist/locales/backup-en.d.ts +0 -3
- package/dist/locales/backup-en.d.ts.map +0 -1
- package/dist/locales/bn.d.ts.map +0 -1
- package/dist/locales/bn.js.map +0 -1
- package/dist/locales/da.d.ts.map +0 -1
- package/dist/locales/da.js.map +0 -1
- package/dist/locales/de.d.ts.map +0 -1
- package/dist/locales/de.js.map +0 -1
- package/dist/locales/en.d.ts.map +0 -1
- package/dist/locales/en.js.map +0 -1
- package/dist/locales/es-MX.d.ts.map +0 -1
- package/dist/locales/es-MX.js.map +0 -1
- package/dist/locales/es.d.ts.map +0 -1
- package/dist/locales/es.js.map +0 -1
- package/dist/locales/fi.d.ts.map +0 -1
- package/dist/locales/fi.js.map +0 -1
- package/dist/locales/fr.d.ts.map +0 -1
- package/dist/locales/fr.js.map +0 -1
- package/dist/locales/hi.d.ts.map +0 -1
- package/dist/locales/hi.js.map +0 -1
- package/dist/locales/id.d.ts.map +0 -1
- package/dist/locales/id.js.map +0 -1
- package/dist/locales/index.d.ts.map +0 -1
- package/dist/locales/index.js.map +0 -1
- package/dist/locales/it.d.ts.map +0 -1
- package/dist/locales/it.js.map +0 -1
- package/dist/locales/ja.d.ts.map +0 -1
- package/dist/locales/ja.js.map +0 -1
- package/dist/locales/ko.d.ts.map +0 -1
- package/dist/locales/ko.js.map +0 -1
- package/dist/locales/lazy.d.ts.map +0 -1
- package/dist/locales/lazy.js.map +0 -1
- package/dist/locales/nl.d.ts.map +0 -1
- package/dist/locales/nl.js.map +0 -1
- package/dist/locales/no.d.ts.map +0 -1
- package/dist/locales/no.js.map +0 -1
- package/dist/locales/pl.d.ts.map +0 -1
- package/dist/locales/pl.js.map +0 -1
- package/dist/locales/pt-BR.d.ts.map +0 -1
- package/dist/locales/pt-BR.js.map +0 -1
- package/dist/locales/pt.d.ts.map +0 -1
- package/dist/locales/pt.js.map +0 -1
- package/dist/locales/ru.d.ts.map +0 -1
- package/dist/locales/ru.js.map +0 -1
- package/dist/locales/sv.d.ts.map +0 -1
- package/dist/locales/sv.js.map +0 -1
- package/dist/locales/sw.d.ts.map +0 -1
- package/dist/locales/sw.js.map +0 -1
- package/dist/locales/th.d.ts.map +0 -1
- package/dist/locales/th.js.map +0 -1
- package/dist/locales/tr.d.ts.map +0 -1
- package/dist/locales/tr.js.map +0 -1
- package/dist/locales/types.d.ts.map +0 -1
- package/dist/locales/vi.d.ts.map +0 -1
- package/dist/locales/vi.js.map +0 -1
- package/dist/locales/zh.d.ts.map +0 -1
- package/dist/locales/zh.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/mini.d.ts.map +0 -1
- package/dist/mini.js.map +0 -1
- package/dist/pigment.d.ts.map +0 -1
- package/dist/pigment.js.map +0 -1
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/utils/codec-utils.d.ts.map +0 -1
- package/dist/utils/deep-merge.d.ts.map +0 -1
- package/dist/utils/ip-validation.d.ts.map +0 -1
- package/dist/utils/json-schema.d.ts.map +0 -1
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/validators/any.d.ts.map +0 -1
- package/dist/validators/array.d.ts.map +0 -1
- package/dist/validators/base.d.ts.map +0 -1
- package/dist/validators/base64.d.ts.map +0 -1
- package/dist/validators/bigint.d.ts.map +0 -1
- package/dist/validators/boolean.d.ts.map +0 -1
- package/dist/validators/codec.d.ts.map +0 -1
- package/dist/validators/custom.d.ts.map +0 -1
- package/dist/validators/date.d.ts.map +0 -1
- package/dist/validators/discriminated-union.d.ts.map +0 -1
- package/dist/validators/enum.d.ts.map +0 -1
- package/dist/validators/file.d.ts.map +0 -1
- package/dist/validators/function.d.ts.map +0 -1
- package/dist/validators/hex.d.ts.map +0 -1
- package/dist/validators/index.d.ts.map +0 -1
- package/dist/validators/index.js.map +0 -1
- package/dist/validators/intersection.d.ts.map +0 -1
- package/dist/validators/json.d.ts.map +0 -1
- package/dist/validators/lazy.d.ts.map +0 -1
- package/dist/validators/literal.d.ts.map +0 -1
- package/dist/validators/map.d.ts.map +0 -1
- package/dist/validators/nan.d.ts.map +0 -1
- package/dist/validators/never.d.ts.map +0 -1
- package/dist/validators/null.d.ts.map +0 -1
- package/dist/validators/number.d.ts.map +0 -1
- package/dist/validators/object.d.ts.map +0 -1
- package/dist/validators/promise.d.ts.map +0 -1
- package/dist/validators/record.d.ts.map +0 -1
- package/dist/validators/set.d.ts.map +0 -1
- package/dist/validators/string-bool.d.ts.map +0 -1
- package/dist/validators/string-formats.d.ts.map +0 -1
- package/dist/validators/string.d.ts.map +0 -1
- package/dist/validators/symbol.d.ts.map +0 -1
- package/dist/validators/template-literal.d.ts.map +0 -1
- package/dist/validators/tuple.d.ts.map +0 -1
- package/dist/validators/uint8array.d.ts.map +0 -1
- package/dist/validators/undefined.d.ts.map +0 -1
- package/dist/validators/union.d.ts.map +0 -1
- package/dist/validators/unknown.d.ts.map +0 -1
- package/dist/validators/void.d.ts.map +0 -1
- package/dist/validators/xor.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{getMessages as t}from"../locales/runtime.js";import{V as i}from"../chunks/errors-core-Cqi4-9ew.js";class VldMap extends e{constructor(e,t,i){super(r.MAP),this.keyValidator=e,this.valueValidator=t,this.errorMessage=i,this._simpleKeyMode=this.getSimpleItemMode(e),this._simpleValueMode=this.getSimpleItemMode(t),this._simpleKeyValue="literal"===this._simpleKeyMode?e.literal:void 0,this._simpleValueValue="literal"===this._simpleValueMode?t.literal:void 0}get keySchema(){return this.keyValidator}get valueSchema(){return this.valueValidator}static create(e,r){return new VldMap(e,r)}getSimpleItemMode(e){if(!0===e.isSimple)switch(e.validatorType){case r.STRING:return"string";case r.NUMBER:return"number";case r.BOOLEAN:return"boolean";case r.BIGINT:return"bigint";case r.SYMBOL:return"symbol";case r.NULL:return"null";case r.UNDEFINED:case r.VOID:return"undefinedValue";case r.LITERAL:return"literal";case r.ANY:case r.UNKNOWN:return"passthrough";default:return}}getSimpleItemError(e,r,i){switch(e){case"string":return t().invalidString;case"number":return t().invalidNumber;case"boolean":return t().invalidBoolean;case"bigint":return t().invalidBigint;case"symbol":return t().invalidSymbol;case"null":return"Expected null, received "+typeof i;case"undefinedValue":return t().expectedUndefined;case"literal":return t().literalExpected(JSON.stringify(r),JSON.stringify(i));default:return t().invalidMap}}parseSimpleItem(e,r,t){switch(e){case"string":if("string"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"number":if("number"!=typeof t||isNaN(t))throw new Error(this.getSimpleItemError(e,r,t));return t;case"boolean":if("boolean"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"bigint":if("bigint"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"symbol":if("symbol"!=typeof t)throw new Error(this.getSimpleItemError(e,r,t));return t;case"null":if(null!==t)throw new Error(this.getSimpleItemError(e,r,t));return null;case"undefinedValue":if(void 0!==t)throw new Error(this.getSimpleItemError(e,r,t));return;case"literal":if(t!==r)throw new Error(this.getSimpleItemError(e,r,t));return r;case"passthrough":return t}}parse(e){if(!(e instanceof Map))throw new Error(this.errorMessage||t().invalidMap);return this.parseKnownMap(e)}parseKnownMap(e){const r=new Map,t=this._simpleKeyMode,i=this._simpleValueMode;if("string"===t&&"number"===i){for(const[s,a]of e){if("string"!=typeof s)throw new Error(this.getSimpleItemError(t,this._simpleKeyValue,s));if("number"!=typeof a||isNaN(a))throw new Error(this.getSimpleItemError(i,this._simpleValueValue,a));r.set(s,a)}return r}if("string"===t&&"string"===i){for(const[s,a]of e){if("string"!=typeof s)throw new Error(this.getSimpleItemError(t,this._simpleKeyValue,s));if("string"!=typeof a)throw new Error(this.getSimpleItemError(i,this._simpleValueValue,a));r.set(s,a)}return r}if(void 0!==t&&void 0!==i){const s=t,a=i;for(const[t,i]of e){const e=this.parseSimpleItem(s,this._simpleKeyValue,t),o=this.parseSimpleItem(a,this._simpleValueValue,i);r.set(e,o)}return r}for(const[s,a]of e)try{const e=void 0===t?this.keyValidator.parse(s):this.parseSimpleItem(t,this._simpleKeyValue,s),o=void 0===i?this.valueValidator.parse(a):this.parseSimpleItem(i,this._simpleValueValue,a);r.set(e,o)}catch(e){throw new Error(e.message)}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new i([{code:"invalid_type",path:[],message:r}]))}}var r}}export{VldMap};
|
package/dist/validators/nan.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* VldNan - Validates that a value is NaN (Not a Number)
|
|
3
3
|
* Part of Zod 4 API parity implementation
|
|
4
4
|
*/
|
|
5
|
-
import { VldBase } from './base';
|
|
6
|
-
import type { ParseResult } from './base';
|
|
5
|
+
import { VldBase } from './base.js';
|
|
6
|
+
import type { ParseResult } from './base.js';
|
|
7
7
|
/**
|
|
8
8
|
* NaN validator - validates that a value is NaN
|
|
9
9
|
* Note: Uses Number.isNaN() which is more strict than global isNaN()
|
|
@@ -14,4 +14,3 @@ export declare class VldNan extends VldBase<unknown, number> {
|
|
|
14
14
|
parse(value: unknown): number;
|
|
15
15
|
safeParse(value: unknown): ParseResult<number>;
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=nan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{V as s}from"../chunks/errors-core-Cqi4-9ew.js";class VldNan extends e{constructor(){super(r.NAN)}static create(){return new VldNan}parse(e){if("number"!=typeof e||!Number.isNaN(e))throw new Error("Expected NaN, received "+("number"==typeof e?"a valid number":typeof e));return e}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new s([{code:"invalid_number",path:[],message:r}]))}}var r}}export{VldNan};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
2
|
/**
|
|
3
3
|
* Validator that never succeeds
|
|
4
4
|
*/
|
|
@@ -16,4 +16,3 @@ export declare class VldNever extends VldBase<never, never> {
|
|
|
16
16
|
*/
|
|
17
17
|
safeParse(_value: unknown): ParseResult<never>;
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=never.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e}from"./base.js";import{getMessages as r}from"../locales/runtime.js";import{V as s}from"../chunks/errors-core-Cqi4-9ew.js";class VldNever extends e{static create(){return new VldNever}parse(e){throw new Error(r().neverType)}safeParse(e){return{success:!1,error:new s([{code:"invalid_type",path:[],message:r().neverType}])}}}export{VldNever};
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
* VldNull - Validates that a value is exactly null
|
|
3
3
|
* Part of Zod 4 API parity implementation
|
|
4
4
|
*/
|
|
5
|
-
import { VldBase } from './base';
|
|
6
|
-
import type { ParseResult } from './base';
|
|
5
|
+
import { VldBase } from './base.js';
|
|
6
|
+
import type { ParseResult } from './base.js';
|
|
7
7
|
/**
|
|
8
8
|
* Null validator - validates that a value is exactly null
|
|
9
9
|
*/
|
|
10
10
|
export declare class VldNull extends VldBase<unknown, null> {
|
|
11
11
|
private constructor();
|
|
12
12
|
static create(): VldNull;
|
|
13
|
+
get isSimple(): boolean;
|
|
13
14
|
parse(value: unknown): null;
|
|
14
15
|
safeParse(value: unknown): ParseResult<null>;
|
|
15
16
|
}
|
|
16
|
-
//# sourceMappingURL=null.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{V as s}from"../chunks/errors-core-Cqi4-9ew.js";class VldNull extends e{constructor(){super(r.NULL)}static create(){return new VldNull}get isSimple(){return!0}parse(e){if(null!==e)throw new Error("Expected null, received "+typeof e);return null}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new s([{code:"invalid_type",path:[],message:r}]))}}var r}}export{VldNull};
|
|
@@ -1,32 +1,81 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult, ValidatorType, type ErrorParam } from './base.js';
|
|
2
2
|
/**
|
|
3
3
|
* Type for number validation check functions
|
|
4
4
|
*/
|
|
5
5
|
type NumberCheck = (value: number) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Metadata for a single number constraint, enabling Zod 4-compatible issues.
|
|
8
|
+
*/
|
|
9
|
+
interface NumberCheckMeta {
|
|
10
|
+
readonly kind: 'min' | 'max' | 'int' | 'gt' | 'lt' | 'multiple_of' | 'finite' | 'safe' | 'other';
|
|
11
|
+
readonly value?: number;
|
|
12
|
+
readonly inclusive?: boolean;
|
|
13
|
+
readonly message: string | undefined;
|
|
14
|
+
}
|
|
15
|
+
interface NumberJSONSchemaHints {
|
|
16
|
+
type?: 'number' | 'integer';
|
|
17
|
+
minimum?: number;
|
|
18
|
+
maximum?: number;
|
|
19
|
+
exclusiveMinimum?: number;
|
|
20
|
+
exclusiveMaximum?: number;
|
|
21
|
+
multipleOf?: number;
|
|
22
|
+
}
|
|
6
23
|
/**
|
|
7
24
|
* Configuration for number validator
|
|
8
25
|
*/
|
|
9
26
|
interface NumberValidatorConfig {
|
|
10
27
|
readonly checks: ReadonlyArray<NumberCheck>;
|
|
11
|
-
readonly errorMessage
|
|
28
|
+
readonly errorMessage: string | undefined;
|
|
29
|
+
readonly validatorType?: ValidatorType;
|
|
30
|
+
readonly jsonSchema: NumberJSONSchemaHints | undefined;
|
|
31
|
+
readonly checkMetas: ReadonlyArray<NumberCheckMeta> | undefined;
|
|
12
32
|
}
|
|
13
33
|
/**
|
|
14
34
|
* Immutable number validator with chainable methods
|
|
15
35
|
*/
|
|
16
36
|
export declare class VldNumber extends VldBase<number, number> {
|
|
17
37
|
protected readonly config: NumberValidatorConfig;
|
|
38
|
+
private readonly _checks;
|
|
39
|
+
private readonly _isSimple;
|
|
40
|
+
private readonly _fastCheckMode;
|
|
41
|
+
private readonly _checkMetas;
|
|
18
42
|
/**
|
|
19
43
|
* Protected constructor to allow extension while maintaining immutability
|
|
20
44
|
*/
|
|
21
45
|
protected constructor(config?: Partial<NumberValidatorConfig>);
|
|
46
|
+
private detectFastCheckMode;
|
|
47
|
+
/**
|
|
48
|
+
* Returns true if this validator has custom checks (min, max, positive, etc.)
|
|
49
|
+
* Used by VldObject for optimized fast-path dispatch
|
|
50
|
+
*/
|
|
51
|
+
get hasCustomChecks(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Returns true if this is a simple number validator with no custom checks
|
|
54
|
+
* Used by VldObject for optimized fast-path dispatch
|
|
55
|
+
*/
|
|
56
|
+
get isSimple(): boolean;
|
|
22
57
|
/**
|
|
23
58
|
* Create a new number validator
|
|
24
59
|
*/
|
|
25
60
|
static create(): VldNumber;
|
|
26
61
|
/**
|
|
27
62
|
* Parse and validate a number value
|
|
63
|
+
* Zod 4 behavior: Infinity and NaN are rejected by default (they are not valid numbers).
|
|
28
64
|
*/
|
|
29
65
|
parse(value: unknown): number;
|
|
66
|
+
/**
|
|
67
|
+
* Build the Zod 4-compatible VldIssue for a failed number check.
|
|
68
|
+
*/
|
|
69
|
+
private _createCheckIssue;
|
|
70
|
+
/**
|
|
71
|
+
* Run all checks against a known number and return the index of the first failing check, or -1.
|
|
72
|
+
*/
|
|
73
|
+
private _findFailingCheck;
|
|
74
|
+
/**
|
|
75
|
+
* Parse a value that has already passed the number type guard.
|
|
76
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
77
|
+
*/
|
|
78
|
+
parseKnownNumber(value: number): number;
|
|
30
79
|
/**
|
|
31
80
|
* Safely parse and validate a number value
|
|
32
81
|
*/
|
|
@@ -34,111 +83,110 @@ export declare class VldNumber extends VldBase<number, number> {
|
|
|
34
83
|
/**
|
|
35
84
|
* Create a new validator with minimum value constraint
|
|
36
85
|
*/
|
|
37
|
-
min(value: number, message?:
|
|
86
|
+
min(value: number, message?: ErrorParam): VldNumber;
|
|
38
87
|
/**
|
|
39
88
|
* Create a new validator with maximum value constraint
|
|
40
89
|
*/
|
|
41
|
-
max(value: number, message?:
|
|
90
|
+
max(value: number, message?: ErrorParam): VldNumber;
|
|
42
91
|
/**
|
|
43
92
|
* Create a new validator that checks for integer values
|
|
44
93
|
*/
|
|
45
|
-
int(message?:
|
|
94
|
+
int(message?: ErrorParam): VldNumber;
|
|
46
95
|
/**
|
|
47
96
|
* Create a new validator that checks for positive values
|
|
48
97
|
*/
|
|
49
|
-
positive(message?:
|
|
98
|
+
positive(message?: ErrorParam): VldNumber;
|
|
50
99
|
/**
|
|
51
100
|
* Create a new validator that checks for negative values
|
|
52
101
|
*/
|
|
53
|
-
negative(message?:
|
|
102
|
+
negative(message?: ErrorParam): VldNumber;
|
|
54
103
|
/**
|
|
55
104
|
* Create a new validator that checks for non-negative values
|
|
56
105
|
*/
|
|
57
|
-
nonnegative(message?:
|
|
106
|
+
nonnegative(message?: ErrorParam): VldNumber;
|
|
58
107
|
/**
|
|
59
108
|
* Create a new validator that checks for non-positive values
|
|
60
109
|
*/
|
|
61
|
-
nonpositive(message?:
|
|
110
|
+
nonpositive(message?: ErrorParam): VldNumber;
|
|
62
111
|
/**
|
|
63
112
|
* Create a new validator that checks for finite values
|
|
64
113
|
*/
|
|
65
|
-
finite(message?:
|
|
114
|
+
finite(message?: ErrorParam): VldNumber;
|
|
66
115
|
/**
|
|
67
116
|
* Create a new validator that checks for safe integer values
|
|
68
117
|
*/
|
|
69
|
-
safe(message?:
|
|
118
|
+
safe(message?: ErrorParam): VldNumber;
|
|
70
119
|
/**
|
|
71
120
|
* Create a new validator that checks if value is multiple of another
|
|
72
121
|
*/
|
|
73
|
-
multipleOf(value: number, message?:
|
|
122
|
+
multipleOf(value: number, message?: ErrorParam): VldNumber;
|
|
74
123
|
/**
|
|
75
124
|
* Alias for multipleOf
|
|
76
125
|
*/
|
|
77
|
-
step(value: number, message?:
|
|
126
|
+
step(value: number, message?: ErrorParam): VldNumber;
|
|
78
127
|
/**
|
|
79
128
|
* Create a new validator with a range constraint
|
|
80
129
|
*/
|
|
81
|
-
between(min: number, max: number, message?:
|
|
130
|
+
between(min: number, max: number, message?: ErrorParam): VldNumber;
|
|
82
131
|
/**
|
|
83
132
|
* Create a new validator that checks for even numbers
|
|
84
133
|
* BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)
|
|
85
134
|
*/
|
|
86
|
-
even(message?:
|
|
135
|
+
even(message?: ErrorParam): VldNumber;
|
|
87
136
|
/**
|
|
88
137
|
* Create a new validator that checks for odd numbers
|
|
89
138
|
* BUG-011 FIX: Require integers for even/odd validation (more mathematically correct)
|
|
90
139
|
*/
|
|
91
|
-
odd(message?:
|
|
140
|
+
odd(message?: ErrorParam): VldNumber;
|
|
92
141
|
/**
|
|
93
142
|
* Create a new validator with strict greater than constraint
|
|
94
143
|
* Zod 4 API parity - strictly greater than (not equal to)
|
|
95
144
|
*/
|
|
96
|
-
gt(value: number, message?:
|
|
145
|
+
gt(value: number, message?: ErrorParam): VldNumber;
|
|
97
146
|
/**
|
|
98
147
|
* Create a new validator with strict less than constraint
|
|
99
148
|
* Zod 4 API parity - strictly less than (not equal to)
|
|
100
149
|
*/
|
|
101
|
-
lt(value: number, message?:
|
|
150
|
+
lt(value: number, message?: ErrorParam): VldNumber;
|
|
102
151
|
/**
|
|
103
152
|
* Create a new validator with greater than or equal constraint
|
|
104
153
|
* Zod 4 API parity - alias for min()
|
|
105
154
|
*/
|
|
106
|
-
gte(value: number, message?:
|
|
155
|
+
gte(value: number, message?: ErrorParam): VldNumber;
|
|
107
156
|
/**
|
|
108
157
|
* Create a new validator with less than or equal constraint
|
|
109
158
|
* Zod 4 API parity - alias for max()
|
|
110
159
|
*/
|
|
111
|
-
lte(value: number, message?:
|
|
160
|
+
lte(value: number, message?: ErrorParam): VldNumber;
|
|
112
161
|
/**
|
|
113
162
|
* Create a validator for unsigned 32-bit integers
|
|
114
163
|
* Range: 0 to 4,294,967,295
|
|
115
164
|
*/
|
|
116
|
-
uint32(message?:
|
|
165
|
+
uint32(message?: ErrorParam): VldNumber;
|
|
117
166
|
/**
|
|
118
167
|
* Create a validator for unsigned 64-bit integers
|
|
119
168
|
* Range: 0 to 2^53-1 (safe integer limit)
|
|
120
169
|
*/
|
|
121
|
-
uint64(message?:
|
|
170
|
+
uint64(message?: ErrorParam): VldNumber;
|
|
122
171
|
/**
|
|
123
172
|
* Create a validator for signed 32-bit integers
|
|
124
173
|
* Range: -2,147,483,648 to 2,147,483,647
|
|
125
174
|
*/
|
|
126
|
-
int32(message?:
|
|
175
|
+
int32(message?: ErrorParam): VldNumber;
|
|
127
176
|
/**
|
|
128
177
|
* Create a validator for signed 64-bit integers
|
|
129
178
|
* Range: -(2^53-1) to 2^53-1 (safe integer limit)
|
|
130
179
|
*/
|
|
131
|
-
int64(message?:
|
|
180
|
+
int64(message?: ErrorParam): VldNumber;
|
|
132
181
|
/**
|
|
133
182
|
* Create a validator for 32-bit floats (IEEE 754 single precision)
|
|
134
183
|
* Range: -3.4e38 to 3.4e38, precision ~7 decimal digits
|
|
135
184
|
*/
|
|
136
|
-
float32(message?:
|
|
185
|
+
float32(message?: ErrorParam): VldNumber;
|
|
137
186
|
/**
|
|
138
187
|
* Create a validator for 64-bit floats (IEEE 754 double precision)
|
|
139
188
|
* Alias for standard number validation
|
|
140
189
|
*/
|
|
141
|
-
float64(message?:
|
|
190
|
+
float64(message?: ErrorParam): VldNumber;
|
|
142
191
|
}
|
|
143
192
|
export {};
|
|
144
|
-
//# sourceMappingURL=number.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as s,resolveErrorMessage as i}from"./base.js";import{getMessages as n}from"../locales/runtime.js";import{V as t,c,g as r}from"../chunks/errors-core-Cqi4-9ew.js";class VldNumber extends e{constructor(e){super(e?.validatorType||s.NUMBER),this.config={checks:e?.checks||[],errorMessage:e?.errorMessage,jsonSchema:e?.jsonSchema,checkMetas:e?.checkMetas},this._checks=this.config.checks,this._isSimple=0===this._checks.length,this._fastCheckMode=this.detectFastCheckMode(),this._checkMetas=this.config.checkMetas}detectFastCheckMode(){const e=this.config.jsonSchema;return 0===this._checks.length?"none":1===this._checks.length&&0===e?.exclusiveMinimum&&"integer"!==e.type?"positive":2===this._checks.length&&0===e?.exclusiveMinimum&&"integer"===e.type?"positive-int":void 0}get hasCustomChecks(){return!this._isSimple}get isSimple(){return this._isSimple}static create(){return new VldNumber}parse(e){if("number"!=typeof e||!Number.isFinite(e))throw new t([c("number",r(e),this.config.errorMessage)]);switch(this._fastCheckMode){case"none":return e;case"positive":if(e>0)return e;throw new t([this._createCheckIssue("gt",0,this.config.errorMessage)]);case"positive-int":if(e>0&&Number.isInteger(e))return e;throw new t([this._createCheckIssue("int",void 0,this.config.errorMessage)])}return this.parseKnownNumber(e)}_createCheckIssue(e,s,i){switch(e){case"min":return{code:"too_small",path:[],origin:"number",minimum:s,inclusive:!0,message:i||`Too small: expected number to be >=${s}`};case"max":return{code:"too_big",path:[],origin:"number",maximum:s,inclusive:!0,message:i||`Too big: expected number to be <=${s}`};case"gt":return{code:"too_small",path:[],origin:"number",minimum:s,inclusive:!1,message:i||`Too small: expected number to be >${s}`};case"lt":return{code:"too_big",path:[],origin:"number",maximum:s,inclusive:!1,message:i||`Too big: expected number to be <${s}`};case"int":return{code:"invalid_type",path:[],expected:"int",received:"number",message:i||"Invalid input: expected int, received number"};default:return{code:"custom",path:[],message:i||"Invalid number"}}}_findFailingCheck(e){const s=this._checks,i=this._checkMetas;for(let n=0;n<s.length;n++)if(!s[n](e))return i?.[n]??{kind:"other",message:this.config.errorMessage};return null}parseKnownNumber(e){switch(this._fastCheckMode){case"none":return e;case"positive":if(e>0)return e;throw new t([this._createCheckIssue("gt",0,this.config.errorMessage)]);case"positive-int":if(e>0&&Number.isInteger(e))return e;throw new t([this._createCheckIssue("int",void 0,this.config.errorMessage)])}const s=this._findFailingCheck(e);if(s)throw new t([this._createCheckIssue(s.kind,s.value,s.message)]);return e}safeParse(e){if("number"!=typeof e||!Number.isFinite(e))return{success:!1,error:new t([c("number",r(e),this.config.errorMessage)])};try{const s=this._findFailingCheck(e);if(s)return{success:!1,error:new t([this._createCheckIssue(s.kind,s.value,s.message)])}}catch(e){return e instanceof t?{success:!1,error:e}:{success:!1,error:new t([{code:"custom",path:[],message:e.message}])}}return{success:!0,data:e}}min(e,s){return new VldNumber({checks:[...this.config.checks,s=>s>=e],errorMessage:i(s,n().numberMin(e)),jsonSchema:{...this.config.jsonSchema,minimum:e},checkMetas:[...this.config.checkMetas??[],{kind:"min",value:e,inclusive:!0,message:i(s,n().numberMin(e))}]})}max(e,s){return new VldNumber({checks:[...this.config.checks,s=>s<=e],errorMessage:i(s,n().numberMax(e)),jsonSchema:{...this.config.jsonSchema,maximum:e},checkMetas:[...this.config.checkMetas??[],{kind:"max",value:e,inclusive:!0,message:i(s,n().numberMax(e))}]})}int(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isInteger(e)],errorMessage:i(e,n().numberInt),jsonSchema:{...this.config.jsonSchema,type:"integer"},checkMetas:[...this.config.checkMetas??[],{kind:"int",message:i(e,n().numberInt)}]})}positive(e){return new VldNumber({checks:[...this.config.checks,e=>e>0],errorMessage:i(e,n().numberPositive),jsonSchema:{...this.config.jsonSchema,exclusiveMinimum:0},checkMetas:[...this.config.checkMetas??[],{kind:"gt",value:0,inclusive:!1,message:i(e,n().numberPositive)}]})}negative(e){return new VldNumber({checks:[...this.config.checks,e=>e<0],errorMessage:i(e,n().numberNegative),jsonSchema:{...this.config.jsonSchema,exclusiveMaximum:0},checkMetas:[...this.config.checkMetas??[],{kind:"lt",value:0,inclusive:!1,message:i(e,n().numberNegative)}]})}nonnegative(e){return new VldNumber({checks:[...this.config.checks,e=>e>=0],errorMessage:i(e,n().numberNonnegative),jsonSchema:{...this.config.jsonSchema,minimum:0},checkMetas:[...this.config.checkMetas??[],{kind:"min",value:0,inclusive:!0,message:i(e,n().numberNonnegative)}]})}nonpositive(e){return new VldNumber({checks:[...this.config.checks,e=>e<=0],errorMessage:i(e,n().numberNonpositive),jsonSchema:{...this.config.jsonSchema,maximum:0},checkMetas:[...this.config.checkMetas??[],{kind:"max",value:0,inclusive:!0,message:i(e,n().numberNonpositive)}]})}finite(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isFinite(e)],errorMessage:i(e,n().numberFinite),jsonSchema:this.config.jsonSchema})}safe(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)],errorMessage:i(e,n().numberSafe),jsonSchema:{...this.config.jsonSchema,type:"integer"}})}multipleOf(e,s){return new VldNumber({checks:[...this.config.checks,s=>{const i=Math.abs(s%e);return i<Number.EPSILON||Math.abs(i-Math.abs(e))<Number.EPSILON}],errorMessage:i(s,n().numberMultipleOf(e)),jsonSchema:{...this.config.jsonSchema,multipleOf:e}})}step(e,s){return this.multipleOf(e,s)}between(e,s,n){return new VldNumber({checks:[...this.config.checks,i=>i>=e&&i<=s],errorMessage:i(n,`Number must be between ${e} and ${s}`),jsonSchema:{...this.config.jsonSchema,minimum:e,maximum:s}})}even(e){return new VldNumber({checks:[...this.config.checks,e=>!!Number.isInteger(e)&&e%2==0],errorMessage:i(e,"Number must be even"),jsonSchema:{...this.config.jsonSchema,type:"integer",multipleOf:2}})}odd(e){return new VldNumber({checks:[...this.config.checks,e=>!!Number.isInteger(e)&&e%2!=0],errorMessage:i(e,"Number must be odd"),jsonSchema:{...this.config.jsonSchema,type:"integer"}})}gt(e,s){return new VldNumber({checks:[...this.config.checks,s=>s>e],errorMessage:i(s,`Number must be greater than ${e}`),jsonSchema:{...this.config.jsonSchema,exclusiveMinimum:e},checkMetas:[...this.config.checkMetas??[],{kind:"gt",value:e,inclusive:!1,message:i(s,`Number must be greater than ${e}`)}]})}lt(e,s){return new VldNumber({checks:[...this.config.checks,s=>s<e],errorMessage:i(s,`Number must be less than ${e}`),jsonSchema:{...this.config.jsonSchema,exclusiveMaximum:e},checkMetas:[...this.config.checkMetas??[],{kind:"lt",value:e,inclusive:!1,message:i(s,`Number must be less than ${e}`)}]})}gte(e,s){return this.min(e,s)}lte(e,s){return this.max(e,s)}uint32(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)&&e>=0&&e<=4294967295],errorMessage:i(e,"Expected an unsigned 32-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer",minimum:0,maximum:4294967295}})}uint64(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)&&e>=0],errorMessage:i(e,"Expected an unsigned 64-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer",minimum:0}})}int32(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)&&e>=-2147483648&&e<=2147483647],errorMessage:i(e,"Expected a signed 32-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer",minimum:-2147483648,maximum:2147483647}})}int64(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isSafeInteger(e)],errorMessage:i(e,"Expected a signed 64-bit integer"),jsonSchema:{...this.config.jsonSchema,type:"integer"}})}float32(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isFinite(e)&&Math.abs(e)<=34e37],errorMessage:i(e,"Expected a 32-bit float"),jsonSchema:{...this.config.jsonSchema,minimum:-34e37,maximum:34e37}})}float64(e){return new VldNumber({checks:[...this.config.checks,e=>Number.isFinite(e)],errorMessage:i(e,"Expected a 64-bit float"),jsonSchema:this.config.jsonSchema})}}export{VldNumber};
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
2
|
-
import { VldEnum } from './enum';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
|
+
import { VldEnum } from './enum.js';
|
|
3
3
|
/**
|
|
4
4
|
* Configuration for object validator
|
|
5
5
|
*/
|
|
6
6
|
interface ObjectValidatorConfig<T extends Record<string, any>> {
|
|
7
7
|
readonly shape: {
|
|
8
|
-
readonly [K in keyof T]: VldBase<
|
|
8
|
+
readonly [K in keyof T]: VldBase<any, T[K]>;
|
|
9
9
|
};
|
|
10
10
|
readonly strict?: boolean;
|
|
11
11
|
readonly passthrough?: boolean;
|
|
12
12
|
readonly catchall?: VldBase<unknown, any>;
|
|
13
|
-
readonly errorMessage?: string;
|
|
13
|
+
readonly errorMessage?: string | undefined;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Optimized immutable object validator with chainable methods
|
|
@@ -20,10 +20,25 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
|
|
|
20
20
|
private readonly _config;
|
|
21
21
|
private readonly _shapeKeys;
|
|
22
22
|
private readonly _shapeKeysSet;
|
|
23
|
+
private readonly _validators;
|
|
24
|
+
private readonly _validatorTypes;
|
|
25
|
+
private readonly _simpleFieldModes;
|
|
26
|
+
private readonly _simpleFieldValues;
|
|
27
|
+
private readonly _canUseSimpleObjectFastPath;
|
|
28
|
+
private readonly _canUseSafeParseFastPath;
|
|
29
|
+
private createSafeParseError;
|
|
23
30
|
/**
|
|
24
31
|
* Private constructor to enforce immutability
|
|
25
32
|
*/
|
|
26
33
|
private constructor();
|
|
34
|
+
private tryGetFieldValidator;
|
|
35
|
+
private resolveFieldValidator;
|
|
36
|
+
private getFieldValidator;
|
|
37
|
+
private getValidatorType;
|
|
38
|
+
private getSimpleFieldMode;
|
|
39
|
+
private getSimpleFieldError;
|
|
40
|
+
private parseCheckedField;
|
|
41
|
+
private parseSimpleObjectValue;
|
|
27
42
|
/**
|
|
28
43
|
* Get the validator configuration
|
|
29
44
|
* @internal Used by discriminated union validator
|
|
@@ -42,23 +57,38 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
|
|
|
42
57
|
* Create a new object validator
|
|
43
58
|
*/
|
|
44
59
|
static create<T extends Record<string, any>>(shape: {
|
|
45
|
-
[K in keyof T]: VldBase<
|
|
60
|
+
[K in keyof T]: VldBase<any, T[K]>;
|
|
46
61
|
}): VldObject<T>;
|
|
47
62
|
/**
|
|
48
63
|
* Parse and validate an object value
|
|
49
64
|
* Ultra-optimized with inline type checks and minimal overhead
|
|
50
65
|
*/
|
|
51
66
|
parse(value: unknown): T;
|
|
67
|
+
/**
|
|
68
|
+
* Parse an object value that already passed the object type guard.
|
|
69
|
+
* @internal Used by discriminated unions after discriminator lookup.
|
|
70
|
+
*/
|
|
71
|
+
parseKnownObject(value: Record<string, unknown>, trustedKey?: string): T;
|
|
72
|
+
/**
|
|
73
|
+
* Parse an object after an owning discriminated union has already matched
|
|
74
|
+
* the discriminator value to this exact object schema.
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
parseTrustedKnownObject(value: Record<string, unknown>, trustedKey: string): T;
|
|
78
|
+
private parseObjectValue;
|
|
52
79
|
/**
|
|
53
80
|
* Safely parse and validate an object value
|
|
54
81
|
* Optimized version using pre-computed keys
|
|
55
82
|
*/
|
|
56
83
|
safeParse(value: unknown): ParseResult<T>;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
private
|
|
84
|
+
encode(value: T): unknown;
|
|
85
|
+
safeEncode(value: T): ParseResult<unknown>;
|
|
86
|
+
encodeAsync(value: T): Promise<unknown>;
|
|
87
|
+
safeEncodeAsync(value: T): Promise<ParseResult<unknown>>;
|
|
88
|
+
private encodeObjectSync;
|
|
89
|
+
private encodeObjectAsync;
|
|
90
|
+
private getEncodedExtraKeys;
|
|
91
|
+
private encodeExtraKeysSync;
|
|
62
92
|
/**
|
|
63
93
|
* Create a new validator in strict mode (no extra keys allowed)
|
|
64
94
|
*/
|
|
@@ -67,6 +97,8 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
|
|
|
67
97
|
* Create a new validator in passthrough mode (extra keys are preserved)
|
|
68
98
|
*/
|
|
69
99
|
passthrough(): VldObject<T>;
|
|
100
|
+
loose(): VldObject<T>;
|
|
101
|
+
strip(): VldObject<T>;
|
|
70
102
|
/**
|
|
71
103
|
* Create a new validator with all fields optional
|
|
72
104
|
*/
|
|
@@ -134,4 +166,3 @@ export declare class VldObject<T extends Record<string, any>> extends VldBase<un
|
|
|
134
166
|
}): VldObject<T & U>;
|
|
135
167
|
}
|
|
136
168
|
export {};
|
|
137
|
-
//# sourceMappingURL=object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as t,VldOptional as s}from"./base.js";import{getMessages as r}from"../locales/runtime.js";import{VldEnum as i}from"./enum.js";import{i as n}from"../chunks/security-Dy24T8N7.js";import{V as o}from"../chunks/errors-core-Cqi4-9ew.js";class VldObject extends e{createSafeParseError(e){return new o([{code:"invalid_object",path:[],message:e}])}constructor(s){super(t.OBJECT),this._config=s,this._shapeKeys=Object.keys(s.shape),this._shapeKeysSet=new Set(this._shapeKeys),this._validators=this._shapeKeys.map(e=>this.tryGetFieldValidator(e)),this._validatorTypes=this._shapeKeys.map((e,t)=>this._validators[t]?.validatorType||this.getValidatorType(e)),this._simpleFieldModes=this._validators.map((e,t)=>this.getSimpleFieldMode(e,this._validatorTypes[t])),this._simpleFieldValues=this._validators.map((e,t)=>"literal"===this._simpleFieldModes[t]?e.literal:void 0),this._canUseSimpleObjectFastPath=!s.strict&&!s.passthrough&&!s.catchall&&this._shapeKeys.length>0&&this._simpleFieldModes.every(e=>void 0!==e),this._canUseSafeParseFastPath=this._validators.every(t=>t instanceof e)&&(void 0===s.catchall||s.catchall instanceof e)}tryGetFieldValidator(e){try{const t=Object.getOwnPropertyDescriptor(this._config.shape,e);if(t?.get)return;return this.resolveFieldValidator(e)}catch{return}}resolveFieldValidator(e){try{const t=this._config.shape[e];if(!t||"function"!=typeof t.safeParse)return;return t}catch{return}}getFieldValidator(e,t){const s=(void 0===t?void 0:this._validators[t])||this.resolveFieldValidator(e);if(!s)throw new Error(`Invalid validator for field "${e}"`);return s}getValidatorType(e){try{const s=this._config.shape[e];return s?.validatorType||t.UNKNOWN}catch{return t.UNKNOWN}}getSimpleFieldMode(e,s){if(e&&!0===e.isSimple)switch(s){case t.STRING:return"string";case t.NUMBER:return"number";case t.BOOLEAN:return"boolean";case t.BIGINT:return"bigint";case t.SYMBOL:return"symbol";case t.NULL:return"null";case t.UNDEFINED:case t.VOID:return"undefinedValue";case t.LITERAL:return"literal";case t.ANY:case t.UNKNOWN:return"passthrough";default:return}}getSimpleFieldError(e,t,s){switch(e){case"string":return r().invalidString;case"number":return r().invalidNumber;case"boolean":return r().invalidBoolean;case"bigint":return r().invalidBigint;case"symbol":return r().invalidSymbol;case"null":return"Expected null, received "+typeof s;case"undefinedValue":return r().expectedUndefined;case"literal":return r().literalExpected(JSON.stringify(t),JSON.stringify(s));default:return r().invalidObject}}parseCheckedField(e,s,r){if(s===t.STRING&&"string"==typeof r){const t=e.parseKnownString;if("function"==typeof t)return t.call(e,r)}if(s===t.NUMBER&&"number"==typeof r&&!isNaN(r)){const t=e.parseKnownNumber;if("function"==typeof t)return t.call(e,r)}if(s===t.BOOLEAN&&"boolean"==typeof r){const t=e.parseKnownBoolean;if("function"==typeof t)return t.call(e,r)}if(s===t.BIGINT&&"bigint"==typeof r){const t=e.parseKnownBigInt;if("function"==typeof t)return t.call(e,r)}if(s===t.SYMBOL&&"symbol"==typeof r){const t=e.parseKnownSymbol;if("function"==typeof t)return t.call(e,r)}if(s===t.FUNCTION&&"function"==typeof r){const t=e.parseKnownFunction;if("function"==typeof t)return t.call(e,r)}if(s===t.FILE&&"object"==typeof r&&null!==r&&("size"in r&&"type"in r||"undefined"!=typeof File&&r instanceof File)){const t=e.parseKnownFile;if("function"==typeof t)return t.call(e,r)}if(s===t.DATE&&r instanceof Date){const t=e.parseKnownDate;if("function"==typeof t)return t.call(e,r)}if(s===t.OBJECT&&"object"==typeof r&&null!==r&&!Array.isArray(r)){const t=e.parseKnownObject;if("function"==typeof t)return t.call(e,r)}if(s===t.ARRAY&&Array.isArray(r)){const t=e.parseKnownArray;if("function"==typeof t)return t.call(e,r)}if(s===t.TUPLE&&Array.isArray(r)){const t=e.parseKnownTuple;if("function"==typeof t)return t.call(e,r)}if(s===t.RECORD&&"object"==typeof r&&null!==r&&!Array.isArray(r)){const t=e.parseKnownRecord;if("function"==typeof t)return t.call(e,r)}if(s===t.SET&&r instanceof Set){const t=e.parseKnownSet;if("function"==typeof t)return t.call(e,r)}if(s===t.MAP&&r instanceof Map){const t=e.parseKnownMap;if("function"==typeof t)return t.call(e,r)}return e.parse(r)}parseSimpleObjectValue(e,t,s=!1){if(2===this._shapeKeys.length&&"string"===this._simpleFieldModes[0]&&"number"===this._simpleFieldModes[1]){const t=this._shapeKeys[0],s=e[t];if("string"!=typeof s)throw new Error(r().objectField(t,r().invalidString));const i=this._shapeKeys[1],n=e[i];if("number"!=typeof n||isNaN(n))throw new Error(r().objectField(i,r().invalidNumber));const o={};return o[t]=s,o[i]=n,o}if(3===this._shapeKeys.length&&"literal"===this._simpleFieldModes[0]&&"string"===this._simpleFieldModes[1]&&"number"===this._simpleFieldModes[2]){const i=this._shapeKeys[0],n=e[i],o=this._simpleFieldValues[0];if((!s||i!==t)&&n!==o)throw new Error(r().objectField(i,this.getSimpleFieldError("literal",o,n)));const a=this._shapeKeys[1],c=e[a];if("string"!=typeof c)throw new Error(r().objectField(a,r().invalidString));const l=this._shapeKeys[2],h=e[l];if("number"!=typeof h||isNaN(h))throw new Error(r().objectField(l,r().invalidNumber));const f={};return f[i]=o,f[a]=c,f[l]=h,f}const i={};for(let n=0;n<this._shapeKeys.length;n++){const o=this._shapeKeys[n],a=e[o],c=this._simpleFieldModes[n];switch(c){case"string":if("string"!=typeof a)throw new Error(r().objectField(o,r().invalidString));i[o]=a;break;case"number":if("number"!=typeof a||isNaN(a))throw new Error(r().objectField(o,r().invalidNumber));i[o]=a;break;case"boolean":if("boolean"!=typeof a)throw new Error(r().objectField(o,r().invalidBoolean));i[o]=a;break;case"bigint":if("bigint"!=typeof a)throw new Error(r().objectField(o,r().invalidBigint));i[o]=a;break;case"symbol":if("symbol"!=typeof a)throw new Error(r().objectField(o,r().invalidSymbol));i[o]=a;break;case"null":if(null!==a)throw new Error(r().objectField(o,this.getSimpleFieldError(c,void 0,a)));i[o]=null;break;case"undefinedValue":if(void 0!==a)throw new Error(r().objectField(o,r().expectedUndefined));i[o]=void 0;break;case"literal":if(s&&o===t){i[o]=this._simpleFieldValues[n];break}if(a!==this._simpleFieldValues[n])throw new Error(r().objectField(o,this.getSimpleFieldError(c,this._simpleFieldValues[n],a)));i[o]=this._simpleFieldValues[n];break;case"passthrough":i[o]=a;break;default:throw new Error(r().objectField(o,r().invalidObject))}}return i}get config(){return this._config}get shapeKeys(){return this._shapeKeys}get shapeKeysSet(){return this._shapeKeysSet}static create(e){return new VldObject({shape:e})}parse(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this._config.errorMessage||r().invalidObject);return this.parseObjectValue(e)}parseKnownObject(e,t){return this.parseObjectValue(e,t)}parseTrustedKnownObject(e,t){return this.parseObjectValue(e,t,!0)}parseObjectValue(e,t,s=!1){if(this._canUseSimpleObjectFastPath)return this.parseSimpleObjectValue(e,t,s);const i={};let o="";try{for(let n=0;n<this._shapeKeys.length;n++){if(o=this._shapeKeys[n],s&&o===t&&"literal"===this._simpleFieldModes[n]){i[o]=this._simpleFieldValues[n];continue}const a=this._simpleFieldModes[n];if(void 0!==a){const t=e[o];switch(a){case"string":if("string"!=typeof t)throw new Error(r().invalidString);i[o]=t;continue;case"number":if("number"!=typeof t||isNaN(t))throw new Error(r().invalidNumber);i[o]=t;continue;case"boolean":if("boolean"!=typeof t)throw new Error(r().invalidBoolean);i[o]=t;continue;case"bigint":if("bigint"!=typeof t)throw new Error(r().invalidBigint);i[o]=t;continue;case"symbol":if("symbol"!=typeof t)throw new Error(r().invalidSymbol);i[o]=t;continue;case"null":if(null!==t)throw new Error(this.getSimpleFieldError(a,void 0,t));i[o]=null;continue;case"undefinedValue":if(void 0!==t)throw new Error(r().expectedUndefined);i[o]=void 0;continue;case"literal":if(t!==this._simpleFieldValues[n])throw new Error(this.getSimpleFieldError(a,this._simpleFieldValues[n],t));i[o]=this._simpleFieldValues[n];continue;case"passthrough":i[o]=t;continue}continue}const c=this.getFieldValidator(o,n);i[o]=this.parseCheckedField(c,this._validatorTypes[n],e[o])}}catch(e){throw new Error(r().objectField(o,e.message))}if(this._config.strict||this._config.passthrough||this._config.catchall){const t=Object.keys(e);if(this._config.strict){const e=[];for(let s=0;s<t.length;s++){const r=t[s];this._shapeKeysSet.has(r)||e.push(r)}if(e.length>0)throw new Error(r().unexpectedKeys(e))}if(this._config.passthrough)for(let s=0;s<t.length;s++){const r=t[s];this._shapeKeysSet.has(r)||n(r)||(i[r]=e[r])}if(this._config.catchall)for(let s=0;s<t.length;s++){const o=t[s];if(!this._shapeKeysSet.has(o)&&!n(o))try{i[o]=this._config.catchall.parse(e[o])}catch(e){throw new Error(r().objectField(o,e.message))}}}return i}safeParse(t){if("object"!=typeof t||null===t||Array.isArray(t))return{success:!1,error:this.createSafeParseError(this._config.errorMessage||r().invalidObject)};const s=t;if(this._canUseSimpleObjectFastPath)try{return{success:!0,data:this.parseSimpleObjectValue(s)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}if(this._canUseSafeParseFastPath)try{return{success:!0,data:this.parseObjectValue(s)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}const i={};for(let t=0;t<this._shapeKeys.length;t++){const n=this._shapeKeys[t],o=s[n],a=this._simpleFieldModes[t];if(void 0!==a){if("string"===a&&"string"==typeof o||"number"===a&&"number"==typeof o&&!isNaN(o)||"boolean"===a&&"boolean"==typeof o||"bigint"===a&&"bigint"==typeof o||"symbol"===a&&"symbol"==typeof o||"null"===a&&null===o||"undefinedValue"===a&&void 0===o||"literal"===a&&o===this._simpleFieldValues[t]||"passthrough"===a){i[n]="literal"===a?this._simpleFieldValues[t]:"null"===a?null:o;continue}return{success:!1,error:this.createSafeParseError(r().objectField(n,this.getSimpleFieldError(a,this._simpleFieldValues[t],o)))}}let c;try{c=this.getFieldValidator(n,t)}catch(e){const t=e instanceof Error?e.message:String(e);return{success:!1,error:this.createSafeParseError(r().objectField(n,t))}}try{if(c instanceof e)i[n]=this.parseCheckedField(c,this._validatorTypes[t],o);else{const e=c.safeParse(o);if(!e.success)return{success:!1,error:this.createSafeParseError(r().objectField(n,e.error.message))};i[n]=e.data}}catch(e){const t=e instanceof Error?e.message:String(e);return{success:!1,error:this.createSafeParseError(r().objectField(n,t))}}}if(this._config.strict||this._config.passthrough||this._config.catchall){const t=Object.keys(s);if(this._config.strict){const e=[];for(let s=0;s<t.length;s++){const r=t[s];this._shapeKeysSet.has(r)||e.push(r)}if(e.length>0)return{success:!1,error:this.createSafeParseError(r().unexpectedKeys(e))}}if(this._config.passthrough)for(let e=0;e<t.length;e++){const r=t[e];this._shapeKeysSet.has(r)||n(r)||(i[r]=s[r])}if(this._config.catchall){const o=this._config.catchall;for(let a=0;a<t.length;a++){const c=t[a];if(!this._shapeKeysSet.has(c)&&!n(c))try{if(o instanceof e)i[c]=o.parse(s[c]);else{const e=o.safeParse(s[c]);if(!e.success)return{success:!1,error:this.createSafeParseError(r().objectField(c,e.error.message))};i[c]=e.data}}catch(e){const t=e instanceof Error?e.message:String(e);return{success:!1,error:this.createSafeParseError(r().objectField(c,t))}}}}}return{success:!0,data:i}}encode(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this._config.errorMessage||r().invalidObject);return this.encodeObjectSync(e)}safeEncode(e){try{return{success:!0,data:this.encode(e)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}}async encodeAsync(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this._config.errorMessage||r().invalidObject);return this.encodeObjectAsync(e)}async safeEncodeAsync(e){try{return{success:!0,data:await this.encodeAsync(e)}}catch(e){return{success:!1,error:this.createSafeParseError(e.message)}}}encodeObjectSync(e){const t={};for(let s=0;s<this._shapeKeys.length;s++){const r=this._shapeKeys[s],i=this.getFieldValidator(r,s).encode(e[r]);(void 0!==i||Object.prototype.hasOwnProperty.call(e,r))&&(t[r]=i)}return this.encodeExtraKeysSync(e,t),t}async encodeObjectAsync(e){const t={};for(let s=0;s<this._shapeKeys.length;s++){const r=this._shapeKeys[s],i=await this.getFieldValidator(r,s).encodeAsync(e[r]);(void 0!==i||Object.prototype.hasOwnProperty.call(e,r))&&(t[r]=i)}const s=this.getEncodedExtraKeys(e);for(const r of s)n(r)||(this._config.catchall?t[r]=await this._config.catchall.encodeAsync(e[r]):this._config.passthrough&&(t[r]=e[r]));return t}getEncodedExtraKeys(e){const t=Object.keys(e).filter(e=>!this._shapeKeysSet.has(e));if(this._config.strict&&t.length>0)throw new Error(r().unexpectedKeys(t));return t}encodeExtraKeysSync(e,t){for(const s of this.getEncodedExtraKeys(e))n(s)||(this._config.catchall?t[s]=this._config.catchall.encode(e[s]):this._config.passthrough&&(t[s]=e[s]))}strict(e){return new VldObject({...this._config,strict:!0,passthrough:!1,errorMessage:e})}passthrough(){return new VldObject({...this._config,strict:!1,passthrough:!0})}loose(){return this.passthrough()}strip(){const e={...this._config,strict:!1,passthrough:!1};return delete e.catchall,new VldObject(e)}partial(){const e={};for(const t in this._config.shape)e[t]=new s(this._config.shape[t]);return new VldObject({...this._config,shape:e})}deepPartial(){const e={};for(const t in this._config.shape){const r=this._config.shape[t];e[t]=new s(r instanceof VldObject?r.deepPartial():r)}return new VldObject({...this._config,shape:e})}pick(...e){const t={};for(const s of e)s in this._config.shape&&(t[s]=this._config.shape[s]);return new VldObject({...this._config,shape:t})}omit(...e){const t={},s=new Set(e);for(const e in this._config.shape)s.has(e)||(t[e]=this._config.shape[e]);return new VldObject({...this._config,shape:t})}extend(e){return new VldObject({...this._config,shape:{...this._config.shape,...e}})}merge(e){return new VldObject({...this._config,shape:{...this._config.shape,...e.config.shape}})}required(){const e={};for(const t in this._config.shape){const r=this._config.shape[t];if(r instanceof s){const s=r.baseValidator;if(!s||"function"!=typeof s.parse)throw new Error(`Invalid VldOptional structure for field "${t}": missing or invalid baseValidator`);e[t]=s}else e[t]=r}return new VldObject({...this._config,shape:e})}catchall(e){return new VldObject({...this._config,catchall:e,passthrough:!1})}get shape(){return this._config.shape}keyof(){const e=Object.keys(this._config.shape);if(0===e.length)throw new Error("Cannot create keyof enum from empty object");return i.create(e)}safeExtend(e){const t=new Set(Object.keys(this._config.shape)),s=Object.keys(e),i=[];for(const e of s)t.has(e)&&i.push(e);if(i.length>0)throw new Error(`safeExtend: ${r().safeExtendOverlap(i)}`);return new VldObject({...this._config,shape:{...this._config.shape,...e}})}}export{VldObject};
|
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
* Promise validator - validates Promise values
|
|
3
3
|
* Validates that the resolved value matches the inner schema
|
|
4
4
|
*/
|
|
5
|
-
import { type ParseResult } from './base';
|
|
5
|
+
import { type ParseResult, type StandardSchemaV1Props } from './base.js';
|
|
6
|
+
type PromiseInner<T> = {
|
|
7
|
+
parse(value: unknown): T;
|
|
8
|
+
safeParse(value: unknown): ParseResult<T>;
|
|
9
|
+
parseAsync?(value: unknown): Promise<T>;
|
|
10
|
+
safeParseAsync?(value: unknown): Promise<ParseResult<T>>;
|
|
11
|
+
};
|
|
6
12
|
/**
|
|
7
13
|
* Promise validator - validates Promise<T> where T matches inner schema
|
|
8
14
|
* Zod 4 API parity - allows async validation with proper type inference
|
|
@@ -14,15 +20,15 @@ import { type ParseResult } from './base';
|
|
|
14
20
|
*/
|
|
15
21
|
export declare class VldPromise<T> {
|
|
16
22
|
private readonly inner;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
});
|
|
23
|
+
readonly validatorType: "promise";
|
|
24
|
+
constructor(inner: PromiseInner<T>);
|
|
25
|
+
get '~standard'(): StandardSchemaV1Props<unknown, T>;
|
|
21
26
|
/**
|
|
22
27
|
* Check if value is thenable (Promise-like)
|
|
23
28
|
* Must be called BEFORE wrapping in Promise.resolve
|
|
24
29
|
*/
|
|
25
30
|
private _isThenable;
|
|
31
|
+
unwrap(): PromiseInner<T>;
|
|
26
32
|
/**
|
|
27
33
|
* Parse and validate a Promise value asynchronously
|
|
28
34
|
* @param value The Promise to validate
|
|
@@ -30,12 +36,14 @@ export declare class VldPromise<T> {
|
|
|
30
36
|
* @throws {Error} If validation fails when Promise resolves
|
|
31
37
|
*/
|
|
32
38
|
parse(value: unknown): Promise<T>;
|
|
39
|
+
parseAsync(value: unknown): Promise<T>;
|
|
33
40
|
/**
|
|
34
41
|
* Safely parse and validate a Promise value asynchronously
|
|
35
42
|
* @param value The Promise to validate
|
|
36
43
|
* @returns A Promise resolving to ParseResult containing the validated value
|
|
37
44
|
*/
|
|
38
45
|
safeParse(value: unknown): Promise<ParseResult<T>>;
|
|
46
|
+
safeParseAsync(value: unknown): Promise<ParseResult<T>>;
|
|
39
47
|
}
|
|
40
48
|
/**
|
|
41
49
|
* Create a Promise validator
|
|
@@ -46,8 +54,5 @@ export declare class VldPromise<T> {
|
|
|
46
54
|
* const result = await promiseSchema.parse(Promise.resolve("hello"));
|
|
47
55
|
* // result is string
|
|
48
56
|
*/
|
|
49
|
-
export declare function promise<T>(inner:
|
|
50
|
-
|
|
51
|
-
safeParse(value: unknown): ParseResult<T>;
|
|
52
|
-
}): VldPromise<T>;
|
|
53
|
-
//# sourceMappingURL=promise.d.ts.map
|
|
57
|
+
export declare function promise<T>(inner: PromiseInner<T>): VldPromise<T>;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VLD_VALIDATOR_TYPES as e}from"./base.js";class VldPromise{constructor(s){this.inner=s,this.validatorType=e.PROMISE}get"~standard"(){return{version:1,vendor:"vld",validate:async e=>{const s=await this.safeParseAsync(e);return s.success?{value:s.data}:{issues:[{message:s.error.message}]}},types:void 0}}_isThenable(e){return null!==e&&"function"==typeof e.then}unwrap(){return this.inner}async parse(e){if(!this._isThenable(e))throw new Error("Expected a Promise value");const s=await Promise.resolve(e);return this.inner.parseAsync?this.inner.parseAsync(s):this.inner.parse(s)}parseAsync(e){return this.parse(e)}async safeParse(e){if(!this._isThenable(e))return{success:!1,error:new Error("Expected a Promise value")};try{const s=await Promise.resolve(e);if(this.inner.safeParseAsync)return await this.inner.safeParseAsync(s);const r=this.inner.safeParse(s);return r.success?{success:!0,data:r.data}:r}catch(e){return{success:!1,error:e instanceof Error?e:new Error(String(e))}}}safeParseAsync(e){return this.safeParse(e)}}function s(e){return new VldPromise(e)}export{VldPromise,s as promise};
|
|
@@ -1,38 +1,50 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
2
|
/**
|
|
3
3
|
* Immutable record validator for key-value pairs
|
|
4
4
|
* BUG-NEW-018 FIX: Uses comprehensive dangerous key protection
|
|
5
5
|
*/
|
|
6
|
-
export declare class VldRecord<T> extends VldBase<unknown, Record<
|
|
6
|
+
export declare class VldRecord<T, K extends PropertyKey = string> extends VldBase<unknown, Record<K, T>> {
|
|
7
7
|
protected readonly valueValidator: VldBase<unknown, T>;
|
|
8
|
+
private readonly keyValidator?;
|
|
8
9
|
private readonly errorMessage?;
|
|
9
10
|
/**
|
|
10
11
|
* Private constructor to enforce immutability
|
|
11
12
|
*/
|
|
12
|
-
protected constructor(valueValidator: VldBase<unknown, T>, errorMessage?: string | undefined);
|
|
13
|
+
protected constructor(valueValidator: VldBase<unknown, T>, keyValidator?: VldBase<unknown, K> | undefined, errorMessage?: string | undefined);
|
|
14
|
+
private readonly _simpleValueMode;
|
|
15
|
+
private readonly _simpleValue;
|
|
16
|
+
get valueSchema(): VldBase<unknown, T>;
|
|
17
|
+
get keySchema(): VldBase<unknown, K> | undefined;
|
|
13
18
|
/**
|
|
14
19
|
* Create a new record validator
|
|
15
20
|
*/
|
|
16
|
-
static create<T>(valueValidator: VldBase<unknown, T>): VldRecord<T>;
|
|
21
|
+
static create<T, K extends PropertyKey = string>(valueValidator: VldBase<unknown, T>, keyValidator?: VldBase<unknown, K>): VldRecord<T, K>;
|
|
22
|
+
private getSimpleValueMode;
|
|
23
|
+
private getSimpleValueError;
|
|
17
24
|
/**
|
|
18
25
|
* Parse and validate a record value
|
|
19
26
|
* BUG-NEW-018 FIX: Use comprehensive dangerous key protection
|
|
20
27
|
*/
|
|
21
|
-
parse(value: unknown): Record<
|
|
28
|
+
parse(value: unknown): Record<K, T>;
|
|
29
|
+
/**
|
|
30
|
+
* Parse a value that has already passed the record object type guard.
|
|
31
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
32
|
+
*/
|
|
33
|
+
parseKnownRecord(obj: Record<string, unknown>): Record<K, T>;
|
|
34
|
+
private parseKeyedRecord;
|
|
22
35
|
/**
|
|
23
36
|
* Safely parse and validate a record value
|
|
24
37
|
*/
|
|
25
|
-
safeParse(value: unknown): ParseResult<Record<
|
|
38
|
+
safeParse(value: unknown): ParseResult<Record<K, T>>;
|
|
26
39
|
/**
|
|
27
40
|
* Create a partial record variant (all keys optional)
|
|
28
41
|
* Similar to v.object().partial() but for records
|
|
29
42
|
*/
|
|
30
|
-
partial(): VldRecord<T | undefined>;
|
|
43
|
+
partial(): VldRecord<T | undefined, K>;
|
|
31
44
|
/**
|
|
32
45
|
* Create a loose record variant (allows extra keys)
|
|
33
46
|
* Similar to v.object().passthrough() but for records
|
|
34
47
|
* Note: Records already allow any keys, so this mainly affects error handling
|
|
35
48
|
*/
|
|
36
|
-
loose(): VldBase<unknown, Record<
|
|
49
|
+
loose(): VldBase<unknown, Record<K, T>>;
|
|
37
50
|
}
|
|
38
|
-
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{getMessages as t}from"../locales/runtime.js";import{i}from"../chunks/security-Dy24T8N7.js";import{V as o}from"../chunks/errors-core-Cqi4-9ew.js";function s(e){return new o([{code:"invalid_object",path:[],message:e}])}class VldRecord extends e{constructor(e,t,i){super(r.RECORD),this.valueValidator=e,this.keyValidator=t,this.errorMessage=i,this._simpleValueMode=this.getSimpleValueMode(e),this._simpleValue="literal"===this._simpleValueMode?e.literal:void 0}get valueSchema(){return this.valueValidator}get keySchema(){return this.keyValidator}static create(e,r){return new VldRecord(e,r)}getSimpleValueMode(e){if(!0===e.isSimple)switch(e.validatorType){case r.STRING:return"string";case r.NUMBER:return"number";case r.BOOLEAN:return"boolean";case r.BIGINT:return"bigint";case r.SYMBOL:return"symbol";case r.NULL:return"null";case r.UNDEFINED:case r.VOID:return"undefinedValue";case r.LITERAL:return"literal";case r.ANY:case r.UNKNOWN:return"passthrough";default:return}}getSimpleValueError(e){switch(this._simpleValueMode){case"string":return t().invalidString;case"number":return t().invalidNumber;case"boolean":return t().invalidBoolean;case"bigint":return t().invalidBigint;case"symbol":return t().invalidSymbol;case"null":return"Expected null, received "+typeof e;case"undefinedValue":return t().expectedUndefined;case"literal":return t().literalExpected(JSON.stringify(this._simpleValue),JSON.stringify(e));default:return t().invalidRecord}}parse(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(this.errorMessage||t().invalidRecord);return this.parseKnownRecord(e)}parseKnownRecord(e){if(void 0!==this.keyValidator)return this.parseKeyedRecord(e);const r={},o=Object.keys(e),s=this._simpleValueMode;for(let a=0;a<o.length;a++){const n=o[a];if(i(n))continue;const l=e[n];if(void 0!==s)switch(s){case"string":if("string"!=typeof l)throw new Error(t().objectField(n,t().invalidString));r[n]=l;continue;case"number":if("number"!=typeof l||isNaN(l))throw new Error(t().objectField(n,t().invalidNumber));r[n]=l;continue;case"boolean":if("boolean"!=typeof l)throw new Error(t().objectField(n,t().invalidBoolean));r[n]=l;continue;case"bigint":if("bigint"!=typeof l)throw new Error(t().objectField(n,t().invalidBigint));r[n]=l;continue;case"symbol":if("symbol"!=typeof l)throw new Error(t().objectField(n,t().invalidSymbol));r[n]=l;continue;case"null":if(null!==l)throw new Error(t().objectField(n,this.getSimpleValueError(l)));r[n]=null;continue;case"undefinedValue":if(void 0!==l)throw new Error(t().objectField(n,t().expectedUndefined));r[n]=void 0;continue;case"literal":if(l!==this._simpleValue)throw new Error(t().objectField(n,this.getSimpleValueError(l)));r[n]=this._simpleValue;continue;case"passthrough":r[n]=l;continue}try{r[n]=this.valueValidator.parse(l)}catch(e){throw new Error(t().objectField(n,e.message))}}return r}parseKeyedRecord(e){const r={},s=Reflect.ownKeys(e);for(const a of s){if(!Object.prototype.propertyIsEnumerable.call(e,a))continue;if("string"==typeof a&&i(a))continue;const s=this.keyValidator.safeParse(a);if(!s.success)throw new o([{code:"invalid_key",path:[String(a)],message:s.error.message}]);if("string"!=typeof s.data&&"number"!=typeof s.data&&"symbol"!=typeof s.data)throw new o([{code:"invalid_key",path:[String(a)],message:"Record key transform must return a property key"}]);if("string"!=typeof s.data||!i(s.data))try{r[s.data]=this.valueValidator.parse(e[a])}catch(e){throw new Error(t().objectField(String(a),e.message))}}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return e instanceof o?{success:!1,error:e}:{success:!1,error:s(e.message)}}}partial(){const e=this.valueValidator.optional();return new VldRecord(e,this.keyValidator)}loose(){return new VldLooseRecord(this.valueValidator,this.keyValidator)}}class VldLooseRecord extends e{constructor(e,t){super(r.RECORD),this.valueValidator=e,this.keyValidator=t}get valueSchema(){return this.valueValidator}parse(e){if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(t().invalidRecord);const r={},o=e;for(const e of Reflect.ownKeys(o)){if(!Object.prototype.propertyIsEnumerable.call(o,e))continue;if("string"==typeof e&&i(e))continue;const t=this.keyValidator?.safeParse(e);if(t&&!t.success)continue;const s=t?.data??e;if("string"!=typeof s&&"number"!=typeof s&&"symbol"!=typeof s)continue;if("string"==typeof s&&i(s))continue;const a=this.valueValidator.safeParse(o[e]);a.success&&(r[s]=a.data)}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:s(e.message)}}}partial(){const e=this.valueValidator.optional();return new VldLooseRecord(e,this.keyValidator)}loose(){return this}}export{VldRecord};
|
package/dist/validators/set.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
2
|
/**
|
|
3
3
|
* Immutable Set validator
|
|
4
4
|
*/
|
|
@@ -9,17 +9,26 @@ export declare class VldSet<T> extends VldBase<unknown, Set<T>> {
|
|
|
9
9
|
* Private constructor to enforce immutability
|
|
10
10
|
*/
|
|
11
11
|
private constructor();
|
|
12
|
+
private readonly _simpleItemMode;
|
|
13
|
+
private readonly _simpleItemValue;
|
|
14
|
+
get itemSchema(): VldBase<unknown, T>;
|
|
12
15
|
/**
|
|
13
16
|
* Create a new Set validator
|
|
14
17
|
*/
|
|
15
18
|
static create<T>(itemValidator: VldBase<unknown, T>): VldSet<T>;
|
|
19
|
+
private getSimpleItemMode;
|
|
20
|
+
private getSimpleItemError;
|
|
16
21
|
/**
|
|
17
22
|
* Parse and validate a Set value
|
|
18
23
|
*/
|
|
19
24
|
parse(value: unknown): Set<T>;
|
|
25
|
+
/**
|
|
26
|
+
* Parse a value that has already passed the Set instance guard.
|
|
27
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
28
|
+
*/
|
|
29
|
+
parseKnownSet(value: Set<unknown>): Set<T>;
|
|
20
30
|
/**
|
|
21
31
|
* Safely parse and validate a Set value
|
|
22
32
|
*/
|
|
23
33
|
safeParse(value: unknown): ParseResult<Set<T>>;
|
|
24
34
|
}
|
|
25
|
-
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{VldBase as e,VLD_VALIDATOR_TYPES as r}from"./base.js";import{getMessages as t}from"../locales/runtime.js";import{V as i}from"../chunks/errors-core-Cqi4-9ew.js";class VldSet extends e{constructor(e,t){super(r.SET),this.itemValidator=e,this.errorMessage=t,this._simpleItemMode=this.getSimpleItemMode(e),this._simpleItemValue="literal"===this._simpleItemMode?e.literal:void 0}get itemSchema(){return this.itemValidator}static create(e){return new VldSet(e)}getSimpleItemMode(e){if(!0===e.isSimple)switch(e.validatorType){case r.STRING:return"string";case r.NUMBER:return"number";case r.BOOLEAN:return"boolean";case r.BIGINT:return"bigint";case r.SYMBOL:return"symbol";case r.NULL:return"null";case r.UNDEFINED:case r.VOID:return"undefinedValue";case r.LITERAL:return"literal";case r.ANY:case r.UNKNOWN:return"passthrough";default:return}}getSimpleItemError(e){switch(this._simpleItemMode){case"string":return t().invalidString;case"number":return t().invalidNumber;case"boolean":return t().invalidBoolean;case"bigint":return t().invalidBigint;case"symbol":return t().invalidSymbol;case"null":return"Expected null, received "+typeof e;case"undefinedValue":return t().expectedUndefined;case"literal":return t().literalExpected(JSON.stringify(this._simpleItemValue),JSON.stringify(e));default:return t().invalidSet}}parse(e){if(!(e instanceof Set))throw new Error(this.errorMessage||t().invalidSet);return this.parseKnownSet(e)}parseKnownSet(e){const r=new Set,t=this._simpleItemMode;if("string"===t){for(const t of e){if("string"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("number"===t){for(const t of e){if("number"!=typeof t||isNaN(t))throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("boolean"===t){for(const t of e){if("boolean"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("bigint"===t){for(const t of e){if("bigint"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("symbol"===t){for(const t of e){if("symbol"!=typeof t)throw new Error(this.getSimpleItemError(t));r.add(t)}return r}if("null"===t){for(const t of e){if(null!==t)throw new Error(this.getSimpleItemError(t));r.add(null)}return r}if("undefinedValue"===t){for(const t of e){if(void 0!==t)throw new Error(this.getSimpleItemError(t));r.add(void 0)}return r}if("literal"===t){for(const t of e){if(t!==this._simpleItemValue)throw new Error(this.getSimpleItemError(t));r.add(this._simpleItemValue)}return r}if("passthrough"===t){for(const t of e)r.add(t);return r}for(const t of e)try{r.add(this.itemValidator.parse(t))}catch(e){throw new Error(e.message)}return r}safeParse(e){try{return{success:!0,data:this.parse(e)}}catch(e){return{success:!1,error:(r=e.message,new i([{code:"invalid_type",path:[],message:r}]))}}var r}}export{VldSet};
|