@@ -677,112 +677,242 @@ common.getISOWeeksInYear = function(year) {
677
677
* @param {string } argProperties.has-char - should string property has any latin character in it
678
678
* @param {string } argProperties.has-upchar - should string property has any upper cased latin character in it
679
679
* @param {string } argProperties.has-special - should string property has any none latin character in it
680
- * @returns {object|false } validated args or false if args do not pass validation
680
+ * @param {boolean } returnErrors - return error details as array or only boolean result
681
+ * @returns {object } validated args in obj property, or false as result property if args do not pass validation and errors array
681
682
*/
682
- common . validateArgs = function ( args , argProperties ) {
683
+ common . validateArgs = function ( args , argProperties , returnErrors ) {
683
684
684
- var returnObj = { } ;
685
+ if ( arguments . length === 2 ) {
686
+ returnErrors = false ;
687
+ }
688
+
689
+ var returnObj ;
690
+
691
+ if ( returnErrors ) {
692
+ returnObj = {
693
+ result : true ,
694
+ errors : [ ] ,
695
+ obj : { }
696
+ } ;
697
+ }
698
+ else {
699
+ returnObj = { } ;
700
+ }
685
701
686
702
if ( ! args ) {
687
- return false ;
703
+ if ( returnErrors ) {
704
+ returnObj . result = false ;
705
+ returnObj . errors . push ( "Missing 'args' parameter" ) ;
706
+ delete returnObj . obj ;
707
+ return returnObj ;
708
+ }
709
+ else {
710
+ return false ;
711
+ }
688
712
}
689
713
690
714
for ( var arg in argProperties ) {
715
+ var argState = true ;
691
716
if ( argProperties [ arg ] . required ) {
692
717
if ( args [ arg ] === void 0 ) {
693
- return false ;
718
+ if ( returnErrors ) {
719
+ returnObj . errors . push ( "Missing " + arg + " argument" ) ;
720
+ returnObj . result = false ;
721
+ argState = false ;
722
+ }
723
+ else {
724
+ return false ;
725
+ }
694
726
}
695
727
}
696
-
697
728
if ( args [ arg ] !== void 0 ) {
729
+
698
730
if ( argProperties [ arg ] . type ) {
699
731
if ( argProperties [ arg ] . type === 'Number' || argProperties [ arg ] . type === 'String' ) {
700
732
if ( toString . call ( args [ arg ] ) !== '[object ' + argProperties [ arg ] . type + ']' ) {
701
- return false ;
733
+ if ( returnErrors ) {
734
+ returnObj . errors . push ( "Invalid type for " + arg ) ;
735
+ returnObj . result = false ;
736
+ argState = false ;
737
+ }
738
+ else {
739
+ return false ;
740
+ }
702
741
}
703
742
}
704
743
else if ( argProperties [ arg ] . type === 'URL' ) {
705
744
if ( toString . call ( args [ arg ] ) !== '[object String]' ) {
706
- return false ;
745
+ if ( returnErrors ) {
746
+ returnObj . errors . push ( "Invalid type for " + arg ) ;
747
+ returnObj . result = false ;
748
+ argState = false ;
749
+ }
750
+ else {
751
+ return false ;
752
+ }
707
753
}
708
754
else if ( args [ arg ] && ! / ^ ( [ a - z ] ( [ a - z ] | \d | \+ | - | \. ) * ) : ( \/ \/ ( ( ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : ) * @ ) ? ( ( \[ ( | ( v [ \d a - f ] { 1 , } \. ( ( [ a - z ] | \d | - | \. | _ | ~ ) | [ ! $ & ' ( ) * + , ; = ] | : ) + ) ) \] ) | ( ( \d | [ 1 - 9 ] \d | 1 \d \d | 2 [ 0 - 4 ] \d | 2 5 [ 0 - 5 ] ) \. ( \d | [ 1 - 9 ] \d | 1 \d \d | 2 [ 0 - 4 ] \d | 2 5 [ 0 - 5 ] ) \. ( \d | [ 1 - 9 ] \d | 1 \d \d | 2 [ 0 - 4 ] \d | 2 5 [ 0 - 5 ] ) \. ( \d | [ 1 - 9 ] \d | 1 \d \d | 2 [ 0 - 4 ] \d | 2 5 [ 0 - 5 ] ) ) | ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] ) * ) ( : \d * ) ? ) ( \/ ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) * ) * | ( \/ ( ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) + ( \/ ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) * ) * ) ? ) | ( ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) + ( \/ ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) * ) * ) | ( ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) ) { 0 } ) ( \? ( ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) | [ \uE000 - \uF8FF ] | \/ | \? ) * ) ? ( # ( ( ( [ a - z ] | \d | - | \. | _ | ~ | [ \u00A0 - \uD7FF \uF900 - \uFDCF \uFDF0 - \uFFEF ] ) | ( % [ \d a - f ] { 2 } ) | [ ! $ & ' ( ) * + , ; = ] | : | @ ) | \/ | \? ) * ) ? $ / i. test ( args [ arg ] ) ) {
709
- return false ;
755
+ if ( returnErrors ) {
756
+ returnObj . errors . push ( "Invalid url string " + arg ) ;
757
+ returnObj . result = false ;
758
+ argState = false ;
759
+ }
760
+ else {
761
+ return false ;
762
+ }
710
763
}
711
764
}
712
765
else if ( argProperties [ arg ] . type === 'Boolean' ) {
713
766
if ( ! ( args [ arg ] !== true || args [ arg ] !== false || toString . call ( args [ arg ] ) !== '[object Boolean]' ) ) {
714
- return false ;
767
+ if ( returnErrors ) {
768
+ returnObj . errors . push ( "Invalid type for " + arg ) ;
769
+ returnObj . result = false ;
770
+ argState = false ;
771
+ }
715
772
}
716
773
}
717
774
else if ( argProperties [ arg ] . type === 'Array' ) {
718
775
if ( ! Array . isArray ( args [ arg ] ) ) {
719
- return false ;
776
+ if ( returnErrors ) {
777
+ returnObj . errors . push ( "Invalid type for " + arg ) ;
778
+ returnObj . result = false ;
779
+ argState = false ;
780
+ }
781
+ else {
782
+ return false ;
783
+ }
720
784
}
721
785
}
722
786
else if ( argProperties [ arg ] . type === 'Object' ) {
723
787
if ( toString . call ( args [ arg ] ) !== '[object ' + argProperties [ arg ] . type + ']' && ! ( ! argProperties [ arg ] . required && args [ arg ] === null ) ) {
724
- return false ;
788
+ if ( returnErrors ) {
789
+ returnObj . errors . push ( "Invalid type for " + arg ) ;
790
+ returnObj . result = false ;
791
+ argState = false ;
792
+ }
793
+ else {
794
+ return false ;
795
+ }
725
796
}
726
797
}
727
798
else {
728
- return false ;
799
+ if ( returnErrors ) {
800
+ returnObj . errors . push ( "Invalid type declaration for " + arg ) ;
801
+ returnObj . result = false ;
802
+ argState = false ;
803
+ }
804
+ else {
805
+ return false ;
806
+ }
729
807
}
730
808
}
731
809
else {
732
810
if ( toString . call ( args [ arg ] ) !== '[object String]' ) {
733
- return false ;
811
+ if ( returnErrors ) {
812
+ returnObj . errors . push ( arg + " should be string" ) ;
813
+ returnObj . result = false ;
814
+ argState = false ;
815
+ }
816
+ else {
817
+ return false ;
818
+ }
734
819
}
735
820
}
736
821
737
- /*
738
- if (toString.call(args[arg]) === '[object String]') {
739
- args[arg] = args[arg].replace(/([.$])/mg, '');
740
- }
741
- */
742
-
743
822
if ( argProperties [ arg ] [ 'max-length' ] ) {
744
823
if ( args [ arg ] . length > argProperties [ arg ] [ 'max-length' ] ) {
745
- return false ;
824
+ if ( returnErrors ) {
825
+ returnObj . errors . push ( "Length of " + arg + " is greater than max length value" ) ;
826
+ returnObj . result = false ;
827
+ argState = false ;
828
+ }
829
+ else {
830
+ return false ;
831
+ }
746
832
}
747
833
}
748
834
749
835
if ( argProperties [ arg ] [ 'min-length' ] ) {
750
836
if ( args [ arg ] . length < argProperties [ arg ] [ 'min-length' ] ) {
751
- return false ;
837
+ if ( returnErrors ) {
838
+ returnObj . errors . push ( "Length of " + arg + " is lower than min length value" ) ;
839
+ returnObj . result = false ;
840
+ argState = false ;
841
+ }
842
+ else {
843
+ return false ;
844
+ }
752
845
}
753
846
}
754
847
755
848
if ( argProperties [ arg ] [ 'has-number' ] ) {
756
849
if ( ! / \d / . test ( args [ arg ] ) ) {
757
- return false ;
850
+ if ( returnErrors ) {
851
+ returnObj . errors . push ( arg + " should has number" ) ;
852
+ returnObj . result = false ;
853
+ argState = false ;
854
+ }
855
+ else {
856
+ return false ;
857
+ }
758
858
}
759
859
}
760
860
761
861
if ( argProperties [ arg ] [ 'has-char' ] ) {
762
862
if ( ! / [ A - Z a - z ] / . test ( args [ arg ] ) ) {
763
- return false ;
863
+ if ( returnErrors ) {
864
+ returnObj . errors . push ( arg + " should has char" ) ;
865
+ returnObj . result = false ;
866
+ argState = false ;
867
+ }
868
+ else {
869
+ return false ;
870
+ }
764
871
}
765
872
}
766
873
767
874
if ( argProperties [ arg ] [ 'has-upchar' ] ) {
768
875
if ( ! / [ A - Z ] / . test ( args [ arg ] ) ) {
769
- return false ;
876
+ if ( returnErrors ) {
877
+ returnObj . errors . push ( arg + " should has upchar" ) ;
878
+ returnObj . result = false ;
879
+ argState = false ;
880
+ }
881
+ else {
882
+ return false ;
883
+ }
770
884
}
771
885
}
772
886
773
887
if ( argProperties [ arg ] [ 'has-special' ] ) {
774
888
if ( ! / [ ^ A - Z a - z \d ] / . test ( args [ arg ] ) ) {
775
- return false ;
889
+ if ( returnErrors ) {
890
+ returnObj . errors . push ( arg + " should has special character" ) ;
891
+ returnObj . result = false ;
892
+ argState = false ;
893
+ }
894
+ else {
895
+ return false ;
896
+ }
776
897
}
777
898
}
778
899
779
- if ( ! argProperties [ arg ] [ 'exclude-from-ret-obj' ] ) {
900
+ if ( argState && returnErrors && ! argProperties [ arg ] [ 'exclude-from-ret-obj' ] ) {
901
+ returnObj . obj [ arg ] = args [ arg ] ;
902
+ }
903
+ else if ( ! returnErrors && ! argProperties [ arg ] [ 'exclude-from-ret-obj' ] ) {
780
904
returnObj [ arg ] = args [ arg ] ;
781
905
}
782
906
}
783
907
}
784
908
785
- return returnObj ;
909
+ if ( returnErrors && ! returnObj . result ) {
910
+ delete returnObj . obj ;
911
+ return returnObj ;
912
+ }
913
+ else {
914
+ return returnObj ;
915
+ }
786
916
} ;
787
917
788
918
/**
0 commit comments