comparison.js (1198B)
1 const field = require('../../field'); 2 3 module.exports = { 4 detect : function (query) { 5 if (!query) { 6 return false; 7 } 8 if ('object' !== typeof query) { 9 return false; 10 } 11 if (!query.term) { 12 return false; 13 } 14 return Array.isArray(query.term.match(/^[<=>]+/)); 15 }, 16 compile: function (query) { 17 query.similarity = query.similarity || 0; 18 return function (data) { 19 return field(query.field, data, function (value) { 20 let sign, num; 21 value = parseFloat(value); 22 if (sign = query.term.match(/^[<=>]+/)) { 23 [sign] = sign; 24 } 25 num = query.term.match(/[0-9.]+/); 26 if (!num) { 27 return false; 28 } 29 num = Number(num[0]); 30 if (sign) { 31 if (sign === '>') { 32 return value > num; 33 } else if (sign === '>=') { 34 return value >= num; 35 } else if (sign === '<') { 36 return value < num; 37 } else if (sign === '<=') { 38 return value <= num; 39 } else { 40 throw new Error(`Invalid sign: ${sign}`); 41 } 42 } else { 43 return value === num; 44 } 45 }); 46 }; 47 }, 48 };