You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
947 B
53 lines
947 B
1 month ago
|
const eq = require('./eq')
|
||
|
const neq = require('./neq')
|
||
|
const gt = require('./gt')
|
||
|
const gte = require('./gte')
|
||
|
const lt = require('./lt')
|
||
|
const lte = require('./lte')
|
||
|
|
||
|
const cmp = (a, op, b, loose) => {
|
||
|
switch (op) {
|
||
|
case '===':
|
||
|
if (typeof a === 'object') {
|
||
|
a = a.version
|
||
|
}
|
||
|
if (typeof b === 'object') {
|
||
|
b = b.version
|
||
|
}
|
||
|
return a === b
|
||
|
|
||
|
case '!==':
|
||
|
if (typeof a === 'object') {
|
||
|
a = a.version
|
||
|
}
|
||
|
if (typeof b === 'object') {
|
||
|
b = b.version
|
||
|
}
|
||
|
return a !== b
|
||
|
|
||
|
case '':
|
||
|
case '=':
|
||
|
case '==':
|
||
|
return eq(a, b, loose)
|
||
|
|
||
|
case '!=':
|
||
|
return neq(a, b, loose)
|
||
|
|
||
|
case '>':
|
||
|
return gt(a, b, loose)
|
||
|
|
||
|
case '>=':
|
||
|
return gte(a, b, loose)
|
||
|
|
||
|
case '<':
|
||
|
return lt(a, b, loose)
|
||
|
|
||
|
case '<=':
|
||
|
return lte(a, b, loose)
|
||
|
|
||
|
default:
|
||
|
throw new TypeError(`Invalid operator: ${op}`)
|
||
|
}
|
||
|
}
|
||
|
module.exports = cmp
|