@@ -84,8 +84,6 @@ const defaultMethods = {
84
84
max : ( data ) => Math . max ( ...data ) ,
85
85
min : ( data ) => Math . min ( ...data ) ,
86
86
in : ( [ item , array ] ) => ( array || [ ] ) . includes ( item ) ,
87
- '>' : ( [ a , b ] ) => a > b ,
88
- '<' : ( [ a , b , c ] ) => ( c === undefined ? a < b : a < b && b < c ) ,
89
87
preserve : {
90
88
traverse : false ,
91
89
method : declareSync ( ( i ) => i , true ) ,
@@ -150,14 +148,66 @@ const defaultMethods = {
150
148
} ,
151
149
traverse : false
152
150
} ,
153
- '<=' : ( [ a , b , c ] ) => ( c === undefined ? a <= b : a <= b && b <= c ) ,
154
- '>=' : ( [ a , b ] ) => a >= b ,
155
- // eslint-disable-next-line eqeqeq
156
- '==' : ( [ a , b ] ) => a == b ,
157
- '===' : ( [ a , b ] ) => a === b ,
158
- // eslint-disable-next-line eqeqeq
159
- '!=' : ( [ a , b ] ) => a != b ,
160
- '!==' : ( [ a , b ] ) => a !== b ,
151
+ '<' : ( args ) => {
152
+ if ( args . length === 2 ) return args [ 0 ] < args [ 1 ]
153
+ for ( let i = 1 ; i < args . length ; i ++ ) {
154
+ if ( args [ i - 1 ] >= args [ i ] ) return false
155
+ }
156
+ return true
157
+ } ,
158
+ '<=' : ( args ) => {
159
+ if ( args . length === 2 ) return args [ 0 ] <= args [ 1 ]
160
+ for ( let i = 1 ; i < args . length ; i ++ ) {
161
+ if ( args [ i - 1 ] > args [ i ] ) return false
162
+ }
163
+ return true
164
+ } ,
165
+ '>' : ( args ) => {
166
+ if ( args . length === 2 ) return args [ 0 ] > args [ 1 ]
167
+ for ( let i = 1 ; i < args . length ; i ++ ) {
168
+ if ( args [ i - 1 ] <= args [ i ] ) return false
169
+ }
170
+ return true
171
+ } ,
172
+ '>=' : ( args ) => {
173
+ if ( args . length === 2 ) return args [ 0 ] >= args [ 1 ]
174
+ for ( let i = 1 ; i < args . length ; i ++ ) {
175
+ if ( args [ i - 1 ] < args [ i ] ) return false
176
+ }
177
+ return true
178
+ } ,
179
+ '==' : ( args ) => {
180
+ // eslint-disable-next-line eqeqeq
181
+ if ( args . length === 2 ) return args [ 0 ] == args [ 1 ]
182
+ for ( let i = 1 ; i < args . length ; i ++ ) {
183
+ // eslint-disable-next-line eqeqeq
184
+ if ( args [ i - 1 ] != args [ i ] ) return false
185
+ }
186
+ return true
187
+ } ,
188
+ '===' : ( args ) => {
189
+ if ( args . length === 2 ) return args [ 0 ] === args [ 1 ]
190
+ for ( let i = 1 ; i < args . length ; i ++ ) {
191
+ if ( args [ i - 1 ] !== args [ i ] ) return false
192
+ }
193
+ return true
194
+ } ,
195
+ '!=' : ( args ) => {
196
+ // eslint-disable-next-line eqeqeq
197
+ if ( args . length === 2 ) return args [ 0 ] != args [ 1 ]
198
+ for ( let i = 1 ; i < args . length ; i ++ ) {
199
+ // eslint-disable-next-line eqeqeq
200
+ if ( args [ i - 1 ] == args [ i ] ) return false
201
+ }
202
+ return true
203
+ } ,
204
+ '!==' : ( args ) => {
205
+ if ( args . length === 2 ) return args [ 0 ] !== args [ 1 ]
206
+ for ( let i = 1 ; i < args . length ; i ++ ) {
207
+ if ( args [ i - 1 ] === args [ i ] ) return false
208
+ }
209
+ return true
210
+ } ,
161
211
xor : ( [ a , b ] ) => a ^ b ,
162
212
// Why "executeInLoop"? Because if it needs to execute to get an array, I do not want to execute the arguments,
163
213
// Both for performance and safety reasons.
@@ -641,16 +691,18 @@ Object.assign(defaultMethods.missing_some, {
641
691
// @ts -ignore Allow custom attribute
642
692
defaultMethods [ '<' ] . compile = function ( data , buildState ) {
643
693
if ( ! Array . isArray ( data ) ) return false
644
- if ( data . length === 2 ) return buildState . compile `(${ data [ 0 ] } < ${ data [ 1 ] } )`
645
- if ( data . length === 3 ) return buildState . compile `(${ data [ 0 ] } < ${ data [ 1 ] } && ${ data [ 1 ] } < ${ data [ 2 ] } )`
646
- return false
694
+ if ( data . length < 2 ) return false
695
+ let res = buildState . compile `(${ data [ 0 ] } < ${ data [ 1 ] } )`
696
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } < ${ data [ i ] } )`
697
+ return res
647
698
}
648
699
// @ts -ignore Allow custom attribute
649
700
defaultMethods [ '<=' ] . compile = function ( data , buildState ) {
650
701
if ( ! Array . isArray ( data ) ) return false
651
- if ( data . length === 2 ) return buildState . compile `(${ data [ 0 ] } <= ${ data [ 1 ] } )`
652
- if ( data . length === 3 ) return buildState . compile `(${ data [ 0 ] } <= ${ data [ 1 ] } && ${ data [ 1 ] } <= ${ data [ 2 ] } )`
653
- return false
702
+ if ( data . length < 2 ) return false
703
+ let res = buildState . compile `(${ data [ 0 ] } <= ${ data [ 1 ] } )`
704
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } <= ${ data [ i ] } )`
705
+ return res
654
706
}
655
707
// @ts -ignore Allow custom attribute
656
708
defaultMethods . min . compile = function ( data , buildState ) {
@@ -669,26 +721,34 @@ defaultMethods.max.compile = function (data, buildState) {
669
721
// @ts -ignore Allow custom attribute
670
722
defaultMethods [ '>' ] . compile = function ( data , buildState ) {
671
723
if ( ! Array . isArray ( data ) ) return false
672
- if ( data . length !== 2 ) return false
673
- return buildState . compile `(${ data [ 0 ] } > ${ data [ 1 ] } )`
724
+ if ( data . length < 2 ) return false
725
+ let res = buildState . compile `(${ data [ 0 ] } > ${ data [ 1 ] } )`
726
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } > ${ data [ i ] } )`
727
+ return res
674
728
}
675
729
// @ts -ignore Allow custom attribute
676
730
defaultMethods [ '>=' ] . compile = function ( data , buildState ) {
677
731
if ( ! Array . isArray ( data ) ) return false
678
- if ( data . length !== 2 ) return false
679
- return buildState . compile `(${ data [ 0 ] } >= ${ data [ 1 ] } )`
732
+ if ( data . length < 2 ) return false
733
+ let res = buildState . compile `(${ data [ 0 ] } >= ${ data [ 1 ] } )`
734
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } >= ${ data [ i ] } )`
735
+ return res
680
736
}
681
737
// @ts -ignore Allow custom attribute
682
738
defaultMethods [ '==' ] . compile = function ( data , buildState ) {
683
739
if ( ! Array . isArray ( data ) ) return false
684
- if ( data . length !== 2 ) return false
685
- return buildState . compile `(${ data [ 0 ] } == ${ data [ 1 ] } )`
740
+ if ( data . length < 2 ) return false
741
+ let res = buildState . compile `(${ data [ 0 ] } == ${ data [ 1 ] } )`
742
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } == ${ data [ i ] } )`
743
+ return res
686
744
}
687
745
// @ts -ignore Allow custom attribute
688
746
defaultMethods [ '!=' ] . compile = function ( data , buildState ) {
689
747
if ( ! Array . isArray ( data ) ) return false
690
- if ( data . length !== 2 ) return false
691
- return buildState . compile `(${ data [ 0 ] } != ${ data [ 1 ] } )`
748
+ if ( data . length < 2 ) return false
749
+ let res = buildState . compile `(${ data [ 0 ] } != ${ data [ 1 ] } )`
750
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } != ${ data [ i ] } )`
751
+ return res
692
752
}
693
753
// @ts -ignore Allow custom attribute
694
754
defaultMethods . if . compile = function ( data , buildState ) {
@@ -711,8 +771,10 @@ defaultMethods.if.compile = function (data, buildState) {
711
771
// @ts -ignore Allow custom attribute
712
772
defaultMethods [ '===' ] . compile = function ( data , buildState ) {
713
773
if ( ! Array . isArray ( data ) ) return false
714
- if ( data . length !== 2 ) return false
715
- return buildState . compile `(${ data [ 0 ] } === ${ data [ 1 ] } )`
774
+ if ( data . length < 2 ) return false
775
+ let res = buildState . compile `(${ data [ 0 ] } === ${ data [ 1 ] } )`
776
+ for ( let i = 2 ; i < data . length ; i ++ ) res = buildState . compile `(${ res } && ${ data [ i - 1 ] } === ${ data [ i ] } )`
777
+ return res
716
778
}
717
779
// @ts -ignore Allow custom attribute
718
780
defaultMethods [ '+' ] . compile = function ( data , buildState ) {
0 commit comments