@@ -84,8 +84,6 @@ const defaultMethods = {
8484 max : ( data ) => Math . max ( ...data ) ,
8585 min : ( data ) => Math . min ( ...data ) ,
8686 in : ( [ item , array ] ) => ( array || [ ] ) . includes ( item ) ,
87- '>' : ( [ a , b ] ) => a > b ,
88- '<' : ( [ a , b , c ] ) => ( c === undefined ? a < b : a < b && b < c ) ,
8987 preserve : {
9088 traverse : false ,
9189 method : declareSync ( ( i ) => i , true ) ,
@@ -150,14 +148,66 @@ const defaultMethods = {
150148 } ,
151149 traverse : false
152150 } ,
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+ } ,
161211 xor : ( [ a , b ] ) => a ^ b ,
162212 // Why "executeInLoop"? Because if it needs to execute to get an array, I do not want to execute the arguments,
163213 // Both for performance and safety reasons.
@@ -641,16 +691,18 @@ Object.assign(defaultMethods.missing_some, {
641691// @ts -ignore Allow custom attribute
642692defaultMethods [ '<' ] . compile = function ( data , buildState ) {
643693 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
647698}
648699// @ts -ignore Allow custom attribute
649700defaultMethods [ '<=' ] . compile = function ( data , buildState ) {
650701 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
654706}
655707// @ts -ignore Allow custom attribute
656708defaultMethods . min . compile = function ( data , buildState ) {
@@ -669,26 +721,34 @@ defaultMethods.max.compile = function (data, buildState) {
669721// @ts -ignore Allow custom attribute
670722defaultMethods [ '>' ] . compile = function ( data , buildState ) {
671723 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
674728}
675729// @ts -ignore Allow custom attribute
676730defaultMethods [ '>=' ] . compile = function ( data , buildState ) {
677731 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
680736}
681737// @ts -ignore Allow custom attribute
682738defaultMethods [ '==' ] . compile = function ( data , buildState ) {
683739 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
686744}
687745// @ts -ignore Allow custom attribute
688746defaultMethods [ '!=' ] . compile = function ( data , buildState ) {
689747 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
692752}
693753// @ts -ignore Allow custom attribute
694754defaultMethods . if . compile = function ( data , buildState ) {
@@ -711,8 +771,10 @@ defaultMethods.if.compile = function (data, buildState) {
711771// @ts -ignore Allow custom attribute
712772defaultMethods [ '===' ] . compile = function ( data , buildState ) {
713773 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
716778}
717779// @ts -ignore Allow custom attribute
718780defaultMethods [ '+' ] . compile = function ( data , buildState ) {
0 commit comments