UNPKG

numenor

Version:

Customizable, safe evaluator of JavaScript-like expressions.

59 lines (46 loc) 1.55 kB
"use strict"; 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;