@oxog/vld 2.0.3 → 2.1.0
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 +33 -1
- package/README.md +101 -37
- package/dist/chunks/errors-core-BeiFUtZM.js +81 -0
- package/dist/chunks/{index-DO8CFMxD.js → index-0R2ntSud.js} +16 -402
- package/dist/chunks/index-BvH403Yy.js +88 -0
- package/dist/chunks/security-B0Pd_vSY.js +35 -0
- package/dist/chunks/string-BJRQod3t.js +530 -0
- package/dist/cjs/chunks/errors-core-DWxLFs2f.cjs +83 -0
- package/dist/cjs/chunks/index-BkI37108.cjs +538 -0
- package/dist/cjs/chunks/index-Cc3bjUMX.cjs +91 -0
- package/dist/cjs/chunks/security-Dc3Jh13T.cjs +37 -0
- package/dist/cjs/chunks/string-BKZrc4hs.cjs +533 -0
- package/dist/cjs/cli/bin.cjs +506 -0
- package/dist/cjs/cli/index.cjs +209 -0
- package/dist/cjs/codecs/index.cjs +45 -0
- package/dist/{chunks/date-50JV_Mfj.js → cjs/coercion/index.cjs} +185 -103
- package/dist/cjs/compat/emitter.cjs +184 -0
- package/dist/cjs/compat/result.cjs +189 -0
- package/dist/cjs/errors.cjs +6 -213
- package/dist/cjs/index.cjs +1471 -10336
- package/dist/cjs/kernel.cjs +415 -0
- package/dist/cjs/locales/af.cjs +108 -0
- package/dist/cjs/locales/ar.cjs +108 -0
- package/dist/cjs/locales/bn.cjs +108 -0
- package/dist/cjs/locales/da.cjs +108 -0
- package/dist/cjs/locales/de.cjs +108 -0
- package/dist/cjs/locales/en.cjs +108 -0
- package/dist/cjs/locales/es-MX.cjs +107 -0
- package/dist/cjs/locales/es.cjs +96 -0
- package/dist/cjs/locales/fi.cjs +108 -0
- package/dist/cjs/locales/fr.cjs +96 -0
- package/dist/cjs/locales/hi.cjs +108 -0
- package/dist/cjs/locales/id.cjs +108 -0
- package/dist/cjs/locales/index.cjs +41 -2875
- package/dist/cjs/locales/it.cjs +108 -0
- package/dist/cjs/locales/ja.cjs +108 -0
- package/dist/cjs/locales/ko.cjs +108 -0
- package/dist/cjs/locales/lazy.cjs +42 -3023
- package/dist/cjs/locales/nl.cjs +108 -0
- package/dist/cjs/locales/no.cjs +108 -0
- package/dist/cjs/locales/pl.cjs +108 -0
- package/dist/cjs/locales/pt-BR.cjs +108 -0
- package/dist/cjs/locales/pt.cjs +108 -0
- package/dist/cjs/locales/ru.cjs +108 -0
- package/dist/cjs/locales/runtime.cjs +51 -0
- package/dist/cjs/locales/sv.cjs +108 -0
- package/dist/cjs/locales/sw.cjs +108 -0
- package/dist/cjs/locales/th.cjs +108 -0
- package/dist/cjs/locales/tr.cjs +108 -0
- package/dist/cjs/locales/vi.cjs +108 -0
- package/dist/cjs/locales/zh.cjs +108 -0
- package/dist/cjs/mini.cjs +121 -7353
- package/dist/cjs/pigment.cjs +207 -0
- package/dist/cjs/plugins/index.cjs +12 -0
- package/dist/cjs/registry.cjs +37 -0
- package/dist/cjs/v3/index.cjs +425 -0
- package/dist/cjs/v4/core/index.cjs +894 -0
- package/dist/cjs/v4/index.cjs +425 -0
- package/dist/cjs/v4/locales/index.cjs +130 -0
- package/dist/cjs/v4/mini/index.cjs +509 -0
- package/dist/cjs/v4-mini/index.cjs +532 -0
- package/dist/cjs/validators/any.cjs +40 -0
- package/dist/cjs/validators/array.cjs +283 -0
- package/dist/cjs/validators/base.cjs +887 -0
- package/dist/cjs/validators/base64.cjs +73 -0
- package/dist/cjs/validators/bigint.cjs +232 -0
- package/dist/cjs/validators/boolean.cjs +146 -0
- package/dist/cjs/validators/codec.cjs +205 -0
- package/dist/cjs/validators/custom.cjs +71 -0
- package/dist/cjs/validators/date.cjs +278 -0
- package/dist/cjs/validators/discriminated-union.cjs +130 -0
- package/dist/cjs/validators/enum.cjs +154 -0
- package/dist/cjs/validators/file.cjs +130 -0
- package/dist/cjs/validators/function.cjs +63 -0
- package/dist/cjs/validators/hex.cjs +70 -0
- package/dist/cjs/validators/index.cjs +123 -0
- package/dist/cjs/validators/intersection.cjs +120 -0
- package/dist/cjs/validators/json.cjs +70 -0
- package/dist/cjs/validators/lazy.cjs +53 -0
- package/dist/cjs/validators/literal.cjs +64 -0
- package/dist/cjs/validators/map.cjs +218 -0
- package/dist/cjs/validators/nan.cjs +41 -0
- package/dist/cjs/validators/never.cjs +36 -0
- package/dist/cjs/validators/null.cjs +43 -0
- package/dist/cjs/validators/number.cjs +427 -0
- package/dist/cjs/validators/object.cjs +868 -0
- package/dist/cjs/validators/promise.cjs +115 -0
- package/dist/cjs/validators/record.cjs +262 -0
- package/dist/cjs/validators/set.cjs +203 -0
- package/dist/cjs/validators/string-bool.cjs +124 -0
- package/dist/cjs/validators/string-formats.cjs +168 -0
- package/dist/cjs/validators/string.cjs +12 -0
- package/dist/cjs/validators/symbol.cjs +62 -0
- package/dist/cjs/validators/template-literal.cjs +108 -0
- package/dist/cjs/validators/tuple.cjs +187 -0
- package/dist/cjs/validators/uint8array.cjs +106 -0
- package/dist/cjs/validators/undefined.cjs +43 -0
- package/dist/cjs/validators/union.cjs +191 -0
- package/dist/cjs/validators/unknown.cjs +40 -0
- package/dist/cjs/validators/void.cjs +48 -0
- package/dist/cjs/validators/xor.cjs +69 -0
- package/dist/cli/bin.d.ts +0 -1
- package/dist/cli/bin.js +407 -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 +205 -0
- package/dist/codecs/index.d.ts +21 -4
- package/dist/codecs/index.js +11 -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 +473 -5
- 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 +0 -1
- package/dist/compat/index.d.ts +4 -5
- package/dist/compat/result.d.ts +1 -2
- package/dist/compat/result.js +0 -1
- package/dist/errors-core.d.ts +39 -0
- package/dist/errors.d.ts +4 -54
- package/dist/errors.js +4 -68
- package/dist/events.d.ts +3 -4
- package/dist/index.d.ts +1186 -835
- package/dist/index.js +1046 -367
- package/dist/kernel.d.ts +2 -3
- package/dist/kernel.js +10 -6
- package/dist/locales/af.d.ts +1 -2
- package/dist/locales/af.js +0 -1
- package/dist/locales/ar.d.ts +1 -2
- package/dist/locales/ar.js +0 -1
- package/dist/locales/bn.d.ts +1 -2
- package/dist/locales/bn.js +0 -1
- package/dist/locales/da.d.ts +1 -2
- package/dist/locales/da.js +0 -1
- package/dist/locales/de.d.ts +1 -2
- package/dist/locales/de.js +0 -1
- package/dist/locales/en.d.ts +1 -2
- package/dist/locales/en.js +0 -1
- package/dist/locales/es-MX.d.ts +1 -2
- package/dist/locales/es-MX.js +0 -1
- package/dist/locales/es.d.ts +1 -2
- package/dist/locales/es.js +0 -1
- package/dist/locales/fi.d.ts +1 -2
- package/dist/locales/fi.js +0 -1
- package/dist/locales/fr.d.ts +1 -2
- package/dist/locales/fr.js +0 -1
- package/dist/locales/hi.d.ts +1 -2
- package/dist/locales/hi.js +0 -1
- package/dist/locales/id.d.ts +1 -2
- package/dist/locales/id.js +0 -1
- package/dist/locales/index.d.ts +10 -15
- package/dist/locales/index.js +28 -2
- package/dist/locales/it.d.ts +1 -2
- package/dist/locales/it.js +0 -1
- package/dist/locales/ja.d.ts +1 -2
- package/dist/locales/ja.js +0 -1
- package/dist/locales/ko.d.ts +1 -2
- package/dist/locales/ko.js +0 -1
- package/dist/locales/lazy.d.ts +4 -26
- package/dist/locales/lazy.js +12 -55
- package/dist/locales/nl.d.ts +1 -2
- package/dist/locales/nl.js +0 -1
- package/dist/locales/no.d.ts +1 -2
- package/dist/locales/no.js +0 -1
- package/dist/locales/pl.d.ts +1 -2
- package/dist/locales/pl.js +0 -1
- package/dist/locales/pt-BR.d.ts +1 -2
- package/dist/locales/pt-BR.js +0 -1
- package/dist/locales/pt.d.ts +1 -2
- package/dist/locales/pt.js +0 -1
- package/dist/locales/ru.d.ts +1 -2
- package/dist/locales/ru.js +0 -1
- package/dist/locales/runtime.d.ts +10 -0
- package/dist/locales/runtime.js +41 -0
- package/dist/locales/sv.d.ts +1 -2
- package/dist/locales/sv.js +0 -1
- package/dist/locales/sw.d.ts +1 -2
- package/dist/locales/sw.js +0 -1
- package/dist/locales/th.d.ts +1 -2
- package/dist/locales/th.js +0 -1
- package/dist/locales/tr.d.ts +1 -2
- package/dist/locales/tr.js +0 -1
- package/dist/locales/types.d.ts +0 -1
- package/dist/locales/vi.d.ts +1 -2
- package/dist/locales/vi.js +0 -1
- package/dist/locales/zh.d.ts +1 -2
- package/dist/locales/zh.js +0 -1
- package/dist/logger.d.ts +0 -1
- package/dist/mini.d.ts +64 -65
- package/dist/mini.js +31 -7
- package/dist/pigment.d.ts +0 -1
- package/dist/pigment.js +6 -4
- 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 +34 -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 +16 -6
- package/dist/utils/security.d.ts +2 -6
- package/dist/v3/index.d.ts +2 -0
- package/dist/v3/index.js +46 -0
- package/dist/v4/core/index.d.ts +260 -0
- package/dist/v4/core/index.js +277 -0
- package/dist/v4/index.d.ts +4 -0
- package/dist/v4/index.js +50 -0
- package/dist/v4/locales/index.d.ts +53 -0
- package/dist/v4/locales/index.js +77 -0
- package/dist/v4/mini/index.d.ts +2 -0
- package/dist/v4/mini/index.js +47 -0
- package/dist/v4-mini/index.d.ts +22 -0
- package/dist/v4-mini/index.js +75 -0
- package/dist/validators/any.d.ts +7 -2
- package/dist/validators/any.js +37 -0
- package/dist/validators/array.d.ts +9 -2
- package/dist/validators/array.js +279 -0
- package/dist/validators/base.d.ts +150 -6
- package/dist/validators/base.js +868 -0
- package/dist/validators/base64.d.ts +1 -2
- package/dist/validators/base64.js +68 -0
- package/dist/validators/bigint.d.ts +21 -3
- package/dist/validators/bigint.js +228 -0
- package/dist/validators/boolean.d.ts +13 -4
- package/dist/validators/boolean.js +142 -0
- package/dist/validators/codec.d.ts +9 -2
- package/dist/validators/codec.js +200 -0
- package/dist/validators/custom.d.ts +15 -2
- package/dist/validators/custom.js +67 -0
- package/dist/validators/date.d.ts +19 -3
- package/dist/validators/date.js +274 -0
- package/dist/validators/discriminated-union.d.ts +4 -3
- package/dist/validators/discriminated-union.js +123 -0
- package/dist/validators/enum.d.ts +10 -7
- package/dist/validators/enum.js +150 -0
- package/dist/validators/file.d.ts +7 -2
- package/dist/validators/file.js +125 -0
- package/dist/validators/function.d.ts +11 -5
- package/dist/validators/function.js +58 -0
- package/dist/validators/hex.d.ts +1 -2
- package/dist/validators/hex.js +65 -0
- package/dist/validators/index.d.ts +38 -39
- package/dist/validators/index.js +35 -515
- package/dist/validators/intersection.d.ts +1 -2
- package/dist/validators/intersection.js +116 -0
- package/dist/validators/json.d.ts +1 -2
- package/dist/validators/json.js +66 -0
- package/dist/validators/lazy.d.ts +5 -9
- package/dist/validators/lazy.js +50 -0
- package/dist/validators/literal.d.ts +2 -2
- package/dist/validators/literal.js +60 -0
- package/dist/validators/map.d.ts +15 -2
- package/dist/validators/map.js +214 -0
- package/dist/validators/nan.d.ts +2 -3
- package/dist/validators/nan.js +38 -0
- package/dist/validators/never.d.ts +1 -2
- package/dist/validators/never.js +32 -0
- package/dist/validators/null.d.ts +3 -3
- package/dist/validators/null.js +40 -0
- package/dist/validators/number.d.ts +56 -27
- package/dist/validators/number.js +423 -0
- package/dist/validators/object.d.ts +30 -9
- package/dist/validators/object.js +864 -0
- package/dist/validators/promise.d.ts +15 -10
- package/dist/validators/promise.js +111 -0
- package/dist/validators/record.d.ts +11 -2
- package/dist/validators/record.js +258 -0
- package/dist/validators/set.d.ts +11 -2
- package/dist/validators/set.js +199 -0
- package/dist/validators/string-bool.d.ts +7 -10
- package/dist/validators/string-bool.js +120 -0
- package/dist/validators/string-formats.d.ts +7 -4
- package/dist/validators/string-formats.js +135 -0
- package/dist/validators/string.d.ts +39 -18
- package/dist/validators/string.js +4 -0
- package/dist/validators/symbol.d.ts +8 -3
- package/dist/validators/symbol.js +58 -0
- package/dist/validators/template-literal.d.ts +1 -2
- package/dist/validators/template-literal.js +103 -0
- package/dist/validators/tuple.d.ts +15 -2
- package/dist/validators/tuple.js +183 -0
- package/dist/validators/uint8array.d.ts +3 -4
- package/dist/validators/uint8array.js +101 -0
- package/dist/validators/undefined.d.ts +3 -3
- package/dist/validators/undefined.js +40 -0
- package/dist/validators/union.d.ts +7 -4
- package/dist/validators/union.js +187 -0
- package/dist/validators/unknown.d.ts +7 -2
- package/dist/{chunks/unknown-Dhzri_T-.js → validators/unknown.js} +12 -3
- package/dist/validators/void.d.ts +3 -2
- package/dist/validators/void.js +44 -0
- package/dist/validators/xor.d.ts +2 -3
- package/dist/validators/xor.js +66 -0
- package/package.json +114 -30
- package/dist/chunks/bigint-CRS0QVsy.js +0 -1854
- package/dist/chunks/bigint-CRS0QVsy.js.map +0 -1
- package/dist/chunks/date-50JV_Mfj.js.map +0 -1
- 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.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,123 @@
|
|
|
1
|
+
import { VldBase, VLD_VALIDATOR_TYPES } from './base.js';
|
|
2
|
+
import { VldObject } from './object.js';
|
|
3
|
+
import { VldLiteral } from './literal.js';
|
|
4
|
+
import { VldEnum } from './enum.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* VldDiscriminatedUnion - Fast union validation using discriminator field
|
|
8
|
+
* Part of Zod 4 API parity implementation
|
|
9
|
+
* Provides O(1) lookup performance by using a discriminator key
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Extract literal values from a schema
|
|
13
|
+
*/
|
|
14
|
+
function extractLiteralValues(schema) {
|
|
15
|
+
if (schema instanceof VldLiteral) {
|
|
16
|
+
return [schema.literal];
|
|
17
|
+
}
|
|
18
|
+
if (schema instanceof VldEnum) {
|
|
19
|
+
return [...schema.values];
|
|
20
|
+
}
|
|
21
|
+
throw new Error('Discriminator must be a literal or enum schema');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Discriminated union validator - validates union based on discriminator key
|
|
25
|
+
* Much faster than regular union when you have a discriminator field
|
|
26
|
+
*/
|
|
27
|
+
class VldDiscriminatedUnion extends VldBase {
|
|
28
|
+
constructor(_discriminator, _options) {
|
|
29
|
+
super(VLD_VALIDATOR_TYPES.DISCRIMINATED_UNION);
|
|
30
|
+
this._discriminator = _discriminator;
|
|
31
|
+
this._options = _options;
|
|
32
|
+
// Build discriminator map for O(1) lookup
|
|
33
|
+
this._discriminatorMap = new Map();
|
|
34
|
+
this._stringDiscriminatorMap = Object.create(null);
|
|
35
|
+
for (const option of _options) {
|
|
36
|
+
if (!(option instanceof VldObject)) {
|
|
37
|
+
throw new Error('All options in a discriminated union must be objects');
|
|
38
|
+
}
|
|
39
|
+
const discriminatorSchema = option.config?.shape?.[this._discriminator];
|
|
40
|
+
if (!discriminatorSchema) {
|
|
41
|
+
throw new Error(`Missing discriminator key "${this._discriminator}" in one of the options`);
|
|
42
|
+
}
|
|
43
|
+
const values = extractLiteralValues(discriminatorSchema);
|
|
44
|
+
for (const value of values) {
|
|
45
|
+
if (this._discriminatorMap.has(value)) {
|
|
46
|
+
throw new Error(`Duplicate discriminator value "${String(value)}" found in discriminated union`);
|
|
47
|
+
}
|
|
48
|
+
this._discriminatorMap.set(value, option);
|
|
49
|
+
if (typeof value === 'string') {
|
|
50
|
+
this._stringDiscriminatorMap[value] = option;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
this._validValues = Array.from(this._discriminatorMap.keys());
|
|
55
|
+
}
|
|
56
|
+
static create(discriminator, options) {
|
|
57
|
+
return new VldDiscriminatedUnion(discriminator, options);
|
|
58
|
+
}
|
|
59
|
+
parse(value) {
|
|
60
|
+
if (typeof value !== 'object' || value === null) {
|
|
61
|
+
throw new Error(`Expected object, received ${value === null ? 'null' : typeof value}`);
|
|
62
|
+
}
|
|
63
|
+
const discriminatorValue = value[this._discriminator];
|
|
64
|
+
const matchedSchema = typeof discriminatorValue === 'string'
|
|
65
|
+
? this._stringDiscriminatorMap[discriminatorValue]
|
|
66
|
+
: this._discriminatorMap.get(discriminatorValue);
|
|
67
|
+
if (!matchedSchema) {
|
|
68
|
+
throw new Error(`Invalid discriminator value for "${this._discriminator}". ` +
|
|
69
|
+
`Expected one of: ${JSON.stringify(this._validValues)}, ` +
|
|
70
|
+
`received: ${JSON.stringify(discriminatorValue)}`);
|
|
71
|
+
}
|
|
72
|
+
return matchedSchema.parseTrustedKnownObject(value, this._discriminator);
|
|
73
|
+
}
|
|
74
|
+
safeParse(value) {
|
|
75
|
+
// Check if input is an object
|
|
76
|
+
if (typeof value !== 'object' || value === null) {
|
|
77
|
+
return {
|
|
78
|
+
success: false,
|
|
79
|
+
error: new Error(`Expected object, received ${value === null ? 'null' : typeof value}`)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// Get discriminator value
|
|
83
|
+
const discriminatorValue = value[this._discriminator];
|
|
84
|
+
// Look up matching schema
|
|
85
|
+
const matchedSchema = typeof discriminatorValue === 'string'
|
|
86
|
+
? this._stringDiscriminatorMap[discriminatorValue]
|
|
87
|
+
: this._discriminatorMap.get(discriminatorValue);
|
|
88
|
+
if (!matchedSchema) {
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
error: new Error(`Invalid discriminator value for "${this._discriminator}". ` +
|
|
92
|
+
`Expected one of: ${JSON.stringify(this._validValues)}, ` +
|
|
93
|
+
`received: ${JSON.stringify(discriminatorValue)}`)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
return {
|
|
98
|
+
success: true,
|
|
99
|
+
data: matchedSchema.parseTrustedKnownObject(value, this._discriminator)
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
error: error
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get the discriminator key
|
|
111
|
+
*/
|
|
112
|
+
getDiscriminator() {
|
|
113
|
+
return this._discriminator;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get all options
|
|
117
|
+
*/
|
|
118
|
+
getOptions() {
|
|
119
|
+
return this._options;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { VldDiscriminatedUnion };
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
2
|
/**
|
|
3
|
-
* Immutable enum validator for string enum values
|
|
3
|
+
* Immutable enum validator for string and number enum values
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
type EnumValue = string | number;
|
|
6
|
+
export declare class VldEnum<T extends readonly [EnumValue, ...EnumValue[]]> extends VldBase<EnumValue, T[number]> {
|
|
6
7
|
private readonly _values;
|
|
7
8
|
private readonly errorMessage?;
|
|
9
|
+
private readonly _valueSet;
|
|
8
10
|
/**
|
|
9
11
|
* Private constructor to enforce immutability
|
|
10
12
|
*/
|
|
11
13
|
private constructor();
|
|
14
|
+
private createError;
|
|
12
15
|
/**
|
|
13
16
|
* Get the enum values
|
|
14
17
|
*/
|
|
@@ -16,7 +19,7 @@ export declare class VldEnum<T extends readonly [string, ...string[]]> extends V
|
|
|
16
19
|
/**
|
|
17
20
|
* Create a new enum validator
|
|
18
21
|
*/
|
|
19
|
-
static create<T extends readonly [
|
|
22
|
+
static create<T extends readonly [EnumValue, ...EnumValue[]]>(values: T): VldEnum<T>;
|
|
20
23
|
/**
|
|
21
24
|
* Parse and validate an enum value
|
|
22
25
|
*/
|
|
@@ -29,11 +32,11 @@ export declare class VldEnum<T extends readonly [string, ...string[]]> extends V
|
|
|
29
32
|
* Exclude specific values from the enum
|
|
30
33
|
* Creates a new enum validator without the specified values
|
|
31
34
|
*/
|
|
32
|
-
exclude<const E extends readonly
|
|
35
|
+
exclude<const E extends readonly EnumValue[]>(...excludeValues: E): VldEnum<T[number] extends E[number] ? never : T[number] extends Exclude<T[number], E[number]> ? T : Exclude<T, E>>;
|
|
33
36
|
/**
|
|
34
37
|
* Extract specific values from the enum
|
|
35
38
|
* Creates a new enum validator with only the specified values
|
|
36
39
|
*/
|
|
37
|
-
extract<const E extends readonly
|
|
40
|
+
extract<const E extends readonly EnumValue[]>(...extractValues: E): VldEnum<[E[number], ...E[number][]]>;
|
|
38
41
|
}
|
|
39
|
-
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { VldBase, VLD_VALIDATOR_TYPES } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales/runtime.js';
|
|
3
|
+
|
|
4
|
+
class VldEnum extends VldBase {
|
|
5
|
+
/**
|
|
6
|
+
* Private constructor to enforce immutability
|
|
7
|
+
*/
|
|
8
|
+
constructor(_values, errorMessage) {
|
|
9
|
+
super(VLD_VALIDATOR_TYPES.ENUM);
|
|
10
|
+
this._values = _values;
|
|
11
|
+
this.errorMessage = errorMessage;
|
|
12
|
+
this._valueSet = _values.length > 6 ? new Set(_values) : undefined;
|
|
13
|
+
}
|
|
14
|
+
createError(value) {
|
|
15
|
+
return new Error(this.errorMessage ||
|
|
16
|
+
getMessages().enumExpected([...this._values], JSON.stringify(value)));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the enum values
|
|
20
|
+
*/
|
|
21
|
+
get values() {
|
|
22
|
+
return this._values;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a new enum validator
|
|
26
|
+
*/
|
|
27
|
+
static create(values) {
|
|
28
|
+
return new VldEnum(values);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse and validate an enum value
|
|
32
|
+
*/
|
|
33
|
+
parse(value) {
|
|
34
|
+
// BUG-002 FIX: Add type check before includes() to prevent type confusion
|
|
35
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
36
|
+
throw this.createError(value);
|
|
37
|
+
}
|
|
38
|
+
const values = this._values;
|
|
39
|
+
switch (values.length) {
|
|
40
|
+
case 1:
|
|
41
|
+
if (value === values[0])
|
|
42
|
+
return value;
|
|
43
|
+
break;
|
|
44
|
+
case 2:
|
|
45
|
+
if (value === values[0] || value === values[1])
|
|
46
|
+
return value;
|
|
47
|
+
break;
|
|
48
|
+
case 3:
|
|
49
|
+
if (value === values[0] || value === values[1] || value === values[2])
|
|
50
|
+
return value;
|
|
51
|
+
break;
|
|
52
|
+
case 4:
|
|
53
|
+
if (value === values[0] || value === values[1] || value === values[2] || value === values[3]) {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case 5:
|
|
58
|
+
if (value === values[0] || value === values[1] || value === values[2] || value === values[3] || value === values[4]) {
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
case 6:
|
|
63
|
+
if (value === values[0] || value === values[1] || value === values[2] || value === values[3] || value === values[4] || value === values[5]) {
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
default:
|
|
68
|
+
if (this._valueSet.has(value))
|
|
69
|
+
return value;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
throw this.createError(value);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Safely parse and validate an enum value
|
|
76
|
+
*/
|
|
77
|
+
safeParse(value) {
|
|
78
|
+
// BUG-002 FIX: Add type check before includes() to prevent type confusion
|
|
79
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
80
|
+
return {
|
|
81
|
+
success: false,
|
|
82
|
+
error: this.createError(value)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const values = this._values;
|
|
86
|
+
switch (values.length) {
|
|
87
|
+
case 1:
|
|
88
|
+
if (value === values[0])
|
|
89
|
+
return { success: true, data: value };
|
|
90
|
+
break;
|
|
91
|
+
case 2:
|
|
92
|
+
if (value === values[0] || value === values[1])
|
|
93
|
+
return { success: true, data: value };
|
|
94
|
+
break;
|
|
95
|
+
case 3:
|
|
96
|
+
if (value === values[0] || value === values[1] || value === values[2])
|
|
97
|
+
return { success: true, data: value };
|
|
98
|
+
break;
|
|
99
|
+
case 4:
|
|
100
|
+
if (value === values[0] || value === values[1] || value === values[2] || value === values[3]) {
|
|
101
|
+
return { success: true, data: value };
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case 5:
|
|
105
|
+
if (value === values[0] || value === values[1] || value === values[2] || value === values[3] || value === values[4]) {
|
|
106
|
+
return { success: true, data: value };
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
case 6:
|
|
110
|
+
if (value === values[0] || value === values[1] || value === values[2] || value === values[3] || value === values[4] || value === values[5]) {
|
|
111
|
+
return { success: true, data: value };
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
if (this._valueSet.has(value))
|
|
116
|
+
return { success: true, data: value };
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
error: this.createError(value)
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Exclude specific values from the enum
|
|
126
|
+
* Creates a new enum validator without the specified values
|
|
127
|
+
*/
|
|
128
|
+
exclude(...excludeValues) {
|
|
129
|
+
const filtered = this._values.filter(v => !excludeValues.includes(v));
|
|
130
|
+
if (filtered.length === 0) {
|
|
131
|
+
throw new Error('Cannot exclude all enum values');
|
|
132
|
+
}
|
|
133
|
+
// Type assertion needed because TypeScript can't guarantee the filtered array maintains the required type
|
|
134
|
+
return new VldEnum(filtered, this.errorMessage);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Extract specific values from the enum
|
|
138
|
+
* Creates a new enum validator with only the specified values
|
|
139
|
+
*/
|
|
140
|
+
extract(...extractValues) {
|
|
141
|
+
const extracted = this._values.filter(v => extractValues.includes(v));
|
|
142
|
+
if (extracted.length === 0) {
|
|
143
|
+
throw new Error('Cannot extract non-existent enum values');
|
|
144
|
+
}
|
|
145
|
+
// Type assertion needed because TypeScript can't guarantee the extracted array has the required type
|
|
146
|
+
return new VldEnum(extracted, this.errorMessage);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export { VldEnum };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
2
|
/**
|
|
3
3
|
* File representation for validation
|
|
4
4
|
* In browsers: File object
|
|
@@ -20,10 +20,16 @@ export declare class VldFile extends VldBase<unknown, VldFileValue> {
|
|
|
20
20
|
* Create a new file validator
|
|
21
21
|
*/
|
|
22
22
|
static create(): VldFile;
|
|
23
|
+
private isFileLike;
|
|
23
24
|
/**
|
|
24
25
|
* Parse and validate a file value
|
|
25
26
|
*/
|
|
26
27
|
parse(value: unknown): VldFileValue;
|
|
28
|
+
/**
|
|
29
|
+
* Parse a value that has already passed the file-like type guard.
|
|
30
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
31
|
+
*/
|
|
32
|
+
parseKnownFile(value: VldFileValue): VldFileValue;
|
|
27
33
|
/**
|
|
28
34
|
* Run all validation checks on the file
|
|
29
35
|
*/
|
|
@@ -54,4 +60,3 @@ export declare class VldFile extends VldBase<unknown, VldFileValue> {
|
|
|
54
60
|
* Usage: v.file().min(1024).max(10485760).mime(['image/jpeg', 'image/png'])
|
|
55
61
|
*/
|
|
56
62
|
export declare function file(): VldFile;
|
|
57
|
-
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { VldBase, VLD_VALIDATOR_TYPES } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales/runtime.js';
|
|
3
|
+
import { V as VldError } from '../chunks/errors-core-BeiFUtZM.js';
|
|
4
|
+
|
|
5
|
+
function createFileError(message) {
|
|
6
|
+
return new VldError([{ code: 'invalid_type', path: [], message }]);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Immutable file validator for file uploads
|
|
10
|
+
* Supports size and MIME type validation
|
|
11
|
+
*/
|
|
12
|
+
class VldFile extends VldBase {
|
|
13
|
+
constructor(checks = []) {
|
|
14
|
+
super(VLD_VALIDATOR_TYPES.FILE);
|
|
15
|
+
this.checks = checks;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a new file validator
|
|
19
|
+
*/
|
|
20
|
+
static create() {
|
|
21
|
+
return new VldFile();
|
|
22
|
+
}
|
|
23
|
+
isFileLike(value) {
|
|
24
|
+
if (typeof value !== 'object' || value === null) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (typeof File !== 'undefined' && value instanceof File) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return 'size' in value && 'type' in value;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse and validate a file value
|
|
34
|
+
*/
|
|
35
|
+
parse(value) {
|
|
36
|
+
if (this.isFileLike(value)) {
|
|
37
|
+
return this.parseKnownFile(value);
|
|
38
|
+
}
|
|
39
|
+
if (typeof File === 'undefined') {
|
|
40
|
+
throw new Error(getMessages().fileNotSupported || 'File API not supported in this environment');
|
|
41
|
+
}
|
|
42
|
+
throw new Error(getMessages().invalidFile || 'Expected a File object');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse a value that has already passed the file-like type guard.
|
|
46
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
47
|
+
*/
|
|
48
|
+
parseKnownFile(value) {
|
|
49
|
+
return this.runChecks(value);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Run all validation checks on the file
|
|
53
|
+
*/
|
|
54
|
+
runChecks(file) {
|
|
55
|
+
const msgs = getMessages();
|
|
56
|
+
for (const check of this.checks) {
|
|
57
|
+
switch (check.type) {
|
|
58
|
+
case 'min':
|
|
59
|
+
if (file.size < check.value) {
|
|
60
|
+
throw new Error(check.message ||
|
|
61
|
+
(msgs.fileMinSize?.(check.value) || `File size must be at least ${check.value} bytes`));
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
case 'max':
|
|
65
|
+
if (file.size > check.value) {
|
|
66
|
+
throw new Error(check.message ||
|
|
67
|
+
(msgs.fileMaxSize?.(check.value) || `File size must not exceed ${check.value} bytes`));
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case 'mime':
|
|
71
|
+
if (!check.value.includes(file.type)) {
|
|
72
|
+
throw new Error(check.message ||
|
|
73
|
+
(msgs.fileMimeType?.(check.value) || `Invalid file type. Expected: ${check.value.join(', ')}`));
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return file;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Safely parse and validate a file value
|
|
82
|
+
*/
|
|
83
|
+
safeParse(value) {
|
|
84
|
+
try {
|
|
85
|
+
return { success: true, data: this.parse(value) };
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return { success: false, error: createFileError(error.message) };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Set minimum file size in bytes
|
|
93
|
+
*/
|
|
94
|
+
min(bytes, message) {
|
|
95
|
+
return new VldFile([...this.checks, { type: 'min', value: bytes, message }]);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Set maximum file size in bytes
|
|
99
|
+
*/
|
|
100
|
+
max(bytes, message) {
|
|
101
|
+
return new VldFile([...this.checks, { type: 'max', value: bytes, message }]);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Set allowed MIME types
|
|
105
|
+
*/
|
|
106
|
+
mime(types, message) {
|
|
107
|
+
const typeArray = Array.isArray(types) ? types : [types];
|
|
108
|
+
return new VldFile([...this.checks, { type: 'mime', value: typeArray, message }]);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Set both minimum and maximum file size
|
|
112
|
+
*/
|
|
113
|
+
size(min, max, message) {
|
|
114
|
+
return this.min(min, message).max(max, message);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Helper function to create file validators
|
|
119
|
+
* Usage: v.file().min(1024).max(10485760).mime(['image/jpeg', 'image/png'])
|
|
120
|
+
*/
|
|
121
|
+
function file() {
|
|
122
|
+
return VldFile.create();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export { VldFile, file };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
|
+
type AnyFunction = (...args: any[]) => any;
|
|
2
3
|
/**
|
|
3
4
|
* Immutable function validator
|
|
4
5
|
* Validates that a value is a function
|
|
5
6
|
*/
|
|
6
|
-
export declare class VldFunction extends VldBase<unknown,
|
|
7
|
+
export declare class VldFunction extends VldBase<unknown, AnyFunction> {
|
|
7
8
|
private constructor();
|
|
8
9
|
/**
|
|
9
10
|
* Create a new function validator
|
|
@@ -12,15 +13,20 @@ export declare class VldFunction extends VldBase<unknown, Function> {
|
|
|
12
13
|
/**
|
|
13
14
|
* Parse and validate a function value
|
|
14
15
|
*/
|
|
15
|
-
parse(value: unknown):
|
|
16
|
+
parse(value: unknown): AnyFunction;
|
|
17
|
+
/**
|
|
18
|
+
* Parse a value that has already passed the function type guard.
|
|
19
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
20
|
+
*/
|
|
21
|
+
parseKnownFunction(value: AnyFunction): AnyFunction;
|
|
16
22
|
/**
|
|
17
23
|
* Safely parse and validate a function value
|
|
18
24
|
*/
|
|
19
|
-
safeParse(value: unknown): ParseResult<
|
|
25
|
+
safeParse(value: unknown): ParseResult<AnyFunction>;
|
|
20
26
|
}
|
|
21
27
|
/**
|
|
22
28
|
* Helper function to create function validators
|
|
23
29
|
* Usage: v.function()
|
|
24
30
|
*/
|
|
25
31
|
export declare function functionValidator(): VldFunction;
|
|
26
|
-
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { VldBase, VLD_VALIDATOR_TYPES } from './base.js';
|
|
2
|
+
import { getMessages } from '../locales/runtime.js';
|
|
3
|
+
import { V as VldError } from '../chunks/errors-core-BeiFUtZM.js';
|
|
4
|
+
|
|
5
|
+
function createFunctionError(message) {
|
|
6
|
+
return new VldError([{ code: 'invalid_type', path: [], message }]);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Immutable function validator
|
|
10
|
+
* Validates that a value is a function
|
|
11
|
+
*/
|
|
12
|
+
class VldFunction extends VldBase {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(VLD_VALIDATOR_TYPES.FUNCTION);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a new function validator
|
|
18
|
+
*/
|
|
19
|
+
static create() {
|
|
20
|
+
return new VldFunction();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse and validate a function value
|
|
24
|
+
*/
|
|
25
|
+
parse(value) {
|
|
26
|
+
if (typeof value !== 'function') {
|
|
27
|
+
throw new Error(getMessages().invalidFunction || 'Expected a function');
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse a value that has already passed the function type guard.
|
|
33
|
+
* @internal Used by object validators to avoid duplicate hot-path checks.
|
|
34
|
+
*/
|
|
35
|
+
parseKnownFunction(value) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Safely parse and validate a function value
|
|
40
|
+
*/
|
|
41
|
+
safeParse(value) {
|
|
42
|
+
try {
|
|
43
|
+
return { success: true, data: this.parse(value) };
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return { success: false, error: createFunctionError(error.message) };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Helper function to create function validators
|
|
52
|
+
* Usage: v.function()
|
|
53
|
+
*/
|
|
54
|
+
function functionValidator() {
|
|
55
|
+
return VldFunction.create();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { VldFunction, functionValidator };
|
package/dist/validators/hex.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VldBase, ParseResult } from './base';
|
|
1
|
+
import { VldBase, ParseResult } from './base.js';
|
|
2
2
|
/**
|
|
3
3
|
* Hexadecimal string validator
|
|
4
4
|
*/
|
|
@@ -14,4 +14,3 @@ export declare class VldHex extends VldBase<string, string> {
|
|
|
14
14
|
lowercaseMode(): VldHex;
|
|
15
15
|
static create(lowercase?: boolean): VldHex;
|
|
16
16
|
}
|
|
17
|
-
//# sourceMappingURL=hex.d.ts.map
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { VldBase, VLD_VALIDATOR_TYPES } from './base.js';
|
|
2
|
+
import { createIssue } from '../errors.js';
|
|
3
|
+
import { getMessages } from '../locales/runtime.js';
|
|
4
|
+
import { V as VldError } from '../chunks/errors-core-BeiFUtZM.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Hexadecimal string validator
|
|
8
|
+
*/
|
|
9
|
+
class VldHex extends VldBase {
|
|
10
|
+
constructor(lowercase = false) {
|
|
11
|
+
super(VLD_VALIDATOR_TYPES.HEX);
|
|
12
|
+
this.lowercase = lowercase;
|
|
13
|
+
}
|
|
14
|
+
parse(value) {
|
|
15
|
+
const result = this.safeParse(value);
|
|
16
|
+
if (!result.success) {
|
|
17
|
+
throw result.error;
|
|
18
|
+
}
|
|
19
|
+
return result.data;
|
|
20
|
+
}
|
|
21
|
+
safeParse(value) {
|
|
22
|
+
if (typeof value !== 'string') {
|
|
23
|
+
return {
|
|
24
|
+
success: false,
|
|
25
|
+
error: new VldError([
|
|
26
|
+
createIssue('invalid_type', [], getMessages().expectedString)
|
|
27
|
+
])
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Check if it's a valid hex string
|
|
31
|
+
if (!VldHex.HEX_REGEX.test(value)) {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
error: new VldError([
|
|
35
|
+
createIssue('custom', [], getMessages().invalidHex)
|
|
36
|
+
])
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Check if even length (full bytes)
|
|
40
|
+
if (value.length % 2 !== 0) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: new VldError([
|
|
44
|
+
createIssue('custom', [], getMessages().invalidHex)
|
|
45
|
+
])
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Normalize case if required
|
|
49
|
+
const normalizedValue = this.lowercase ? value.toLowerCase() : value;
|
|
50
|
+
return { success: true, data: normalizedValue };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Require lowercase hex characters
|
|
54
|
+
*/
|
|
55
|
+
lowercaseMode() {
|
|
56
|
+
return new VldHex(true);
|
|
57
|
+
}
|
|
58
|
+
static create(lowercase = false) {
|
|
59
|
+
return new VldHex(lowercase);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// BUG-008 FIX: Use * instead of + to allow empty hex strings (consistent with base64 validator)
|
|
63
|
+
VldHex.HEX_REGEX = /^[0-9a-fA-F]*$/;
|
|
64
|
+
|
|
65
|
+
export { VldHex };
|