numenor
Version:
Customizable, safe evaluator of JavaScript-like expressions.
59 lines (46 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ObjectLiteral = void 0;
var _ = require("./");
var _Parser = require("../../Parser");
var _Error = require("../Error");
var _util = require("./util");
var ObjectLiteral = function ObjectLiteral(expr, options, compile) {
if (expr.type !== _Parser.ExpressionType.ObjectLiteral) {
throw new TypeError((0, _Error.UnknownExpression)(expr));
}
var isConst = true;
var isAsync = false;
var length = expr.items.length;
var steps = new Array(length * 2);
expr.items.forEach(function (_ref, index) {
var name = _ref.name,
value = _ref.value;
var nameEval = compile(name, options, compile);
var valueEval = compile(value, options, compile);
if (isConst && !((0, _.hasConstValue)(nameEval) && (0, _.hasConstValue)(valueEval))) {
isConst = false;
}
if (!isAsync && ((0, _.hasAsyncValue)(nameEval) || (0, _.hasAsyncValue)(valueEval))) {
isAsync = true;
}
steps[index * 2] = nameEval;
steps[index * 2 + 1] = valueEval;
});
var ObjectPrototype = options.ObjectPrototype;
return (0, _.mark)({
isAsync: isAsync,
isConst: isConst
}, function (context, stack) {
return (0, _util.evalMaybeAsyncSteps)(context, stack, steps).then(function (pairs) {
var object = Object.create(ObjectPrototype);
for (var i = 0; i < length; i++) {
object[pairs[i * 2]] = pairs[i * 2 + 1];
}
return object;
});
});
};
exports.ObjectLiteral = ObjectLiteral;