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
91 lines (85 loc) • 2.8 kB
JavaScript
;
var mingo = require('mingo'),
jsexpr = require('./expression')('$');
var EV_CACHE = {};
var EX_CACHE = {};
try {
mingo.addOperators(mingo.OP_QUERY, function (_) {
return {
$starts: function $starts(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").startsWith(args[0]);
},
$startsWith: function $startsWith(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").startsWith(args[0]);
},
$ends: function $ends(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").endsWith(args[0]);
},
$endsWith: function $endsWith(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").endsWith(args[0]);
},
$contains: function $contains(selector, value, args) {
args = Array.isArray(args) ? args : [args];
return (value || "").indexOf(args[0]) >= 0;
}
};
});
mingo.addOperators(mingo.OP_EXPRESSION, function (_) {
return {
$eval: function $eval(selector, value, args) {
if (!EV_CACHE[value]) {
EV_CACHE[value] = jsexpr.eval(value);
}
return EV_CACHE[value](selector);
},
$expr: function $expr(selector, value, args) {
if (!EX_CACHE[value]) {
EX_CACHE[value] = jsexpr.expr(value);
}
return EX_CACHE[value](selector);
},
$keyval: function $keyval(selector, value, args) {
var val = _.computeValue(selector, value);
return val.reduce(function (map, item) {
map[item[0]] = item[1] || "_";
return map;
}, {});
},
$trim: function $trim(selector, value, args) {
var chars = new Set((value.chars || '').split(''));
var 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: function $starts(selector, value, args) {
var val = _.computeValue(selector, value[0]);
return (val || "").startsWith(value[1]);
},
$startsWidth: function $startsWidth(selector, value, args) {
var val = _.computeValue(selector, value[0]);
return (val || "").startsWith(value[1]);
},
$ends: function $ends(selector, value, args) {
var val = _.computeValue(selector, value[0]);
return (val || "").endsWith(value[1]);
},
$endsWith: function $endsWith(selector, value, args) {
var val = _.computeValue(selector, value[0]);
return (val || "").endsWith(value[1]);
},
$contains: function $contains(selector, value, args) {
var val = _.computeValue(selector, value[0]);
return (val || "").indexOf(value[1]) >= 0;
}
};
});
} catch (err) {}
module.exports = mingo;
//# sourceMappingURL=mingo_ex.js.map