numenor
Version:
Customizable, safe evaluator of JavaScript-like expressions.
49 lines (41 loc) • 1.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mark = mark;
exports.hasAsyncValue = hasAsyncValue;
exports.hasConstValue = hasConstValue;
exports.makeConstEval = makeConstEval;
exports.evalConst = evalConst;
exports.AsyncValue = exports.ConstValue = exports.ValueLookup = void 0;
var ValueLookup = Symbol.for('numenor:context:lookup');
exports.ValueLookup = ValueLookup;
var ConstValue = Symbol.for('numenor:eval:const');
exports.ConstValue = ConstValue;
var AsyncValue = Symbol.for('numenor:eval:async');
exports.AsyncValue = AsyncValue;
function mark(attrib, evaluator) {
if (attrib.isConst) {
evaluator[ConstValue] = true;
}
if (attrib.isAsync) {
evaluator[AsyncValue] = true;
}
return evaluator;
}
function hasAsyncValue(object) {
return object[AsyncValue] === true;
}
function hasConstValue(object) {
return object[ConstValue] === true;
}
function makeConstEval(value) {
return mark({
isConst: true
}, function () {
return value;
});
}
function evalConst(evaluator) {
return evaluator(Object.create(null), []);
}