@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
package/dist/cli/bin.js
ADDED
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { vldCli } from './index.js';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import pigment from '../pigment.js';
|
|
7
|
+
import { prettifyError, prettifyErrorColored } from '../errors.js';
|
|
8
|
+
import v from '../index.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* VLD CLI - Validate Command
|
|
12
|
+
*
|
|
13
|
+
* Validate JSON data against a VLD schema file.
|
|
14
|
+
*/
|
|
15
|
+
function assertWithinCwd(absolutePath, label, original) {
|
|
16
|
+
const allowedDir = process.cwd();
|
|
17
|
+
if (!absolutePath.startsWith(allowedDir + path.sep) && absolutePath !== allowedDir) {
|
|
18
|
+
throw new Error(`${label} path escapes allowed directory: ${original}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validate command
|
|
23
|
+
*/
|
|
24
|
+
const validateCommand = {
|
|
25
|
+
name: 'validate',
|
|
26
|
+
description: 'Validate JSON data against a VLD schema',
|
|
27
|
+
aliases: ['v'],
|
|
28
|
+
arguments: [
|
|
29
|
+
{
|
|
30
|
+
name: 'schema',
|
|
31
|
+
description: 'Path to schema file (.ts or .js)',
|
|
32
|
+
required: true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'data',
|
|
36
|
+
description: 'Path to JSON data file or JSON string',
|
|
37
|
+
required: true
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
options: [
|
|
41
|
+
{
|
|
42
|
+
name: 'strict',
|
|
43
|
+
short: 's',
|
|
44
|
+
description: 'Enable strict mode (no extra keys)',
|
|
45
|
+
type: 'boolean',
|
|
46
|
+
default: false
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'quiet',
|
|
50
|
+
short: 'q',
|
|
51
|
+
description: 'Only output errors',
|
|
52
|
+
type: 'boolean',
|
|
53
|
+
default: false
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'json',
|
|
57
|
+
short: 'j',
|
|
58
|
+
description: 'Output as JSON',
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
default: false
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'no-color',
|
|
64
|
+
description: 'Disable colored output',
|
|
65
|
+
type: 'boolean',
|
|
66
|
+
default: false
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
action: async (args, options) => {
|
|
70
|
+
const schemaPath = args['schema'];
|
|
71
|
+
const dataArg = args['data'];
|
|
72
|
+
const quiet = options['quiet'];
|
|
73
|
+
const json = options['json'];
|
|
74
|
+
const noColor = options['no-color'];
|
|
75
|
+
// Load schema
|
|
76
|
+
let schema;
|
|
77
|
+
try {
|
|
78
|
+
const absoluteSchemaPath = path.resolve(process.cwd(), schemaPath);
|
|
79
|
+
// Security: Ensure resolved path is within allowed directories
|
|
80
|
+
assertWithinCwd(absoluteSchemaPath, 'Schema', schemaPath);
|
|
81
|
+
if (!fs.existsSync(absoluteSchemaPath)) {
|
|
82
|
+
throw new Error(`Schema file not found: ${schemaPath}`);
|
|
83
|
+
}
|
|
84
|
+
// Dynamic import for ESM/CJS compatibility
|
|
85
|
+
const schemaModule = await import(absoluteSchemaPath);
|
|
86
|
+
schema = schemaModule.default || schemaModule.schema || schemaModule;
|
|
87
|
+
if (!schema || typeof schema.parse !== 'function') {
|
|
88
|
+
throw new Error('Schema must export a VLD validator with parse() method');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (json) {
|
|
93
|
+
console.log(JSON.stringify({ success: false, error: error.message }));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.error(pigment.red('Schema Error:'), error.message);
|
|
97
|
+
}
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Load data
|
|
102
|
+
let data;
|
|
103
|
+
try {
|
|
104
|
+
// Check if it's a file path or JSON string
|
|
105
|
+
if (dataArg.startsWith('{') || dataArg.startsWith('[')) {
|
|
106
|
+
data = JSON.parse(dataArg);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
const absoluteDataPath = path.resolve(process.cwd(), dataArg);
|
|
110
|
+
// Security: Ensure resolved path is within allowed directories
|
|
111
|
+
assertWithinCwd(absoluteDataPath, 'Data', dataArg);
|
|
112
|
+
if (!fs.existsSync(absoluteDataPath)) {
|
|
113
|
+
throw new Error(`Data file not found: ${dataArg}`);
|
|
114
|
+
}
|
|
115
|
+
const content = fs.readFileSync(absoluteDataPath, 'utf-8');
|
|
116
|
+
data = JSON.parse(content);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (json) {
|
|
121
|
+
console.log(JSON.stringify({ success: false, error: error.message }));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.error(pigment.red('Data Error:'), error.message);
|
|
125
|
+
}
|
|
126
|
+
process.exitCode = 1;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Validate
|
|
130
|
+
const result = schema.safeParse(data);
|
|
131
|
+
if (json) {
|
|
132
|
+
if (result.success) {
|
|
133
|
+
console.log(JSON.stringify({ success: true, data: result.data }));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const err = result.error;
|
|
137
|
+
const errorJson = {
|
|
138
|
+
success: false,
|
|
139
|
+
error: err?.message,
|
|
140
|
+
issues: err?.issues
|
|
141
|
+
};
|
|
142
|
+
console.log(JSON.stringify(errorJson));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
if (result.success) {
|
|
147
|
+
if (!quiet) {
|
|
148
|
+
console.log(pigment.green('Validation passed'));
|
|
149
|
+
console.log('');
|
|
150
|
+
console.log(pigment.dim('Data:'));
|
|
151
|
+
console.log(JSON.stringify(result.data, null, 2));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.error(pigment.red('Validation failed'));
|
|
156
|
+
console.error('');
|
|
157
|
+
// Check if it's a VldError with issues
|
|
158
|
+
if (result.error && 'issues' in result.error) {
|
|
159
|
+
const formatted = noColor
|
|
160
|
+
? prettifyError(result.error, { colored: false })
|
|
161
|
+
: prettifyErrorColored(result.error);
|
|
162
|
+
console.error(formatted);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.error(result.error?.message || 'Unknown error');
|
|
166
|
+
}
|
|
167
|
+
process.exitCode = 1;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* VLD CLI - Benchmark Command
|
|
175
|
+
*
|
|
176
|
+
* Run performance benchmarks for VLD validation.
|
|
177
|
+
*/
|
|
178
|
+
/**
|
|
179
|
+
* Run a single benchmark
|
|
180
|
+
*/
|
|
181
|
+
function runBenchmark(name, fn, iterations) {
|
|
182
|
+
// Warm up
|
|
183
|
+
for (let i = 0; i < Math.min(100, iterations / 10); i++) {
|
|
184
|
+
fn();
|
|
185
|
+
}
|
|
186
|
+
// Run benchmark
|
|
187
|
+
const start = performance.now();
|
|
188
|
+
for (let i = 0; i < iterations; i++) {
|
|
189
|
+
fn();
|
|
190
|
+
}
|
|
191
|
+
const end = performance.now();
|
|
192
|
+
const totalMs = end - start;
|
|
193
|
+
const avgMs = totalMs / iterations;
|
|
194
|
+
const opsPerSec = 1000 / avgMs;
|
|
195
|
+
return { name, iterations, totalMs, avgMs, opsPerSec };
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Format number with comma separators
|
|
199
|
+
*/
|
|
200
|
+
function formatNumber(n) {
|
|
201
|
+
return n.toLocaleString('en-US', { maximumFractionDigits: 2 });
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Format benchmark result
|
|
205
|
+
*/
|
|
206
|
+
function formatResult(result, colored) {
|
|
207
|
+
const name = colored ? pigment.cyan(result.name.padEnd(30)) : result.name.padEnd(30);
|
|
208
|
+
const ops = colored
|
|
209
|
+
? pigment.green(formatNumber(result.opsPerSec).padStart(12))
|
|
210
|
+
: formatNumber(result.opsPerSec).padStart(12);
|
|
211
|
+
const avg = colored
|
|
212
|
+
? pigment.yellow(result.avgMs.toFixed(6).padStart(12))
|
|
213
|
+
: result.avgMs.toFixed(6).padStart(12);
|
|
214
|
+
return `${name} ${ops} ops/sec ${avg} ms/op`;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Benchmark command
|
|
218
|
+
*/
|
|
219
|
+
const benchmarkCommand = {
|
|
220
|
+
name: 'benchmark',
|
|
221
|
+
description: 'Run performance benchmarks',
|
|
222
|
+
aliases: ['bench', 'b'],
|
|
223
|
+
options: [
|
|
224
|
+
{
|
|
225
|
+
name: 'iterations',
|
|
226
|
+
short: 'n',
|
|
227
|
+
description: 'Number of iterations',
|
|
228
|
+
type: 'number',
|
|
229
|
+
default: 10000
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'suite',
|
|
233
|
+
short: 's',
|
|
234
|
+
description: 'Benchmark suite to run (all, primitives, objects, arrays)',
|
|
235
|
+
type: 'string',
|
|
236
|
+
default: 'all'
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'json',
|
|
240
|
+
short: 'j',
|
|
241
|
+
description: 'Output as JSON',
|
|
242
|
+
type: 'boolean',
|
|
243
|
+
default: false
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: 'no-color',
|
|
247
|
+
description: 'Disable colored output',
|
|
248
|
+
type: 'boolean',
|
|
249
|
+
default: false
|
|
250
|
+
}
|
|
251
|
+
],
|
|
252
|
+
action: async (_args, options) => {
|
|
253
|
+
const iterations = options['iterations'];
|
|
254
|
+
const suite = options['suite'];
|
|
255
|
+
const json = options['json'];
|
|
256
|
+
const noColor = options['no-color'];
|
|
257
|
+
const colored = !noColor;
|
|
258
|
+
const results = [];
|
|
259
|
+
// Primitive validators
|
|
260
|
+
const stringSchema = v.string();
|
|
261
|
+
const numberSchema = v.number();
|
|
262
|
+
const booleanSchema = v.boolean();
|
|
263
|
+
const dateSchema = v.date();
|
|
264
|
+
// Object validator
|
|
265
|
+
const userSchema = v.object({
|
|
266
|
+
name: v.string(),
|
|
267
|
+
email: v.string(),
|
|
268
|
+
age: v.number(),
|
|
269
|
+
active: v.boolean()
|
|
270
|
+
});
|
|
271
|
+
// Array validator
|
|
272
|
+
const numbersSchema = v.array(v.number());
|
|
273
|
+
// Nested object validator
|
|
274
|
+
const nestedSchema = v.object({
|
|
275
|
+
user: v.object({
|
|
276
|
+
name: v.string(),
|
|
277
|
+
email: v.string()
|
|
278
|
+
}),
|
|
279
|
+
items: v.array(v.object({
|
|
280
|
+
id: v.number(),
|
|
281
|
+
name: v.string(),
|
|
282
|
+
price: v.number()
|
|
283
|
+
}))
|
|
284
|
+
});
|
|
285
|
+
// Test data
|
|
286
|
+
const testString = 'hello world';
|
|
287
|
+
const testNumber = 42;
|
|
288
|
+
const testBoolean = true;
|
|
289
|
+
const testDate = new Date();
|
|
290
|
+
const testUser = { name: 'John', email: 'john@example.com', age: 30, active: true };
|
|
291
|
+
const testNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
292
|
+
const testNested = {
|
|
293
|
+
user: { name: 'John', email: 'john@example.com' },
|
|
294
|
+
items: [
|
|
295
|
+
{ id: 1, name: 'Item 1', price: 10.99 },
|
|
296
|
+
{ id: 2, name: 'Item 2', price: 20.99 },
|
|
297
|
+
{ id: 3, name: 'Item 3', price: 30.99 }
|
|
298
|
+
]
|
|
299
|
+
};
|
|
300
|
+
if (!json) {
|
|
301
|
+
console.log(pigment.bold('VLD Performance Benchmark'));
|
|
302
|
+
console.log(pigment.dim(`Running ${formatNumber(iterations)} iterations per test`));
|
|
303
|
+
console.log('');
|
|
304
|
+
}
|
|
305
|
+
// Primitive benchmarks
|
|
306
|
+
if (suite === 'all' || suite === 'primitives') {
|
|
307
|
+
if (!json) {
|
|
308
|
+
console.log(pigment.bold('Primitives:'));
|
|
309
|
+
}
|
|
310
|
+
results.push(runBenchmark('string.parse()', () => stringSchema.parse(testString), iterations));
|
|
311
|
+
results.push(runBenchmark('number.parse()', () => numberSchema.parse(testNumber), iterations));
|
|
312
|
+
results.push(runBenchmark('boolean.parse()', () => booleanSchema.parse(testBoolean), iterations));
|
|
313
|
+
results.push(runBenchmark('date.parse()', () => dateSchema.parse(testDate), iterations));
|
|
314
|
+
results.push(runBenchmark('string.safeParse()', () => stringSchema.safeParse(testString), iterations));
|
|
315
|
+
if (!json) {
|
|
316
|
+
for (const result of results.slice(-5)) {
|
|
317
|
+
console.log(' ' + formatResult(result, colored));
|
|
318
|
+
}
|
|
319
|
+
console.log('');
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Object benchmarks
|
|
323
|
+
if (suite === 'all' || suite === 'objects') {
|
|
324
|
+
if (!json) {
|
|
325
|
+
console.log(pigment.bold('Objects:'));
|
|
326
|
+
}
|
|
327
|
+
results.push(runBenchmark('object.parse()', () => userSchema.parse(testUser), iterations));
|
|
328
|
+
results.push(runBenchmark('object.safeParse()', () => userSchema.safeParse(testUser), iterations));
|
|
329
|
+
results.push(runBenchmark('nested.parse()', () => nestedSchema.parse(testNested), iterations));
|
|
330
|
+
if (!json) {
|
|
331
|
+
for (const result of results.slice(-3)) {
|
|
332
|
+
console.log(' ' + formatResult(result, colored));
|
|
333
|
+
}
|
|
334
|
+
console.log('');
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
// Array benchmarks
|
|
338
|
+
if (suite === 'all' || suite === 'arrays') {
|
|
339
|
+
if (!json) {
|
|
340
|
+
console.log(pigment.bold('Arrays:'));
|
|
341
|
+
}
|
|
342
|
+
results.push(runBenchmark('array.parse()', () => numbersSchema.parse(testNumbers), iterations));
|
|
343
|
+
results.push(runBenchmark('array.safeParse()', () => numbersSchema.safeParse(testNumbers), iterations));
|
|
344
|
+
if (!json) {
|
|
345
|
+
for (const result of results.slice(-2)) {
|
|
346
|
+
console.log(' ' + formatResult(result, colored));
|
|
347
|
+
}
|
|
348
|
+
console.log('');
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// Summary
|
|
352
|
+
if (!json) {
|
|
353
|
+
const totalOps = results.reduce((sum, r) => sum + r.opsPerSec, 0);
|
|
354
|
+
const avgOps = totalOps / results.length;
|
|
355
|
+
console.log(pigment.bold('Summary:'));
|
|
356
|
+
console.log(` Total benchmarks: ${results.length}`);
|
|
357
|
+
console.log(` Average ops/sec: ${formatNumber(avgOps)}`);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
console.log(JSON.stringify({
|
|
361
|
+
iterations,
|
|
362
|
+
suite,
|
|
363
|
+
results: results.map((r) => ({
|
|
364
|
+
name: r.name,
|
|
365
|
+
iterations: r.iterations,
|
|
366
|
+
totalMs: r.totalMs,
|
|
367
|
+
avgMs: r.avgMs,
|
|
368
|
+
opsPerSec: r.opsPerSec
|
|
369
|
+
}))
|
|
370
|
+
}));
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* VLD CLI Entry Point
|
|
377
|
+
*
|
|
378
|
+
* This is the main entry point for the `vld` command-line tool.
|
|
379
|
+
*/
|
|
380
|
+
const packageJson = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf-8'));
|
|
381
|
+
const version = packageJson.version || '0.0.0';
|
|
382
|
+
vldCli.version = version;
|
|
383
|
+
// Register commands
|
|
384
|
+
vldCli.command(validateCommand);
|
|
385
|
+
vldCli.command(benchmarkCommand);
|
|
386
|
+
// Help command
|
|
387
|
+
vldCli.command({
|
|
388
|
+
name: 'help',
|
|
389
|
+
description: 'Show help information',
|
|
390
|
+
aliases: ['h'],
|
|
391
|
+
action: () => {
|
|
392
|
+
console.log(vldCli.help());
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
// Version command
|
|
396
|
+
vldCli.command({
|
|
397
|
+
name: 'version',
|
|
398
|
+
description: 'Show version information',
|
|
399
|
+
action: () => {
|
|
400
|
+
console.log(`vld v${version}`);
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
// Run CLI
|
|
404
|
+
vldCli.run(process.argv.slice(2)).catch((error) => {
|
|
405
|
+
console.error('Fatal error:', error);
|
|
406
|
+
process.exitCode = 1;
|
|
407
|
+
});
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Run performance benchmarks for VLD validation.
|
|
5
5
|
*/
|
|
6
|
-
import type { CliCommand } from '../index';
|
|
6
|
+
import type { CliCommand } from '../index.js';
|
|
7
7
|
/**
|
|
8
8
|
* Benchmark command
|
|
9
9
|
*/
|
|
10
10
|
export declare const benchmarkCommand: CliCommand;
|
|
11
|
-
//# sourceMappingURL=benchmark.d.ts.map
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Validate JSON data against a VLD schema file.
|
|
5
5
|
*/
|
|
6
|
-
import type { CliCommand } from '../index';
|
|
6
|
+
import type { CliCommand } from '../index.js';
|
|
7
7
|
/**
|
|
8
8
|
* Validate command
|
|
9
9
|
*/
|
|
10
10
|
export declare const validateCommand: CliCommand;
|
|
11
|
-
//# sourceMappingURL=validate.d.ts.map
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import pigment from '../pigment.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* VLD CLI Tool
|
|
5
|
+
*
|
|
6
|
+
* Command-line interface for VLD validation library.
|
|
7
|
+
* Provides commands for validation, schema generation, and benchmarking.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Parse command line arguments
|
|
11
|
+
*/
|
|
12
|
+
function parseArgs(args, options = []) {
|
|
13
|
+
const result = {
|
|
14
|
+
positional: [],
|
|
15
|
+
options: {}
|
|
16
|
+
};
|
|
17
|
+
// Set defaults
|
|
18
|
+
for (const opt of options) {
|
|
19
|
+
if (opt.default !== undefined) {
|
|
20
|
+
result.options[opt.name] = opt.default;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
let i = 0;
|
|
24
|
+
while (i < args.length) {
|
|
25
|
+
const arg = args[i];
|
|
26
|
+
if (arg === undefined) {
|
|
27
|
+
i++;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (arg.startsWith('--')) {
|
|
31
|
+
// Long option
|
|
32
|
+
const [name, value] = arg.slice(2).split('=');
|
|
33
|
+
if (name === undefined || name === '') {
|
|
34
|
+
i++;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const option = options.find((o) => o.name === name);
|
|
38
|
+
if (option) {
|
|
39
|
+
if (option.type === 'boolean') {
|
|
40
|
+
result.options[name] = value !== 'false';
|
|
41
|
+
}
|
|
42
|
+
else if (value !== undefined) {
|
|
43
|
+
result.options[name] = option.type === 'number' ? Number(value) : value;
|
|
44
|
+
}
|
|
45
|
+
else if (i + 1 < args.length && args[i + 1] !== undefined && !args[i + 1].startsWith('-')) {
|
|
46
|
+
i++;
|
|
47
|
+
const nextArg = args[i];
|
|
48
|
+
if (nextArg !== undefined) {
|
|
49
|
+
result.options[name] = option.type === 'number' ? Number(nextArg) : nextArg;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
result.options[name] = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else if (arg.startsWith('-')) {
|
|
58
|
+
// Short option
|
|
59
|
+
const short = arg.slice(1);
|
|
60
|
+
const option = options.find((o) => o.short === short);
|
|
61
|
+
if (option) {
|
|
62
|
+
if (option.type === 'boolean') {
|
|
63
|
+
result.options[option.name] = true;
|
|
64
|
+
}
|
|
65
|
+
else if (i + 1 < args.length && args[i + 1] !== undefined && !args[i + 1].startsWith('-')) {
|
|
66
|
+
i++;
|
|
67
|
+
const nextArg = args[i];
|
|
68
|
+
if (nextArg === undefined) {
|
|
69
|
+
i++;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
result.options[option.name] =
|
|
73
|
+
option.type === 'number' ? Number(nextArg) : nextArg;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// Positional argument
|
|
79
|
+
result.positional.push(arg);
|
|
80
|
+
}
|
|
81
|
+
i++;
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create a CLI instance
|
|
87
|
+
*/
|
|
88
|
+
function createCli(name, version, description) {
|
|
89
|
+
const commands = new Map();
|
|
90
|
+
const cli = {
|
|
91
|
+
name,
|
|
92
|
+
version,
|
|
93
|
+
description,
|
|
94
|
+
commands,
|
|
95
|
+
command(cmd) {
|
|
96
|
+
commands.set(cmd.name, cmd);
|
|
97
|
+
if (cmd.aliases) {
|
|
98
|
+
for (const alias of cmd.aliases) {
|
|
99
|
+
commands.set(alias, cmd);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return this;
|
|
103
|
+
},
|
|
104
|
+
help() {
|
|
105
|
+
const lines = [];
|
|
106
|
+
lines.push(pigment.bold(`${this.name} v${this.version}`));
|
|
107
|
+
lines.push(pigment.dim(description));
|
|
108
|
+
lines.push('');
|
|
109
|
+
lines.push(pigment.bold('Usage:'));
|
|
110
|
+
lines.push(` ${name} <command> [options]`);
|
|
111
|
+
lines.push('');
|
|
112
|
+
lines.push(pigment.bold('Commands:'));
|
|
113
|
+
const uniqueCommands = new Map();
|
|
114
|
+
for (const [, cmd] of commands) {
|
|
115
|
+
if (!uniqueCommands.has(cmd.name)) {
|
|
116
|
+
uniqueCommands.set(cmd.name, cmd);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
for (const [cmdName, cmd] of uniqueCommands) {
|
|
120
|
+
const aliases = cmd.aliases?.length ? pigment.dim(` (${cmd.aliases.join(', ')})`) : '';
|
|
121
|
+
lines.push(` ${pigment.cyan(cmdName)}${aliases}`);
|
|
122
|
+
lines.push(` ${cmd.description}`);
|
|
123
|
+
}
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push(pigment.bold('Options:'));
|
|
126
|
+
lines.push(` ${pigment.cyan('-h, --help')} Show help`);
|
|
127
|
+
lines.push(` ${pigment.cyan('-v, --version')} Show version`);
|
|
128
|
+
return lines.join('\n');
|
|
129
|
+
},
|
|
130
|
+
async run(args) {
|
|
131
|
+
// Handle help
|
|
132
|
+
if (args.includes('--help') || args.includes('-h') || args.length === 0) {
|
|
133
|
+
console.log(this.help());
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Handle version
|
|
137
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
138
|
+
console.log(`${this.name} v${this.version}`);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
// Get command
|
|
142
|
+
const cmdName = args[0];
|
|
143
|
+
if (cmdName === undefined) {
|
|
144
|
+
console.log(this.help());
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const cmd = commands.get(cmdName);
|
|
148
|
+
if (!cmd) {
|
|
149
|
+
console.error(pigment.red(`Unknown command: ${cmdName}`));
|
|
150
|
+
console.log('');
|
|
151
|
+
console.log(this.help());
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Parse arguments
|
|
156
|
+
const parsed = parseArgs(args.slice(1), cmd.options);
|
|
157
|
+
// Map positional arguments
|
|
158
|
+
const positionalArgs = {};
|
|
159
|
+
if (cmd.arguments) {
|
|
160
|
+
for (let i = 0; i < cmd.arguments.length; i++) {
|
|
161
|
+
const arg = cmd.arguments[i];
|
|
162
|
+
if (arg === undefined) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
if (i < parsed.positional.length) {
|
|
166
|
+
positionalArgs[arg.name] = parsed.positional[i];
|
|
167
|
+
}
|
|
168
|
+
else if (arg.default !== undefined) {
|
|
169
|
+
positionalArgs[arg.name] = arg.default;
|
|
170
|
+
}
|
|
171
|
+
else if (arg.required) {
|
|
172
|
+
console.error(pigment.red(`Missing required argument: ${arg.name}`));
|
|
173
|
+
process.exitCode = 1;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Check required options
|
|
179
|
+
if (cmd.options) {
|
|
180
|
+
for (const opt of cmd.options) {
|
|
181
|
+
if (opt.required && parsed.options[opt.name] === undefined) {
|
|
182
|
+
console.error(pigment.red(`Missing required option: --${opt.name}`));
|
|
183
|
+
process.exitCode = 1;
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Execute command
|
|
189
|
+
try {
|
|
190
|
+
await cmd.action(positionalArgs, parsed.options);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error(pigment.red('Error:'), error.message);
|
|
194
|
+
process.exitCode = 1;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
return cli;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* VLD CLI instance
|
|
202
|
+
*/
|
|
203
|
+
const vldCli = createCli('vld', '1.5.0', 'Fast TypeScript Validation Library');
|
|
204
|
+
|
|
205
|
+
export { createCli as cli, createCli, vldCli };
|
package/dist/codecs/index.d.ts
CHANGED
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
import { VldCodec } from '../validators/codec';
|
|
1
|
+
import { VldCodec } from '../validators/codec.js';
|
|
2
2
|
/**
|
|
3
3
|
* Predefined codecs for common transformations (Zod-compatible)
|
|
4
4
|
*/
|
|
5
|
+
export interface VldUrl {
|
|
6
|
+
hash: string;
|
|
7
|
+
host: string;
|
|
8
|
+
hostname: string;
|
|
9
|
+
readonly href: string;
|
|
10
|
+
password: string;
|
|
11
|
+
pathname: string;
|
|
12
|
+
port: string;
|
|
13
|
+
readonly protocol: string;
|
|
14
|
+
search: string;
|
|
15
|
+
username: string;
|
|
16
|
+
toString(): string;
|
|
17
|
+
toJSON(): string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Invert a codec, swapping encode and decode directions.
|
|
21
|
+
*/
|
|
22
|
+
export declare function invertCodec<TInput, TOutput>(codec: VldCodec<TInput, TOutput>): VldCodec<TOutput, TInput>;
|
|
5
23
|
/**
|
|
6
24
|
* String to number codec
|
|
7
25
|
*/
|
|
@@ -37,11 +55,11 @@ export declare const jsonCodec: <T = any>(schema?: any) => VldCodec<string, T>;
|
|
|
37
55
|
/**
|
|
38
56
|
* String to URL codec
|
|
39
57
|
*/
|
|
40
|
-
export declare const stringToURL: VldCodec<string,
|
|
58
|
+
export declare const stringToURL: VldCodec<string, VldUrl>;
|
|
41
59
|
/**
|
|
42
60
|
* String to HTTP/HTTPS URL codec
|
|
43
61
|
*/
|
|
44
|
-
export declare const stringToHttpURL: VldCodec<string,
|
|
62
|
+
export declare const stringToHttpURL: VldCodec<string, VldUrl>;
|
|
45
63
|
/**
|
|
46
64
|
* URI component encode/decode codec
|
|
47
65
|
*/
|
|
@@ -86,4 +104,3 @@ export declare const base64Json: <T = any>(schema?: any) => VldCodec<string, T>;
|
|
|
86
104
|
* JWT payload decoder (base64url encoded JSON) - updated
|
|
87
105
|
*/
|
|
88
106
|
export declare const jwtPayload: (schema?: any) => VldCodec<string, any>;
|
|
89
|
-
//# sourceMappingURL=index.d.ts.map
|