@lowerdeck/validation 1.0.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/.turbo/turbo-build.log +11 -0
- package/.turbo/turbo-test.log +144 -0
- package/README.md +158 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.modern.js +2 -0
- package/dist/index.modern.js.map +1 -0
- package/dist/index.module.js +2 -0
- package/dist/index.module.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/lib/introspect.d.ts +13 -0
- package/dist/lib/introspect.d.ts.map +1 -0
- package/dist/lib/result.d.ts +4 -0
- package/dist/lib/result.d.ts.map +1 -0
- package/dist/lib/result.test.d.ts +2 -0
- package/dist/lib/result.test.d.ts.map +1 -0
- package/dist/lib/types.d.ts +48 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/validator.d.ts +3 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.test.d.ts +2 -0
- package/dist/lib/validator.test.d.ts.map +1 -0
- package/dist/modifiers/color.d.ts +5 -0
- package/dist/modifiers/color.d.ts.map +1 -0
- package/dist/modifiers/color.test.d.ts +2 -0
- package/dist/modifiers/color.test.d.ts.map +1 -0
- package/dist/modifiers/email.d.ts +5 -0
- package/dist/modifiers/email.d.ts.map +1 -0
- package/dist/modifiers/email.test.d.ts +2 -0
- package/dist/modifiers/email.test.d.ts.map +1 -0
- package/dist/modifiers/emoji.d.ts +5 -0
- package/dist/modifiers/emoji.d.ts.map +1 -0
- package/dist/modifiers/emoji.test.d.ts +2 -0
- package/dist/modifiers/emoji.test.d.ts.map +1 -0
- package/dist/modifiers/endsWith.d.ts +5 -0
- package/dist/modifiers/endsWith.d.ts.map +1 -0
- package/dist/modifiers/endsWith.test.d.ts +2 -0
- package/dist/modifiers/endsWith.test.d.ts.map +1 -0
- package/dist/modifiers/equals.d.ts +8 -0
- package/dist/modifiers/equals.d.ts.map +1 -0
- package/dist/modifiers/equals.test.d.ts +2 -0
- package/dist/modifiers/equals.test.d.ts.map +1 -0
- package/dist/modifiers/includes.d.ts +8 -0
- package/dist/modifiers/includes.d.ts.map +1 -0
- package/dist/modifiers/includes.test.d.ts +2 -0
- package/dist/modifiers/includes.test.d.ts.map +1 -0
- package/dist/modifiers/index.d.ts +18 -0
- package/dist/modifiers/index.d.ts.map +1 -0
- package/dist/modifiers/integer.d.ts +5 -0
- package/dist/modifiers/integer.d.ts.map +1 -0
- package/dist/modifiers/integer.test.d.ts +2 -0
- package/dist/modifiers/integer.test.d.ts.map +1 -0
- package/dist/modifiers/ip.d.ts +11 -0
- package/dist/modifiers/ip.d.ts.map +1 -0
- package/dist/modifiers/ip.test.d.ts +2 -0
- package/dist/modifiers/ip.test.d.ts.map +1 -0
- package/dist/modifiers/isoDate.d.ts +11 -0
- package/dist/modifiers/isoDate.d.ts.map +1 -0
- package/dist/modifiers/isoDate.test.d.ts +2 -0
- package/dist/modifiers/isoDate.test.d.ts.map +1 -0
- package/dist/modifiers/length.d.ts +9 -0
- package/dist/modifiers/length.d.ts.map +1 -0
- package/dist/modifiers/length.test.d.ts +2 -0
- package/dist/modifiers/length.test.d.ts.map +1 -0
- package/dist/modifiers/multipleOf.d.ts +5 -0
- package/dist/modifiers/multipleOf.d.ts.map +1 -0
- package/dist/modifiers/multipleOf.test.d.ts +2 -0
- package/dist/modifiers/multipleOf.test.d.ts.map +1 -0
- package/dist/modifiers/oneOf.d.ts +5 -0
- package/dist/modifiers/oneOf.d.ts.map +1 -0
- package/dist/modifiers/oneOf.test.d.ts +2 -0
- package/dist/modifiers/oneOf.test.d.ts.map +1 -0
- package/dist/modifiers/positive.d.ts +8 -0
- package/dist/modifiers/positive.d.ts.map +1 -0
- package/dist/modifiers/positive.test.d.ts +2 -0
- package/dist/modifiers/positive.test.d.ts.map +1 -0
- package/dist/modifiers/regex.d.ts +5 -0
- package/dist/modifiers/regex.d.ts.map +1 -0
- package/dist/modifiers/regex.test.d.ts +2 -0
- package/dist/modifiers/regex.test.d.ts.map +1 -0
- package/dist/modifiers/size.d.ts +8 -0
- package/dist/modifiers/size.d.ts.map +1 -0
- package/dist/modifiers/size.test.d.ts +2 -0
- package/dist/modifiers/size.test.d.ts.map +1 -0
- package/dist/modifiers/startsWith.d.ts +5 -0
- package/dist/modifiers/startsWith.d.ts.map +1 -0
- package/dist/modifiers/startsWith.test.d.ts +2 -0
- package/dist/modifiers/startsWith.test.d.ts.map +1 -0
- package/dist/modifiers/url.d.ts +6 -0
- package/dist/modifiers/url.d.ts.map +1 -0
- package/dist/modifiers/url.test.d.ts +2 -0
- package/dist/modifiers/url.test.d.ts.map +1 -0
- package/dist/transformers/case.d.ts +4 -0
- package/dist/transformers/case.d.ts.map +1 -0
- package/dist/transformers/case.test.d.ts +2 -0
- package/dist/transformers/case.test.d.ts.map +1 -0
- package/dist/transformers/index.d.ts +3 -0
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/trim.d.ts +5 -0
- package/dist/transformers/trim.d.ts.map +1 -0
- package/dist/transformers/trim.test.d.ts +2 -0
- package/dist/transformers/trim.test.d.ts.map +1 -0
- package/dist/validators/any.d.ts +4 -0
- package/dist/validators/any.d.ts.map +1 -0
- package/dist/validators/any.test.d.ts +2 -0
- package/dist/validators/any.test.d.ts.map +1 -0
- package/dist/validators/array.d.ts +3 -0
- package/dist/validators/array.d.ts.map +1 -0
- package/dist/validators/array.test.d.ts +2 -0
- package/dist/validators/array.test.d.ts.map +1 -0
- package/dist/validators/boolean.d.ts +3 -0
- package/dist/validators/boolean.d.ts.map +1 -0
- package/dist/validators/boolean.test.d.ts +2 -0
- package/dist/validators/boolean.test.d.ts.map +1 -0
- package/dist/validators/date.d.ts +3 -0
- package/dist/validators/date.d.ts.map +1 -0
- package/dist/validators/date.test.d.ts +2 -0
- package/dist/validators/date.test.d.ts.map +1 -0
- package/dist/validators/enum.d.ts +6 -0
- package/dist/validators/enum.d.ts.map +1 -0
- package/dist/validators/enum.test.d.ts +2 -0
- package/dist/validators/enum.test.d.ts.map +1 -0
- package/dist/validators/index.d.ts +17 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/intersection.d.ts +3 -0
- package/dist/validators/intersection.d.ts.map +1 -0
- package/dist/validators/intersection.test.d.ts +2 -0
- package/dist/validators/intersection.test.d.ts.map +1 -0
- package/dist/validators/literal.d.ts +3 -0
- package/dist/validators/literal.d.ts.map +1 -0
- package/dist/validators/literal.test.d.ts +2 -0
- package/dist/validators/literal.test.d.ts.map +1 -0
- package/dist/validators/null.d.ts +3 -0
- package/dist/validators/null.d.ts.map +1 -0
- package/dist/validators/null.test.d.ts +2 -0
- package/dist/validators/null.test.d.ts.map +1 -0
- package/dist/validators/nullable.d.ts +3 -0
- package/dist/validators/nullable.d.ts.map +1 -0
- package/dist/validators/nullable.test.d.ts +2 -0
- package/dist/validators/nullable.test.d.ts.map +1 -0
- package/dist/validators/number.d.ts +3 -0
- package/dist/validators/number.d.ts.map +1 -0
- package/dist/validators/number.test.d.ts +2 -0
- package/dist/validators/number.test.d.ts.map +1 -0
- package/dist/validators/object.d.ts +12 -0
- package/dist/validators/object.d.ts.map +1 -0
- package/dist/validators/object.test.d.ts +2 -0
- package/dist/validators/object.test.d.ts.map +1 -0
- package/dist/validators/optional.d.ts +3 -0
- package/dist/validators/optional.d.ts.map +1 -0
- package/dist/validators/optional.test.d.ts +2 -0
- package/dist/validators/optional.test.d.ts.map +1 -0
- package/dist/validators/record.d.ts +3 -0
- package/dist/validators/record.d.ts.map +1 -0
- package/dist/validators/record.test.d.ts +2 -0
- package/dist/validators/record.test.d.ts.map +1 -0
- package/dist/validators/string.d.ts +3 -0
- package/dist/validators/string.d.ts.map +1 -0
- package/dist/validators/string.test.d.ts +2 -0
- package/dist/validators/string.test.d.ts.map +1 -0
- package/dist/validators/union.d.ts +3 -0
- package/dist/validators/union.d.ts.map +1 -0
- package/dist/validators/union.test.d.ts +2 -0
- package/dist/validators/union.test.d.ts.map +1 -0
- package/dist/validators/void.d.ts +3 -0
- package/dist/validators/void.d.ts.map +1 -0
- package/package.json +31 -0
- package/src/index.ts +33 -0
- package/src/lib/introspect.ts +33 -0
- package/src/lib/result.test.ts +80 -0
- package/src/lib/result.ts +11 -0
- package/src/lib/types.ts +57 -0
- package/src/lib/validator.test.ts +82 -0
- package/src/lib/validator.ts +63 -0
- package/src/modifiers/color.test.ts +29 -0
- package/src/modifiers/color.ts +18 -0
- package/src/modifiers/email.test.ts +29 -0
- package/src/modifiers/email.ts +18 -0
- package/src/modifiers/emoji.test.ts +31 -0
- package/src/modifiers/emoji.ts +18 -0
- package/src/modifiers/endsWith.test.ts +50 -0
- package/src/modifiers/endsWith.ts +18 -0
- package/src/modifiers/equals.test.ts +70 -0
- package/src/modifiers/equals.ts +41 -0
- package/src/modifiers/includes.test.ts +64 -0
- package/src/modifiers/includes.ts +35 -0
- package/src/modifiers/index.ts +17 -0
- package/src/modifiers/integer.test.ts +45 -0
- package/src/modifiers/integer.ts +18 -0
- package/src/modifiers/ip.test.ts +34 -0
- package/src/modifiers/ip.ts +50 -0
- package/src/modifiers/isoDate.test.ts +83 -0
- package/src/modifiers/isoDate.ts +51 -0
- package/src/modifiers/length.test.ts +107 -0
- package/src/modifiers/length.ts +54 -0
- package/src/modifiers/multipleOf.test.ts +51 -0
- package/src/modifiers/multipleOf.ts +18 -0
- package/src/modifiers/oneOf.test.ts +27 -0
- package/src/modifiers/oneOf.ts +16 -0
- package/src/modifiers/positive.test.ts +64 -0
- package/src/modifiers/positive.ts +35 -0
- package/src/modifiers/regex.test.ts +40 -0
- package/src/modifiers/regex.ts +17 -0
- package/src/modifiers/size.test.ts +84 -0
- package/src/modifiers/size.ts +37 -0
- package/src/modifiers/startsWith.test.ts +40 -0
- package/src/modifiers/startsWith.ts +18 -0
- package/src/modifiers/url.test.ts +48 -0
- package/src/modifiers/url.ts +30 -0
- package/src/transformers/case.test.ts +36 -0
- package/src/transformers/case.ts +5 -0
- package/src/transformers/index.ts +2 -0
- package/src/transformers/trim.test.ts +32 -0
- package/src/transformers/trim.ts +7 -0
- package/src/validators/any.test.ts +11 -0
- package/src/validators/any.ts +11 -0
- package/src/validators/array.test.ts +46 -0
- package/src/validators/array.ts +43 -0
- package/src/validators/boolean.test.ts +39 -0
- package/src/validators/boolean.ts +34 -0
- package/src/validators/date.test.ts +39 -0
- package/src/validators/date.ts +26 -0
- package/src/validators/enum.test.ts +25 -0
- package/src/validators/enum.ts +56 -0
- package/src/validators/index.ts +16 -0
- package/src/validators/intersection.test.ts +35 -0
- package/src/validators/intersection.ts +24 -0
- package/src/validators/literal.test.ts +42 -0
- package/src/validators/literal.ts +26 -0
- package/src/validators/null.test.ts +39 -0
- package/src/validators/null.ts +18 -0
- package/src/validators/nullable.test.ts +34 -0
- package/src/validators/nullable.ts +16 -0
- package/src/validators/number.test.ts +39 -0
- package/src/validators/number.ts +23 -0
- package/src/validators/object.test.ts +66 -0
- package/src/validators/object.ts +66 -0
- package/src/validators/optional.test.ts +33 -0
- package/src/validators/optional.ts +16 -0
- package/src/validators/record.test.ts +56 -0
- package/src/validators/record.ts +56 -0
- package/src/validators/string.test.ts +39 -0
- package/src/validators/string.ts +30 -0
- package/src/validators/union.test.ts +73 -0
- package/src/validators/union.ts +38 -0
- package/src/validators/void.ts +6 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
[0m[2m[35m$[0m [2m[1mmicrobundle[0m
|
|
3
|
+
[34mBuild "@lowerdeck/validation" to dist:[39m
|
|
4
|
+
[32m4.21 kB[39m: [37mindex.cjs[39m.gz
|
|
5
|
+
[32m3.57 kB[39m: [37mindex.cjs[39m.br
|
|
6
|
+
[32m3.69 kB[39m: [37mindex.modern.js[39m.gz
|
|
7
|
+
[32m3.1 kB[39m: [37mindex.modern.js[39m.br
|
|
8
|
+
[32m4.21 kB[39m: [37mindex.module.js[39m.gz
|
|
9
|
+
[32m3.57 kB[39m: [37mindex.module.js[39m.br
|
|
10
|
+
[32m4.25 kB[39m: [37mindex.umd.js[39m.gz
|
|
11
|
+
[32m3.63 kB[39m: [37mindex.umd.js[39m.br
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
|
|
2
|
+
[0m[2m[35m$[0m [2m[1mvitest run --passWithNoTests[0m
|
|
3
|
+
[?25l
|
|
4
|
+
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/Users/tobias/code/metorial/metorial-enterprise/oss/src/packages/shared/validation[39m
|
|
5
|
+
|
|
6
|
+
[?2026h
|
|
7
|
+
[1m[33m ❯ [39m[22msrc/validators/union.test.ts[2m [queued][22m
|
|
8
|
+
|
|
9
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (36)[39m
|
|
10
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
11
|
+
[2m Start at [22m10:23:28
|
|
12
|
+
[2m Duration [22m203ms
|
|
13
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
14
|
+
[1m[33m ❯ [39m[22msrc/lib/result.test.ts[2m 1/2[22m
|
|
15
|
+
[1m[33m ❯ [39m[22msrc/lib/validator.test.ts[2m [queued][22m
|
|
16
|
+
[1m[33m ❯ [39m[22msrc/modifiers/equals.test.ts[2m [queued][22m
|
|
17
|
+
[1m[33m ❯ [39m[22msrc/modifiers/includes.test.ts[2m [queued][22m
|
|
18
|
+
[1m[33m ❯ [39m[22msrc/modifiers/isoDate.test.ts[2m [queued][22m
|
|
19
|
+
[1m[33m ❯ [39m[22msrc/modifiers/length.test.ts[2m [queued][22m
|
|
20
|
+
[1m[33m ❯ [39m[22msrc/modifiers/multipleOf.test.ts[2m [queued][22m
|
|
21
|
+
[1m[33m ❯ [39m[22msrc/modifiers/positive.test.ts[2m [queued][22m
|
|
22
|
+
[1m[33m ❯ [39m[22msrc/modifiers/size.test.ts[2m [queued][22m
|
|
23
|
+
[1m[33m ❯ [39m[22msrc/modifiers/url.test.ts[2m [queued][22m
|
|
24
|
+
[1m[33m ❯ [39m[22msrc/validators/object.test.ts[2m [queued][22m
|
|
25
|
+
[1m[33m ❯ [39m[22msrc/validators/record.test.ts[2m [queued][22m
|
|
26
|
+
[1m[33m ❯ [39m[22msrc/validators/union.test.ts[2m [queued][22m
|
|
27
|
+
|
|
28
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (36)[39m
|
|
29
|
+
[2m Tests [22m[1m[32m1 passed[39m[22m[90m (2)[39m
|
|
30
|
+
[2m Start at [22m10:23:28
|
|
31
|
+
[2m Duration [22m305ms
|
|
32
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/lib/result.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
33
|
+
[32m✓[39m src/modifiers/positive.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
34
|
+
[32m✓[39m src/lib/validator.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
35
|
+
[32m✓[39m src/modifiers/includes.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
36
|
+
[32m✓[39m src/modifiers/isoDate.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
37
|
+
[32m✓[39m src/modifiers/multipleOf.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
38
|
+
[32m✓[39m src/modifiers/url.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
39
|
+
[32m✓[39m src/modifiers/size.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
40
|
+
[32m✓[39m src/modifiers/equals.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
41
|
+
[32m✓[39m src/modifiers/length.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 5[2mms[22m[39m
|
|
42
|
+
[32m✓[39m src/validators/record.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
43
|
+
[32m✓[39m src/validators/object.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
44
|
+
|
|
45
|
+
[1m[33m ❯ [39m[22msrc/lib/validator.test.ts[2m 3/3[22m
|
|
46
|
+
[1m[33m ❯ [39m[22msrc/modifiers/equals.test.ts[2m 6/6[22m
|
|
47
|
+
[1m[33m ❯ [39m[22msrc/modifiers/includes.test.ts[2m 6/6[22m
|
|
48
|
+
[1m[33m ❯ [39m[22msrc/modifiers/integer.test.ts[2m [queued][22m
|
|
49
|
+
[1m[33m ❯ [39m[22msrc/modifiers/isoDate.test.ts[2m 9/9[22m
|
|
50
|
+
[1m[33m ❯ [39m[22msrc/modifiers/length.test.ts[2m 10/10[22m
|
|
51
|
+
[1m[33m ❯ [39m[22msrc/modifiers/multipleOf.test.ts[2m 3/3[22m
|
|
52
|
+
[1m[33m ❯ [39m[22msrc/modifiers/positive.test.ts[2m 6/6[22m
|
|
53
|
+
[1m[33m ❯ [39m[22msrc/modifiers/size.test.ts[2m 6/6[22m
|
|
54
|
+
[1m[33m ❯ [39m[22msrc/modifiers/url.test.ts[2m 5/5[22m
|
|
55
|
+
[1m[33m ❯ [39m[22msrc/validators/object.test.ts[2m 3/3[22m
|
|
56
|
+
[1m[33m ❯ [39m[22msrc/validators/record.test.ts[2m 5/5[22m
|
|
57
|
+
[1m[33m ❯ [39m[22msrc/validators/union.test.ts[2m [queued][22m
|
|
58
|
+
|
|
59
|
+
[2m Test Files [22m[1m[32m12 passed[39m[22m[90m (36)[39m
|
|
60
|
+
[2m Tests [22m[1m[32m64 passed[39m[22m[90m (64)[39m
|
|
61
|
+
[2m Start at [22m10:23:28
|
|
62
|
+
[2m Duration [22m537ms
|
|
63
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/modifiers/integer.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
64
|
+
[32m✓[39m src/modifiers/endsWith.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
65
|
+
[32m✓[39m src/validators/literal.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
66
|
+
[32m✓[39m src/validators/union.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
|
|
67
|
+
|
|
68
|
+
[1m[33m ❯ [39m[22msrc/modifiers/endsWith.test.ts[2m 3/3[22m
|
|
69
|
+
[1m[33m ❯ [39m[22msrc/modifiers/integer.test.ts[2m 4/4[22m
|
|
70
|
+
[1m[33m ❯ [39m[22msrc/modifiers/length.test.ts[2m 10/10[22m
|
|
71
|
+
[1m[33m ❯ [39m[22msrc/modifiers/startsWith.test.ts[2m [queued][22m
|
|
72
|
+
[1m[33m ❯ [39m[22msrc/transformers/case.test.ts[2m [queued][22m
|
|
73
|
+
[1m[33m ❯ [39m[22msrc/validators/array.test.ts[2m [queued][22m
|
|
74
|
+
[1m[33m ❯ [39m[22msrc/validators/date.test.ts[2m [queued][22m
|
|
75
|
+
[1m[33m ❯ [39m[22msrc/validators/literal.test.ts[2m 3/3[22m
|
|
76
|
+
[1m[33m ❯ [39m[22msrc/validators/object.test.ts[2m 3/3[22m
|
|
77
|
+
[1m[33m ❯ [39m[22msrc/validators/optional.test.ts[2m [queued][22m
|
|
78
|
+
[1m[33m ❯ [39m[22msrc/validators/record.test.ts[2m 5/5[22m
|
|
79
|
+
[1m[33m ❯ [39m[22msrc/validators/string.test.ts[2m [queued][22m
|
|
80
|
+
[1m[33m ❯ [39m[22msrc/validators/union.test.ts[2m 6/6[22m
|
|
81
|
+
|
|
82
|
+
[2m Test Files [22m[1m[32m16 passed[39m[22m[90m (36)[39m
|
|
83
|
+
[2m Tests [22m[1m[32m80 passed[39m[22m[90m (80)[39m
|
|
84
|
+
[2m Start at [22m10:23:28
|
|
85
|
+
[2m Duration [22m741ms
|
|
86
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/validators/array.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
87
|
+
[32m✓[39m src/modifiers/startsWith.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
88
|
+
[32m✓[39m src/validators/optional.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
89
|
+
[32m✓[39m src/validators/string.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
90
|
+
[32m✓[39m src/transformers/case.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
91
|
+
[32m✓[39m src/validators/number.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
92
|
+
[32m✓[39m src/validators/boolean.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
93
|
+
[32m✓[39m src/validators/null.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
94
|
+
[32m✓[39m src/validators/date.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
95
|
+
|
|
96
|
+
[1m[33m ❯ [39m[22msrc/modifiers/endsWith.test.ts[2m 3/3[22m
|
|
97
|
+
[1m[33m ❯ [39m[22msrc/modifiers/integer.test.ts[2m 4/4[22m
|
|
98
|
+
[1m[33m ❯ [39m[22msrc/modifiers/startsWith.test.ts[2m 3/3[22m
|
|
99
|
+
[1m[33m ❯ [39m[22msrc/transformers/case.test.ts[2m 4/4[22m
|
|
100
|
+
[1m[33m ❯ [39m[22msrc/validators/array.test.ts[2m 3/3[22m
|
|
101
|
+
[1m[33m ❯ [39m[22msrc/validators/literal.test.ts[2m 3/3[22m
|
|
102
|
+
[1m[33m ❯ [39m[22msrc/validators/number.test.ts[2m 3/3[22m
|
|
103
|
+
[1m[33m ❯ [39m[22msrc/validators/optional.test.ts[2m 2/2[22m
|
|
104
|
+
[1m[33m ❯ [39m[22msrc/validators/string.test.ts[2m 3/3[22m
|
|
105
|
+
[1m[33m ❯ [39m[22msrc/validators/union.test.ts[2m 6/6[22m
|
|
106
|
+
|
|
107
|
+
[2m Test Files [22m[1m[32m25 passed[39m[22m[90m (36)[39m
|
|
108
|
+
[2m Tests [22m[1m[32m107 passed[39m[22m[90m (107)[39m
|
|
109
|
+
[2m Start at [22m10:23:28
|
|
110
|
+
[2m Duration [22m946ms
|
|
111
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
112
|
+
[1m[33m ❯ [39m[22msrc/modifiers/oneOf.test.ts[2m [queued][22m
|
|
113
|
+
[1m[33m ❯ [39m[22msrc/modifiers/startsWith.test.ts[2m 3/3[22m
|
|
114
|
+
[1m[33m ❯ [39m[22msrc/transformers/case.test.ts[2m 4/4[22m
|
|
115
|
+
[1m[33m ❯ [39m[22msrc/validators/array.test.ts[2m 3/3[22m
|
|
116
|
+
[1m[33m ❯ [39m[22msrc/validators/enum.test.ts[2m [queued][22m
|
|
117
|
+
[1m[33m ❯ [39m[22msrc/validators/literal.test.ts[2m 3/3[22m
|
|
118
|
+
[1m[33m ❯ [39m[22msrc/validators/number.test.ts[2m 3/3[22m
|
|
119
|
+
[1m[33m ❯ [39m[22msrc/validators/optional.test.ts[2m 2/2[22m
|
|
120
|
+
[1m[33m ❯ [39m[22msrc/validators/string.test.ts[2m 3/3[22m
|
|
121
|
+
[1m[33m ❯ [39m[22msrc/validators/union.test.ts[2m 6/6[22m
|
|
122
|
+
|
|
123
|
+
[2m Test Files [22m[1m[32m25 passed[39m[22m[90m (36)[39m
|
|
124
|
+
[2m Tests [22m[1m[32m107 passed[39m[22m[90m (107)[39m
|
|
125
|
+
[2m Start at [22m10:23:28
|
|
126
|
+
[2m Duration [22m1.05s
|
|
127
|
+
[?2026l[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/validators/enum.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
128
|
+
[32m✓[39m src/validators/nullable.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
129
|
+
[32m✓[39m src/modifiers/ip.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
130
|
+
[32m✓[39m src/modifiers/oneOf.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
131
|
+
[32m✓[39m src/modifiers/email.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
132
|
+
[32m✓[39m src/validators/any.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 2[2mms[22m[39m
|
|
133
|
+
[32m✓[39m src/modifiers/regex.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
134
|
+
[32m✓[39m src/modifiers/emoji.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
135
|
+
[32m✓[39m src/transformers/trim.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
136
|
+
[32m✓[39m src/modifiers/color.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
|
|
137
|
+
[32m✓[39m src/validators/intersection.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
|
138
|
+
|
|
139
|
+
[2m Test Files [22m [1m[32m36 passed[39m[22m[90m (36)[39m
|
|
140
|
+
[2m Tests [22m [1m[32m139 passed[39m[22m[90m (139)[39m
|
|
141
|
+
[2m Start at [22m 10:23:28
|
|
142
|
+
[2m Duration [22m 1.19s[2m (transform 762ms, setup 0ms, collect 2.10s, tests 126ms, environment 6ms, prepare 4.46s)[22m
|
|
143
|
+
|
|
144
|
+
[?25h
|
package/README.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# `@lowerdeck/validation`
|
|
2
|
+
|
|
3
|
+
Comprehensive validation framework with composable validators and modifiers. Define schemas with full TypeScript support and get detailed error messages.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @lowerdeck/validation
|
|
9
|
+
yarn add @lowerdeck/validation
|
|
10
|
+
bun add @lowerdeck/validation
|
|
11
|
+
pnpm add @lowerdeck/validation
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
### Basic Validation
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { string, number, object, array } from '@lowerdeck/validation';
|
|
20
|
+
|
|
21
|
+
// String validation
|
|
22
|
+
const nameSchema = string().min(2).max(50);
|
|
23
|
+
const result = nameSchema.validate('John');
|
|
24
|
+
// { success: true, value: 'John' }
|
|
25
|
+
|
|
26
|
+
// Number validation
|
|
27
|
+
const ageSchema = number().min(0).max(120).integer();
|
|
28
|
+
ageSchema.validate(25); // { success: true, value: 25 }
|
|
29
|
+
|
|
30
|
+
// Object validation
|
|
31
|
+
const userSchema = object({
|
|
32
|
+
name: string().min(2),
|
|
33
|
+
email: string().email(),
|
|
34
|
+
age: number().min(18).optional()
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const user = userSchema.validate({
|
|
38
|
+
name: 'John',
|
|
39
|
+
email: 'john@example.com'
|
|
40
|
+
});
|
|
41
|
+
// { success: true, value: { name: 'John', email: 'john@example.com' } }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### String Modifiers
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { string } from '@lowerdeck/validation';
|
|
48
|
+
|
|
49
|
+
// Length and pattern validation
|
|
50
|
+
string()
|
|
51
|
+
.length(10) // exact length
|
|
52
|
+
.min(5).max(100) // length range
|
|
53
|
+
.regex(/^[A-Z]/) // regex pattern
|
|
54
|
+
.email() // email format
|
|
55
|
+
.url() // URL format
|
|
56
|
+
.ip() // IP address
|
|
57
|
+
.startsWith('https://') // starts with
|
|
58
|
+
.endsWith('.com') // ends with
|
|
59
|
+
.includes('example') // contains
|
|
60
|
+
.oneOf(['red', 'green', 'blue']) // enum values
|
|
61
|
+
.validate('value');
|
|
62
|
+
|
|
63
|
+
// Transformers
|
|
64
|
+
string()
|
|
65
|
+
.trim() // trim whitespace
|
|
66
|
+
.case('lower') // lowercase/uppercase
|
|
67
|
+
.validate(' HELLO ');
|
|
68
|
+
// { success: true, value: 'hello' }
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Number Modifiers
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
import { number } from '@lowerdeck/validation';
|
|
75
|
+
|
|
76
|
+
number()
|
|
77
|
+
.min(0) // minimum value
|
|
78
|
+
.max(100) // maximum value
|
|
79
|
+
.integer() // must be integer
|
|
80
|
+
.positive() // must be positive
|
|
81
|
+
.multipleOf(5) // must be multiple of
|
|
82
|
+
.validate(25);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Array and Object Validation
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { array, object, string, number } from '@lowerdeck/validation';
|
|
89
|
+
|
|
90
|
+
// Array validation
|
|
91
|
+
const tagsSchema = array(string()).min(1).max(5);
|
|
92
|
+
tagsSchema.validate(['javascript', 'typescript']);
|
|
93
|
+
|
|
94
|
+
// Nested objects
|
|
95
|
+
const postSchema = object({
|
|
96
|
+
title: string().min(1).max(200),
|
|
97
|
+
tags: array(string()).min(1),
|
|
98
|
+
author: object({
|
|
99
|
+
name: string(),
|
|
100
|
+
email: string().email()
|
|
101
|
+
})
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Optional and Nullable
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { string, optional, nullable } from '@lowerdeck/validation';
|
|
109
|
+
|
|
110
|
+
// Optional fields (can be undefined)
|
|
111
|
+
object({
|
|
112
|
+
name: string(),
|
|
113
|
+
nickname: optional(string())
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// Nullable fields (can be null)
|
|
117
|
+
object({
|
|
118
|
+
name: string(),
|
|
119
|
+
middleName: nullable(string())
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Union Types
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { union, string, number } from '@lowerdeck/validation';
|
|
127
|
+
|
|
128
|
+
// Accept multiple types
|
|
129
|
+
const idSchema = union([string(), number()]);
|
|
130
|
+
idSchema.validate('123'); // valid
|
|
131
|
+
idSchema.validate(123); // valid
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Error Handling
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
const schema = string().email();
|
|
138
|
+
const result = schema.validate('invalid-email');
|
|
139
|
+
|
|
140
|
+
if (!result.success) {
|
|
141
|
+
console.log(result.errors);
|
|
142
|
+
// [
|
|
143
|
+
// {
|
|
144
|
+
// path: [],
|
|
145
|
+
// message: 'Invalid email format',
|
|
146
|
+
// code: 'invalid_email'
|
|
147
|
+
// }
|
|
148
|
+
// ]
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## License
|
|
153
|
+
|
|
154
|
+
This project is licensed under the Apache License 2.0.
|
|
155
|
+
|
|
156
|
+
<div align="center">
|
|
157
|
+
<sub>Built with ❤️ by <a href="https://metorial.com">Metorial</a></sub>
|
|
158
|
+
</div>
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,n){(null==n||n>e.length)&&(n=e.length);for(var u=0,t=Array(n);u<n;u++)t[u]=e[u];return t}function n(n,u){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(t)return(t=t.call(n)).next.bind(t);if(Array.isArray(n)||(t=function(n,u){if(n){if("string"==typeof n)return e(n,u);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(n,u):void 0}}(n))||u&&n&&"number"==typeof n.length){t&&(n=t);var r=0;return function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function u(){return u=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var u=arguments[n];for(var t in u)({}).hasOwnProperty.call(u,t)&&(e[t]=u[t])}return e},u.apply(null,arguments)}var t=function(e){var n;return{examples:null!=(n=e.examples)?n:[],items:e.items?Array.isArray(e.items)?e.items.map(t):[t(e.items)]:void 0,properties:e.properties?Object.fromEntries(Object.entries(e.properties).filter(function(e){return!e[1].hidden}).map(function(e){return[e[0],t(e[1])]})):void 0,type:e.type,name:e.name,description:e.description,optional:!!e.optional,nullable:!!e.nullable}},r={__proto__:null,introspectType:t},i=function(e){return{success:!0,value:e}},a=function(e){return{success:!1,errors:e}},l={__proto__:null,success:i,error:a},o=function(e,n){return function(u){var t;return{validate:function(e){try{var t=null!=u&&u.preprocessors&&null!=u&&u.preprocessors.length?function(e,n){return e.reduce(function(e,n){return n(e)},n)}(null==u?void 0:u.preprocessors,e):e,r=n(null!=u?u:{},t);if(!r.success)return r;var l=null!=u&&u.modifiers&&null!=u&&u.modifiers.length?function(e,n){return e.reduce(function(e,u){return e.concat(u(n))},[])}(null==u?void 0:u.modifiers,t):[];return l.length?a(l):i(null!=u&&u.transformers&&null!=u&&u.transformers.length?function(e,n){return e.reduce(function(e,n){return n(e)},n)}(null==u?void 0:u.transformers,r.value):r.value)}catch(e){var o;return a([{code:"invalid_type",message:null!=(o=null==u?void 0:u.message)?o:"Unable to validate value"}])}},examples:null!=(t=null==u?void 0:u.examples)?t:[],type:e,name:null==u?void 0:u.name,description:null==u?void 0:u.description,hidden:!(null==u||!u.hidden)}}},s={__proto__:null,createValidator:o},c=/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,d=/^[\w+-]+(?:\.[\w+-]+)*@[A-Z0-9]+(?:(?:\.|-)[A-Z0-9]+)*\.[A-Z]{2,}$/i,v=/^((?:[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCCF\uDCD0\uDCF6-\uDCFF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDAE-\uDDE5\uDE01-\uDE0F\uDE1A\uDE2F\uDE32-\uDE3A\uDE3C-\uDE3F\uDE49-\uDE5F\uDE66-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFA]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDEE5\uDEE9\uDEEB-\uDEF0\uDEF3-\uDEFF\uDFDA-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCBC-\uDCBF\uDCC2-\uDCCF\uDCD9-\uDCFF\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDDFF\uDE58-\uDE5F\uDE6E-\uDEFF]|\uD83F[\uDC00-\uDFFD])|(?:[#\*0-9\u200D\u20E3\uFE0F]|\uD83C[\uDDE6-\uDDFF\uDFFB-\uDFFF]|\uD83E[\uDDB0-\uDDB3]|\uDB40[\uDC20-\uDC7F]))+$/,p=/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/,f=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,D=/^\d{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])$/,m=/^\d{4}-(0[1-9]|1[0-2])-([12]\d|0[1-9]|3[01])T(0[0-9]|1\d|2[0-3]):[0-5]\d$/,g=/^(0[0-9]|1\d|2[0-3]):[0-5]\d$/,F={__proto__:null,color:function(e){return function(n){var u;return c.test(n)?[]:[{code:"invalid_color",message:null!=(u=null==e?void 0:e.message)?u:"Invalid color"}]}},email:function(e){return function(n){var u;return d.test(n)?[]:[{code:"invalid_email",message:null!=(u=null==e?void 0:e.message)?u:"Invalid email address"}]}},emoji:function(e){return function(n){var u;return v.test(n)?[]:[{code:"invalid_emoji",message:null!=(u=null==e?void 0:e.message)?u:"Invalid emoji"}]}},endsWith:function(e,n){return function(u){var t;return u.endsWith(e)?[]:[{code:"invalid_suffix",message:null!=(t=null==n?void 0:n.message)?t:"Invalid suffix, expected "+e,expected:e,received:u}]}},equals:function(e,n){return function(u){var t;return u!==e?[{code:"invalid_equals",message:null!=(t=null==n?void 0:n.message)?t:"Invalid value, expected "+e,expected:e,received:u}]:[]}},notEquals:function(e,n){return function(u){var t;return u===e?[{code:"invalid_not_equals",message:null!=(t=null==n?void 0:n.message)?t:"Invalid value, expected not "+e,expected:e,received:u}]:[]}},includes:function(e,n){return function(u){var t;return u.includes(e)?[]:[{code:"invalid_includes",message:null!=(t=null==n?void 0:n.message)?t:"Invalid substring, expected "+e,expected:e,received:u}]}},notIncludes:function(e,n){return function(u){var t;return u.includes(e)?[{code:"invalid_not_includes",message:null!=(t=null==n?void 0:n.message)?t:"Invalid substring, expected not "+e,expected:e,received:u}]:[]}},integer:function(e){return function(n){var u;return Number.isInteger(n)?[]:[{code:"invalid_integer",message:null!=(u=null==e?void 0:e.message)?u:"Invalid value, expected integer",expected:n,received:n}]}},ip:function(e){return function(n){var u;return p.test(n)||f.test(n)?[]:[{code:"invalid_ip",message:null!=(u=null==e?void 0:e.message)?u:"Invalid ip address"}]}},ipV4:function(e){return function(n){var u;return p.test(n)?[]:[{code:"invalid_ip_v4",message:null!=(u=null==e?void 0:e.message)?u:"Invalid ip v4 address"}]}},ipV6:function(e){return function(n){var u;return f.test(n)?[]:[{code:"invalid_ip_v6",message:null!=(u=null==e?void 0:e.message)?u:"Invalid ip v6 address"}]}},isoDate:function(e){return function(n){var u;return D.test(n)?[]:[{code:"invalid_iso_date",message:null!=(u=null==e?void 0:e.message)?u:"Invalid iso date"}]}},isoDateTime:function(e){return function(n){var u;return m.test(n)?[]:[{code:"invalid_iso_date_time",message:null!=(u=null==e?void 0:e.message)?u:"Invalid iso date time"}]}},isoTime:function(e){return function(n){var u;return g.test(n)?[]:[{code:"invalid_iso_time",message:null!=(u=null==e?void 0:e.message)?u:"Invalid iso time"}]}},length:function(e){return function(n){return n.length!==e?[{code:"invalid_length",message:"Invalid length, expected "+e,expected:e,received:n.length}]:[]}},minLength:function(e,n){return function(u){var t;return u.length<e?[{code:"invalid_min_length",message:null!=(t=null==n?void 0:n.message)?t:"Invalid min length, expected "+e,expected:e,received:u.length,min:e}]:[]}},maxLength:function(e,n){return function(u){var t;return u.length>e?[{code:"invalid_max_length",message:null!=(t=null==n?void 0:n.message)?t:"Invalid max length, expected "+e,expected:e,received:u.length,max:e}]:[]}},multipleOf:function(e,n){return function(u){var t;return u%e!==0?[{code:"invalid_multiple_of",message:null!=(t=null==n?void 0:n.message)?t:"Invalid multiple of "+e+", expected "+u,received:u,multipleOf:e}]:[]}},oneOf:function(e,n){return function(u){var t;return e.includes(u)?[]:[{code:"invalid_value",message:null!=(t=null==n?void 0:n.message)?t:"Value must be one of: "+e.join(", ")}]}},positive:function(e){return function(n){var u;return n<=0?[{code:"invalid_positive",message:null!=(u=null==e?void 0:e.message)?u:"Invalid positive, expected "+n,received:n,positive:!0}]:[]}},negative:function(e){return function(n){var u;return n>=0?[{code:"invalid_negative",message:null!=(u=null==e?void 0:e.message)?u:"Invalid negative, expected "+n,received:n,negative:!0}]:[]}},regex:function(e,n){return function(u){var t;return e.test(u)?[]:[{code:"invalid_regex",message:null!=(t=null==n?void 0:n.message)?t:"Invalid regex, expected "+e,received:u}]}},minValue:function(e,n){return function(u){var t;return u<e?[{code:"invalid_min",message:null!=(t=null==n?void 0:n.message)?t:"Invalid min, expected "+e,expected:e,received:u,min:e}]:[]}},maxValue:function(e,n){return function(u){var t;return u>e?[{code:"invalid_max",message:null!=(t=null==n?void 0:n.message)?t:"Invalid max, expected "+e,expected:e,received:u,max:e}]:[]}},startsWith:function(e,n){return function(u){var t;return u.startsWith(e)?[]:[{code:"invalid_prefix",message:null!=(t=null==n?void 0:n.message)?t:"Invalid prefix, expected "+e,expected:e,received:u}]}},url:function(e){return function(n){try{var u,t=new URL(n);return null!=e&&e.hostnames&&!e.hostnames.includes(t.hostname)?[{code:"invalid_hostname",message:null!=(u=null==e?void 0:e.message)?u:"Invalid hostname",expected:null==e?void 0:e.hostnames,received:t.hostname}]:[]}catch(u){var r;return[{code:"invalid_url",message:null!=(r=null==e?void 0:e.message)?r:"Invalid URL",received:n}]}}}},y={__proto__:null,any:o("any",function(e,n){return{success:!0,value:n}}),typedAny:function(e){return o(e,function(e,n){return{success:!0,value:n}})()},array:function(e,t){return{type:"array",items:e,name:null==t?void 0:t.name,description:null==t?void 0:t.description,examples:Array.isArray(e.examples)?e.examples.map(function(e){return[e,e]}):void 0,validate:function(t){if(!Array.isArray(t))return a([{code:"invalid_type",message:"Invalid input, expected array, received "+typeof t,received:typeof t,expected:"array"}]);for(var r,l,o=[],s=function(){var n=l.value,t=n[0],r=e.validate(n[1]);if(!r.success)return{v:a(r.errors.map(function(e){var n;return u({},e,{path:[t.toString()].concat(null!=(n=e.path)?n:[])})}))};o.push(r.value)},c=n(t.entries());!(l=c()).done;)if(r=s())return r.v;return i(o)}}},boolean:o("boolean",function(e,n){var u,t;return"string"==typeof n?"true"==n?u=!0:"false"==n&&(u=!1):"boolean"==typeof n&&(u=n),void 0===u?a([{code:"invalid_type",message:null!=(t=e.message)?t:"Invalid input, expected a boolean, received "+typeof n,received:typeof n,expected:"boolean"}]):{success:!0,value:u}}),date:o("date",function(e,n){if("string"==typeof n){var u=new Date(n);isNaN(u.getTime())||(n=u)}var t;return n instanceof Date?{success:!0,value:n}:a([{code:"invalid_type",message:null!=(t=e.message)?t:"Invalid input, expected a date, received "+typeof n,received:typeof n,expected:"date"}])}),enumOf:function(e,n){return{type:"enum",examples:e,name:null==n?void 0:n.name,description:null==n?void 0:n.description,validate:function(n){return e.includes(n)?{success:!0,value:n}:a([{code:"invalid_enum",message:"Invalid input, expected one of "+e.join(", ")+", received "+n,received:n,expected:e}])}}},intersection:function(e,t){return{type:"intersection",name:null==t?void 0:t.name,items:e,description:null==t?void 0:t.description,examples:[],validate:function(t){for(var r,i={},a=n(e);!(r=a()).done;){var l=r.value.validate(t);if(!l.success)return l;i=u({},i,l.value)}return{success:!0,value:i}}}},literal:function(e,n){return{type:"literal",examples:[e],name:null==n?void 0:n.name,description:null==n?void 0:n.description,validate:function(u){var t;return u!=e?a([{code:"invalid_literal",message:null!=(t=null==n?void 0:n.message)?t:"Invalid input, expected "+e+", received "+u,received:u,expected:e}]):{success:!0,value:e}}}},nullValue:o("null",function(e,n){var u;return null!==n?a([{code:"invalid_type",message:null!=(u=e.message)?u:"Invalid input, expected null, received "+typeof n,received:typeof n,expected:"null"}]):{success:!0,value:null}}),nullable:function(e){return u({},e,{nullable:!0,validate:function(n){return null===n?{success:!0,value:n}:e.validate(n)}})},number:o("number",function(e,n){var u,t="string"==typeof n?parseFloat(n):n;return"number"!=typeof t||isNaN(t)?a([{code:"invalid_type",message:null!=(u=e.message)?u:"Invalid input, expected number, received "+typeof n,received:typeof n,expected:"number"}]):{success:!0,value:t}}),object:function(e,n){return{type:"object",name:null==n?void 0:n.name,description:null==n?void 0:n.description,properties:e,examples:[Object.fromEntries(Object.entries(e).map(function(e){var n,u=e[1],t=null==(n=u.examples)?void 0:n[0];return void 0===t&&u.nullable?null:[e[0],t]}).filter(function(e){return null!==e}))],validate:function(n){if("object"!=typeof n||null===n||Array.isArray(n))return a([{code:"invalid_type",message:"Invalid input, expected object, received "+typeof n,received:Array.isArray(n)?"array":typeof n,expected:"object"}]);for(var t,r={},l=function(){var e=s[o],t=e[0],i=e[1].validate(n[t]);if(!i.success)return{v:a(i.errors.map(function(e){var n;return u({},e,{path:[t].concat(null!=(n=e.path)?n:[])})}))};r[t]=i.value},o=0,s=Object.entries(e);o<s.length;o++)if(t=l())return t.v;return i(r)}}},optional:function(e){return u({},e,{optional:!0,validate:function(n){return void 0===n?{success:!0,value:n}:e.validate(n)}})},record:function(e,n){return{type:"record",items:e,name:null==n?void 0:n.name,description:null==n?void 0:n.description,examples:Array.isArray(e.examples)?[{key1:e.examples[0]}]:void 0,validate:function(n){if("object"!=typeof n||null===n||Array.isArray(n))return a([{code:"invalid_type",message:"Invalid input, expected object",received:n,expected:"object"}]);for(var t,r={},l=function(){var n=s[o],t=n[0],i=n[1];if("string"!=typeof t)return{v:a([{code:"invalid_type",message:"Invalid input, expected object with string keys, received "+typeof t,received:t,expected:"string"}])};var l=e.validate(i);if(!l.success)return{v:a(l.errors.map(function(e){var n;return u({},e,{path:[t].concat(null!=(n=e.path)?n:[])})}))};r[t]=l.value},o=0,s=Object.entries(n);o<s.length;o++)if(t=l())return t.v;return i(r)}}},string:o("string",function(e,n){var u;return"string"!=typeof n?a([{code:"invalid_type",message:null!=(u=e.message)?u:"Invalid input, expected string, received "+typeof n,received:typeof n,expected:"string"}]):n.length>1e5?a([{code:"max_length",message:"Input is too long"}]):{success:!0,value:n}}),union:function(e,u){return{type:"union",name:null==u?void 0:u.name,items:e,description:null==u?void 0:u.description,examples:e.flatMap(function(e){return e.examples||[]}),validate:function(u){for(var t,r=[],i=n(e);!(t=i()).done;){var l=t.value.validate(u);if(l.success)return l;r.push.apply(r,l.errors)}return a(r)}}},voidType:o("void",function(e,n){return{success:!0,value:void 0}})},x=u({},F,r,{__proto__:null,upperCase:function(e){return e.toUpperCase()},lowerCase:function(e){return e.toLowerCase()},trim:function(e){return e.trim()},trimStart:function(e){return e.trimStart()},trimEnd:function(e){return e.trimEnd()}},y,l,s);exports.introspectType=t,exports.v=x;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/introspect.ts","../src/lib/result.ts","../src/lib/validator.ts","../src/modifiers/color.ts","../src/modifiers/email.ts","../src/modifiers/emoji.ts","../src/modifiers/ip.ts","../src/modifiers/isoDate.ts","../src/modifiers/endsWith.ts","../src/modifiers/equals.ts","../src/modifiers/includes.ts","../src/modifiers/integer.ts","../src/modifiers/length.ts","../src/modifiers/multipleOf.ts","../src/modifiers/oneOf.ts","../src/modifiers/positive.ts","../src/modifiers/regex.ts","../src/modifiers/size.ts","../src/modifiers/startsWith.ts","../src/modifiers/url.ts","../src/validators/any.ts","../src/validators/array.ts","../src/validators/boolean.ts","../src/validators/date.ts","../src/validators/enum.ts","../src/validators/intersection.ts","../src/validators/literal.ts","../src/validators/null.ts","../src/validators/nullable.ts","../src/validators/number.ts","../src/validators/object.ts","../src/validators/optional.ts","../src/validators/record.ts","../src/validators/string.ts","../src/validators/union.ts","../src/validators/void.ts","../src/index.ts","../src/transformers/case.ts","../src/transformers/trim.ts"],"sourcesContent":["import { ValidationType } from './types';\n\nexport interface IntrospectedType {\n examples: any[];\n items?: IntrospectedType[];\n properties?: Record<string, IntrospectedType>;\n type: string;\n name?: string;\n description?: string;\n optional: boolean;\n nullable: boolean;\n}\n\nexport let introspectType = (type: ValidationType<any>): IntrospectedType => ({\n examples: type.examples ?? [],\n items: type.items\n ? Array.isArray(type.items)\n ? type.items.map(introspectType)\n : [introspectType(type.items)]\n : undefined,\n properties: type.properties\n ? Object.fromEntries(\n Object.entries(type.properties)\n .filter(([_, v]) => !v.hidden)\n .map(([key, value]) => [key, introspectType(value)])\n )\n : undefined,\n type: type.type,\n name: type.name,\n description: type.description,\n optional: !!type.optional,\n nullable: !!type.nullable\n});\n","import { ValidationError, ValidationResult } from './types';\n\nexport let success = <T>(value: T): ValidationResult<T> => ({\n success: true,\n value\n});\n\nexport let error = (errors: ValidationError[]): ValidationResult<any> => ({\n success: false,\n errors\n});\n","import { error, success } from './result';\nimport {\n Preprocessor,\n Transformer,\n ValidationError,\n ValidationModifier,\n ValidationResult,\n ValidationType,\n ValidatorOptions\n} from './types';\n\nlet preprocess = (preprocessors: Preprocessor[], value: any) => {\n return preprocessors.reduce((val, fn) => fn(val), value);\n};\n\nlet modify = <T>(modifiers: ValidationModifier<T>[], value: T) => {\n return modifiers.reduce((errors, fn) => errors.concat(fn(value)), [] as ValidationError[]);\n};\n\nlet transform = <T>(transformers: Transformer<T>[], value: T) => {\n return transformers.reduce((val, fn) => fn(val), value);\n};\n\nexport let createValidator =\n <Type, Opts extends ValidatorOptions<Type>>(\n type: string,\n handler: (opts: Opts, value: any) => ValidationResult<Type>\n ) =>\n (opts?: Opts): ValidationType<Type> => ({\n validate: rawValue => {\n try {\n let value =\n !opts?.preprocessors || !opts?.preprocessors.length\n ? rawValue\n : preprocess(opts?.preprocessors, rawValue);\n\n let handlerRes = handler(opts ?? ({} as any), value);\n if (!handlerRes.success) return handlerRes;\n\n let modifierErrors =\n !opts?.modifiers || !opts?.modifiers.length ? [] : modify(opts?.modifiers, value);\n if (modifierErrors.length) return error(modifierErrors);\n\n return success(\n !opts?.transformers || !opts?.transformers.length\n ? handlerRes.value\n : transform(opts?.transformers, handlerRes.value)\n );\n } catch (err) {\n return error([\n {\n code: 'invalid_type',\n message: opts?.message ?? 'Unable to validate value'\n }\n ]);\n }\n },\n examples: opts?.examples ?? [],\n type,\n name: opts?.name,\n description: opts?.description,\n hidden: !!opts?.hidden\n });\n","import { ValidationModifier } from '../lib/types';\n\nlet colorRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n\nexport let color =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!colorRegex.test(value)) {\n return [\n {\n code: 'invalid_color',\n message: opts?.message ?? 'Invalid color'\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nlet emailRegex = /^[\\w+-]+(?:\\.[\\w+-]+)*@[A-Z0-9]+(?:(?:\\.|-)[A-Z0-9]+)*\\.[A-Z]{2,}$/i;\n\nexport let email =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!emailRegex.test(value)) {\n return [\n {\n code: 'invalid_email',\n message: opts?.message ?? 'Invalid email address'\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nlet emojiRegex = /^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$/u;\n\nexport let emoji =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!emojiRegex.test(value)) {\n return [\n {\n code: 'invalid_emoji',\n message: opts?.message ?? 'Invalid emoji'\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nlet ipV4Regex = /^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$/;\nlet ipV6Regex =\n /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\n\nexport let ip =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!ipV4Regex.test(value) && !ipV6Regex.test(value)) {\n return [\n {\n code: 'invalid_ip',\n message: opts?.message ?? 'Invalid ip address'\n }\n ];\n }\n\n return [];\n };\n\nexport let ipV4 =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!ipV4Regex.test(value)) {\n return [\n {\n code: 'invalid_ip_v4',\n message: opts?.message ?? 'Invalid ip v4 address'\n }\n ];\n }\n\n return [];\n };\n\nexport let ipV6 =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!ipV6Regex.test(value)) {\n return [\n {\n code: 'invalid_ip_v6',\n message: opts?.message ?? 'Invalid ip v6 address'\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nlet isoDateRegex = /^\\d{4}-(0[1-9]|1[0-2])-([12]\\d|0[1-9]|3[01])$/;\nlet isoDateTimeRegex =\n /^\\d{4}-(0[1-9]|1[0-2])-([12]\\d|0[1-9]|3[01])T(0[0-9]|1\\d|2[0-3]):[0-5]\\d$/;\nlet isoTimeRegex = /^(0[0-9]|1\\d|2[0-3]):[0-5]\\d$/;\n\nexport let isoDate =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!isoDateRegex.test(value)) {\n return [\n {\n code: 'invalid_iso_date',\n message: opts?.message ?? 'Invalid iso date'\n }\n ];\n }\n\n return [];\n };\n\nexport let isoDateTime =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!isoDateTimeRegex.test(value)) {\n return [\n {\n code: 'invalid_iso_date_time',\n message: opts?.message ?? 'Invalid iso date time'\n }\n ];\n }\n\n return [];\n };\n\nexport let isoTime =\n (opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!isoTimeRegex.test(value)) {\n return [\n {\n code: 'invalid_iso_time',\n message: opts?.message ?? 'Invalid iso time'\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let endsWith =\n (suffix: string, opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!value.endsWith(suffix)) {\n return [\n {\n code: 'invalid_suffix',\n message: opts?.message ?? `Invalid suffix, expected ${suffix}`,\n expected: suffix,\n received: value\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let equals =\n (\n expected: string | number | boolean,\n opts?: { message?: string }\n ): ValidationModifier<string> =>\n value => {\n if (value !== expected) {\n return [\n {\n code: 'invalid_equals',\n message: opts?.message ?? `Invalid value, expected ${expected}`,\n expected: expected,\n received: value\n }\n ];\n }\n\n return [];\n };\n\nexport let notEquals =\n (\n expected: string | number | boolean,\n opts?: { message?: string }\n ): ValidationModifier<string> =>\n value => {\n if (value === expected) {\n return [\n {\n code: 'invalid_not_equals',\n message: opts?.message ?? `Invalid value, expected not ${expected}`,\n expected: expected,\n received: value\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let includes =\n (substring: string, opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!value.includes(substring)) {\n return [\n {\n code: 'invalid_includes',\n message: opts?.message ?? `Invalid substring, expected ${substring}`,\n expected: substring,\n received: value\n }\n ];\n }\n\n return [];\n };\n\nexport let notIncludes =\n (substring: string, opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (value.includes(substring)) {\n return [\n {\n code: 'invalid_not_includes',\n message: opts?.message ?? `Invalid substring, expected not ${substring}`,\n expected: substring,\n received: value\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let integer =\n (opts?: { message?: string }): ValidationModifier<number> =>\n value => {\n if (!Number.isInteger(value)) {\n return [\n {\n code: 'invalid_integer',\n message: opts?.message ?? `Invalid value, expected integer`,\n expected: value,\n received: value\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let length =\n (length: number): ValidationModifier<string> =>\n value => {\n if (value.length !== length) {\n return [\n {\n code: 'invalid_length',\n message: `Invalid length, expected ${length}`,\n expected: length,\n received: value.length\n }\n ];\n }\n\n return [];\n };\n\nexport let minLength =\n (length: number, opts?: { message?: string }): ValidationModifier<string | any[]> =>\n value => {\n if (value.length < length) {\n return [\n {\n code: 'invalid_min_length',\n message: opts?.message ?? `Invalid min length, expected ${length}`,\n expected: length,\n received: value.length,\n min: length\n }\n ];\n }\n\n return [];\n };\n\nexport let maxLength =\n (length: number, opts?: { message?: string }): ValidationModifier<string | any[]> =>\n value => {\n if (value.length > length) {\n return [\n {\n code: 'invalid_max_length',\n message: opts?.message ?? `Invalid max length, expected ${length}`,\n expected: length,\n received: value.length,\n max: length\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let multipleOf =\n (multi: number, opts?: { message?: string }): ValidationModifier<number> =>\n value => {\n if (value % multi !== 0) {\n return [\n {\n code: 'invalid_multiple_of',\n message: opts?.message ?? `Invalid multiple of ${multi}, expected ${value}`,\n received: value,\n multipleOf: multi\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let oneOf =\n (allowed: string[], opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!allowed.includes(value)) {\n return [\n {\n code: 'invalid_value',\n message: opts?.message ?? `Value must be one of: ${allowed.join(', ')}`\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let positive =\n (opts?: { message?: string }): ValidationModifier<number> =>\n value => {\n if (value <= 0) {\n return [\n {\n code: 'invalid_positive',\n message: opts?.message ?? `Invalid positive, expected ${value}`,\n received: value,\n positive: true\n }\n ];\n }\n\n return [];\n };\n\nexport let negative =\n (opts?: { message?: string }): ValidationModifier<number> =>\n value => {\n if (value >= 0) {\n return [\n {\n code: 'invalid_negative',\n message: opts?.message ?? `Invalid negative, expected ${value}`,\n received: value,\n negative: true\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let regex =\n (pattern: RegExp, opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!pattern.test(value)) {\n return [\n {\n code: 'invalid_regex',\n message: opts?.message ?? `Invalid regex, expected ${pattern}`,\n received: value\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let minValue =\n (min: number, opts?: { message?: string }): ValidationModifier<number> =>\n value => {\n if (value < min) {\n return [\n {\n code: 'invalid_min',\n message: opts?.message ?? `Invalid min, expected ${min}`,\n expected: min,\n received: value,\n min\n }\n ];\n }\n\n return [];\n };\n\nexport let maxValue =\n (max: number, opts?: { message?: string }): ValidationModifier<number> =>\n value => {\n if (value > max) {\n return [\n {\n code: 'invalid_max',\n message: opts?.message ?? `Invalid max, expected ${max}`,\n expected: max,\n received: value,\n max\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let startsWith =\n (prefix: string, opts?: { message?: string }): ValidationModifier<string> =>\n value => {\n if (!value.startsWith(prefix)) {\n return [\n {\n code: 'invalid_prefix',\n message: opts?.message ?? `Invalid prefix, expected ${prefix}`,\n expected: prefix,\n received: value\n }\n ];\n }\n\n return [];\n };\n","import { ValidationModifier } from '../lib/types';\n\nexport let url =\n (opts?: { message?: string; hostnames?: string[] }): ValidationModifier<string> =>\n value => {\n try {\n let url = new URL(value);\n\n if (opts?.hostnames && !opts.hostnames.includes(url.hostname)) {\n return [\n {\n code: 'invalid_hostname',\n message: opts?.message ?? `Invalid hostname`,\n expected: opts?.hostnames,\n received: url.hostname\n }\n ];\n }\n\n return [];\n } catch (err) {\n return [\n {\n code: 'invalid_url',\n message: opts?.message ?? `Invalid URL`,\n received: value\n }\n ];\n }\n };\n","import { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let any = createValidator<any, ValidatorOptions<any>>('any', (opts, value) => {\n return { success: true, value };\n});\n\nexport let typedAny = <T>(name: string) =>\n createValidator<T, ValidatorOptions<T>>(name, (opts, value) => {\n return { success: true, value };\n })();\n","import { error, success } from '../lib/result';\nimport { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types';\n\nexport let array = <Validator extends ValidationType<any>>(\n validator: Validator,\n opts?: ValidatorOptions<ValidationTypeValue<Validator>[]>\n): ValidationType<ValidationTypeValue<Validator>[]> => ({\n type: 'array',\n items: validator,\n name: opts?.name,\n description: opts?.description,\n examples: Array.isArray(validator.examples)\n ? validator.examples.map(v => [v, v])\n : undefined,\n validate: value => {\n if (!Array.isArray(value)) {\n return error([\n {\n code: 'invalid_type',\n message: `Invalid input, expected array, received ${typeof value}`,\n received: typeof value,\n expected: 'array'\n }\n ]);\n }\n\n let values: ValidationTypeValue<Validator>[] = [];\n\n for (let [key, val] of value.entries()) {\n let result = validator.validate(val);\n\n if (!result.success) {\n return error(\n result.errors.map(e => ({ ...e, path: [key.toString(), ...(e.path ?? [])] }))\n );\n }\n\n values.push(result.value);\n }\n\n return success(values);\n }\n});\n","import { error } from '../lib/result';\nimport { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let boolean = createValidator<boolean, ValidatorOptions<boolean>>(\n 'boolean',\n (opts, value) => {\n let serializedValue: boolean | undefined;\n\n if (typeof value == 'string') {\n if (value == 'true') {\n serializedValue = true;\n } else if (value == 'false') {\n serializedValue = false;\n }\n } else if (typeof value == 'boolean') {\n serializedValue = value;\n }\n\n if (serializedValue === undefined) {\n return error([\n {\n code: 'invalid_type',\n message:\n opts.message ?? `Invalid input, expected a boolean, received ${typeof value}`,\n received: typeof value,\n expected: 'boolean'\n }\n ]);\n }\n\n return { success: true, value: serializedValue };\n }\n);\n","import { error } from '../lib/result';\nimport { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let date = createValidator<Date, ValidatorOptions<Date>>('date', (opts, value) => {\n if (typeof value === 'string') {\n let date = new Date(value);\n\n if (!isNaN(date.getTime())) {\n value = date;\n }\n }\n\n if (!(value instanceof Date)) {\n return error([\n {\n code: 'invalid_type',\n message: opts.message ?? `Invalid input, expected a date, received ${typeof value}`,\n received: typeof value,\n expected: 'date'\n }\n ]);\n }\n\n return { success: true, value };\n});\n","import { error } from '../lib/result';\nimport { ValidationType } from '../lib/types';\n\n// export let enumType = <\n// A extends string | number | boolean,\n// Rest extends (string | number | boolean)[]\n// >(\n// ...values: [A, ...Rest]\n// ): ValidationType<A | Rest[number]> => ({\n// type: 'enum',\n// examples: values,\n// validate: value => {\n// if (!values.includes(value)) {\n// return error([\n// {\n// code: 'invalid_enum',\n// message: `Invalid input, expected one of ${values.join(', ')}, received ${value}`,\n// received: value,\n// expected: values\n// }\n// ]);\n// }\n\n// return { success: true, value };\n// }\n// });\n\nexport let enumOf = <\n const A extends string | number | boolean,\n Rest extends (string | number | boolean)[]\n>(\n values: [A, ...Rest],\n opts?: {\n name?: string;\n description?: string;\n }\n): ValidationType<A | Rest[number]> => ({\n type: 'enum',\n examples: values,\n name: opts?.name,\n description: opts?.description,\n validate: value => {\n if (!values.includes(value)) {\n return error([\n {\n code: 'invalid_enum',\n message: `Invalid input, expected one of ${values.join(', ')}, received ${value}`,\n received: value,\n expected: values\n }\n ]);\n }\n\n return { success: true, value };\n }\n});\n","import { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types';\n\nexport let intersection = <A extends ValidationType<object>, B extends ValidationType<object>>(\n validators: [A, B],\n opts?: ValidatorOptions<ValidationTypeValue<A> & ValidationTypeValue<B>>\n): ValidationType<ValidationTypeValue<A> & ValidationTypeValue<B>> => ({\n type: 'intersection',\n name: opts?.name,\n items: validators,\n description: opts?.description,\n examples: [],\n validate: value => {\n let fullValue: any = {};\n\n for (let validator of validators) {\n let result = validator.validate(value);\n if (!result.success) return result;\n\n fullValue = { ...fullValue, ...result.value };\n }\n\n return { success: true, value: fullValue };\n }\n});\n","import { error } from '../lib/result';\nimport { ValidationType, ValidatorOptions } from '../lib/types';\n\nexport let literal = <A extends string | number | boolean>(\n value: A,\n opts?: ValidatorOptions<A>\n): ValidationType<A> => ({\n type: 'literal',\n examples: [value],\n name: opts?.name,\n description: opts?.description,\n validate: input => {\n if (input != value) {\n return error([\n {\n code: 'invalid_literal',\n message: opts?.message ?? `Invalid input, expected ${value}, received ${input}`,\n received: input,\n expected: value\n }\n ]);\n }\n\n return { success: true, value };\n }\n});\n","import { error } from '../lib/result';\nimport { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let nullValue = createValidator<null, ValidatorOptions<null>>('null', (opts, value) => {\n if (value !== null) {\n return error([\n {\n code: 'invalid_type',\n message: opts.message ?? `Invalid input, expected null, received ${typeof value}`,\n received: typeof value,\n expected: 'null'\n }\n ]);\n }\n\n return { success: true, value: null };\n});\n","import { ValidationType, ValidationTypeValue } from '../lib/types';\n\nexport let nullable = <A extends ValidationType<any>>(\n validator: A\n): ValidationType<ValidationTypeValue<A> | null> => ({\n ...validator,\n\n nullable: true,\n validate: value => {\n if (value === null) {\n return { success: true, value };\n }\n\n return validator.validate(value);\n }\n});\n","import { error } from '../lib/result';\nimport { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let number = createValidator<number, ValidatorOptions<number>>(\n 'number',\n (opts, value) => {\n let number = typeof value == 'string' ? parseFloat(value) : value;\n\n if (typeof number != 'number' || isNaN(number)) {\n return error([\n {\n code: 'invalid_type',\n message: opts.message ?? `Invalid input, expected number, received ${typeof value}`,\n received: typeof value,\n expected: 'number'\n }\n ]);\n }\n\n return { success: true, value: number };\n }\n);\n","import { error, success } from '../lib/result';\nimport { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types';\n\ntype KeysWhichExtend<T, SelectedType> = {\n [key in keyof T]: SelectedType extends T[key] ? key : never;\n}[keyof T];\ntype Optional<T> = Partial<Pick<T, KeysWhichExtend<T, undefined>>>;\ntype Required<T> = Omit<T, KeysWhichExtend<T, undefined>>;\nexport type UndefinedIsOptional<T> = Optional<T> & Required<T>;\n\nexport let object = <Validator extends { [key: string]: ValidationType<any> }>(\n shape: Validator,\n opts?: ValidatorOptions<Record<string, ValidationTypeValue<Validator>>>\n): ValidationType<\n UndefinedIsOptional<{\n [key in keyof Validator]: ValidationTypeValue<Validator[key]>;\n }>\n> => ({\n type: 'object',\n name: opts?.name,\n description: opts?.description,\n properties: shape,\n examples: [\n Object.fromEntries(\n Object.entries(shape)\n .map(([key, validator]) => {\n let example = validator.examples?.[0];\n // For nullable fields, if there's no example, don't include it\n // This prevents undefined from becoming {} in Object.fromEntries\n if (example === undefined && validator.nullable) {\n return null; // Will be filtered out\n }\n return [key, example];\n })\n .filter((entry): entry is [string, any] => entry !== null)\n )\n ] as any,\n validate: value => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return error([\n {\n code: 'invalid_type',\n message: `Invalid input, expected object, received ${typeof value}`,\n received: Array.isArray(value) ? 'array' : typeof value,\n expected: 'object'\n }\n ]);\n }\n\n let values: {\n [key in keyof Validator]: ValidationTypeValue<Validator[key]>;\n } = {} as any;\n\n for (let [key, validator] of Object.entries(shape)) {\n let result = validator.validate(value[key]);\n\n if (!result.success) {\n return error(result.errors.map(e => ({ ...e, path: [key, ...(e.path ?? [])] })));\n }\n\n values[key as keyof Validator] = result.value;\n }\n\n return success(values);\n }\n});\n","import { ValidationType, ValidationTypeValue } from '../lib/types';\n\nexport let optional = <A extends ValidationType<any>>(\n validator: A\n): ValidationType<ValidationTypeValue<A> | undefined> => ({\n ...validator,\n\n optional: true,\n validate: value => {\n if (value === undefined) {\n return { success: true, value };\n }\n\n return validator.validate(value);\n }\n});\n","import { error, success } from '../lib/result';\nimport { ValidationType, ValidationTypeValue, ValidatorOptions } from '../lib/types';\n\nexport let record = <Validator extends ValidationType<any>>(\n validator: Validator,\n opts?: ValidatorOptions<Record<string, ValidationTypeValue<Validator>>>\n): ValidationType<Record<string, ValidationTypeValue<Validator>>> => ({\n type: 'record',\n items: validator,\n name: opts?.name,\n description: opts?.description,\n examples: Array.isArray(validator.examples)\n ? [\n {\n key1: validator.examples[0]\n }\n ]\n : undefined,\n validate: value => {\n if (typeof value != 'object' || value === null || Array.isArray(value)) {\n return error([\n {\n code: 'invalid_type',\n message: `Invalid input, expected object`,\n received: value,\n expected: 'object'\n }\n ]);\n }\n\n let values: Record<string, ValidationTypeValue<Validator>> = {};\n\n for (let [key, val] of Object.entries(value)) {\n if (typeof key != 'string') {\n return error([\n {\n code: 'invalid_type',\n message: `Invalid input, expected object with string keys, received ${typeof key}`,\n received: key,\n expected: 'string'\n }\n ]);\n }\n\n let result = validator.validate(val);\n\n if (!result.success) {\n return error(result.errors.map(e => ({ ...e, path: [key, ...(e.path ?? [])] })));\n }\n\n values[key] = result.value;\n }\n\n return success(values);\n }\n});\n","import { error } from '../lib/result';\nimport { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let string = createValidator<string, ValidatorOptions<string>>(\n 'string',\n (opts, value) => {\n if (typeof value != 'string') {\n return error([\n {\n code: 'invalid_type',\n message: opts.message ?? `Invalid input, expected string, received ${typeof value}`,\n received: typeof value,\n expected: 'string'\n }\n ]);\n }\n\n if (value.length > 100_000) {\n return error([\n {\n code: 'max_length',\n message: 'Input is too long'\n }\n ]);\n }\n\n return { success: true, value };\n }\n);\n","import { error } from '../lib/result';\nimport {\n ValidationError,\n ValidationType,\n ValidationTypeValue,\n ValidatorOptions\n} from '../lib/types';\n\nexport let union = <\n A extends ValidationType<any>,\n B extends ValidationType<any>,\n Rest extends ValidationType<any>[]\n>(\n validators: [A, B, ...Rest],\n opts?: ValidatorOptions<\n ValidationTypeValue<A> | ValidationTypeValue<B> | ValidationTypeValue<Rest[number]>\n >\n): ValidationType<\n ValidationTypeValue<A> | ValidationTypeValue<B> | ValidationTypeValue<Rest[number]>\n> => ({\n type: 'union',\n name: opts?.name,\n items: validators,\n description: opts?.description,\n examples: validators.flatMap(v => v.examples || []),\n validate: value => {\n let errors: ValidationError[] = [];\n\n for (let validator of validators) {\n let result = validator.validate(value);\n if (result.success) return result;\n\n errors.push(...result.errors);\n }\n\n return error(errors);\n }\n});\n","import { ValidatorOptions } from '../lib/types';\nimport { createValidator } from '../lib/validator';\n\nexport let voidType = createValidator<void, ValidatorOptions<void>>('void', (opts, value) => {\n return { success: true, value: undefined };\n});\n","// export * from './lib/result';\n// export * from './lib/validator';\n// export * from './modifiers';\n// export * from './transformers';\n// export * from './validators';\n\nexport * from './lib/introspect';\nexport * from './lib/types';\n\nimport * as introspect from './lib/introspect';\nimport * as result from './lib/result';\nimport * as validator from './lib/validator';\nimport * as modifiers from './modifiers';\nimport * as transformers from './transformers';\nimport * as validators from './validators';\n\n// export default {\n// ...modifiers,\n// ...introspect,\n// ...transformers,\n// ...validators,\n// ...result,\n// ...validator\n// };\n\nexport let v = {\n ...modifiers,\n ...introspect,\n ...transformers,\n ...validators,\n ...result,\n ...validator\n};\n","import { Transformer } from '../lib/types';\n\nexport let upperCase: Transformer<string> = value => value.toUpperCase();\n\nexport let lowerCase: Transformer<string> = value => value.toLowerCase();\n","import { Transformer } from '../lib/types';\n\nexport let trim: Transformer<string> = value => value.trim();\n\nexport let trimStart: Transformer<string> = value => value.trimStart();\n\nexport let trimEnd: Transformer<string> = value => value.trimEnd();\n"],"names":["introspectType","type","_type$examples","examples","items","Array","isArray","map","undefined","properties","Object","fromEntries","entries","filter","_ref","hidden","_ref2","name","description","optional","nullable","success","value","error","errors","createValidator","handler","opts","_opts$examples","validate","rawValue","preprocessors","length","reduce","val","fn","preprocess","handlerRes","modifierErrors","modifiers","concat","modify","transformers","transform","err","_opts$message","code","message","colorRegex","emailRegex","emojiRegex","ipV4Regex","ipV6Regex","isoDateRegex","isoDateTimeRegex","isoTimeRegex","test","suffix","endsWith","expected","received","_opts$message2","substring","includes","Number","isInteger","_opts$message3","min","max","multi","multipleOf","allowed","join","positive","negative","pattern","prefix","startsWith","url","URL","hostnames","hostname","validator","v","_ret","_step","values","_loop","_step$value","key","result","e","_e$path","_extends","path","toString","push","_iterator","_createForOfIteratorHelperLoose","done","serializedValue","date","Date","isNaN","getTime","validators","fullValue","input","number","parseFloat","shape","_validator$examples","example","entry","_Object$entries$_i","_Object$entries","_i","key1","flatMap","apply","introspect","toUpperCase","toLowerCase","trim","trimStart","trimEnd"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
export * from './lib/introspect';
|
|
2
|
+
export * from './lib/types';
|
|
3
|
+
import * as introspect from './lib/introspect';
|
|
4
|
+
import * as validators from './validators';
|
|
5
|
+
export declare let v: {
|
|
6
|
+
createValidator: <Type, Opts extends import("./lib/types").ValidatorOptions<Type>>(type: string, handler: (opts: Opts, value: any) => import("./lib/types").ValidationResult<Type>) => (opts?: Opts) => import("./lib/types").ValidationType<Type>;
|
|
7
|
+
success: <T>(value: T) => import("./lib/types").ValidationResult<T>;
|
|
8
|
+
error: (errors: import("./lib/types").ValidationError[]) => import("./lib/types").ValidationResult<any>;
|
|
9
|
+
any: (opts?: import("./lib/types").ValidatorOptions<any> | undefined) => import("./lib/types").ValidationType<any>;
|
|
10
|
+
typedAny: <T>(name: string) => import("./lib/types").ValidationType<T>;
|
|
11
|
+
array: <Validator extends import("./lib/types").ValidationType<any>>(validator: Validator, opts?: import("./lib/types").ValidatorOptions<import("./lib/types").ValidationTypeValue<Validator>[]>) => import("./lib/types").ValidationType<import("./lib/types").ValidationTypeValue<Validator>[]>;
|
|
12
|
+
boolean: (opts?: import("./lib/types").ValidatorOptions<boolean> | undefined) => import("./lib/types").ValidationType<boolean>;
|
|
13
|
+
date: (opts?: import("./lib/types").ValidatorOptions<Date> | undefined) => import("./lib/types").ValidationType<Date>;
|
|
14
|
+
enumOf: <const A extends string | number | boolean, Rest extends (string | number | boolean)[]>(values: [A, ...Rest], opts?: {
|
|
15
|
+
name?: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
}) => import("./lib/types").ValidationType<A | Rest[number]>;
|
|
18
|
+
intersection: <A extends import("./lib/types").ValidationType<object>, B extends import("./lib/types").ValidationType<object>>(validators: [A, B], opts?: import("./lib/types").ValidatorOptions<import("./lib/types").ValidationTypeValue<A> & import("./lib/types").ValidationTypeValue<B>>) => import("./lib/types").ValidationType<import("./lib/types").ValidationTypeValue<A> & import("./lib/types").ValidationTypeValue<B>>;
|
|
19
|
+
literal: <A extends string | number | boolean>(value: A, opts?: import("./lib/types").ValidatorOptions<A>) => import("./lib/types").ValidationType<A>;
|
|
20
|
+
nullValue: (opts?: import("./lib/types").ValidatorOptions<null> | undefined) => import("./lib/types").ValidationType<null>;
|
|
21
|
+
nullable: <A extends import("./lib/types").ValidationType<any>>(validator: A) => import("./lib/types").ValidationType<import("./lib/types").ValidationTypeValue<A> | null>;
|
|
22
|
+
number: (opts?: import("./lib/types").ValidatorOptions<number> | undefined) => import("./lib/types").ValidationType<number>;
|
|
23
|
+
object: <Validator extends {
|
|
24
|
+
[key: string]: import("./lib/types").ValidationType<any>;
|
|
25
|
+
}>(// ...modifiers,
|
|
26
|
+
shape: Validator, opts?: import("./lib/types").ValidatorOptions<Record<string, import("./lib/types").ValidationTypeValue<Validator>>>) => import("./lib/types").ValidationType<validators.UndefinedIsOptional<{ [key in keyof Validator]: import("./lib/types").ValidationTypeValue<Validator[key]>; }>>;
|
|
27
|
+
optional: <A extends import("./lib/types").ValidationType<any>>(validator: A) => import("./lib/types").ValidationType<import("./lib/types").ValidationTypeValue<A> | undefined>;
|
|
28
|
+
record: <Validator extends import("./lib/types").ValidationType<any>>(validator: Validator, opts?: import("./lib/types").ValidatorOptions<Record<string, import("./lib/types").ValidationTypeValue<Validator>>>) => import("./lib/types").ValidationType<Record<string, import("./lib/types").ValidationTypeValue<Validator>>>;
|
|
29
|
+
string: (opts?: import("./lib/types").ValidatorOptions<string> | undefined) => import("./lib/types").ValidationType<string>;
|
|
30
|
+
union: <A extends import("./lib/types").ValidationType<any>, B extends import("./lib/types").ValidationType<any>, Rest extends import("./lib/types").ValidationType<any>[]>(validators: [A, B, ...Rest], opts?: import("./lib/types").ValidatorOptions<import("./lib/types").ValidationTypeValue<A> | import("./lib/types").ValidationTypeValue<B> | import("./lib/types").ValidationTypeValue<Rest[number]>>) => import("./lib/types").ValidationType<import("./lib/types").ValidationTypeValue<A> | import("./lib/types").ValidationTypeValue<B> | import("./lib/types").ValidationTypeValue<Rest[number]>>;
|
|
31
|
+
voidType: (opts?: import("./lib/types").ValidatorOptions<void> | undefined) => import("./lib/types").ValidationType<void>;
|
|
32
|
+
upperCase: import("./lib/types").Transformer<string>;
|
|
33
|
+
lowerCase: import("./lib/types").Transformer<string>;
|
|
34
|
+
trim: import("./lib/types").Transformer<string>;
|
|
35
|
+
trimStart: import("./lib/types").Transformer<string>;
|
|
36
|
+
trimEnd: import("./lib/types").Transformer<string>;
|
|
37
|
+
introspectType: (type: import("./lib/types").ValidationType<any>) => introspect.IntrospectedType;
|
|
38
|
+
color: (opts?: {
|
|
39
|
+
message?: string;
|
|
40
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
41
|
+
email: (opts?: {
|
|
42
|
+
message?: string;
|
|
43
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
44
|
+
emoji: (opts?: {
|
|
45
|
+
message?: string;
|
|
46
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
47
|
+
endsWith: (suffix: string, opts?: {
|
|
48
|
+
message?: string;
|
|
49
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
50
|
+
equals: (expected: string | number | boolean, opts?: {
|
|
51
|
+
message?: string;
|
|
52
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
53
|
+
notEquals: (expected: string | number | boolean, opts?: {
|
|
54
|
+
message?: string;
|
|
55
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
56
|
+
includes: (substring: string, opts?: {
|
|
57
|
+
message?: string;
|
|
58
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
59
|
+
notIncludes: (substring: string, opts?: {
|
|
60
|
+
message?: string;
|
|
61
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
62
|
+
integer: (opts?: {
|
|
63
|
+
message?: string;
|
|
64
|
+
}) => import("./lib/types").ValidationModifier<number>;
|
|
65
|
+
ip: (opts?: {
|
|
66
|
+
message?: string;
|
|
67
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
68
|
+
ipV4: (opts?: {
|
|
69
|
+
message?: string;
|
|
70
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
71
|
+
ipV6: (opts?: {
|
|
72
|
+
message?: string;
|
|
73
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
74
|
+
isoDate: (opts?: {
|
|
75
|
+
message?: string;
|
|
76
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
77
|
+
isoDateTime: (opts?: {
|
|
78
|
+
message?: string;
|
|
79
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
80
|
+
isoTime: (opts?: {
|
|
81
|
+
message?: string;
|
|
82
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
83
|
+
length: (length: number) => import("./lib/types").ValidationModifier<string>;
|
|
84
|
+
minLength: (length: number, opts?: {
|
|
85
|
+
message?: string;
|
|
86
|
+
}) => import("./lib/types").ValidationModifier<string | any[]>;
|
|
87
|
+
maxLength: (length: number, opts?: {
|
|
88
|
+
message?: string;
|
|
89
|
+
}) => import("./lib/types").ValidationModifier<string | any[]>;
|
|
90
|
+
multipleOf: (multi: number, opts?: {
|
|
91
|
+
message?: string;
|
|
92
|
+
}) => import("./lib/types").ValidationModifier<number>;
|
|
93
|
+
oneOf: (allowed: string[], opts?: {
|
|
94
|
+
message?: string;
|
|
95
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
96
|
+
positive: (opts?: {
|
|
97
|
+
message?: string;
|
|
98
|
+
}) => import("./lib/types").ValidationModifier<number>;
|
|
99
|
+
negative: (opts?: {
|
|
100
|
+
message?: string;
|
|
101
|
+
}) => import("./lib/types").ValidationModifier<number>;
|
|
102
|
+
regex: (pattern: RegExp, opts?: {
|
|
103
|
+
message?: string;
|
|
104
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
105
|
+
minValue: (min: number, opts?: {
|
|
106
|
+
message?: string;
|
|
107
|
+
}) => import("./lib/types").ValidationModifier<number>;
|
|
108
|
+
maxValue: (max: number, opts?: {
|
|
109
|
+
message?: string;
|
|
110
|
+
}) => import("./lib/types").ValidationModifier<number>;
|
|
111
|
+
startsWith: (prefix: string, opts?: {
|
|
112
|
+
message?: string;
|
|
113
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
114
|
+
url: (opts?: {
|
|
115
|
+
message?: string;
|
|
116
|
+
hostnames?: string[];
|
|
117
|
+
}) => import("./lib/types").ValidationModifier<string>;
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAE5B,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAK/C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAW3C,eAAO,IAAI,CAAC;sBAAC,IACb,EAAE,yDAEE,EAAE,YACF,EAAC,iFAIgB,MAAW,WAAW;cA/B5B,CAAC,EAAE,QAAQ;YAItB,+CAAyB;;eAGX,CAAC,EAAE,YAAY;YALd,2DAEG,EAAE,oBACX,EAAC,qGAE8B;;;aAqB1C,yCAGU,EAAC,0CAA6C,EAAG,oBAAuB,EAAC;YAAoB,CAAC;mBAAyB,CAAC;KAAa;mBA9BpI,sDACH,EAAE,sDAEF,EAAE,kBAAqB,EACjC,0IAE6C;cANnB,mCACA,EAAE,QAEvB,EAAE,gDACN;;eALsB,mDACH,EAAE,YACpB;;aAUK;;KAEW,EAClB,kBAAkB;IAQlB,gBAPA,EAAC,mHAGY;eAnBU,mDACH,EAAE,YACpB;aAAkB,2DAEG,EAAE,oBACX,EAAC,mHAGJ;;YAJV,mDAAgC,EACjC,mDAEE,EAAC,wDAAqC,EAAG,2BAClB,EAAC,oMAGT;;;;;;;qBAHS,+CACf;YARkB;eACnB,CAAC;KAAU;YAAM;eAElB,CAAC;KAAU;YAFR;eAAe,CAAC;KAExB;eAJI,cAAc,EAAC;eACf,CAAC;KAAU;aADb,mCACQ,EAAC;eACd,CAAC;KAAU;gBAUoB,mCAGzB,EAAC;eACE,CAAC;KACV;eAjBO,iBAAiB,EAAC;eACd,CAAA;KAAU;kBAWC,iBAAgB,EAAC;eAE5B,CAAC;KACV;cAfI;eAAgB,CAAC;KACtB;SA8BsD;eAAgB,CAAC;KAAU;WAA8R;eAAgB,CAAC;KAAU;WAA0Q;eAAgB,CAAC;KAAU;cAvBhqB;eAAgB,CAAC;KAC9B;kBASY;eACJ,CAAC;KACN;cAW8I;eAAgB,CAAC;KAAU;aA/B1K,cAAc;gBAWV,cAAc,EAAC;eAAiB,CAAC;KACtC;gBAmBiF,cAAc,EAAC;eAAiB,CAAC;KAAU;iBA/BvH,aAAa,EAAC;eACd,CAAA;KAAU;YADf,iBAAiB,EAAC;eACf,CAAC;KAAU;eADX;eAAgB,CAAC;KACtB;eAUmB;eAAgB,CAAC;KACtC;YAZI,eAAe,EAAC;eACf,CAAC;KAAU;eADT,WAAW,EAAC;eACf,CAAC;KAAU;eAUsB,WACrC,EAAC;eAAiB,CAAC;KAAU;iBAZpB,cAAc,EAAC;eACf,CAAC;KAAU;UADlB;eAAgB,CAAC;iBACb,CAAC;KAAY;CA6BnB,CAAC"}
|