jsexpr
Version:
String and JSON expression interpolator and evaluator. Interpolates or evaluates a string against a json object, or transforms an object into another based on a json template
90 lines (83 loc) • 2.56 kB
JavaScript
const
mingo = require('mingo'),
jsexpr = require('./expression')('$');
const EV_CACHE = {};
const EX_CACHE = {};
try {
mingo.addOperators(mingo.OP_QUERY, function (_) {
return {
$starts(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").startsWith(args[0]);
},
$startsWith(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").startsWith(args[0]);
},
$ends(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").endsWith(args[0]);
},
$endsWith(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").endsWith(args[0]);
},
$contains(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").indexOf(args[0]) >= 0;
}
};
});
mingo.addOperators(mingo.OP_EXPRESSION, function (_) {
return {
$eval(selector, value, args) {
if (!EV_CACHE[value]) {
EV_CACHE[value] = jsexpr.eval(value);
}
return EV_CACHE[value](selector);
},
$expr(selector, value, args) {
if (!EX_CACHE[value]) {
EX_CACHE[value] = jsexpr.expr(value);
}
return EX_CACHE[value](selector);
},
$keyval(selector, value, args) {
let val = _.computeValue(selector, value);
return val.reduce((map, item) => {
map[item[0]] = item[1] || "_";
return map;
}, {});
},
$trim(selector, value, args) {
let chars = new Set((value.chars || '').split(''));
let val = _.computeValue(selector, value.input).split('');
while (chars.has(val[0])) val.shift();
while (chars.has(val[val.length - 1])) val.pop();
return val.join('');
},
$starts(selector, value, args) {
let val = _.computeValue(selector, value[0]);
return (val || "").startsWith(value[1]);
},
$startsWidth(selector, value, args) {
let val = _.computeValue(selector, value[0]);
return (val || "").startsWith(value[1]);
},
$ends(selector, value, args) {
let val = _.computeValue(selector, value[0]);
return (val || "").endsWith(value[1]);
},
$endsWith(selector, value, args) {
let val = _.computeValue(selector, value[0]);
return (val || "").endsWith(value[1]);
},
$contains(selector, value, args) {
let val = _.computeValue(selector, value[0]);
return (val || "").indexOf(value[1]) >= 0;
}
};
});
}catch(err) {
}
module.exports = mingo;