@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
3333 } ;
3434} ) ( ) ;
3535Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
36- exports . FormValidator = void 0 ;
36+ exports . formValidator = exports . FormValidator = void 0 ;
3737const validators = __importStar ( require ( "./validators" ) ) ;
3838class FormValidator {
3939 validators ;
@@ -42,6 +42,42 @@ class FormValidator {
4242 this . validators = { ...validators } ;
4343 this . asyncValidators = { } ;
4444 }
45+ // Add custom sync validator
46+ addValidator ( name , validator ) {
47+ this . validators [ name ] = validator ;
48+ }
49+ // Add custom async validator
50+ addAsyncValidator ( name , validator ) {
51+ this . asyncValidators [ name ] = validator ;
52+ }
53+ // Public validation method
54+ async validateForm ( formData , schema ) {
55+ const errors = [ ] ;
56+ const asyncTasks = [ ] ;
57+ for ( const [ field , rules ] of Object . entries ( schema ) ) {
58+ const value = formData [ field ] ;
59+ // Sync validation
60+ for ( const rule of rules . filter ( r => ! r . async ) ) {
61+ const validator = this . validators [ rule . type ] ;
62+ if ( validator && ! validator ( value , rule . options ) ) {
63+ errors . push ( {
64+ field,
65+ message : rule . message || `Invalid ${ field } `
66+ } ) ;
67+ }
68+ }
69+ // Async validation
70+ const asyncRules = rules . filter ( r => r . async ) ;
71+ if ( asyncRules . length ) {
72+ asyncTasks . push ( this . validateAsync ( field , value , asyncRules ) ) ;
73+ }
74+ }
75+ const asyncErrors = await Promise . all ( asyncTasks ) ;
76+ return {
77+ isValid : errors . length === 0 && asyncErrors . flat ( ) . length === 0 ,
78+ errors : [ ...errors , ...asyncErrors . flat ( ) ]
79+ } ;
80+ }
4581 async validateAsync ( field , value , rules ) {
4682 const errors = [ ] ;
4783 for ( const rule of rules ) {
@@ -57,3 +93,4 @@ class FormValidator {
5793 }
5894}
5995exports . FormValidator = FormValidator ;
96+ exports . formValidator = new FormValidator ( ) ;
0 commit comments