@zvenigora/jse-eval
Version:
JavaScript expression parsing and evaluation.
3 lines (2 loc) • 16.2 kB
JavaScript
function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=/*#__PURE__*/e(require("jsep"));function n(){return n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n.apply(this,arguments)}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var o={undefined:void 0,null:null,true:!0,false:!1},i=/*#__PURE__*/function(){function e(){}return e.getValue=function(t,n,r){var o=e.getScopedKeyValue(t,n,r);if(void 0!==o){var i=o[1],a=e.getBindFunction(i,n,r,o[2]);return"function"==typeof a?a:i}},e.getScopePair=function(t,n,r){if(void 0!==t&&null!=r&&r.scopes){var o=e.getKeyValue(r.scopes,n,r);if(void 0!==o){var i=o[1];if(i)return[o[0],i]}}},e.getBindFunction=function(t,n,r,o){var i,a=e.hasProperty(null==r?void 0:r.scopes,o)?null==r||null==(i=r.scopes[o])?void 0:i.options:r;if("function"==typeof t&&null!=a&&a.functionBindings){var s=e.getKeyValue(a.functionBindings,n,r);if(void 0!==s){var u=s[1];if(u){var l=u;return null!=l&&l.arguments?t.bind.apply(t,[null==l?void 0:l.thisRef].concat(l.arguments)):t.bind(null==l?void 0:l.thisRef)}}}},e.hasProperty=function(e,t){return!(!e||!t)&&Object.prototype.hasOwnProperty.call(e,t)},e.getScopedKeyValue=function(t,n,r){var o=[""],i=e.hasProperty(t,null==r?void 0:r.currentScopeName)&&e.hasProperty(null==r?void 0:r.scopes,null==r?void 0:r.currentScopeName),a=e.hasProperty(t,null==r?void 0:r.globalScopeName)&&e.hasProperty(null==r?void 0:r.scopes,null==r?void 0:r.globalScopeName);i&&o.push(null==r?void 0:r.currentScopeName),a&&o.push(null==r?void 0:r.globalScopeName);for(var s=0,u=o;s<u.length;s++){var l=u[s],c=this.getKeyValue(l?t[l]:t,n,r);if(void 0!==c)return[c[0],c[1],l]}},e.getKeyValue=function(t,n,r){if(e.blockListTest(t,n,r),e.allowListTest(t,n,r),null!=r&&r.caseSensitive||"string"!=typeof n)return[n,t[n]];if("string"==typeof n){var o=t;do{var i=Object.getOwnPropertyNames(o);if(Array.isArray(i)){var a=i.find(function(e){return 0===e.localeCompare(n,"en",{sensitivity:"base"})});if(a)return[a,o[a]]}}while(o=Object.getPrototypeOf(o))}},e.getLiteralKeyValue=function(t,n,r){if(e.blockListTest(t,n,r),e.allowListTest(t,n,r),null!=r&&r.caseSensitive)return[n,t[n]];for(var o=0,i=Object.entries(t);o<i.length;o++){var a=i[o],s=a[0],u=a[1];if(0===s.localeCompare(n,"en",{sensitivity:"base"}))return[s,u]}},e.blockListTest=function(e,t,n){if(null!=n&&n.blockList&&"string"==typeof t&&n.blockList.find(n.caseSensitive?function(e){return e===t}:function(e){return 0===e.localeCompare(t,"en",{sensitivity:"base"})}))throw Error('Access to member "'+t+'" from blockList is not permitted.')},e.allowListTest=function(e,t,n){if(null!=n&&n.allowList&&"string"==typeof t&&!n.allowList.find(null!=n&&n.caseSensitive?function(e){return e===t}:function(e){return 0===e.localeCompare(t,"en",{sensitivity:"base"})}))throw Error('Access to member "'+t+'" not in allowList is not permitted.')},e}(),a=/*#__PURE__*/function(){function e(t,n,r){this.context=void 0,this.isAsync=void 0,this.options=void 0,this.context=t,this.isAsync=n,this.options=r||e.defaultOptions}e.addUnaryOp=function(n,r){t.default.addUnaryOp(n),e.unops[n]=r},e.addBinaryOp=function(n,r,o,i){var a,s,u;"function"==typeof r?u=r:(a=r,"function"==typeof o?u=o:(s=o,u=i)),t.default.addBinaryOp(n,a||1,s),e.binops[n]=u},e.addEvaluator=function(t,n){e.evaluators[t]=n},e.addConditionalEvaluator=function(t,n,r){e.conditionalEvaluators[t]||(e.conditionalEvaluators[t]=[]),e.conditionalEvaluators[t].push({evaluator:r,predicate:n})},e.registerPlugin=function(){[].slice.call(arguments).forEach(function(t){t.init&&e.parse.plugins.register(t),t.initEval&&t.initEval.call(e,e)})},e.addOptions=function(t){e.defaultOptions=t},e.eval=function(t,n,r){return new e(n,void 0,r).eval(t)},e.evalAsync=function(t,n,r){try{return Promise.resolve(new e(n,!0,r).eval(t))}catch(e){return Promise.reject(e)}},e.compile=function(t){return e.eval.bind(null,e.jsep(t))},e.compileAsync=function(t){return e.evalAsync.bind(null,e.jsep(t))},e.evalExpr=function(t,n){return e.compile(t)(n)},e.evalExprAsync=function(t,n){return e.compileAsync(t)(n)};var a,s,u=e.prototype;return u.eval=function(t,n){void 0===n&&(n=function(e){return e});var o=e.conditionalEvaluators[t.type];if(o)for(var i,a=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e))){n&&(e=n);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(o);!(i=a()).done;){var s=i.value;if(s.predicate.call(this,t,this.context))return this.evalSyncAsync(s.evaluator.bind(this)(t,this.context),function(e){return t._value=e,n(e)})}var u=e.evaluators[t.type];if(void 0===u)throw new Error("unknown node type: "+JSON.stringify(t,null,2));return this.evalSyncAsync(u.bind(this)(t,this.context),function(e){return t._value=e,n(e)})},u.evalSyncAsync=function(e,t){return this.isAsync?Promise.resolve(e).then(t):t(e)},u.evalArrayExpression=function(e){return this.evalArray(e.elements)},u.evalArray=function(e){var t=this,n=e.map(function(e){return t.eval(e)}),r=function(t){return t.reduce(function(t,n,r){return"SpreadElement"===e[r].type?[].concat(t,n):(t.push(n),t)},[])};return this.isAsync?Promise.all(n).then(r):r(n)},u.evalBinaryExpression=function(t){var n=this;if("||"===t.operator)return this.eval(t.left,function(e){return e||n.eval(t.right)});if("&&"===t.operator)return this.eval(t.left,function(e){return e&&n.eval(t.right)});var r=[this.eval(t.left),this.eval(t.right)],o=function(n){return e.binops[t.operator](n[0],n[1])};return this.isAsync?Promise.all(r).then(o):o(r)},u.evalCompoundExpression=function(e){var t=this;return this.isAsync?e.body.reduce(function(e,n){return e.then(function(){return t.eval(n)})},Promise.resolve()):e.body.map(function(e){return t.eval(e)})[e.body.length-1]},u.evalCallExpression=function(e){var t=this;return this.evalSyncAsync(this.evalCall(e.callee),function(n){var r=n[0],o=n[1];return t.evalSyncAsync(t.evalArray(e.arguments),function(n){return r.apply(o===e.callee?t.context:o,n)})})},u.evalCall=function(t){if("MemberExpression"===t.type)return this.evalSyncAsync(this.evaluateMember(t),function(n){return e.validateFnAndCall(n[1],n[0],t)});if("Identifier"===t.type){var n=i.getValue(this.context,t.name,this.options);return e.validateFnAndCall(n,t)}return this.eval(t,function(n){return e.validateFnAndCall(n,t)})},u.evalConditionalExpression=function(e){var t=this;return this.eval(e.test,function(n){return t.eval(n?e.consequent:e.alternate)})},u.evalIdentifier=function(e){if(this.caseSensitive)return i.getValue(this.context,e.name,this.options);if(0===e.name.localeCompare("this","en",{sensitivity:"base"}))return this.evalThisExpression();var t=i.getLiteralKeyValue(o,e.name,this.options);if(t)return t[1];var n=i.getValue(this.context,e.name,this.options);if(void 0!==n&&this.options.scopes){var r=i.getScopePair(this.context,e.name,this.options);r&&(e._scope=r[1])}return n},e.evalLiteral=function(e){return e.value},u.evalMemberExpression=function(e){return this.evalSyncAsync(this.evaluateMember(e),function(e){return e[1]})},u.evaluateMember=function(e){var t=this;return this.eval(e.object,function(r){return t.evalSyncAsync(e.computed?t.eval(e.property):e.property.name,function(o){if(/^__proto__|prototype|constructor$/.test(o))throw Error('Access to member "'+o+'" disallowed.');var a=e.optional?r||{}:r,s=e.object._scope,u=s?n({},t.options,s.options):t.options,l=i.getValue(a,o,u);return[r,l,o]})})},u.evalThisExpression=function(){return this.context},u.evalUnaryExpression=function(t){return this.eval(t.argument,function(n){return e.unops[t.operator](n)})},u.evalArrowFunctionExpression=function(t){var n=this;return this.isAsync!==t.async?e[t.async?"evalAsync":"eval"](t,this.context):function(){var r=n.evalArrowContext(t,[].slice.call(arguments));return e[t.async?"evalAsync":"eval"](t.body,r)}},u.evalArrowContext=function(e,t){var r=this,o=n({},this.context);return(e.params||[]).forEach(function(e,i){if("AssignmentExpression"===e.type&&(void 0===t[i]&&(t[i]=r.eval(e.right)),e=e.left),"Identifier"===e.type)o[e.name]=t[i];else if("ArrayExpression"===e.type)e.elements.forEach(function(e,n){var a=t[i][n];if("AssignmentExpression"===e.type&&(void 0===a&&(a=r.eval(e.right)),e=e.left),"Identifier"!==e.type)throw new Error("Unexpected arrow function argument");o[e.name]=a});else if("ObjectExpression"===e.type){var a=[];e.properties.forEach(function(e){var s,u=e;if("AssignmentExpression"===u.type&&(u=u.left),"Property"===u.type)s="Identifier"===u.key.type?u.key.name:r.eval(u.key).toString();else if("Identifier"===u.type)s=u.name;else{if("SpreadElement"!==u.type||"Identifier"!==u.argument.type)throw new Error("Unexpected arrow function argument");s=u.argument.name}var l=t[i][s];"SpreadElement"===u.type?(l=n({},t[i]),a.forEach(function(e){delete l[e]})):void 0===l&&"AssignmentExpression"===e.type&&(l=r.eval(e.right)),o[s]=l,a.push(s)})}else{if("SpreadElement"!==e.type||"Identifier"!==e.argument.type)throw new Error("Unexpected arrow function argument");o[e.argument.name]=t.slice(i)}}),o},u.evalAssignmentExpression=function(t){var n=this;return this.evalSyncAsync(this.getContextAndKey(t.left),function(r){var o=r[0],i=r[1];return n.eval(t.right,function(n){return e.assignOps[t.operator](o,i,n)})})},u.evalUpdateExpression=function(t){return this.evalSyncAsync(this.getContextAndKey(t.argument),function(n){return e.evalUpdateOperation(t,n[0],n[1])})},u.evalAwaitExpression=function(t){return e.evalAsync(t.argument,this.context)},e.evalUpdateOperation=function(e,t,n){return e.prefix?"++"===e.operator?++t[n]:--t[n]:"++"===e.operator?t[n]++:t[n]--},u.getContextAndKey=function(e){var t=this;if("MemberExpression"===e.type)return this.evalSyncAsync(this.evaluateMember(e),function(e){var n=e[0],r=e[2];return[n,(i.getKeyValue(n,r,t.options)||[r,void 0])[0]]});if("Identifier"===e.type){var n=i.getKeyValue(this.context,e.name,this.options);return[this.context,(n||[e.name,void 0])[0]]}if("ConditionalExpression"===e.type)return this.eval(e.test,function(n){return t.getContextAndKey(n?e.consequent:e.alternate)});throw new Error("Invalid Member Key")},u.evalNewExpression=function(t){var n=this;return this.evalSyncAsync(this.evalCall(t.callee),function(r){var o=r[0];return n.evalSyncAsync(n.evalArray(t.arguments),function(n){return e.construct(o,n,t)})})},u.evalObjectExpression=function(t){var n=this,r={},o=t.properties.map(function(t){if("SpreadElement"===t.type)Object.assign(r,e.eval(t.argument,n.context,n.options));else if("Property"===t.type)return n.evalSyncAsync("Identifier"===t.key.type?t.key.name:n.eval(t.key),function(e){return n.eval(t.shorthand?t.key:t.value,function(t){r[e]=t})})});return this.isAsync?Promise.all(o).then(function(){return r}):r},u.evalSpreadElement=function(e){return this.eval(e.argument)},u.evalTaggedTemplateExpression=function(e){var t=[this.evalCall(e.tag),this.evalSyncAsync(this.evalArray(e.quasi.expressions),function(t){return[e.quasi.quasis.map(function(e){return e.value.cooked})].concat(t)})],n=function(e){var t=e[0];return t[0].apply(t[1],e[1])};return this.isAsync?Promise.all(t).then(n):n(t)},u.evalTemplateLiteral=function(e){return this.evalSyncAsync(this.evalArray(e.expressions),function(t){return e.quasis.reduce(function(e,n,r){return e+=n.value.cooked,n.tail||(e+=t[r]),e},"")})},e.construct=function(t,n,r){try{return new(Function.prototype.bind.apply(t,[null].concat(n)))}catch(t){throw new Error(e.nodeFunctionName(r.callee)+" is not a constructor")}},e.validateFnAndCall=function(t,n,r){if("function"!=typeof t){if(!t&&r&&r.optional)return[function(){},n];var o=e.nodeFunctionName(r||n);throw new Error("'"+o+"' is not a function")}return[t,n]},e.nodeFunctionName=function(e){return e&&(e.name||e.property&&e.property.name)},e.getKeyValue=function(e,t,n){return i.getKeyValue(e,t,n)},a=e,(s=[{key:"caseSensitive",get:function(){return!(!this.options||!this.options.caseSensitive)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(a.prototype,s),Object.defineProperty(a,"prototype",{writable:!1}),e}();a.jsep=t.default,a.parse=t.default,a.evaluate=a.eval,a.evaluators={ArrayExpression:a.prototype.evalArrayExpression,LogicalExpression:a.prototype.evalBinaryExpression,BinaryExpression:a.prototype.evalBinaryExpression,CallExpression:a.prototype.evalCallExpression,Compound:a.prototype.evalCompoundExpression,ConditionalExpression:a.prototype.evalConditionalExpression,Identifier:a.prototype.evalIdentifier,Literal:a.evalLiteral,OptionalMemberExpression:a.prototype.evalMemberExpression,MemberExpression:a.prototype.evalMemberExpression,ThisExpression:a.prototype.evalThisExpression,UnaryExpression:a.prototype.evalUnaryExpression,ArrowFunctionExpression:a.prototype.evalArrowFunctionExpression,AssignmentExpression:a.prototype.evalAssignmentExpression,UpdateExpression:a.prototype.evalUpdateExpression,AwaitExpression:a.prototype.evalAwaitExpression,NewExpression:a.prototype.evalNewExpression,ObjectExpression:a.prototype.evalObjectExpression,SpreadElement:a.prototype.evalSpreadElement,TaggedTemplateExpression:a.prototype.evalTaggedTemplateExpression,TemplateLiteral:a.prototype.evalTemplateLiteral},a.conditionalEvaluators={},a.DEFAULT_PRECEDENCE={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},a.binops={"||":function(e,t){return e||t},"&&":function(e,t){return e&&t},"|":function(e,t){return e|t},"^":function(e,t){return e^t},"&":function(e,t){return e&t},"==":function(e,t){return e==t},"!=":function(e,t){return e!=t},"===":function(e,t){return e===t},"!==":function(e,t){return e!==t},"<":function(e,t){return e<t},">":function(e,t){return e>t},"<=":function(e,t){return e<=t},">=":function(e,t){return e>=t},"<<":function(e,t){return e<<t},">>":function(e,t){return e>>t},">>>":function(e,t){return e>>>t},"+":function(e,t){return e+t},"-":function(e,t){return e-t},"*":function(e,t){return e*t},"/":function(e,t){return e/t},"%":function(e,t){return e%t}},a.unops={"-":function(e){return-e},"+":function(e){return+e},"~":function(e){return~e},"!":function(e){return!e}},a.assignOps={"=":function(e,t,n){return e[t]=n},"*=":function(e,t,n){return e[t]*=n},"**=":function(e,t,n){var r;return e[r=t]=Math.pow(e[r],n)},"/=":function(e,t,n){return e[t]/=n},"%=":function(e,t,n){return e[t]%=n},"+=":function(e,t,n){return e[t]+=n},"-=":function(e,t,n){return e[t]-=n},"<<=":function(e,t,n){return e[t]<<=n},">>=":function(e,t,n){return e[t]>>=n},">>>=":function(e,t,n){return e[t]>>>=n},"&=":function(e,t,n){return e[t]&=n},"^=":function(e,t,n){return e[t]^=n},"|=":function(e,t,n){return e[t]|=n}},a.defaultOptions={caseSensitive:!0};var s=a.DEFAULT_PRECEDENCE,u=a.evaluators,l=a.binops,c=a.unops,p=a.assignOps,f=a.addUnaryOp,v=a.addBinaryOp,y=a.addEvaluator,d=a.registerPlugin,h=a.addOptions,m=a.eval,x=a.evalAsync,E=a.compile,g=a.compileAsync,A=a.evalExpr,b=a.evalExprAsync,w=a.getKeyValue;Object.defineProperty(exports,"jsep",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(exports,"parse",{enumerable:!0,get:function(){return t.default}}),exports.DEFAULT_PRECEDENCE=s,exports.addBinaryOp=v,exports.addEvaluator=y,exports.addOptions=h,exports.addUnaryOp=f,exports.assignOps=p,exports.binops=l,exports.compile=E,exports.compileAsync=g,exports.default=a,exports.evalAsync=x,exports.evalExpr=A,exports.evalExprAsync=b,exports.evaluate=m,exports.evaluators=u,exports.getKeyValue=w,exports.registerPlugin=d,exports.unops=c;
//# sourceMappingURL=jse-eval.cjs.map