@satoshibits/functional 1.1.0 → 1.1.2
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/README.md +28 -145
- package/dist/array-utils.d.mts +13 -0
- package/dist/array-utils.d.mts.map +1 -1
- package/dist/array-utils.mjs +13 -0
- package/dist/array-utils.mjs.map +1 -1
- package/dist/array-utils.test.d.ts +2 -0
- package/dist/array-utils.test.d.ts.map +1 -0
- package/dist/array-utils.test.js +256 -0
- package/dist/array-utils.test.js.map +1 -0
- package/dist/composition.d.mts +13 -0
- package/dist/composition.d.mts.map +1 -1
- package/dist/composition.mjs +13 -0
- package/dist/composition.mjs.map +1 -1
- package/dist/composition.test.d.ts +2 -0
- package/dist/composition.test.d.ts.map +1 -0
- package/dist/composition.test.js +409 -0
- package/dist/composition.test.js.map +1 -0
- package/dist/integration.test.d.mts +2 -0
- package/dist/integration.test.d.mts.map +1 -0
- package/dist/integration.test.mjs +486 -0
- package/dist/integration.test.mjs.map +1 -0
- package/dist/io.d.mts +12 -0
- package/dist/io.d.mts.map +1 -1
- package/dist/io.mjs +12 -0
- package/dist/io.mjs.map +1 -1
- package/dist/io.test.d.mts +2 -0
- package/dist/io.test.d.mts.map +1 -0
- package/dist/io.test.mjs +373 -0
- package/dist/io.test.mjs.map +1 -0
- package/dist/laws.test.d.mts +2 -0
- package/dist/laws.test.d.mts.map +1 -0
- package/dist/laws.test.mjs +614 -0
- package/dist/laws.test.mjs.map +1 -0
- package/dist/object-utils.d.mts +11 -0
- package/dist/object-utils.d.mts.map +1 -1
- package/dist/object-utils.mjs +11 -0
- package/dist/object-utils.mjs.map +1 -1
- package/dist/object-utils.test.d.ts +2 -0
- package/dist/object-utils.test.d.ts.map +1 -0
- package/dist/object-utils.test.js +286 -0
- package/dist/object-utils.test.js.map +1 -0
- package/dist/option-additions.test.d.mts +2 -0
- package/dist/option-additions.test.d.mts.map +1 -0
- package/dist/option-additions.test.mjs +325 -0
- package/dist/option-additions.test.mjs.map +1 -0
- package/dist/option.d.mts +20 -3
- package/dist/option.d.mts.map +1 -1
- package/dist/option.mjs +20 -3
- package/dist/option.mjs.map +1 -1
- package/dist/option.test.d.ts +6 -0
- package/dist/option.test.d.ts.map +1 -0
- package/dist/option.test.js +606 -0
- package/dist/option.test.js.map +1 -0
- package/dist/performance.d.mts +26 -9
- package/dist/performance.d.mts.map +1 -1
- package/dist/performance.mjs +26 -9
- package/dist/performance.mjs.map +1 -1
- package/dist/performance.test.d.ts +2 -0
- package/dist/performance.test.d.ts.map +1 -0
- package/dist/performance.test.js +424 -0
- package/dist/performance.test.js.map +1 -0
- package/dist/pipeline.d.mts +12 -0
- package/dist/pipeline.d.mts.map +1 -1
- package/dist/pipeline.mjs +12 -0
- package/dist/pipeline.mjs.map +1 -1
- package/dist/pipeline.test.d.ts +2 -0
- package/dist/pipeline.test.d.ts.map +1 -0
- package/dist/pipeline.test.js +445 -0
- package/dist/pipeline.test.js.map +1 -0
- package/dist/predicates.d.mts +12 -0
- package/dist/predicates.d.mts.map +1 -1
- package/dist/predicates.mjs +12 -0
- package/dist/predicates.mjs.map +1 -1
- package/dist/predicates.test.d.ts +2 -0
- package/dist/predicates.test.d.ts.map +1 -0
- package/dist/predicates.test.js +375 -0
- package/dist/predicates.test.js.map +1 -0
- package/dist/reader-result.d.mts +37 -16
- package/dist/reader-result.d.mts.map +1 -1
- package/dist/reader-result.mjs +37 -16
- package/dist/reader-result.mjs.map +1 -1
- package/dist/reader-result.test.d.ts +2 -0
- package/dist/reader-result.test.d.ts.map +1 -0
- package/dist/reader-result.test.js +1259 -0
- package/dist/reader-result.test.js.map +1 -0
- package/dist/reader.d.mts +12 -0
- package/dist/reader.d.mts.map +1 -1
- package/dist/reader.mjs +12 -0
- package/dist/reader.mjs.map +1 -1
- package/dist/reader.test.d.mts +2 -0
- package/dist/reader.test.d.mts.map +1 -0
- package/dist/reader.test.mjs +288 -0
- package/dist/reader.test.mjs.map +1 -0
- package/dist/result-additions.test.d.mts +2 -0
- package/dist/result-additions.test.d.mts.map +1 -0
- package/dist/result-additions.test.mjs +325 -0
- package/dist/result-additions.test.mjs.map +1 -0
- package/dist/result.d.mts +12 -0
- package/dist/result.d.mts.map +1 -1
- package/dist/result.mjs +12 -0
- package/dist/result.mjs.map +1 -1
- package/dist/result.test.d.ts +2 -0
- package/dist/result.test.d.ts.map +1 -0
- package/dist/result.test.js +453 -0
- package/dist/result.test.js.map +1 -0
- package/dist/task.d.mts +13 -0
- package/dist/task.d.mts.map +1 -1
- package/dist/task.mjs +13 -0
- package/dist/task.mjs.map +1 -1
- package/dist/task.test.d.mts +2 -0
- package/dist/task.test.d.mts.map +1 -0
- package/dist/task.test.mjs +1006 -0
- package/dist/task.test.mjs.map +1 -0
- package/dist/types.d.mts +12 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +12 -0
- package/dist/types.mjs.map +1 -1
- package/dist/types.test.d.ts +6 -0
- package/dist/types.test.d.ts.map +1 -0
- package/dist/types.test.js +447 -0
- package/dist/types.test.js.map +1 -0
- package/dist/validation.d.mts +12 -0
- package/dist/validation.d.mts.map +1 -1
- package/dist/validation.mjs +12 -0
- package/dist/validation.mjs.map +1 -1
- package/dist/validation.test.d.ts +2 -0
- package/dist/validation.test.d.ts.map +1 -0
- package/dist/validation.test.js +518 -0
- package/dist/validation.test.js.map +1 -0
- package/package.json +77 -13
package/dist/validation.d.mts
CHANGED
|
@@ -7,6 +7,18 @@
|
|
|
7
7
|
* error handling explicit and composable. Validators can be combined, transformed,
|
|
8
8
|
* and reused to build sophisticated validation logic.
|
|
9
9
|
*
|
|
10
|
+
* ### For Dummies
|
|
11
|
+
* - Validators are tiny functions that say "valid" or "here’s why not"—never exceptions.
|
|
12
|
+
* - Chain them to collect multiple errors instead of stopping at the first failure.
|
|
13
|
+
* - Everything returns a `Result`, so you keep success and error flows explicit.
|
|
14
|
+
*
|
|
15
|
+
* ### Decision Tree
|
|
16
|
+
* - Need simple value checks? Grab primitives from `validators.string`, `validators.number`, etc.
|
|
17
|
+
* - Combining rules for one field? Use `Validation.all(ruleA, ruleB, ...)`.
|
|
18
|
+
* - Optional field? Wrap with `Validation.optional(rule)`.
|
|
19
|
+
* - Validating objects? Build a `schema({ ... })` and reuse it.
|
|
20
|
+
* - Handling errors? Inspect the returned `ValidationError`—it stores every message.
|
|
21
|
+
*
|
|
10
22
|
* @example
|
|
11
23
|
* ```typescript
|
|
12
24
|
* import { Validation, validators, schema, ValidationError } from './validation.mts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../src/validation.mts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"validation.d.mts","sourceRoot":"","sources":["../src/validation.mts"],"names":[],"mappings":"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"}
|
package/dist/validation.mjs
CHANGED
|
@@ -8,6 +8,18 @@
|
|
|
8
8
|
* error handling explicit and composable. Validators can be combined, transformed,
|
|
9
9
|
* and reused to build sophisticated validation logic.
|
|
10
10
|
*
|
|
11
|
+
* ### For Dummies
|
|
12
|
+
* - Validators are tiny functions that say "valid" or "here’s why not"—never exceptions.
|
|
13
|
+
* - Chain them to collect multiple errors instead of stopping at the first failure.
|
|
14
|
+
* - Everything returns a `Result`, so you keep success and error flows explicit.
|
|
15
|
+
*
|
|
16
|
+
* ### Decision Tree
|
|
17
|
+
* - Need simple value checks? Grab primitives from `validators.string`, `validators.number`, etc.
|
|
18
|
+
* - Combining rules for one field? Use `Validation.all(ruleA, ruleB, ...)`.
|
|
19
|
+
* - Optional field? Wrap with `Validation.optional(rule)`.
|
|
20
|
+
* - Validating objects? Build a `schema({ ... })` and reuse it.
|
|
21
|
+
* - Handling errors? Inspect the returned `ValidationError`—it stores every message.
|
|
22
|
+
*
|
|
11
23
|
* @example
|
|
12
24
|
* ```typescript
|
|
13
25
|
* import { Validation, validators, schema, ValidationError } from './validation.mts';
|
package/dist/validation.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../src/validation.mts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../src/validation.mts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IAAqC,mCAAK;IACxC;;;;OAIG;IACH,yBAA4B,MAAgB;QAC1C,YAAA,MAAK,YAAC,6BAAsB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC,SAAC;QADvB,YAAM,GAAN,MAAM,CAAU;QAE1C,KAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;;IAChC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,mCAAS,GAAT,UAAU,SAAmB;QAC3B,OAAO,IAAI,eAAe,iCAAK,IAAI,CAAC,MAAM,SAAK,SAAS,QAAE,CAAC;IAC7D,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,kCAAQ,GAAR,UAAS,KAAa;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,oCAAU,GAAV;QACE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACH,sBAAC;AAAD,CAAC,AA9DD,CAAqC,KAAK,GA8DzC;;AAyBD;;;;;;;;GAQG;AACH,MAAM,CAAC,IAAM,UAAU,GAAG;IACxB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,EACL;QACA,OAAA,UAAC,KAAQ;YACP,OAAA,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;QAAhB,CAAgB;IADlB,CACkB;IAEpB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,EACL,UAAK,KAAa;QAClB,OAAA;YACE,OAAA,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAAxC,CAAwC;IAD1C,CAC0C;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,aAAa,EACX,UAAK,SAAgC,EAAE,KAAa;QACpD,OAAA,UAAC,KAAQ;YACP,OAAA,SAAS,CAAC,KAAK,CAAC;gBACd,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAF5C,CAE4C;IAH9C,CAG8C;IAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,GAAG,EACD;QAAK,oBAA6B;aAA7B,UAA6B,EAA7B,qBAA6B,EAA7B,IAA6B;YAA7B,+BAA6B;;QAClC,OAAA,UAAC,KAAQ;YACP,IAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,KAAwB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE,CAAC;gBAAhC,IAAM,SAAS,mBAAA;gBAClB,IAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,OAAX,MAAM,EACA,MAAqD,CAAC,KAAK;yBAC5D,MAAM,EACT;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;IAhBD,CAgBC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,GAAG,EACD;QAAK,oBAA6B;aAA7B,UAA6B,EAA7B,qBAA6B,EAA7B,IAA6B;YAA7B,+BAA6B;;QAClC,OAAA,UAAC,KAAQ;YACP,IAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,KAAwB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE,CAAC;gBAAhC,IAAM,SAAS,mBAAA;gBAClB,IAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,MAAM,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,OAAX,MAAM,EACA,MAAqD,CAAC,KAAK;yBAC5D,MAAM,EACT;gBACJ,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,CAAC;IAhBD,CAgBC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,GAAG,EACD,UAAO,EAAmB;QAC1B,OAAA,UAAC,SAAuB;YACtB,OAAO,UAAC,KAAQ;gBACd,IAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAChC,OAAO,MAAM,CAAC,OAAO;oBACnB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC5B,CAAC,CAAE,MAAqC,CAAC;YAC7C,CAAC,CAAC;QACJ,CAAC;IAPD,CAOC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,OAAO,EACL,UAAK,EAA8B;QACnC,OAAA,UAAC,SAAuB;YACtB,OAAO,UAAC,KAAQ;gBACd,IAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,qDAAqD;oBACrD,IAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtC,8DAA8D;oBAC9D,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,+CAA+C;gBAC/C,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;IAZD,CAYC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,EACN,UAAK,SAAuB;QAC5B,OAAA,UAAC,KAA2B;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IALD,CAKC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,EACN,UAAK,KAA2B;QAA3B,sBAAA,EAAA,2BAA2B;QAChC,OAAA,UAAC,KAA2B;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IALD,CAKC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,KAAK,EACH,UAAK,aAA2B;QAChC,OAAA,UAAC,MAAW;YACV,IAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAM,cAAc,GAAQ,EAAE,CAAC;YAE/B,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,KAAK;gBAC1B,IAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,OAAX,MAAM,EAEF,MACD,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,WAAI,KAAK,gBAAM,GAAG,CAAE,EAApB,CAAoB,CAAC,EACjD;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC;gBAC3B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;IApBD,CAoBC;IAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM;IACJ,uGAAuG;IACvG,UAAgC,UAE7B;QACD,OAAA,UAAC,GAAM;YACL,IAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,IAAI,YAAY,GAAa,IAAI,CAAC;oCAEtB,GAAG,EAAE,SAAS;gBACxB,IAAI,SAAS,EAAE,CAAC;oBACd,kGAAkG;oBAClG,IAAM,MAAM,GAAI,SAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,CAAC,IAAI,OAAX,MAAM,EAEF,MACD,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,GAAW,IAAK,OAAA,UAAG,GAAG,eAAK,GAAG,CAAE,EAAhB,CAAgB,CAAC,EACrD;oBACJ,CAAC;yBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACpC,mDAAmD;wBACnD,YAAY,aAAZ,YAAY,cAAZ,YAAY,IAAZ,YAAY,gBAAU,GAAG,GAAG;wBAC3B,YAAwC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC/D,CAAC;gBACH,CAAC;;YAfH,KAA+B,UAA0B,EAA1B,KAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAA1B,cAA0B,EAA1B,IAA0B;gBAA9C,IAAA,WAAgB,EAAf,GAAG,QAAA,EAAE,SAAS,QAAA;wBAAd,GAAG,EAAE,SAAS;aAgBzB;YAED,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;gBACxB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,GAAG,CAAC;gBAChC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC;IAzBD,CAyBC;CACN,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,IAAM,UAAU,GAAG;IACxB;;;;;;;OAOG;IACH,MAAM,EAAE;QACN,SAAS,EAAE,UAAC,GAAW;YACrB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,CAAC,MAAM,IAAI,GAAG,EAAjB,CAAiB,EAClC,kCAA2B,GAAG,qBAAkB,CACjD;QAHD,CAGC;QAEH,SAAS,EAAE,UAAC,GAAW;YACrB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,CAAC,MAAM,IAAI,GAAG,EAAjB,CAAiB,EAClC,iCAA0B,GAAG,qBAAkB,CAChD;QAHD,CAGC;QAEH,QAAQ,EAAE;YACR,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAArB,CAAqB,EACtC,wBAAwB,CACzB;QAHD,CAGC;QAEH,KAAK,EAAE;YACL,OAAA,UAAU,CAAC,aAAa;YACtB,uDAAuD;YACvD,UAAC,GAAW;gBACV,OAAA,sEAAsE,CAAC,IAAI,CACzE,GAAG,CACJ;YAFD,CAEC,EACH,sBAAsB,CACvB;QAPD,CAOC;QAEH,GAAG,EAAE;YACH,OAAA,UAAU,CAAC,aAAa,CAAC,UAAC,GAAW;gBACnC,IAAI,CAAC;oBACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,CAAC;gBACd,CAAC;gBAAC,WAAM,CAAC;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,EAAE,oBAAoB,CAAC;QAPxB,CAOwB;QAE1B,OAAO,EAAE,UACP,OAAe,EACf,KAAuC;YAAvC,sBAAA,EAAA,uCAAuC;YAEvC,OAAA,UAAU,CAAC,aAAa,CAAC,UAAC,GAAW,IAAK,OAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAjB,CAAiB,EAAE,KAAK,CAAC;QAAnE,CAAmE;QAErE,KAAK,EAAE,UAAC,OAAiB;YACvB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAArB,CAAqB,EACtC,iCAA0B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAC/C;QAHD,CAGC;KACJ;IAED;;OAEG;IACH,MAAM,EAAE;QACN,GAAG,EAAE,UAAC,GAAW;YACf,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,IAAI,GAAG,EAAV,CAAU,EAC3B,kCAA2B,GAAG,CAAE,CACjC;QAHD,CAGC;QAEH,GAAG,EAAE,UAAC,GAAW;YACf,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,IAAI,GAAG,EAAV,CAAU,EAC3B,iCAA0B,GAAG,CAAE,CAChC;QAHD,CAGC;QAEH,QAAQ,EAAE;YACR,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,GAAG,CAAC,EAAP,CAAO,EACxB,yBAAyB,CAC1B;QAHD,CAGC;QAEH,WAAW,EAAE;YACX,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,IAAI,CAAC,EAAR,CAAQ,EACzB,6BAA6B,CAC9B;QAHD,CAGC;QAEH,OAAO,EAAE;YACP,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAArB,CAAqB,EACtC,2BAA2B,CAC5B;QAHD,CAGC;QAEH,OAAO,EAAE,UAAC,GAAW,EAAE,GAAW;YAChC,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAW,IAAK,OAAA,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAxB,CAAwB,EACzC,iCAA0B,GAAG,kBAAQ,GAAG,CAAE,CAC3C;QAHD,CAGC;KACJ;IAED;;OAEG;IACH,KAAK,EAAE;QACL,SAAS,EAAE,UAAK,GAAW;YACzB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAQ,IAAK,OAAA,GAAG,CAAC,MAAM,IAAI,GAAG,EAAjB,CAAiB,EAC/B,mCAA4B,GAAG,WAAQ,CACxC;QAHD,CAGC;QAEH,SAAS,EAAE,UAAK,GAAW;YACzB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAQ,IAAK,OAAA,GAAG,CAAC,MAAM,IAAI,GAAG,EAAjB,CAAiB,EAC/B,kCAA2B,GAAG,WAAQ,CACvC;QAHD,CAGC;QAEH,QAAQ,EAAE;YACR,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAQ,IAAK,OAAA,GAAG,CAAC,MAAM,GAAG,CAAC,EAAd,CAAc,EAC5B,uBAAuB,CACxB;QAHD,CAGC;QAEH,MAAM,EAAE;YACN,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAQ,IAAK,OAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,EAAhC,CAAgC,EAC9C,iCAAiC,CAClC;QAHD,CAGC;KACJ;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,KAAK,EAAE,UAAC,IAAU;YAChB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,CAAO,IAAK,OAAA,CAAC,GAAG,IAAI,EAAR,CAAQ,EACrB,6BAAsB,IAAI,CAAC,WAAW,EAAE,CAAE,CAC3C;QAHD,CAGC;QAEH,MAAM,EAAE,UAAC,IAAU;YACjB,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,CAAO,IAAK,OAAA,CAAC,GAAG,IAAI,EAAR,CAAQ,EACrB,8BAAuB,IAAI,CAAC,WAAW,EAAE,CAAE,CAC5C;QAHD,CAGC;QAEH,MAAM,EAAE;YACN,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,CAAO,IAAK,OAAA,CAAC,GAAG,IAAI,IAAI,EAAE,EAAd,CAAc,EAC3B,4BAA4B,CAC7B;QAHD,CAGC;QAEH,IAAI,EAAE;YACJ,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,CAAO,IAAK,OAAA,CAAC,GAAG,IAAI,IAAI,EAAE,EAAd,CAAc,EAC3B,0BAA0B,CAC3B;QAHD,CAGC;KACJ;IAED;;OAEG;IACH,MAAM,EAAE;QACN,WAAW,EAAE,UAAmB,IAAa;YAC3C,OAAA,UAAU,CAAC,aAAa,CACtB,UAAC,GAAM,IAAK,OAAA,IAAI,IAAI,GAAG,EAAX,CAAW,EACvB,qCAA8B,MAAM,CAAC,IAAI,CAAC,MAAG,CAC9C;QAHD,CAGC;QAEH,8FAA8F;QAC9F,QAAQ,EAAE;YACR,OAAA,UAAU,CAAC,aAAa;YACtB,qFAAqF;YACrF,UAAC,GAAwB,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAA3B,CAA2B,EACzD,wBAAwB,CACzB;QAJD,CAIC;KACJ;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,uGAAuG;AACvG,MAAM,CAAC,IAAM,MAAM,GAAG,UAAgC,UAErD,IAAmB,OAAA,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAA7B,CAA6B,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,IAAM,eAAe,GAC1B,UAAK,SAAuB;IAC5B,OAAA,UAAC,KAAQ;QACP,IAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAO,MAAqD,CAAC,KAAK,CAAC;QACrE,CAAC;IACH,CAAC;AAPD,CAOC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../src/validation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var vitest_1 = require("vitest");
|
|
4
|
+
var validation_mjs_1 = require("./validation.mjs");
|
|
5
|
+
(0, vitest_1.describe)('ValidationError', function () {
|
|
6
|
+
(0, vitest_1.it)('creates error with multiple messages', function () {
|
|
7
|
+
var error = new validation_mjs_1.ValidationError(['Error 1', 'Error 2']);
|
|
8
|
+
(0, vitest_1.expect)(error.message).toBe('Validation failed: Error 1, Error 2');
|
|
9
|
+
(0, vitest_1.expect)(error.name).toBe('ValidationError');
|
|
10
|
+
(0, vitest_1.expect)(error.errors).toEqual(['Error 1', 'Error 2']);
|
|
11
|
+
});
|
|
12
|
+
(0, vitest_1.it)('adds errors to existing error', function () {
|
|
13
|
+
var error = new validation_mjs_1.ValidationError(['Error 1']);
|
|
14
|
+
var newError = error.addErrors(['Error 2', 'Error 3']);
|
|
15
|
+
(0, vitest_1.expect)(newError.errors).toEqual(['Error 1', 'Error 2', 'Error 3']);
|
|
16
|
+
(0, vitest_1.expect)(error.errors).toEqual(['Error 1']); // Original unchanged
|
|
17
|
+
});
|
|
18
|
+
(0, vitest_1.it)('checks if error contains specific message', function () {
|
|
19
|
+
var error = new validation_mjs_1.ValidationError(['Error 1', 'Error 2']);
|
|
20
|
+
(0, vitest_1.expect)(error.hasError('Error 1')).toBe(true);
|
|
21
|
+
(0, vitest_1.expect)(error.hasError('Error 3')).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.it)('gets first error message', function () {
|
|
24
|
+
var error = new validation_mjs_1.ValidationError(['Error 1', 'Error 2']);
|
|
25
|
+
(0, vitest_1.expect)(error.firstError()).toBe('Error 1');
|
|
26
|
+
var emptyError = new validation_mjs_1.ValidationError([]);
|
|
27
|
+
(0, vitest_1.expect)(emptyError.firstError()).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.describe)('Validation combinators', function () {
|
|
31
|
+
(0, vitest_1.describe)('success', function () {
|
|
32
|
+
(0, vitest_1.it)('creates validator that always succeeds', function () {
|
|
33
|
+
var validator = validation_mjs_1.Validation.success();
|
|
34
|
+
var result = validator('test');
|
|
35
|
+
(0, vitest_1.expect)(result.success).toBe(true);
|
|
36
|
+
if (result.success) {
|
|
37
|
+
(0, vitest_1.expect)(result.data).toBe('test');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.describe)('failure', function () {
|
|
42
|
+
(0, vitest_1.it)('creates validator that always fails', function () {
|
|
43
|
+
var validator = validation_mjs_1.Validation.failure('Always fails');
|
|
44
|
+
var result = validator('test');
|
|
45
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
46
|
+
if (!result.success) {
|
|
47
|
+
(0, vitest_1.expect)(result.error.errors).toEqual(['Always fails']);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.describe)('fromPredicate', function () {
|
|
52
|
+
(0, vitest_1.it)('creates validator from predicate function', function () {
|
|
53
|
+
var isPositive = validation_mjs_1.Validation.fromPredicate(function (n) { return n > 0; }, 'Must be positive');
|
|
54
|
+
var success = isPositive(5);
|
|
55
|
+
(0, vitest_1.expect)(success.success).toBe(true);
|
|
56
|
+
if (success.success) {
|
|
57
|
+
(0, vitest_1.expect)(success.data).toBe(5);
|
|
58
|
+
}
|
|
59
|
+
var failure = isPositive(-5);
|
|
60
|
+
(0, vitest_1.expect)(failure.success).toBe(false);
|
|
61
|
+
if (!failure.success) {
|
|
62
|
+
(0, vitest_1.expect)(failure.error.errors).toEqual(['Must be positive']);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
(0, vitest_1.describe)('all', function () {
|
|
67
|
+
(0, vitest_1.it)('combines validators with AND logic', function () {
|
|
68
|
+
var minLength = validation_mjs_1.validators.string.minLength(3);
|
|
69
|
+
var maxLength = validation_mjs_1.validators.string.maxLength(10);
|
|
70
|
+
var combined = validation_mjs_1.Validation.all(minLength, maxLength);
|
|
71
|
+
var success = combined('hello');
|
|
72
|
+
(0, vitest_1.expect)(success.success).toBe(true);
|
|
73
|
+
var tooShort = combined('hi');
|
|
74
|
+
(0, vitest_1.expect)(tooShort.success).toBe(false);
|
|
75
|
+
if (!tooShort.success) {
|
|
76
|
+
(0, vitest_1.expect)(tooShort.error.errors).toContain('String must be at least 3 characters long');
|
|
77
|
+
}
|
|
78
|
+
var tooLong = combined('this is too long');
|
|
79
|
+
(0, vitest_1.expect)(tooLong.success).toBe(false);
|
|
80
|
+
if (!tooLong.success) {
|
|
81
|
+
(0, vitest_1.expect)(tooLong.error.errors).toContain('String must be at most 10 characters long');
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
(0, vitest_1.it)('accumulates all errors', function () {
|
|
85
|
+
var minLength = validation_mjs_1.validators.string.minLength(5);
|
|
86
|
+
var email = validation_mjs_1.validators.string.email();
|
|
87
|
+
var combined = validation_mjs_1.Validation.all(minLength, email);
|
|
88
|
+
var result = combined('a@');
|
|
89
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
90
|
+
if (!result.success) {
|
|
91
|
+
(0, vitest_1.expect)(result.error.errors).toHaveLength(2);
|
|
92
|
+
(0, vitest_1.expect)(result.error.errors).toContain('String must be at least 5 characters long');
|
|
93
|
+
(0, vitest_1.expect)(result.error.errors).toContain('Invalid email format');
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
(0, vitest_1.describe)('any', function () {
|
|
98
|
+
(0, vitest_1.it)('combines validators with OR logic', function () {
|
|
99
|
+
var isEmail = validation_mjs_1.validators.string.email();
|
|
100
|
+
var isUrl = validation_mjs_1.validators.string.url();
|
|
101
|
+
var combined = validation_mjs_1.Validation.any(isEmail, isUrl);
|
|
102
|
+
var email = combined('test@example.com');
|
|
103
|
+
(0, vitest_1.expect)(email.success).toBe(true);
|
|
104
|
+
var url = combined('https://example.com');
|
|
105
|
+
(0, vitest_1.expect)(url.success).toBe(true);
|
|
106
|
+
var neither = combined('not-email-or-url');
|
|
107
|
+
(0, vitest_1.expect)(neither.success).toBe(false);
|
|
108
|
+
if (!neither.success) {
|
|
109
|
+
(0, vitest_1.expect)(neither.error.errors).toHaveLength(2);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
(0, vitest_1.describe)('map', function () {
|
|
114
|
+
(0, vitest_1.it)('transforms validated value', function () {
|
|
115
|
+
var toUpperCase = validation_mjs_1.Validation.map(function (s) { return s.toUpperCase(); });
|
|
116
|
+
var validator = toUpperCase(validation_mjs_1.validators.string.nonEmpty());
|
|
117
|
+
var result = validator('hello');
|
|
118
|
+
(0, vitest_1.expect)(result.success).toBe(true);
|
|
119
|
+
if (result.success) {
|
|
120
|
+
(0, vitest_1.expect)(result.data).toBe('HELLO');
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
(0, vitest_1.it)('preserves errors', function () {
|
|
124
|
+
var toUpperCase = validation_mjs_1.Validation.map(function (s) { return s.toUpperCase(); });
|
|
125
|
+
var validator = toUpperCase(validation_mjs_1.validators.string.nonEmpty());
|
|
126
|
+
var result = validator(' ');
|
|
127
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
128
|
+
if (!result.success) {
|
|
129
|
+
(0, vitest_1.expect)(result.error.errors).toContain('String cannot be empty');
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.describe)('flatMap', function () {
|
|
134
|
+
(0, vitest_1.it)('chains validators based on value', function () {
|
|
135
|
+
var validateAge = validation_mjs_1.Validation.flatMap(function (age) {
|
|
136
|
+
if (age < 18) {
|
|
137
|
+
return validation_mjs_1.validators.number.min(13); // Teen validation
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return validation_mjs_1.validators.number.max(120); // Adult validation
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
var teenValidator = validateAge(validation_mjs_1.validators.number.positive());
|
|
144
|
+
var validTeen = teenValidator(15);
|
|
145
|
+
(0, vitest_1.expect)(validTeen.success).toBe(true);
|
|
146
|
+
var invalidTeen = teenValidator(10);
|
|
147
|
+
(0, vitest_1.expect)(invalidTeen.success).toBe(false);
|
|
148
|
+
var validAdult = teenValidator(50);
|
|
149
|
+
(0, vitest_1.expect)(validAdult.success).toBe(true);
|
|
150
|
+
var invalidAdult = teenValidator(150);
|
|
151
|
+
(0, vitest_1.expect)(invalidAdult.success).toBe(false);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
(0, vitest_1.describe)('optional', function () {
|
|
155
|
+
(0, vitest_1.it)('allows null and undefined', function () {
|
|
156
|
+
var validator = validation_mjs_1.Validation.optional(validation_mjs_1.validators.string.email());
|
|
157
|
+
(0, vitest_1.expect)(validator(null).success).toBe(true);
|
|
158
|
+
(0, vitest_1.expect)(validator(undefined).success).toBe(true);
|
|
159
|
+
var valid = validator('test@example.com');
|
|
160
|
+
(0, vitest_1.expect)(valid.success).toBe(true);
|
|
161
|
+
var invalid = validator('not-email');
|
|
162
|
+
(0, vitest_1.expect)(invalid.success).toBe(false);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.describe)('required', function () {
|
|
166
|
+
(0, vitest_1.it)('fails on null and undefined', function () {
|
|
167
|
+
var validator = validation_mjs_1.Validation.required();
|
|
168
|
+
var nullResult = validator(null);
|
|
169
|
+
(0, vitest_1.expect)(nullResult.success).toBe(false);
|
|
170
|
+
if (!nullResult.success) {
|
|
171
|
+
(0, vitest_1.expect)(nullResult.error.errors).toContain('Value is required');
|
|
172
|
+
}
|
|
173
|
+
var undefinedResult = validator(undefined);
|
|
174
|
+
(0, vitest_1.expect)(undefinedResult.success).toBe(false);
|
|
175
|
+
var valid = validator('value');
|
|
176
|
+
(0, vitest_1.expect)(valid.success).toBe(true);
|
|
177
|
+
});
|
|
178
|
+
(0, vitest_1.it)('uses custom error message', function () {
|
|
179
|
+
var validator = validation_mjs_1.Validation.required('Custom required message');
|
|
180
|
+
var result = validator(null);
|
|
181
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
182
|
+
if (!result.success) {
|
|
183
|
+
(0, vitest_1.expect)(result.error.errors).toContain('Custom required message');
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
(0, vitest_1.describe)('array', function () {
|
|
188
|
+
(0, vitest_1.it)('validates each item in array', function () {
|
|
189
|
+
var validator = validation_mjs_1.Validation.array(validation_mjs_1.validators.number.positive());
|
|
190
|
+
var valid = validator([1, 2, 3]);
|
|
191
|
+
(0, vitest_1.expect)(valid.success).toBe(true);
|
|
192
|
+
if (valid.success) {
|
|
193
|
+
(0, vitest_1.expect)(valid.data).toEqual([1, 2, 3]);
|
|
194
|
+
}
|
|
195
|
+
var invalid = validator([1, -2, 3]);
|
|
196
|
+
(0, vitest_1.expect)(invalid.success).toBe(false);
|
|
197
|
+
if (!invalid.success) {
|
|
198
|
+
(0, vitest_1.expect)(invalid.error.errors).toContain('[1]: Number must be positive');
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
(0, vitest_1.it)('includes index in error messages', function () {
|
|
202
|
+
var validator = validation_mjs_1.Validation.array(validation_mjs_1.validators.string.email());
|
|
203
|
+
var result = validator(['valid@email.com', 'invalid', 'another@email.com']);
|
|
204
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
205
|
+
if (!result.success) {
|
|
206
|
+
(0, vitest_1.expect)(result.error.errors).toContain('[1]: Invalid email format');
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
(0, vitest_1.describe)('object', function () {
|
|
211
|
+
(0, vitest_1.it)('validates object properties', function () {
|
|
212
|
+
var userValidator = validation_mjs_1.Validation.object({
|
|
213
|
+
name: validation_mjs_1.validators.string.nonEmpty(),
|
|
214
|
+
age: validation_mjs_1.validators.number.positive(),
|
|
215
|
+
email: validation_mjs_1.validators.string.email(),
|
|
216
|
+
});
|
|
217
|
+
var valid = userValidator({
|
|
218
|
+
name: 'John',
|
|
219
|
+
age: 25,
|
|
220
|
+
email: 'john@example.com',
|
|
221
|
+
});
|
|
222
|
+
(0, vitest_1.expect)(valid.success).toBe(true);
|
|
223
|
+
if (valid.success) {
|
|
224
|
+
(0, vitest_1.expect)(valid.data).toEqual({
|
|
225
|
+
name: 'John',
|
|
226
|
+
age: 25,
|
|
227
|
+
email: 'john@example.com',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
(0, vitest_1.it)('accumulates errors with property names', function () {
|
|
232
|
+
var userValidator = validation_mjs_1.Validation.object({
|
|
233
|
+
name: validation_mjs_1.validators.string.nonEmpty(),
|
|
234
|
+
age: validation_mjs_1.validators.number.positive(),
|
|
235
|
+
});
|
|
236
|
+
var result = userValidator({
|
|
237
|
+
name: '',
|
|
238
|
+
age: -5,
|
|
239
|
+
});
|
|
240
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
241
|
+
if (!result.success) {
|
|
242
|
+
(0, vitest_1.expect)(result.error.errors).toContain('name: String cannot be empty');
|
|
243
|
+
(0, vitest_1.expect)(result.error.errors).toContain('age: Number must be positive');
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
(0, vitest_1.it)('ignores properties without validators', function () {
|
|
247
|
+
var validator = validation_mjs_1.Validation.object({
|
|
248
|
+
name: validation_mjs_1.validators.string.nonEmpty(),
|
|
249
|
+
});
|
|
250
|
+
var input = {
|
|
251
|
+
name: 'John',
|
|
252
|
+
extra: 'ignored',
|
|
253
|
+
};
|
|
254
|
+
var result = validator(input);
|
|
255
|
+
(0, vitest_1.expect)(result.success).toBe(true);
|
|
256
|
+
if (result.success) {
|
|
257
|
+
(0, vitest_1.expect)(result.data).toEqual({
|
|
258
|
+
name: 'John',
|
|
259
|
+
extra: 'ignored',
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
(0, vitest_1.describe)('Common validators', function () {
|
|
266
|
+
(0, vitest_1.describe)('string validators', function () {
|
|
267
|
+
(0, vitest_1.it)('validates minimum length', function () {
|
|
268
|
+
var validator = validation_mjs_1.validators.string.minLength(5);
|
|
269
|
+
(0, vitest_1.expect)(validator('hello').success).toBe(true);
|
|
270
|
+
(0, vitest_1.expect)(validator('hi').success).toBe(false);
|
|
271
|
+
});
|
|
272
|
+
(0, vitest_1.it)('validates maximum length', function () {
|
|
273
|
+
var validator = validation_mjs_1.validators.string.maxLength(5);
|
|
274
|
+
(0, vitest_1.expect)(validator('hello').success).toBe(true);
|
|
275
|
+
(0, vitest_1.expect)(validator('too long').success).toBe(false);
|
|
276
|
+
});
|
|
277
|
+
(0, vitest_1.it)('validates non-empty strings', function () {
|
|
278
|
+
var validator = validation_mjs_1.validators.string.nonEmpty();
|
|
279
|
+
(0, vitest_1.expect)(validator('hello').success).toBe(true);
|
|
280
|
+
(0, vitest_1.expect)(validator(' ').success).toBe(false);
|
|
281
|
+
(0, vitest_1.expect)(validator('').success).toBe(false);
|
|
282
|
+
});
|
|
283
|
+
(0, vitest_1.it)('validates email format', function () {
|
|
284
|
+
var validator = validation_mjs_1.validators.string.email();
|
|
285
|
+
(0, vitest_1.expect)(validator('test@example.com').success).toBe(true);
|
|
286
|
+
(0, vitest_1.expect)(validator('user.name+tag@domain.co.uk').success).toBe(true);
|
|
287
|
+
(0, vitest_1.expect)(validator('invalid-email').success).toBe(false);
|
|
288
|
+
(0, vitest_1.expect)(validator('@example.com').success).toBe(false);
|
|
289
|
+
(0, vitest_1.expect)(validator('test@').success).toBe(false);
|
|
290
|
+
});
|
|
291
|
+
(0, vitest_1.it)('validates URL format', function () {
|
|
292
|
+
var validator = validation_mjs_1.validators.string.url();
|
|
293
|
+
(0, vitest_1.expect)(validator('https://example.com').success).toBe(true);
|
|
294
|
+
(0, vitest_1.expect)(validator('http://localhost:3000').success).toBe(true);
|
|
295
|
+
(0, vitest_1.expect)(validator('ftp://files.example.com').success).toBe(true);
|
|
296
|
+
(0, vitest_1.expect)(validator('not-a-url').success).toBe(false);
|
|
297
|
+
(0, vitest_1.expect)(validator('://invalid').success).toBe(false);
|
|
298
|
+
});
|
|
299
|
+
(0, vitest_1.it)('validates regex matches', function () {
|
|
300
|
+
var validator = validation_mjs_1.validators.string.matches(/^[A-Z]{3}-\d{3}$/);
|
|
301
|
+
(0, vitest_1.expect)(validator('ABC-123').success).toBe(true);
|
|
302
|
+
(0, vitest_1.expect)(validator('abc-123').success).toBe(false);
|
|
303
|
+
var customError = validation_mjs_1.validators.string.matches(/^\d+$/, 'Must be numeric');
|
|
304
|
+
var result = customError('abc');
|
|
305
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
306
|
+
if (!result.success) {
|
|
307
|
+
(0, vitest_1.expect)(result.error.errors).toContain('Must be numeric');
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
(0, vitest_1.it)('validates oneOf options', function () {
|
|
311
|
+
var validator = validation_mjs_1.validators.string.oneOf(['red', 'green', 'blue']);
|
|
312
|
+
(0, vitest_1.expect)(validator('red').success).toBe(true);
|
|
313
|
+
(0, vitest_1.expect)(validator('yellow').success).toBe(false);
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
(0, vitest_1.describe)('number validators', function () {
|
|
317
|
+
(0, vitest_1.it)('validates minimum value', function () {
|
|
318
|
+
var validator = validation_mjs_1.validators.number.min(10);
|
|
319
|
+
(0, vitest_1.expect)(validator(15).success).toBe(true);
|
|
320
|
+
(0, vitest_1.expect)(validator(10).success).toBe(true);
|
|
321
|
+
(0, vitest_1.expect)(validator(5).success).toBe(false);
|
|
322
|
+
});
|
|
323
|
+
(0, vitest_1.it)('validates maximum value', function () {
|
|
324
|
+
var validator = validation_mjs_1.validators.number.max(10);
|
|
325
|
+
(0, vitest_1.expect)(validator(5).success).toBe(true);
|
|
326
|
+
(0, vitest_1.expect)(validator(10).success).toBe(true);
|
|
327
|
+
(0, vitest_1.expect)(validator(15).success).toBe(false);
|
|
328
|
+
});
|
|
329
|
+
(0, vitest_1.it)('validates positive numbers', function () {
|
|
330
|
+
var validator = validation_mjs_1.validators.number.positive();
|
|
331
|
+
(0, vitest_1.expect)(validator(5).success).toBe(true);
|
|
332
|
+
(0, vitest_1.expect)(validator(0).success).toBe(false);
|
|
333
|
+
(0, vitest_1.expect)(validator(-5).success).toBe(false);
|
|
334
|
+
});
|
|
335
|
+
(0, vitest_1.it)('validates non-negative numbers', function () {
|
|
336
|
+
var validator = validation_mjs_1.validators.number.nonNegative();
|
|
337
|
+
(0, vitest_1.expect)(validator(5).success).toBe(true);
|
|
338
|
+
(0, vitest_1.expect)(validator(0).success).toBe(true);
|
|
339
|
+
(0, vitest_1.expect)(validator(-5).success).toBe(false);
|
|
340
|
+
});
|
|
341
|
+
(0, vitest_1.it)('validates integers', function () {
|
|
342
|
+
var validator = validation_mjs_1.validators.number.integer();
|
|
343
|
+
(0, vitest_1.expect)(validator(5).success).toBe(true);
|
|
344
|
+
(0, vitest_1.expect)(validator(5.5).success).toBe(false);
|
|
345
|
+
(0, vitest_1.expect)(validator(-10).success).toBe(true);
|
|
346
|
+
});
|
|
347
|
+
(0, vitest_1.it)('validates range', function () {
|
|
348
|
+
var validator = validation_mjs_1.validators.number.between(1, 10);
|
|
349
|
+
(0, vitest_1.expect)(validator(5).success).toBe(true);
|
|
350
|
+
(0, vitest_1.expect)(validator(1).success).toBe(true);
|
|
351
|
+
(0, vitest_1.expect)(validator(10).success).toBe(true);
|
|
352
|
+
(0, vitest_1.expect)(validator(0).success).toBe(false);
|
|
353
|
+
(0, vitest_1.expect)(validator(11).success).toBe(false);
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
(0, vitest_1.describe)('array validators', function () {
|
|
357
|
+
(0, vitest_1.it)('validates minimum length', function () {
|
|
358
|
+
var validator = validation_mjs_1.validators.array.minLength(2);
|
|
359
|
+
(0, vitest_1.expect)(validator([1, 2, 3]).success).toBe(true);
|
|
360
|
+
(0, vitest_1.expect)(validator([1]).success).toBe(false);
|
|
361
|
+
});
|
|
362
|
+
(0, vitest_1.it)('validates maximum length', function () {
|
|
363
|
+
var validator = validation_mjs_1.validators.array.maxLength(3);
|
|
364
|
+
(0, vitest_1.expect)(validator([1, 2]).success).toBe(true);
|
|
365
|
+
(0, vitest_1.expect)(validator([1, 2, 3, 4]).success).toBe(false);
|
|
366
|
+
});
|
|
367
|
+
(0, vitest_1.it)('validates non-empty arrays', function () {
|
|
368
|
+
var validator = validation_mjs_1.validators.array.nonEmpty();
|
|
369
|
+
(0, vitest_1.expect)(validator([1]).success).toBe(true);
|
|
370
|
+
(0, vitest_1.expect)(validator([]).success).toBe(false);
|
|
371
|
+
});
|
|
372
|
+
(0, vitest_1.it)('validates unique items', function () {
|
|
373
|
+
var validator = validation_mjs_1.validators.array.unique();
|
|
374
|
+
(0, vitest_1.expect)(validator([1, 2, 3]).success).toBe(true);
|
|
375
|
+
(0, vitest_1.expect)(validator([1, 2, 2, 3]).success).toBe(false);
|
|
376
|
+
(0, vitest_1.expect)(validator(['a', 'b', 'c']).success).toBe(true);
|
|
377
|
+
(0, vitest_1.expect)(validator(['a', 'b', 'b']).success).toBe(false);
|
|
378
|
+
});
|
|
379
|
+
});
|
|
380
|
+
(0, vitest_1.describe)('date validators', function () {
|
|
381
|
+
(0, vitest_1.it)('validates after date', function () {
|
|
382
|
+
var cutoff = new Date('2023-01-01');
|
|
383
|
+
var validator = validation_mjs_1.validators.date.after(cutoff);
|
|
384
|
+
(0, vitest_1.expect)(validator(new Date('2023-06-01')).success).toBe(true);
|
|
385
|
+
(0, vitest_1.expect)(validator(new Date('2022-06-01')).success).toBe(false);
|
|
386
|
+
});
|
|
387
|
+
(0, vitest_1.it)('validates before date', function () {
|
|
388
|
+
var cutoff = new Date('2023-01-01');
|
|
389
|
+
var validator = validation_mjs_1.validators.date.before(cutoff);
|
|
390
|
+
(0, vitest_1.expect)(validator(new Date('2022-06-01')).success).toBe(true);
|
|
391
|
+
(0, vitest_1.expect)(validator(new Date('2023-06-01')).success).toBe(false);
|
|
392
|
+
});
|
|
393
|
+
(0, vitest_1.it)('validates future dates', function () {
|
|
394
|
+
var validator = validation_mjs_1.validators.date.future();
|
|
395
|
+
var future = new Date();
|
|
396
|
+
future.setFullYear(future.getFullYear() + 1);
|
|
397
|
+
(0, vitest_1.expect)(validator(future).success).toBe(true);
|
|
398
|
+
(0, vitest_1.expect)(validator(new Date('2020-01-01')).success).toBe(false);
|
|
399
|
+
});
|
|
400
|
+
(0, vitest_1.it)('validates past dates', function () {
|
|
401
|
+
var validator = validation_mjs_1.validators.date.past();
|
|
402
|
+
var past = new Date('2020-01-01');
|
|
403
|
+
(0, vitest_1.expect)(validator(past).success).toBe(true);
|
|
404
|
+
var future = new Date();
|
|
405
|
+
future.setFullYear(future.getFullYear() + 1);
|
|
406
|
+
(0, vitest_1.expect)(validator(future).success).toBe(false);
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
(0, vitest_1.describe)('object validators', function () {
|
|
410
|
+
(0, vitest_1.it)('validates property existence', function () {
|
|
411
|
+
var validator = validation_mjs_1.validators.object.hasProperty('name');
|
|
412
|
+
(0, vitest_1.expect)(validator({ name: 'John' }).success).toBe(true);
|
|
413
|
+
(0, vitest_1.expect)(validator({}).success).toBe(false);
|
|
414
|
+
});
|
|
415
|
+
(0, vitest_1.it)('validates non-empty objects', function () {
|
|
416
|
+
var validator = validation_mjs_1.validators.object.notEmpty();
|
|
417
|
+
(0, vitest_1.expect)(validator({ a: 1 }).success).toBe(true);
|
|
418
|
+
(0, vitest_1.expect)(validator({}).success).toBe(false);
|
|
419
|
+
});
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
(0, vitest_1.describe)('schema helper', function () {
|
|
423
|
+
(0, vitest_1.it)('creates object validator from schema', function () {
|
|
424
|
+
var userSchema = (0, validation_mjs_1.schema)({
|
|
425
|
+
name: validation_mjs_1.validators.string.nonEmpty(),
|
|
426
|
+
age: validation_mjs_1.validators.number.min(18),
|
|
427
|
+
email: validation_mjs_1.validators.string.email(),
|
|
428
|
+
});
|
|
429
|
+
var valid = userSchema({
|
|
430
|
+
name: 'John Doe',
|
|
431
|
+
age: 25,
|
|
432
|
+
email: 'john@example.com',
|
|
433
|
+
});
|
|
434
|
+
(0, vitest_1.expect)(valid.success).toBe(true);
|
|
435
|
+
var invalid = userSchema({
|
|
436
|
+
name: '',
|
|
437
|
+
age: 16,
|
|
438
|
+
email: 'invalid',
|
|
439
|
+
});
|
|
440
|
+
(0, vitest_1.expect)(invalid.success).toBe(false);
|
|
441
|
+
if (!invalid.success) {
|
|
442
|
+
(0, vitest_1.expect)(invalid.error.errors).toHaveLength(3);
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
});
|
|
446
|
+
(0, vitest_1.describe)('validateOrThrow', function () {
|
|
447
|
+
(0, vitest_1.it)('returns validated value on success', function () {
|
|
448
|
+
var validator = validation_mjs_1.validators.string.email();
|
|
449
|
+
var validate = (0, validation_mjs_1.validateOrThrow)(validator);
|
|
450
|
+
var result = validate('test@example.com');
|
|
451
|
+
(0, vitest_1.expect)(result).toBe('test@example.com');
|
|
452
|
+
});
|
|
453
|
+
(0, vitest_1.it)('throws ValidationError on failure', function () {
|
|
454
|
+
var validator = validation_mjs_1.validators.string.email();
|
|
455
|
+
var validate = (0, validation_mjs_1.validateOrThrow)(validator);
|
|
456
|
+
(0, vitest_1.expect)(function () { return validate('invalid'); }).toThrow(validation_mjs_1.ValidationError);
|
|
457
|
+
(0, vitest_1.expect)(function () { return validate('invalid'); }).toThrow('Invalid email format');
|
|
458
|
+
});
|
|
459
|
+
});
|
|
460
|
+
(0, vitest_1.describe)('Complex validation scenarios', function () {
|
|
461
|
+
(0, vitest_1.it)('validates nested objects', function () {
|
|
462
|
+
var addressValidator = (0, validation_mjs_1.schema)({
|
|
463
|
+
street: validation_mjs_1.validators.string.nonEmpty(),
|
|
464
|
+
city: validation_mjs_1.validators.string.nonEmpty(),
|
|
465
|
+
zipCode: validation_mjs_1.validators.string.matches(/^\d{5}$/),
|
|
466
|
+
});
|
|
467
|
+
var userValidator = (0, validation_mjs_1.schema)({
|
|
468
|
+
name: validation_mjs_1.validators.string.nonEmpty(),
|
|
469
|
+
age: validation_mjs_1.validators.number.min(18),
|
|
470
|
+
address: addressValidator,
|
|
471
|
+
});
|
|
472
|
+
var valid = userValidator({
|
|
473
|
+
name: 'John',
|
|
474
|
+
age: 25,
|
|
475
|
+
address: {
|
|
476
|
+
street: '123 Main St',
|
|
477
|
+
city: 'New York',
|
|
478
|
+
zipCode: '10001',
|
|
479
|
+
},
|
|
480
|
+
});
|
|
481
|
+
(0, vitest_1.expect)(valid.success).toBe(true);
|
|
482
|
+
});
|
|
483
|
+
(0, vitest_1.it)('validates arrays of objects', function () {
|
|
484
|
+
var itemValidator = (0, validation_mjs_1.schema)({
|
|
485
|
+
name: validation_mjs_1.validators.string.nonEmpty(),
|
|
486
|
+
price: validation_mjs_1.validators.number.positive(),
|
|
487
|
+
});
|
|
488
|
+
var orderValidator = (0, validation_mjs_1.schema)({
|
|
489
|
+
items: validation_mjs_1.Validation.array(itemValidator),
|
|
490
|
+
total: validation_mjs_1.validators.number.positive(),
|
|
491
|
+
});
|
|
492
|
+
var result = orderValidator({
|
|
493
|
+
items: [
|
|
494
|
+
{ name: 'Book', price: 15.99 },
|
|
495
|
+
{ name: '', price: -5 },
|
|
496
|
+
],
|
|
497
|
+
total: 15.99,
|
|
498
|
+
});
|
|
499
|
+
(0, vitest_1.expect)(result.success).toBe(false);
|
|
500
|
+
if (!result.success) {
|
|
501
|
+
(0, vitest_1.expect)(result.error.errors).toContain('items: [1]: name: String cannot be empty');
|
|
502
|
+
(0, vitest_1.expect)(result.error.errors).toContain('items: [1]: price: Number must be positive');
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
(0, vitest_1.it)('combines multiple validation rules', function () {
|
|
506
|
+
var passwordValidator = validation_mjs_1.Validation.all(validation_mjs_1.validators.string.minLength(8), validation_mjs_1.validators.string.matches(/[A-Z]/, 'Must contain uppercase letter'), validation_mjs_1.validators.string.matches(/[a-z]/, 'Must contain lowercase letter'), validation_mjs_1.validators.string.matches(/[0-9]/, 'Must contain number'), validation_mjs_1.validators.string.matches(/[!@#$%^&*]/, 'Must contain special character'));
|
|
507
|
+
var weak = passwordValidator('password');
|
|
508
|
+
(0, vitest_1.expect)(weak.success).toBe(false);
|
|
509
|
+
if (!weak.success) {
|
|
510
|
+
(0, vitest_1.expect)(weak.error.errors).toContain('Must contain uppercase letter');
|
|
511
|
+
(0, vitest_1.expect)(weak.error.errors).toContain('Must contain number');
|
|
512
|
+
(0, vitest_1.expect)(weak.error.errors).toContain('Must contain special character');
|
|
513
|
+
}
|
|
514
|
+
var strong = passwordValidator('Password123!');
|
|
515
|
+
(0, vitest_1.expect)(strong.success).toBe(true);
|
|
516
|
+
});
|
|
517
|
+
});
|
|
518
|
+
//# sourceMappingURL=validation.test.js.map
|