amis-formula 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (()=>{"use strict";var t={453:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Evaluator=void 0;var n=r(752),i=(0,n.__importDefault)(r(245)),o=r(589),a=function(){function t(t){void 0===t&&(t={defaultFilter:"html"}),this.options=t,this.functions={},this.filters=(0,n.__assign)((0,n.__assign)((0,n.__assign)({},this.filters),(0,o.getFilters)()),null==t?void 0:t.filters),this.functions=(0,n.__assign)((0,n.__assign)({},this.functions),null==t?void 0:t.functions)}return t.prototype.evalute=function(t,e){if(void 0===e&&(e={}),this.data=e,t&&t.type){var r=t.type.replace(/(?:_|\-)(\w)/g,(function(t,e){return e.toUpperCase()})),n=this.functions[r]||this[r];if(!n)throw new Error("".concat(t.type," unkown."));return n.call(this,t,e)}return t},t.prototype.document=function(t,e){var r=this;if(t.body.length){var n=t.body.map((function(t){return r.evalute(t,e)}));return 1===n.length?n[0]:n.join("")}},t.prototype.filter=function(t,e){for(var r=this,n=this.evalute(t.input,e),i=t.filters.concat(),o={data:e,restFilters:i};i.length;){var a=i.shift(),u=this.filters[a.name];if(!u)throw new Error("filter `".concat(a.name,"` not exits"));n=u.apply(o,[n].concat(a.args.map((function(t){return"mixed"===(null==t?void 0:t.type)?t.body.map((function(t){return"string"==typeof t?t:r.evalute(t,e)})).join(""):t.type?r.evalute(t,e):t}))))}return n},t.prototype.raw=function(t){return t.value},t.prototype.script=function(t,e){var r,n=this.options.defaultFilter;return n&&"filter"!==(null===(r=t.body)||void 0===r?void 0:r.type)&&(t.body={type:"filter",input:t.body,filters:[{name:n.replace(/^\|\s/,""),args:[]}]}),this.evalute(t.body,e)},t.prototype.expressionList=function(t,e){var r=this;return t.body.reduce((function(t,n){return r.evalute(n,e)}))},t.prototype.template=function(t,e){var r=this;return t.args.map((function(t){return r.evalute(t,e)})).join("")},t.prototype.templateRaw=function(t){return t.value},t.prototype.get=function(t,e){var r=this.evalute(t.host,e),n=this.evalute(t.key,e);return null==r?void 0:r[n]},t.prototype.unary=function(t,e){var r=this.evalute(t.value,e);switch(t.op){case"+":return+r;case"-":return-r;case"~":return~r;case"!":return!r}},t.prototype.formatNumber=function(t,e){void 0===e&&(e=!1);var r=typeof t;return"string"===r?(e?parseInt(t,10):parseFloat(t))||0:"number"===r&&e?Math.round(t):null!=t?t:0},t.prototype.power=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return Math.pow(this.formatNumber(r),this.formatNumber(n))},t.prototype.multiply=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)*this.formatNumber(n)},t.prototype.divide=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)/this.formatNumber(n)},t.prototype.remainder=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)%this.formatNumber(n)},t.prototype.add=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)+this.formatNumber(n)},t.prototype.minus=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)-this.formatNumber(n)},t.prototype.shift=function(t,e){var r=this.evalute(t.left,e),n=this.formatNumber(this.evalute(t.right,e),!0);return"<<"===t.op?r<<n:">>"==t.op?r>>n:r>>>n},t.prototype.lt=function(t,e){return this.evalute(t.left,e)<this.evalute(t.right,e)},t.prototype.gt=function(t,e){return this.evalute(t.left,e)>this.evalute(t.right,e)},t.prototype.le=function(t,e){return this.evalute(t.left,e)<=this.evalute(t.right,e)},t.prototype.ge=function(t,e){return this.evalute(t.left,e)>=this.evalute(t.right,e)},t.prototype.eq=function(t,e){return this.evalute(t.left,e)==this.evalute(t.right,e)},t.prototype.ne=function(t,e){return this.evalute(t.left,e)!=this.evalute(t.right,e)},t.prototype.streq=function(t,e){return this.evalute(t.left,e)===this.evalute(t.right,e)},t.prototype.strneq=function(t,e){return this.evalute(t.left,e)!==this.evalute(t.right,e)},t.prototype.binary=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return"&"===t.op?r&n:"^"===t.op?r^n:r|n},t.prototype.and=function(t,e){return this.evalute(t.left,e)&&this.evalute(t.right,e)},t.prototype.or=function(t,e){return this.evalute(t.left,e)||this.evalute(t.right,e)},t.prototype.number=function(t,e){return t.value},t.prototype.variable=function(t,e){return"&"===t.name?e:e[t.name]},t.prototype.array=function(t,e){var r=this;return t.members.map((function(t){return r.evalute(t,e)}))},t.prototype.literal=function(t){return t.value},t.prototype.string=function(t){return t.value},t.prototype.object=function(t,e){var r=this,n={};return t.memebers.forEach((function(t){var i=t.key,o=t.value;n[i]=r.evalute(o,e)})),n},t.prototype.conditional=function(t,e){return this.evalute(t.test,e)?this.evalute(t.consequent,e):this.evalute(t.alternate,e)},t.prototype.funcCall=function(t,e){var r=this,n="fn".concat(t.identifier),i=this.functions[n]||this[n]||this.filters[t.identifier];if(!i)throw new Error("".concat(t.identifier,"函数没有定义"));var o=t.args;return o=~["IF","AND","OR","XOR","IFS"].indexOf(t.identifier)?o.map((function(t){return function(){return r.evalute(t,e)}})):o.map((function(t){return r.evalute(t,e)})),i.apply(this,o)},t.prototype.fnIF=function(t,e,r){return t()?e():r()},t.prototype.fnAND=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t.every((function(t){return t()}))},t.prototype.fnOR=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t.some((function(t){return t()}))},t.prototype.fnXOR=function(t,e){return!!t()==!!e()},t.prototype.fnIFS=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(t.length%2&&t.splice(t.length-1,0,(function(){return!0}));t.length;){var r=t.shift(),n=t.shift();if(r())return n()}},t.prototype.fnABS=function(t){return Math.abs(t)},t.prototype.fnMax=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Math.max.apply(Math,t)},t.prototype.fnMin=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Math.min.apply(Math,t)},t.prototype.fnSUM=function(){for(var t=this,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return e.reduce((function(e,r){return e+t.formatNumber(r)||0}),0)},t.prototype.fnINT=function(t){return Math.floor(t)},t.prototype.fnMOD=function(t,e){return t%e},t.prototype.fnPI=function(){return Math.PI},t.prototype.fnROUND=function(t,e){var r=Math.round(e);if(r){var n=Math.pow(10,r);return Math.round(t*n)/n}return Math.round(t)},t.prototype.fnSQRT=function(t){return Math.sqrt(t)},t.prototype.fnAVG=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this.fnSUM.apply(this,t)/t.length},t.prototype.fnUPPERMONEY=function(){return"todo"},t.prototype.fnRAND=function(){return Math.random()},t.prototype.normalizeText=function(t){return t instanceof Date?(0,i.default)(t).format():"".concat(t)},t.prototype.fnLEFT=function(t,e){return(t=this.normalizeText(t)).substring(0,e)},t.prototype.fnRIGHT=function(t,e){return(t=this.normalizeText(t)).substring(t.length-e,t.length)},t.prototype.fnLEN=function(t){return null==(t=this.normalizeText(t))?void 0:t.length},t.prototype.fnISEMPTY=function(t){return!t||!String(t).trim()},t.prototype.fnCONCATENATE=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t.join("")},t.prototype.fnCHAR=function(t){return String.fromCharCode(t)},t.prototype.fnLOWER=function(t){return(t=this.normalizeText(t)).toLowerCase()},t.prototype.fnUPPER=function(t){return(t=this.normalizeText(t)).toUpperCase()},t.prototype.fnSPLIT=function(t,e){return(t=this.normalizeText(t)).split(e)},t.prototype.fnTRIM=function(t){return(t=this.normalizeText(t)).trim()},t.prototype.fnSTARTSWITH=function(t,e){return!!e&&0===(t=this.normalizeText(t)).indexOf(e)},t.prototype.fnCONTAINS=function(t,e){return!!e&&!!~(t=this.normalizeText(t)).indexOf(e)},t.prototype.fnREPLACE=function(t,e,r){for(var n=t=this.normalizeText(t);;){var i=n.indexOf(e);if(!~i)break;n=n.substring(0,i)+r+n.substring(i+e.length)}return n},t.prototype.fnSEARCH=function(t,e,r){var n=t=this.normalizeText(t);(r=r||0)&&(n=n.substring(r));var i=n.indexOf(e);return~i?i+e:-1},t.prototype.fnMID=function(t,e,r){return(t=this.normalizeText(t)).substring(e,e+r)},t.prototype.fnDATE=function(t,e,r,n,i,o){return void 0===e?new Date(t):new Date(t,e,r,n,i,o)},t.prototype.fnTIMESTAMP=function(t,e){return parseInt((0,i.default)(t).format("x"===e?"x":"X"),10)},t.prototype.fnTODAY=function(){return new Date},t.prototype.fnNOW=function(){return new Date},t.prototype.fnSTARTOF=function(t,e){return(0,i.default)(t).startOf(e||"day").toDate()},t.prototype.fnENDOF=function(t,e){return(0,i.default)(t).endOf(e||"day").toDate()},t.prototype.normalizeDate=function(t){if("string"==typeof t)for(var e=["","YYYY-MM-DD HH:mm:ss"];e.length;){var r=e.shift(),n=(0,i.default)(t,r);if(n.isValid())return n.toDate()}else if("number"==typeof t)return new Date(t);return t},t.prototype.fnYEAR=function(t){return(t=this.normalizeDate(t)).getFullYear()},t.prototype.fnMONTH=function(t){return(t=this.normalizeDate(t)).getMonth()+1},t.prototype.fnDAY=function(t){return(t=this.normalizeDate(t)).getDate()},t.prototype.fnHOUR=function(t){return(t=this.normalizeDate(t)).getHours()},t.prototype.fnHMINUTE=function(t){return(t=this.normalizeDate(t)).getMinutes()},t.prototype.fnSECOND=function(t){return(t=this.normalizeDate(t)).getSeconds()},t.prototype.fnYEARS=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"year")},t.prototype.fnMINUTES=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"minutes")},t.prototype.fnDAYS=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"days")},t.prototype.fnHOURS=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"hour")},t.prototype.fnDATEMODIFY=function(t,e,r){return t=this.normalizeDate(t),(0,i.default)(t).add(e,r).toDate()},t.prototype.fnSTRTODATE=function(t,e){return void 0===e&&(e=""),(0,i.default)(t,e).toDate()},t.prototype.fnISBEFORE=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isBefore((0,i.default)(e),r)},t.prototype.fnISAFTER=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isAfter((0,i.default)(e),r)},t.prototype.fnISSAMEORBEFORE=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isSameOrBefore((0,i.default)(e),r)},t.prototype.fnISSAMEORAFTER=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isSameOrAfter((0,i.default)(e),r)},t.prototype.fnCOUNT=function(t){return Array.isArray(t)?t.length:t?1:0},t}();e.Evaluator=a},589:function(t,e,r){var n=this;Object.defineProperty(e,"__esModule",{value:!0}),e.getFilters=e.registerFilter=e.filters=void 0;var i=r(752),o=(0,i.__importDefault)(r(245)),a=(0,i.__importDefault)(r(341)),u=(0,i.__importDefault)(r(492)),f=(0,i.__importDefault)(r(309)),l=(0,i.__importDefault)(r(459)),s=r(378);function c(t,e,r,n,i,o){return e&&function(t){for(var e;~["isTrue","isFalse","isMatch","isEquals","notMatch","notEquals"].indexOf(null===(e=t[0])||void 0===e?void 0:e.name);)t.shift()}(r.restFilters),n||e?p(n?i:o,r.data):t}function p(t,e){var r;return"string"==typeof t&&/,/.test(t)?t.split(/\s*,\s*/).filter((function(t){return t})):"string"==typeof t&&null!==(r=(0,s.resolveVariable)(t,e))&&void 0!==r?r:t}function v(t){return t&&"string"==typeof t?/^\[.*\]$/.test(t)?t.substring(1,t.length-1).split(/\s*,\s*/).filter((function(t){return t})):t.split(/\s*,\s*/).filter((function(t){return t})):t}e.filters={map:function(t,r){for(var o=[],a=2;a<arguments.length;a++)o[a-2]=arguments[a];return Array.isArray(t)&&e.filters[r]?t.map((function(t){var a;return(a=e.filters[r]).call.apply(a,(0,i.__spreadArray)([n,t],o,!1))})):t},html:function(t){return(0,s.escapeHtml)(t)},json:function(t,e){return void 0===e&&(e=2),e?JSON.stringify(t,null,parseInt(e,10)):JSON.stringify(t)},toJson:function(t){var e;try{e=JSON.parse(t)}catch(t){e=null}return e},toInt:function(t){return"string"==typeof t?parseInt(t,10):t},toFloat:function(t){return"string"==typeof t?parseFloat(t):t},raw:function(t){return t},now:function(){return new Date},toDate:function(t,e){void 0===e&&(e="");var r=(0,o.default)(t,e);return r.add(),r.isValid()?r.toDate():void 0},fromNow:function(t,e){return void 0===e&&(e=""),(0,o.default)(t,e).fromNow()},dateModify:function(t,e,r,n){return void 0===e&&(e="add"),void 0===r&&(r=0),void 0===n&&(n="days"),t instanceof Date||(t=new Date),"endOf"===e||"startOf"===e?(0,o.default)(t)["endOf"===e?"endOf":"startOf"](r||"day").toDate():(0,o.default)(t)["add"===e?"add":"subtract"](parseInt(r,10)||0,n).toDate()},date:function(t,e,r){return void 0===e&&(e="LLL"),void 0===r&&(r="X"),(0,o.default)(t,r).format(e)},number:function(t){var e=String(t).split(".");return e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),e.join(".")},trim:function(t){return"string"==typeof t?t.trim():t},percent:function(t,e){void 0===e&&(e=0),t=parseFloat(t)||0,e=parseInt(e,10)||0;var r=100*t,n=Math.pow(10,e);return(Math.round(r*n)/n).toFixed(e)+"%"},duration:function(t){return t?(0,s.formatDuration)(t):t},bytes:function(t){return t?(0,s.prettyBytes)(parseFloat(t)):t},round:function(t,e){var r;if(void 0===e&&(e=2),isNaN(t))return 0;e=null!==(r=parseInt(e,10))&&void 0!==r?r:2;var n=Math.pow(10,e);return(Math.round(t*n)/n).toFixed(e)},truncate:function(t,e,r){return"string"!=typeof t?t:(r=r||"...",null==e?t:(e=parseInt(e,10)||200,t.substring(0,e)+(t.length>e?r:"")))},url_encode:function(t){return encodeURIComponent(t)},url_decode:function(t){return decodeURIComponent(t)},default:function(t,e,r){var n;return void 0===r&&(r=!1),null!==(n=r?t:t||void 0)&&void 0!==n?n:function(){try{if("undefined"===e)return;return JSON.parse(e)}catch(t){return e}}()},join:function(t,e){return t&&t.join?t.join(e):t},split:function(t,e){return void 0===e&&(e=","),"string"==typeof t?t.split(e):t},sortBy:function(t,e,r,n){return void 0===r&&(r="alpha"),Array.isArray(t)?t.sort(function(t,e,r){return function(n,i){if(!n||!i)return 0;var o=(0,s.resolveVariable)(t,n),a=(0,s.resolveVariable)(t,i);return("numerical"===e?(parseFloat(o)||0)-(parseFloat(a)||0):String(o).localeCompare(String(a)))*("desc"===r?-1:1)}}(e,r,n)):t},objectToArray:function(t,e,r){return void 0===e&&(e="label"),void 0===r&&(r="value"),(0,a.default)(t,(function(t,n,i){var o;(t||(t=[])).push(((o={})[e]=n,o[r]=i,o))}),[])},unique:function(t,e){return Array.isArray(t)?e?(0,f.default)(t,e):(0,l.default)(t):t},topAndOther:function(t,e,r,n){if(void 0===e&&(e=10),void 0===r&&(r="name"),void 0===n&&(n="其他"),Array.isArray(t)&&e){var i=(0,u.default)(t,(function(r){var n=t.indexOf(r)+1;return n>=e?e:n}));return Object.keys(i).map((function(t,o){var a=i[t].reduce((function(t,e){return Object.keys(e).forEach((function(r){t.hasOwnProperty(r)&&"labelField"!==r?"number"==typeof e[r]&&"number"==typeof t[r]?t[r]+=e[r]:"string"==typeof e[r]&&/^(?:\-|\.)\d/.test(e[r])&&"number"==typeof t[r]?t[r]+=parseFloat(e[r])||0:"string"==typeof e[r]&&"string"==typeof t[r]?t[r]+=", ".concat(e[r]):t[r]=e[r]:t[r]=e[r]})),t}),{});return o===e-1&&(a[r]=n||"其他"),a}))}return t},first:function(t){return t&&t[0]},nth:function(t,e){return void 0===e&&(e=0),t&&t[e]},last:function(t){return t&&(t.length?t[t.length-1]:null)},minus:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)-Number(p(e,this.data)))},plus:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)+Number(p(e,this.data)))},times:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)*Number(p(e,this.data)))},division:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)/Number(p(e,this.data)))},count:function(t){return Array.isArray(t)||"string"==typeof t?t.length:0},sum:function(t,e){if(!Array.isArray(t))return t;var r=t.reduce((function(t,r){return t+(parseFloat(e?(0,s.pickValues)(e,r):r)||0)}),0);return(0,s.stripNumber)(r)},abs:function(t){return"number"==typeof t?Math.abs(t):t},pick:function(t,e){return void 0===e&&(e="&"),Array.isArray(t)&&!/^\d+$/.test(e)?t.map((function(t,r){return(0,s.pickValues)(e,(0,s.createObject)({index:r},t))})):(0,s.pickValues)(e,t)},pick_if_exist:function(t,e){return void 0===e&&(e="&"),Array.isArray(t)?t.map((function(t){return(0,s.resolveVariable)(e,t)||t})):(0,s.resolveVariable)(e,t)||t},str2date:function(t,e,r){return void 0===e&&(e="X"),void 0===r&&(r="X"),t?(0,s.filterDate)(t,this.data,e).format(r):""},asArray:function(t){return Array.isArray(t)?t:t?[t]:t},concat:function(t){for(var e=this,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return Array.isArray(t)?t.concat.apply(t,r.map((function(t){return p(t,e.data)}))):t},filter:function(t,e,r,n){if(!Array.isArray(t)||!e||!r)return t;var i=r,o=function(){return!0};if("isTrue"===i)o=function(t){return!!t};else if("isFalse"===i)o=function(t){return!t};else if("isExists"===i)o=function(t){return void 0!==t};else if("equals"===i||"equal"===i)n=n?p(n,this.data):"",o=function(t){return n==t};else if("isIn"===i){var a=n?p(n,this.data):[];a=v(a),a=Array.isArray(a)?a:a?[a]:[],o=function(t){return!a.length||!!~a.indexOf(t)}}else if("notIn"===i){var u=n?p(n,this.data):[];u=v(u),u=Array.isArray(u)?u:u?[u]:[],o=function(t){return!~u.indexOf(t)}}else{if("match"!==i&&(i="match",n=r),!(n=n?p(n,this.data):""))return t;var f=(0,s.string2regExp)("".concat(n),!1);o=function(t){return f.test(String(t))}}var l=/\s*\*\s*/.test(e);return e=e.split(/\s*,\s*/),t.filter((function(t){return(l?Object.keys(t):e).some((function(e){return o((0,s.resolveVariable)(e,t),e,t)}))}))},base64Encode:function(t){return btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode("0x"+e)})))},base64Decode:function(t){return decodeURIComponent(atob(t).split("").map((function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)})).join(""))},lowerCase:function(t){return t&&"string"==typeof t?t.toLowerCase():t},upperCase:function(t){return t&&"string"==typeof t?t.toUpperCase():t},isTrue:function(t,e,r){var n=arguments.length>2;return c(t,n,this,!!t,e,r)},isFalse:function(t,e,r){var n=arguments.length>2;return c(t,n,this,!t,e,r)},isMatch:function(t,e,r,n){var i=arguments.length>3;return c(t,i,this,(e=p(e,this.data))&&(0,s.string2regExp)("".concat(e),!1).test(String(t)),r,n)},notMatch:function(t,e,r,n){var i=arguments.length>3;return c(t,i,this,(e=p(e,this.data))&&!(0,s.string2regExp)("".concat(e),!1).test(String(t)),r,n)},isEquals:function(t,e,r,n){e=/^\d+$/.test(e)?parseInt(e,10):p(e,this.data);var i=arguments.length>3;return c(t,i,this,t===e,r,n)},notEquals:function(t,e,r,n){e=/^\d+$/.test(e)?parseInt(e,10):p(e,this.data);var i=arguments.length>3;return c(t,i,this,t!==e,r,n)}},e.registerFilter=function(t,r){e.filters[t]=r},e.getFilters=function(){return e.filters}},303:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.evaluate=e.registerFilter=e.getFilters=e.filters=e.Evaluator=e.lexer=e.parse=void 0;var n=r(752),i=r(453);Object.defineProperty(e,"Evaluator",{enumerable:!0,get:function(){return i.Evaluator}});var o=r(833);Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return o.parse}});var a=r(682);Object.defineProperty(e,"lexer",{enumerable:!0,get:function(){return a.lexer}});var u=r(589);Object.defineProperty(e,"registerFilter",{enumerable:!0,get:function(){return u.registerFilter}}),Object.defineProperty(e,"filters",{enumerable:!0,get:function(){return u.filters}}),Object.defineProperty(e,"getFilters",{enumerable:!0,get:function(){return u.getFilters}}),(0,n.__exportStar)(r(378),e),e.evaluate=function(t,e,r){return"string"==typeof t&&(t=(0,o.parse)(t,r)),new i.Evaluator(r).evalute(t,e)}},682:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.lexer=e.TokenName=void 0,e.TokenName={},e.TokenName[1]="Boolean",e.TokenName[2]="Raw",e.TokenName[3]="Variable",e.TokenName[4]="OpenScript",e.TokenName[5]="CloseScript",e.TokenName[6]="EOF",e.TokenName[7]="Identifier",e.TokenName[8]="Literal",e.TokenName[9]="Numeric",e.TokenName[10]="Punctuator",e.TokenName[11]="String",e.TokenName[12]="RegularExpression",e.TokenName[13]="TemplateRaw",e.TokenName[14]="TemplateLeftBrace",e.TokenName[15]="TemplateRightBrace",e.TokenName[16]="OpenFilter",e.TokenName[17]="Char";var r=["===","!==","==","!=","<>","<",">","<=",">=","||","&&","++","--","<<",">>",">>>","+=","*=","/=","=","*","/","-","+","^","!","%","&","|","(",")","[","]","{","}","?",":",";",",",".","$"],n={'"':0,"\\":1,"/":2,b:3,f:4,n:5,r:6,t:7,u:8};function i(t){return t>="1"&&t<="9"}function o(t){return t>="0"&&t<="9"}function a(t){return"e"===t||"E"===t}function u(t,e){return void 0===e&&(e=[]),t.replace(/\\(.)/g,(function(t,r){return"b"===r?"\b":"f"===r?"\f":"n"===r?"\n":"r"===r?"\r":"t"===r?"\t":"v"===r?"\v":~e.indexOf(r)?r:t}))}function f(t){return Number(t)}e.lexer=function(t,l){var s=1,c=1,p=0,v=0,d=[v],h=[],y=!1!==(null==l?void 0:l.allowFilter);function m(t){d.push(v=t)}function g(){d.pop(),v=d[d.length-1]}function b(t){if(t&&"string"==typeof t){var e=t.split(/[\r\n]+/);return{index:p+t.length,line:s+e.length-1,column:c+e[e.length-1].length}}return{index:p,line:s,column:c}}function k(){return h.length?h.shift():(1!==v&&2!==v&&3!==v||function(){for(;p<t.length;){var e=t[p];if("\r"===e)p++,s++,c=1,"\n"===t.charAt(p)&&p++;else if("\n"===e)p++,s++,c=1;else{if("\t"!==e&&" "!==e)break;p++,c++}}}(),function(){if(p>=t.length)return{type:e.TokenName[6],value:void 0,start:b(),end:b()}}()||function(){if(0!==v)return null;for(var r="",i=0,o=p;o<t.length;){var a=t[o];if(1===i){if(!n.hasOwnProperty(a)&&"$"!==a){var f=b(r+a);throw new SyntaxError("Unexpected token ".concat(a," in ").concat(f.line,":").concat(f.column))}r+=a,o++,i=0}else{if("\\"===a){r+=a,o++,i=1;continue}if("$"===a){var l=t[o+1];if("{"===l)break;if("$"===l){h.push({type:e.TokenName[3],value:"&",raw:"$$",start:b(t.substring(p,o)),end:b(t.substring(p,o+2))});break}for(var s=o+2;/^[a-zA-Z0-9_.][a-zA-Z0-9_.\[\]]*$/.test(t.substring(o+1,s))&&s<=t.length;)s++;if(s-o>2){h.push({type:e.TokenName[3],value:t.substring(o+1,s),raw:t.substring(o,s),start:b(t.substring(p,o)),end:b(t.substring(p,s))});break}}o++,r+=a}}return o>p?{type:e.TokenName[2],value:u(r,["`","$"]),raw:r,start:b(),end:b(r)}:h.length?h.shift():null}()||function(){if("$"===t[p]&&"{"===t[p+1]){m(1);var r=t.substring(p,p+2);return{type:e.TokenName[4],value:r,start:b(),end:b(r)}}return null}()||function(){if(1!==v&&2!==v&&3!==v&&5!==v)return null;var l,s,c,d,h=(s=t.substring(p,p+4).toLowerCase(),c=s,d=!1,"true"===s||"null"===s?(d=!0,c="true"===s||null):"false"===(s=t.substring(p,p+5).toLowerCase())?(d=!0,c=!1):"undefined"===(s=t.substring(p,p+9).toLowerCase())&&(d=!0,c=void 0),(d?{type:!0===c||!1===c?e.TokenName[1]:e.TokenName[8],value:c,raw:s,start:b(),end:b(s)}:null)||function(){for(var r=p,n="";r<t.length;){var i=t[r];if(!/^[\u4e00-\u9fa5A-Za-z_$@][\u4e00-\u9fa5A-Za-z0-9_]*$/.test(n+i))break;n+=i,r++}if(r>p){var o=t.substring(p,r);return{type:e.TokenName[7],value:o,start:b(),end:b(o)}}return null}()||function(){var r=p,n=r,u=0;t:for(;r<t.length;){var l=t.charAt(r);switch(u){case 0:if("-"===l)u=1;else if("0"===l)n=r+1,u=2;else{if(!i(l))return null;n=r+1,u=3}break;case 1:if("0"===l)n=r+1,u=2;else{if(!i(l))return null;n=r+1,u=3}break;case 2:if("."===l)u=4;else{if(!a(l))break t;u=6}break;case 3:if(o(l))n=r+1;else if("."===l)u=4;else{if(!a(l))break t;u=6}break;case 4:if(!o(l))break t;n=r+1,u=5;break;case 5:if(o(l))n=r+1;else{if(!a(l))break t;u=6}break;case 6:if("+"===l||"-"===l)u=7;else{if(!o(l))break t;n=r+1,u=7}break;case 7:if(!o(l))break t;n=r+1}r++}if(n>0){var s=t.slice(p,n);return{type:e.TokenName[9],value:f(s),raw:s,start:b(),end:b(s)}}return null}()||function(){for(var r='"',i=0,o=p;o<t.length;){var a=t[o];if(0===i){if('"'!==a&&"'"!==a)break;r=a,o++,i=1}else if(2===i){if(!n.hasOwnProperty(a)&&a!==r){var f=b(t.substring(p,o+1));throw new SyntaxError("Unexpected token ".concat(a," in ").concat(f.line,":").concat(f.column))}o++,i=1}else if("\\"===a)o++,i=2;else{if(a===r){o++;break}o++}}if(o>p){var l=t.substring(p,o);return{type:e.TokenName[11],value:u(l.substring(1,l.length-1),[r]),raw:l,start:b(),end:b(l)}}return null}()||((l=r.find((function(e){return t.substring(p,p+e.length)===e})))?{type:e.TokenName[10],value:l,start:b(),end:b(l)}:null)||function(){if(5!==v)return null;var i=p,o=t[i];if("\\"===o){var a=t[i+1];if("$"!==a&&!~r.indexOf(a)&&!n.hasOwnProperty(a)){var u=b(t.substring(p,p+1));throw new SyntaxError("Unexpected token ".concat(o," in ").concat(u.line,":").concat(u.column))}i++,o="b"===a?"\b":"f"===a?"\f":"n"===a?"\n":"r"===a?"\r":"t"===a?"\t":"v"===a?"\v":a}return{type:e.TokenName[17],value:o,start:b(),end:b(t.substring(p,i+1))}}());if("{"===(null==h?void 0:h.value))m(3);else if("}"===(null==h?void 0:h.value)){5===v&&g();var k=v;if(g(),1===k||2===k)return{type:e.TokenName[2===k?15:5],value:h.value,start:b(),end:b(h.value)}}return 1===v&&"|"===(null==h?void 0:h.value)&&y?(m(5),{type:e.TokenName[16],value:"|",start:b(),end:b("|")}):5===v&&"|"===(null==h?void 0:h.value)?{type:e.TokenName[16],value:"|",start:b(),end:b("|")}:h||"`"!==t[p]?h:(m(4),{type:e.TokenName[10],value:"`",start:b(),end:b("`")})}()||function(){if(4!==v)return null;for(var r=0,i=p;i<t.length;){var o=t[i];if(2===r){if(!n.hasOwnProperty(o)&&"`"!==o&&"$"!==o){var a=b(t.substring(p,i+1));throw new SyntaxError("Unexpected token ".concat(o," in ").concat(a.line,":").concat(a.column))}i++,r=1}else if("\\"===o)i++,r=2;else{if("`"===o){g(),h.push({type:e.TokenName[10],value:"`",start:b(t.substring(p,i)),end:b(t.substring(p,i+1))});break}if("$"===o){if("{"===t[i+1]){m(2),h.push({type:e.TokenName[14],value:"${",start:b(t.substring(p,i)),end:b(t.substring(p,i+2))});break}i++}else i++}}if(i>p){var f=t.substring(p,i);return{type:e.TokenName[13],value:u(f,["`","$"]),raw:f,start:b(),end:b(f)}}return h.length?h.shift():null}())}return(null==l?void 0:l.evalMode)&&m(2),{next:function(){var e=k();if(e)return p=e.end.index,s=e.end.line,c=e.end.column,e;var r=b();throw new SyntaxError('unexpected character "'.concat(t[p],'" at ').concat(r.line,":").concat(r.column))}}}},833:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parse=void 0;var n=r(682);e.parse=function(t,e){var r,i,o=(0,n.lexer)(t,e),a=[],u=[];function f(){if(!(i=u.length?u.shift():o.next()))throw new TypeError("next token is undefined");a.push(i)}function l(t){return i.type===n.TokenName[10]&&(Array.isArray(t)?~t.indexOf(i.value):i.value===t)}function s(){throw TypeError("Unexpected token <".concat(i.type,">").concat(i.value," in ").concat(i.start.line,":").concat(i.start.column))}function c(t){return t||s(),t}function p(){return z()}function v(){for(;i.type===n.TokenName[17]&&/^\s+$/m.test(i.value);)f()}function d(){for(var t=[];!l(":")&&i.type!==n.TokenName[16]&&i.type!==n.TokenName[5];){var e=M()||E()||F()||I()||j();e?t.push(e):(c(~[n.TokenName[7],n.TokenName[10],n.TokenName[17]].indexOf(i.type)),t.length&&"string"==typeof t[t.length-1]?t[t.length-1]+=i.raw||i.value:t.push(i.raw||i.value),f())}return t.length&&"string"==typeof t[t.length-1]&&(t[t.length-1]=t[t.length-1].replace(/\s+$/,""),t[t.length-1]||t.pop()),t}function h(t,e,r,n,i,o){var a;void 0===n&&(n=r),void 0===i&&(i="left"),void 0===o&&(o="right");var u=r();if(!u)return null;if(l(e))for(;l(e);){f();var s=c(n());(a={type:t,op:e})[i]=u,a[o]=s,u=a}return u}function y(){return h("and","&&",m)}function m(){return h("binary","|",g)}function g(){return h("binary","^",b)}function b(){return h("binary","&",k)}function k(){return h("eq","==",(function(){return h("ne","!=",(function(){return h("streq","===",(function(){return h("strneq","!==",T)}))}))}))}function T(){return h("lt","<",(function(){return h("gt",">",(function(){return h("le","<=",(function(){return h("ge",">=",N)}))}))}))}function N(){return h("shift","<<",(function(){return h("shift",">>",(function(){return h("shift",">>>",w)}))}))}function w(){return h("add","+",(function(){return h("minus","-",O)}))}function O(){return h("multiply","*",(function(){return h("divide","/",(function(){return h("remainder","%",x)}))}))}function x(){return h("power","**",D)}function D(){for(var t=["+","-","~","!"],e=[];l(t);)e.push(i),f();var r=function(){var t=function(){if(i.type===n.TokenName[7]){var t=i;if(f(),l("(")){var e=S();return{type:"func_call",identifier:t.value,args:null==e?void 0:e.body}}u.unshift(a.pop()),i=a[a.length-1]}return null}()||_()||M()||E()||F()||j()||function(){var t=S();return 1===(null==t?void 0:t.body.length)?t.body[0]:t}()||I();if(!t)return null;for(;l("[")||l(".");){var e=l(".");f();var r=c(e?_()||I():A());e||(l("]")?f():s()),t={type:"get",host:t,key:r}}return t}();for(c(!e.length||r);e.length;)r={type:"unary",op:e.pop().value,value:r};return r}function A(){if(i.type===n.TokenName[7]){var t=i;return f(),t.value}return function(){if(i.type===n.TokenName[11]){var t=i;return f(),{type:"string",value:t.value}}return null}()||E()}function E(){if(l("`")){f();for(var t=0,e={type:"template",body:[]};;)if(1===t){var r=c(p());e.body.push(r),c(i.type===n.TokenName[15]),t=0,f()}else{if(l("`")){f();break}i.type===n.TokenName[14]?(f(),t=1):i.type===n.TokenName[13]&&(e.body.push({type:"template_raw",value:i.value}),f())}return e}return null}function _(){if(i.type===n.TokenName[7]){var t=i;return f(),{type:"variable",name:t.value}}return null}function M(){if(i.type===n.TokenName[8]||i.type===n.TokenName[1]||i.type===n.TokenName[9]||i.type===n.TokenName[11]){var t=i.value;return f(),{type:"literal",value:t}}return null}function F(){if(l("[")){var t=S("[","]");return{type:"array",members:null==t?void 0:t.body}}return null}function S(t,e){if(void 0===t&&(t="("),void 0===e&&(e=")"),l(t)){f();for(var r=[],n=0;;)if(1!==n&&l(e)){if(l(e)){f();break}}else{var i=c(p());r.push(i),n=0,l(",")&&(f(),n=1)}return{type:"expression-list",body:r}}return null}function j(){if(l("{")){f();for(var t={type:"object",members:[]},e=0,r=void 0,n=void 0;;)if(1===e)c(l(":")),f(),e=2;else if(2===e)n=c(p()),t.members.push({key:r,value:n}),e=3;else if(3===e){if(l(","))f(),e=4;else if(l("}")){f();break}}else{if(4!=e&&l("}")){f();break}r=c(A()),e=1}return t}return null}function z(){return function(){var t=h("or","||",y);if(!t)return null;if(l("?")){f();var e=z();c(e),c(l(":")),f();var r=z();return c(r),{type:"conditional",test:t,consequent:e,alternate:r}}return t}()}function P(){if(i.type!==n.TokenName[2])return null;var t=i;return f(),{type:"raw",value:t.value}}function I(){if(i.type!==n.TokenName[4])return null;f();var t=function(){for(var t=p(),e=[];i.type===n.TokenName[16];){f(),v();var r=c(_()).name,o=[];for(v();l(":");){f(),v();var a=d();1===a.length?a=a[0]:a.length||(a=""),o.push(Array.isArray(a)?{type:"mixed",body:a}:a)}e.push({name:r,args:o})}return e.length&&(t={type:"filter",input:t,filters:e}),t}();if(!t)throw TypeError("Unexpected token ".concat(i.value," in ").concat(i.start.line,":").concat(i.start.column));if(i.type!==n.TokenName[5])throw TypeError("expect ".concat(n.TokenName[5]," got ").concat(i.type));return f(),{type:"script",body:t}}function R(){if(i.type!==n.TokenName[3])return null;var t=i;return f(),{type:"script",body:{type:"variable",name:t.value}}}f();var $=(null==e?void 0:e.evalMode)?p():function(){for(var t={type:"document",body:[]};i.type!==n.TokenName[6];){var e=P()||I()||R();if(!e)break;t.body.push(e)}return t}();return c((null===(r=i)||void 0===r?void 0:r.type)===n.TokenName[6]),$}},378:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.resolveVariableAndFilter=e.isPureVariable=e.resolveVariable=e.pickValues=e.stripNumber=e.parseDuration=e.filterDate=e.relativeValueRe=e.formatDuration=e.escapeHtml=e.prettyBytes=e.tokenize=e.keyToPath=e.deleteVariable=e.setVariable=e.getVariable=e.string2regExp=e.isObject=e.cloneObject=e.createObject=void 0;var n=r(752),i=(0,n.__importDefault)(r(452)),o=r(453),a=r(833),u=(0,n.__importDefault)(r(245));function f(t,e){void 0===e&&(e=!0);var r=t&&t.__super?Object.create(t.__super,{__super:{value:t.__super,writable:!1,enumerable:!1}}):Object.create(Object.prototype);return e&&t&&Object.keys(t).forEach((function(e){return r[e]=t[e]})),r}function l(t){var e=typeof t;return t&&"string"!==e&&"number"!==e&&"boolean"!==e&&"function"!==e&&!Array.isArray(t)}function s(t,r,o,a){if(r in(t=t||{}))t[r]=o;else{for(var u=!1!==a?(0,e.keyToPath)(r):[r],f=u.pop();u.length;){var l=u.shift();(0,i.default)(t[l])?t=t[l]=(0,n.__assign)({},t[l]):Array.isArray(t[l])?(t[l]=t[l].concat(),t=t[l]):(t[l],t[l]={},t=t[l])}t[f]=o}}e.createObject=function(t,e,r){t&&Object.isFrozen(t)&&(t=f(t));var i=t?Object.create(t,(0,n.__assign)((0,n.__assign)({},r),{__super:{value:t,writable:!1,enumerable:!1}})):Object.create(Object.prototype,r);return e&&l(e)&&Object.keys(e).forEach((function(t){return i[t]=e[t]})),i},e.cloneObject=f,e.isObject=l,e.string2regExp=function(t,e){if(void 0===e&&(e=!1),"string"!=typeof t)throw new TypeError("Expected a string");return new RegExp(t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),e?"":"i")},e.getVariable=function(t,r,n){if(void 0===n&&(n=!0),t&&r)return(n?r in t:t.hasOwnProperty(r))?t[r]:(0,e.keyToPath)(r).reduce((function(t,e){return t&&"object"==typeof t&&(n?e in t:t.hasOwnProperty(e))?t[e]:void 0}),t)},e.setVariable=s,e.deleteVariable=function(t,r){if(t)if(t.hasOwnProperty(r))delete t[r];else{for(var o=(0,e.keyToPath)(r),a=o.pop();o.length;){var u=o.shift();if(!(0,i.default)(t[u])){if(t[u])throw new Error("目标路径不是纯对象,不能修改");break}t=t[u]=(0,n.__assign)({},t[u])}t&&t.hasOwnProperty&&t.hasOwnProperty(a)&&delete t[a]}},e.keyToPath=function(t){var e=[];return t.charCodeAt(0)===".".charCodeAt(0)&&e.push(""),t.replace(new RegExp("[^.[\\]]+|\\[(?:([^\"'][^[]*)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))","g"),(function(t,r,n,i){var o=t;return n?o=i.replace(/\\(\\)?/g,"$1"):r&&(o=r.trim()),e.push(o),""})),e},e.tokenize=function(t,e,r){if(void 0===r&&(r="| html"),!t||"string"!=typeof t)return t;var n=(0,a.parse)(t,{evalMode:!1,allowFilter:!0}),i=new o.Evaluator({defaultFilter:r}).evalute(n,e);return"".concat(null==i?"":i)};var c=["B","KB","MB","GB","TB","PB","EB","ZB","YB"];e.prettyBytes=function(t){if(!Number.isFinite(t))throw new TypeError("Expected a finite number, got ".concat(typeof t,": ").concat(t));var e=t<0;if(e&&(t=-t),t<1)return(e?"-":"")+t+" B";var r=Math.min(Math.floor(Math.log(t)/Math.log(1e3)),c.length-1);return(e?"-":"")+Number((t/Math.pow(1e3,r)).toPrecision(3))+" "+c[r]};var p={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};e.escapeHtml=function(t){return String(t).replace(/[&<>"'\/]/g,(function(t){return p[t]}))},e.formatDuration=function(t){for(var e=["秒","分","时","天","月","季","年"],r=[1,60,3600,86400,2592e3,7776e3,31104e3],n=r.length,i=[];n--;)r[n]&&t>=r[n]?(i.push(Math.floor(t/r[n])+e[n]),t%=r[n]):0===n&&t&&i.push((t.toFixed?t.toFixed(2):"0")+e[0]);return i.join("")};var v={year:"Y",month:"M",week:"w",weekday:"W",day:"d",hour:"h",minute:"m",min:"m",second:"s",millisecond:"ms"};function d(t,r){return void 0!==t[r]?t[r]:(0,e.keyToPath)(r.replace(/^{|}$/g,"")).reduce((function(t,e){if((l(t)||Array.isArray(t))&&e in t)return t[e]}),t)}function h(t,r){if(void 0===r&&(r={}),t&&r&&"string"==typeof t){var n=t.split(":"),i=n[0],o=n[1];if(!o&&i&&(o=i,i=""),"window"===i)r=window;else{if("ls"===i||"ss"===i){var a=(0,e.keyToPath)(o.replace(/^{|}$/g,"")),u=a.shift(),f="ss"===i?sessionStorage.getItem(u):localStorage.getItem(u);if("string"==typeof f){var s=function(t,e){try{return JSON.parse(t)}catch(t){return e}}(f,f);return l(s)&&a.length?d(s,a.join(".")):s}return}if("cookie"===i)return function(t){var e="; ".concat(document.cookie).split("; ".concat(t,"="));if(2===e.length)return e.pop().split(";").shift()}(u=o.replace(/^{|}$/g,"").trim())}if("$$"===o)return r;if("$"===o[0])o=t.substring(1);else if("&"===o)return r;return d(r,o)}}e.relativeValueRe=/^(.+)?(\+|-)(\d+)(minute|min|hour|day|week|month|year|weekday|second|millisecond)s?$/i,e.filterDate=function(t,r,n,i){void 0===r&&(r={}),void 0===n&&(n="X"),void 0===i&&(i=!1);var o,a=i?u.default.utc:u.default;if("string"==typeof t&&(t=t.trim()),(t=(0,e.tokenize)(t,r))&&"string"==typeof t&&(o=e.relativeValueRe.exec(t))){var f=new Date,l=parseInt(o[3],10),s=o[1]?(0,e.filterDate)(o[1],r,n,i):a(/(minute|min|hour|second)s?/.test(o[4])?[f.getFullYear(),f.getMonth(),f.getDate(),f.getHours(),f.getMinutes(),f.getSeconds()]:[f.getFullYear(),f.getMonth(),f.getDate()]);return"-"===o[2]?s.subtract(l,v[o[4]]):s.add(l,v[o[4]])}return"now"===t?a():"today"===t?a([(f=new Date).getFullYear(),f.getMonth(),f.getDate()]):a(t,n)},e.parseDuration=function(t){var e=/^((?:\-|\+)?(?:\d*\.)?\d+)(minute|min|hour|day|week|month|quarter|year|weekday|second|millisecond)s?$/.exec(t);if(e){var r=u.default.duration(parseFloat(e[1]),e[2]);if(u.default.isDuration(r))return r}},e.stripNumber=function(t){return"number"==typeof t?parseFloat(t.toPrecision(12)):t},e.pickValues=function(t,e){var r,n;if(!t||(n=t.split(","))&&n.length<2){var i=t.indexOf("~");if(~i){var o=t.substring(0,i),a=t.substring(i+1);return(r={})[o]=h(a,e),r}return h(t,e)}var u={};return n.forEach((function(t){var r=t.indexOf("~"),n=t;~r&&(n=t.substring(r+1),t=t.substring(0,r)),s(u,t,h(n,e))})),u},e.resolveVariable=h,e.isPureVariable=function(t){return"string"==typeof t&&/^\$(?:((?:\w+\:)?[a-z0-9_.][a-z0-9_.\[\]]*)|{[^}{]+})$/i.test(t)},e.resolveVariableAndFilter=function(t,e,r,n){if(void 0===r&&(r="| html"),void 0===n&&(n=function(t){return t}),t&&"string"==typeof t){var i=(0,a.parse)(t,{evalMode:!1,allowFilter:!0}),u=new o.Evaluator({defaultFilter:r}).evalute(i,e);return null==u?n(u):u}}},492:t=>{t.exports=require("lodash/groupBy")},452:t=>{t.exports=require("lodash/isPlainObject")},341:t=>{t.exports=require("lodash/transform")},459:t=>{t.exports=require("lodash/uniq")},309:t=>{t.exports=require("lodash/uniqBy")},245:t=>{t.exports=require("moment")},752:t=>{t.exports=require("tslib")}},e={},r=function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}(303),n=exports;for(var i in r)n[i]=r[i];r.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();
1
+ (()=>{"use strict";var t={453:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Evaluator=void 0;var n=r(752),i=(0,n.__importDefault)(r(245)),o=r(589),a=function(){function t(t){void 0===t&&(t={defaultFilter:"html"}),this.options=t,this.functions={},this.filters=(0,n.__assign)((0,n.__assign)((0,n.__assign)({},this.filters),(0,o.getFilters)()),null==t?void 0:t.filters),this.functions=(0,n.__assign)((0,n.__assign)({},this.functions),null==t?void 0:t.functions)}return t.prototype.evalute=function(t,e){if(void 0===e&&(e={}),this.data=e,t&&t.type){var r=t.type.replace(/(?:_|\-)(\w)/g,(function(t,e){return e.toUpperCase()})),n=this.functions[r]||this[r];if(!n)throw new Error("".concat(t.type," unkown."));return n.call(this,t,e)}return t},t.prototype.document=function(t,e){var r=this;if(t.body.length){var n=t.body.map((function(t){return r.evalute(t,e)}));return 1===n.length?n[0]:n.join("")}},t.prototype.filter=function(t,e){for(var r=this,n=this.evalute(t.input,e),i=t.filters.concat(),o={data:e,restFilters:i};i.length;){var a=i.shift(),u=this.filters[a.name];if(!u)throw new Error("filter `".concat(a.name,"` not exits"));n=u.apply(o,[n].concat(a.args.map((function(t){return"mixed"===(null==t?void 0:t.type)?t.body.map((function(t){return"string"==typeof t?t:r.evalute(t,e)})).join(""):t.type?r.evalute(t,e):t}))))}return n},t.prototype.raw=function(t){return t.value},t.prototype.script=function(t,e){var r,n=this.options.defaultFilter;return n&&"filter"!==(null===(r=t.body)||void 0===r?void 0:r.type)&&(t.body={type:"filter",input:t.body,filters:[{name:n.replace(/^\|\s/,""),args:[]}]}),this.evalute(t.body,e)},t.prototype.expressionList=function(t,e){var r=this;return t.body.reduce((function(t,n){return r.evalute(n,e)}))},t.prototype.template=function(t,e){var r=this;return t.args.map((function(t){return r.evalute(t,e)})).join("")},t.prototype.templateRaw=function(t){return t.value},t.prototype.get=function(t,e){var r=this.evalute(t.host,e),n=this.evalute(t.key,e);return null==r?void 0:r[n]},t.prototype.unary=function(t,e){var r=this.evalute(t.value,e);switch(t.op){case"+":return+r;case"-":return-r;case"~":return~r;case"!":return!r}},t.prototype.formatNumber=function(t,e){void 0===e&&(e=!1);var r=typeof t;return"string"===r?(e?parseInt(t,10):parseFloat(t))||0:"number"===r&&e?Math.round(t):null!=t?t:0},t.prototype.power=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return Math.pow(this.formatNumber(r),this.formatNumber(n))},t.prototype.multiply=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)*this.formatNumber(n)},t.prototype.divide=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)/this.formatNumber(n)},t.prototype.remainder=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)%this.formatNumber(n)},t.prototype.add=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)+this.formatNumber(n)},t.prototype.minus=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return this.formatNumber(r)-this.formatNumber(n)},t.prototype.shift=function(t,e){var r=this.evalute(t.left,e),n=this.formatNumber(this.evalute(t.right,e),!0);return"<<"===t.op?r<<n:">>"==t.op?r>>n:r>>>n},t.prototype.lt=function(t,e){return this.evalute(t.left,e)<this.evalute(t.right,e)},t.prototype.gt=function(t,e){return this.evalute(t.left,e)>this.evalute(t.right,e)},t.prototype.le=function(t,e){return this.evalute(t.left,e)<=this.evalute(t.right,e)},t.prototype.ge=function(t,e){return this.evalute(t.left,e)>=this.evalute(t.right,e)},t.prototype.eq=function(t,e){return this.evalute(t.left,e)==this.evalute(t.right,e)},t.prototype.ne=function(t,e){return this.evalute(t.left,e)!=this.evalute(t.right,e)},t.prototype.streq=function(t,e){return this.evalute(t.left,e)===this.evalute(t.right,e)},t.prototype.strneq=function(t,e){return this.evalute(t.left,e)!==this.evalute(t.right,e)},t.prototype.binary=function(t,e){var r=this.evalute(t.left,e),n=this.evalute(t.right,e);return"&"===t.op?r&n:"^"===t.op?r^n:r|n},t.prototype.and=function(t,e){return this.evalute(t.left,e)&&this.evalute(t.right,e)},t.prototype.or=function(t,e){return this.evalute(t.left,e)||this.evalute(t.right,e)},t.prototype.number=function(t,e){return t.value},t.prototype.variable=function(t,e){return"&"===t.name?e:e[t.name]},t.prototype.array=function(t,e){var r=this;return t.members.map((function(t){return r.evalute(t,e)}))},t.prototype.literal=function(t){return t.value},t.prototype.string=function(t){return t.value},t.prototype.object=function(t,e){var r=this,n={};return t.memebers.forEach((function(t){var i=t.key,o=t.value;n[i]=r.evalute(o,e)})),n},t.prototype.conditional=function(t,e){return this.evalute(t.test,e)?this.evalute(t.consequent,e):this.evalute(t.alternate,e)},t.prototype.funcCall=function(t,e){var r=this,n="fn".concat(t.identifier),i=this.functions[n]||this[n]||this.filters[t.identifier];if(!i)throw new Error("".concat(t.identifier,"函数没有定义"));var o=t.args;return o=~["IF","AND","OR","XOR","IFS"].indexOf(t.identifier)?o.map((function(t){return function(){return r.evalute(t,e)}})):o.map((function(t){return r.evalute(t,e)})),i.apply(this,o)},t.prototype.fnIF=function(t,e,r){return t()?e():r()},t.prototype.fnAND=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t.every((function(t){return t()}))},t.prototype.fnOR=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t.some((function(t){return t()}))},t.prototype.fnXOR=function(t,e){return!!t()==!!e()},t.prototype.fnIFS=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(t.length%2&&t.splice(t.length-1,0,(function(){return!0}));t.length;){var r=t.shift(),n=t.shift();if(r())return n()}},t.prototype.fnABS=function(t){return Math.abs(t)},t.prototype.fnMax=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Math.max.apply(Math,t)},t.prototype.fnMin=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Math.min.apply(Math,t)},t.prototype.fnSUM=function(){for(var t=this,e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return e.reduce((function(e,r){return e+t.formatNumber(r)||0}),0)},t.prototype.fnINT=function(t){return Math.floor(t)},t.prototype.fnMOD=function(t,e){return t%e},t.prototype.fnPI=function(){return Math.PI},t.prototype.fnROUND=function(t,e){var r=Math.round(e);if(r){var n=Math.pow(10,r);return Math.round(t*n)/n}return Math.round(t)},t.prototype.fnSQRT=function(t){return Math.sqrt(t)},t.prototype.fnAVG=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this.fnSUM.apply(this,t)/t.length},t.prototype.fnUPPERMONEY=function(){return"todo"},t.prototype.fnRAND=function(){return Math.random()},t.prototype.normalizeText=function(t){return t instanceof Date?(0,i.default)(t).format():"".concat(t)},t.prototype.fnLEFT=function(t,e){return(t=this.normalizeText(t)).substring(0,e)},t.prototype.fnRIGHT=function(t,e){return(t=this.normalizeText(t)).substring(t.length-e,t.length)},t.prototype.fnLEN=function(t){return null==(t=this.normalizeText(t))?void 0:t.length},t.prototype.fnISEMPTY=function(t){return!t||!String(t).trim()},t.prototype.fnCONCATENATE=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return t.join("")},t.prototype.fnCHAR=function(t){return String.fromCharCode(t)},t.prototype.fnLOWER=function(t){return(t=this.normalizeText(t)).toLowerCase()},t.prototype.fnUPPER=function(t){return(t=this.normalizeText(t)).toUpperCase()},t.prototype.fnSPLIT=function(t,e){return(t=this.normalizeText(t)).split(e)},t.prototype.fnTRIM=function(t){return(t=this.normalizeText(t)).trim()},t.prototype.fnSTARTSWITH=function(t,e){return!!e&&0===(t=this.normalizeText(t)).indexOf(e)},t.prototype.fnCONTAINS=function(t,e){return!!e&&!!~(t=this.normalizeText(t)).indexOf(e)},t.prototype.fnREPLACE=function(t,e,r){for(var n=t=this.normalizeText(t);;){var i=n.indexOf(e);if(!~i)break;n=n.substring(0,i)+r+n.substring(i+e.length)}return n},t.prototype.fnSEARCH=function(t,e,r){var n=t=this.normalizeText(t);(r=r||0)&&(n=n.substring(r));var i=n.indexOf(e);return~i?i+e:-1},t.prototype.fnMID=function(t,e,r){return(t=this.normalizeText(t)).substring(e,e+r)},t.prototype.fnDATE=function(t,e,r,n,i,o){return void 0===e?new Date(t):new Date(t,e,r,n,i,o)},t.prototype.fnTIMESTAMP=function(t,e){return parseInt((0,i.default)(t).format("x"===e?"x":"X"),10)},t.prototype.fnTODAY=function(){return new Date},t.prototype.fnNOW=function(){return new Date},t.prototype.fnSTARTOF=function(t,e){return(0,i.default)(t).startOf(e||"day").toDate()},t.prototype.fnENDOF=function(t,e){return(0,i.default)(t).endOf(e||"day").toDate()},t.prototype.normalizeDate=function(t){if("string"==typeof t)for(var e=["","YYYY-MM-DD HH:mm:ss"];e.length;){var r=e.shift(),n=(0,i.default)(t,r);if(n.isValid())return n.toDate()}else if("number"==typeof t)return new Date(t);return t},t.prototype.fnYEAR=function(t){return(t=this.normalizeDate(t)).getFullYear()},t.prototype.fnMONTH=function(t){return(t=this.normalizeDate(t)).getMonth()+1},t.prototype.fnDAY=function(t){return(t=this.normalizeDate(t)).getDate()},t.prototype.fnHOUR=function(t){return(t=this.normalizeDate(t)).getHours()},t.prototype.fnHMINUTE=function(t){return(t=this.normalizeDate(t)).getMinutes()},t.prototype.fnSECOND=function(t){return(t=this.normalizeDate(t)).getSeconds()},t.prototype.fnYEARS=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"year")},t.prototype.fnMINUTES=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"minutes")},t.prototype.fnDAYS=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"days")},t.prototype.fnHOURS=function(t,e){return t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).diff((0,i.default)(e),"hour")},t.prototype.fnDATEMODIFY=function(t,e,r){return t=this.normalizeDate(t),(0,i.default)(t).add(e,r).toDate()},t.prototype.fnSTRTODATE=function(t,e){return void 0===e&&(e=""),(0,i.default)(t,e).toDate()},t.prototype.fnISBEFORE=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isBefore((0,i.default)(e),r)},t.prototype.fnISAFTER=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isAfter((0,i.default)(e),r)},t.prototype.fnISSAMEORBEFORE=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isSameOrBefore((0,i.default)(e),r)},t.prototype.fnISSAMEORAFTER=function(t,e,r){return void 0===r&&(r="day"),t=this.normalizeDate(t),e=this.normalizeDate(e),(0,i.default)(t).isSameOrAfter((0,i.default)(e),r)},t.prototype.fnCOUNT=function(t){return Array.isArray(t)?t.length:t?1:0},t}();e.Evaluator=a},589:function(t,e,r){var n=this;Object.defineProperty(e,"__esModule",{value:!0}),e.getFilters=e.registerFilter=e.filters=void 0;var i=r(752),o=(0,i.__importDefault)(r(245)),a=(0,i.__importDefault)(r(341)),u=(0,i.__importDefault)(r(492)),f=(0,i.__importDefault)(r(309)),l=(0,i.__importDefault)(r(459)),s=r(378);function c(t,e,r,n,i,o){return e&&function(t){for(var e;~["isTrue","isFalse","isMatch","isEquals","notMatch","notEquals"].indexOf(null===(e=t[0])||void 0===e?void 0:e.name);)t.shift()}(r.restFilters),n||e?p(n?i:o,r.data):t}function p(t,e){var r;return"string"==typeof t&&/,/.test(t)?t.split(/\s*,\s*/).filter((function(t){return t})):"string"==typeof t&&null!==(r=(0,s.resolveVariable)(t,e))&&void 0!==r?r:t}function v(t){return t&&"string"==typeof t?/^\[.*\]$/.test(t)?t.substring(1,t.length-1).split(/\s*,\s*/).filter((function(t){return t})):t.split(/\s*,\s*/).filter((function(t){return t})):t}e.filters={map:function(t,r){for(var o=[],a=2;a<arguments.length;a++)o[a-2]=arguments[a];return Array.isArray(t)&&e.filters[r]?t.map((function(t){var a;return(a=e.filters[r]).call.apply(a,(0,i.__spreadArray)([n,t],o,!1))})):t},html:function(t){return(0,s.escapeHtml)(t)},json:function(t,e){return void 0===e&&(e=2),e?JSON.stringify(t,null,parseInt(e,10)):JSON.stringify(t)},toJson:function(t){var e;try{e=JSON.parse(t)}catch(t){e=null}return e},toInt:function(t){return"string"==typeof t?parseInt(t,10):t},toFloat:function(t){return"string"==typeof t?parseFloat(t):t},raw:function(t){return t},now:function(){return new Date},toDate:function(t,e){void 0===e&&(e="");var r=(0,o.default)(t,e);return r.add(),r.isValid()?r.toDate():void 0},fromNow:function(t,e){return void 0===e&&(e=""),(0,o.default)(t,e).fromNow()},dateModify:function(t,e,r,n){return void 0===e&&(e="add"),void 0===r&&(r=0),void 0===n&&(n="days"),t instanceof Date||(t=new Date),"endOf"===e||"startOf"===e?(0,o.default)(t)["endOf"===e?"endOf":"startOf"](r||"day").toDate():(0,o.default)(t)["add"===e?"add":"subtract"](parseInt(r,10)||0,n).toDate()},date:function(t,e,r){return void 0===e&&(e="LLL"),void 0===r&&(r="X"),(0,o.default)(t,r).format(e)},number:function(t){var e=String(t).split(".");return e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,","),e.join(".")},trim:function(t){return"string"==typeof t?t.trim():t},percent:function(t,e){void 0===e&&(e=0),t=parseFloat(t)||0,e=parseInt(e,10)||0;var r=100*t,n=Math.pow(10,e);return(Math.round(r*n)/n).toFixed(e)+"%"},duration:function(t){return t?(0,s.formatDuration)(t):t},bytes:function(t){return t?(0,s.prettyBytes)(parseFloat(t)):t},round:function(t,e){var r;if(void 0===e&&(e=2),isNaN(t))return 0;e=null!==(r=parseInt(e,10))&&void 0!==r?r:2;var n=Math.pow(10,e);return(Math.round(t*n)/n).toFixed(e)},truncate:function(t,e,r){return"string"!=typeof t?t:(r=r||"...",null==e?t:(e=parseInt(e,10)||200,t.substring(0,e)+(t.length>e?r:"")))},url_encode:function(t){return encodeURIComponent(t)},url_decode:function(t){return decodeURIComponent(t)},default:function(t,e,r){var n;return void 0===r&&(r=!1),null!==(n=r?t:t||void 0)&&void 0!==n?n:function(){try{if("undefined"===e)return;return JSON.parse(e)}catch(t){return e}}()},join:function(t,e){return t&&t.join?t.join(e):t},split:function(t,e){return void 0===e&&(e=","),"string"==typeof t?t.split(e):t},sortBy:function(t,e,r,n){return void 0===r&&(r="alpha"),Array.isArray(t)?t.sort(function(t,e,r){return function(n,i){if(!n||!i)return 0;var o=(0,s.resolveVariable)(t,n),a=(0,s.resolveVariable)(t,i);return("numerical"===e?(parseFloat(o)||0)-(parseFloat(a)||0):String(o).localeCompare(String(a)))*("desc"===r?-1:1)}}(e,r,n)):t},objectToArray:function(t,e,r){return void 0===e&&(e="label"),void 0===r&&(r="value"),(0,a.default)(t,(function(t,n,i){var o;(t||(t=[])).push(((o={})[e]=n,o[r]=i,o))}),[])},unique:function(t,e){return Array.isArray(t)?e?(0,f.default)(t,e):(0,l.default)(t):t},topAndOther:function(t,e,r,n){if(void 0===e&&(e=10),void 0===r&&(r="name"),void 0===n&&(n="其他"),Array.isArray(t)&&e){var i=(0,u.default)(t,(function(r){var n=t.indexOf(r)+1;return n>=e?e:n}));return Object.keys(i).map((function(t,o){var a=i[t].reduce((function(t,e){return Object.keys(e).forEach((function(r){t.hasOwnProperty(r)&&"labelField"!==r?"number"==typeof e[r]&&"number"==typeof t[r]?t[r]+=e[r]:"string"==typeof e[r]&&/^(?:\-|\.)\d/.test(e[r])&&"number"==typeof t[r]?t[r]+=parseFloat(e[r])||0:"string"==typeof e[r]&&"string"==typeof t[r]?t[r]+=", ".concat(e[r]):t[r]=e[r]:t[r]=e[r]})),t}),{});return o===e-1&&(a[r]=n||"其他"),a}))}return t},first:function(t){return t&&t[0]},nth:function(t,e){return void 0===e&&(e=0),t&&t[e]},last:function(t){return t&&(t.length?t[t.length-1]:null)},minus:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)-Number(p(e,this.data)))},plus:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)+Number(p(e,this.data)))},times:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)*Number(p(e,this.data)))},division:function(t,e){return void 0===e&&(e=1),(0,s.stripNumber)((Number(t)||0)/Number(p(e,this.data)))},count:function(t){return Array.isArray(t)||"string"==typeof t?t.length:0},sum:function(t,e){if(!Array.isArray(t))return t;var r=t.reduce((function(t,r){return t+(parseFloat(e?(0,s.pickValues)(e,r):r)||0)}),0);return(0,s.stripNumber)(r)},abs:function(t){return"number"==typeof t?Math.abs(t):t},pick:function(t,e){return void 0===e&&(e="&"),Array.isArray(t)&&!/^\d+$/.test(e)?t.map((function(t,r){return(0,s.pickValues)(e,(0,s.createObject)({index:r},t))})):(0,s.pickValues)(e,t)},pick_if_exist:function(t,e){return void 0===e&&(e="&"),Array.isArray(t)?t.map((function(t){return(0,s.resolveVariable)(e,t)||t})):(0,s.resolveVariable)(e,t)||t},str2date:function(t,e,r){return void 0===e&&(e="X"),void 0===r&&(r="X"),t?(0,s.filterDate)(t,this.data,e).format(r):""},asArray:function(t){return Array.isArray(t)?t:t?[t]:t},concat:function(t){for(var e=this,r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return Array.isArray(t)?t.concat.apply(t,r.map((function(t){return p(t,e.data)}))):t},filter:function(t,e,r,n){if(!Array.isArray(t)||!e||!r)return t;var i=r,o=function(){return!0};if("isTrue"===i)o=function(t){return!!t};else if("isFalse"===i)o=function(t){return!t};else if("isExists"===i)o=function(t){return void 0!==t};else if("equals"===i||"equal"===i)n=n?p(n,this.data):"",o=function(t){return n==t};else if("isIn"===i){var a=n?p(n,this.data):[];a=v(a),a=Array.isArray(a)?a:a?[a]:[],o=function(t){return!a.length||!!~a.indexOf(t)}}else if("notIn"===i){var u=n?p(n,this.data):[];u=v(u),u=Array.isArray(u)?u:u?[u]:[],o=function(t){return!~u.indexOf(t)}}else{if("match"!==i&&(i="match",n=r),!(n=n?p(n,this.data):""))return t;var f=(0,s.string2regExp)("".concat(n),!1);o=function(t){return f.test(String(t))}}var l=/\s*\*\s*/.test(e);return e=e.split(/\s*,\s*/),t.filter((function(t){return(l?Object.keys(t):e).some((function(e){return o((0,s.resolveVariable)(e,t),e,t)}))}))},base64Encode:function(t){return btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode("0x"+e)})))},base64Decode:function(t){return decodeURIComponent(atob(t).split("").map((function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)})).join(""))},lowerCase:function(t){return t&&"string"==typeof t?t.toLowerCase():t},upperCase:function(t){return t&&"string"==typeof t?t.toUpperCase():t},isTrue:function(t,e,r){var n=arguments.length>2;return c(t,n,this,!!t,e,r)},isFalse:function(t,e,r){var n=arguments.length>2;return c(t,n,this,!t,e,r)},isMatch:function(t,e,r,n){var i=arguments.length>3;return c(t,i,this,(e=p(e,this.data))&&(0,s.string2regExp)("".concat(e),!1).test(String(t)),r,n)},notMatch:function(t,e,r,n){var i=arguments.length>3;return c(t,i,this,(e=p(e,this.data))&&!(0,s.string2regExp)("".concat(e),!1).test(String(t)),r,n)},isEquals:function(t,e,r,n){e=/^\d+$/.test(e)?parseInt(e,10):p(e,this.data);var i=arguments.length>3;return c(t,i,this,t===e,r,n)},notEquals:function(t,e,r,n){e=/^\d+$/.test(e)?parseInt(e,10):p(e,this.data);var i=arguments.length>3;return c(t,i,this,t!==e,r,n)}},e.registerFilter=function(t,r){e.filters[t]=r},e.getFilters=function(){return e.filters}},303:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.evaluate=e.registerFilter=e.getFilters=e.filters=e.Evaluator=e.lexer=e.parse=void 0;var n=r(752),i=r(453);Object.defineProperty(e,"Evaluator",{enumerable:!0,get:function(){return i.Evaluator}});var o=r(833);Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return o.parse}});var a=r(682);Object.defineProperty(e,"lexer",{enumerable:!0,get:function(){return a.lexer}});var u=r(589);Object.defineProperty(e,"registerFilter",{enumerable:!0,get:function(){return u.registerFilter}}),Object.defineProperty(e,"filters",{enumerable:!0,get:function(){return u.filters}}),Object.defineProperty(e,"getFilters",{enumerable:!0,get:function(){return u.getFilters}}),(0,n.__exportStar)(r(378),e),e.evaluate=function(t,e,r){return"string"==typeof t&&(t=(0,o.parse)(t,r)),new i.Evaluator(r).evalute(t,e)}},682:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.lexer=e.TokenName=void 0,e.TokenName={},e.TokenName[1]="Boolean",e.TokenName[2]="Raw",e.TokenName[3]="Variable",e.TokenName[4]="OpenScript",e.TokenName[5]="CloseScript",e.TokenName[6]="EOF",e.TokenName[7]="Identifier",e.TokenName[8]="Literal",e.TokenName[9]="Numeric",e.TokenName[10]="Punctuator",e.TokenName[11]="String",e.TokenName[12]="RegularExpression",e.TokenName[13]="TemplateRaw",e.TokenName[14]="TemplateLeftBrace",e.TokenName[15]="TemplateRightBrace",e.TokenName[16]="OpenFilter",e.TokenName[17]="Char";var r=["===","!==","==","!=","<>","<",">","<=",">=","||","&&","++","--","<<",">>",">>>","+=","*=","/=","=","*","/","-","+","^","!","%","&","|","(",")","[","]","{","}","?",":",";",",",".","$"],n={'"':0,"\\":1,"/":2,b:3,f:4,n:5,r:6,t:7,u:8};function i(t){return t>="1"&&t<="9"}function o(t){return t>="0"&&t<="9"}function a(t){return"e"===t||"E"===t}function u(t,e){return void 0===e&&(e=[]),t.replace(/\\(.)/g,(function(t,r){return"b"===r?"\b":"f"===r?"\f":"n"===r?"\n":"r"===r?"\r":"t"===r?"\t":"v"===r?"\v":~e.indexOf(r)?r:t}))}function f(t){return Number(t)}e.lexer=function(t,l){var s=1,c=1,p=0,v=0,d=[v],h=[],y=!1!==(null==l?void 0:l.allowFilter);function m(t){d.push(v=t)}function g(){d.pop(),v=d[d.length-1]}function b(t){if(t&&"string"==typeof t){var e=t.split(/[\r\n]+/);return{index:p+t.length,line:s+e.length-1,column:c+e[e.length-1].length}}return{index:p,line:s,column:c}}function k(){return h.length?h.shift():(1!==v&&2!==v&&3!==v||function(){for(;p<t.length;){var e=t[p];if("\r"===e)p++,s++,c=1,"\n"===t.charAt(p)&&p++;else if("\n"===e)p++,s++,c=1;else{if("\t"!==e&&" "!==e)break;p++,c++}}}(),function(){if(p>=t.length)return{type:e.TokenName[6],value:void 0,start:b(),end:b()}}()||function(){if(0!==v)return null;for(var r="",i=0,o=p;o<t.length;){var a=t[o];if(1===i){if(!n.hasOwnProperty(a)&&"$"!==a){var f=b(r+a);throw new SyntaxError("Unexpected token ".concat(a," in ").concat(f.line,":").concat(f.column))}r+=a,o++,i=0}else{if("\\"===a){r+=a,o++,i=1;continue}if("$"===a){var l=t[o+1];if("{"===l)break;if("$"===l){h.push({type:e.TokenName[3],value:"&",raw:"$$",start:b(t.substring(p,o)),end:b(t.substring(p,o+2))});break}for(var s=o+2;/^[a-zA-Z0-9_.][a-zA-Z0-9_.\[\]]*$/.test(t.substring(o+1,s))&&s<=t.length;)s++;if(s-o>2){h.push({type:e.TokenName[3],value:t.substring(o+1,s),raw:t.substring(o,s),start:b(t.substring(p,o)),end:b(t.substring(p,s))});break}}o++,r+=a}}return o>p?{type:e.TokenName[2],value:u(r,["`","$"]),raw:r,start:b(),end:b(r)}:h.length?h.shift():null}()||function(){if("$"===t[p]&&"{"===t[p+1]){m(1);var r=t.substring(p,p+2);return{type:e.TokenName[4],value:r,start:b(),end:b(r)}}return null}()||function(){if(1!==v&&2!==v&&3!==v&&5!==v)return null;var l,s,c,d,h=(s=t.substring(p,p+4).toLowerCase(),c=s,d=!1,"true"===s||"null"===s?(d=!0,c="true"===s||null):"false"===(s=t.substring(p,p+5).toLowerCase())?(d=!0,c=!1):"undefined"===(s=t.substring(p,p+9).toLowerCase())&&(d=!0,c=void 0),(d?{type:!0===c||!1===c?e.TokenName[1]:e.TokenName[8],value:c,raw:s,start:b(),end:b(s)}:null)||function(){for(var r=p,n="";r<t.length;){var i=t[r];if(!/^[\u4e00-\u9fa5A-Za-z_$@][\u4e00-\u9fa5A-Za-z0-9_]*$/.test(n+i))break;n+=i,r++}if(r>p){var o=t.substring(p,r);return{type:e.TokenName[7],value:o,start:b(),end:b(o)}}return null}()||function(){var r=p,n=r,u=0;t:for(;r<t.length;){var l=t.charAt(r);switch(u){case 0:if("-"===l)u=1;else if("0"===l)n=r+1,u=2;else{if(!i(l))return null;n=r+1,u=3}break;case 1:if("0"===l)n=r+1,u=2;else{if(!i(l))return null;n=r+1,u=3}break;case 2:if("."===l)u=4;else{if(!a(l))break t;u=6}break;case 3:if(o(l))n=r+1;else if("."===l)u=4;else{if(!a(l))break t;u=6}break;case 4:if(!o(l))break t;n=r+1,u=5;break;case 5:if(o(l))n=r+1;else{if(!a(l))break t;u=6}break;case 6:if("+"===l||"-"===l)u=7;else{if(!o(l))break t;n=r+1,u=7}break;case 7:if(!o(l))break t;n=r+1}r++}if(n>0){var s=t.slice(p,n);return{type:e.TokenName[9],value:f(s),raw:s,start:b(),end:b(s)}}return null}()||function(){for(var r='"',i=0,o=p;o<t.length;){var a=t[o];if(0===i){if('"'!==a&&"'"!==a)break;r=a,o++,i=1}else if(2===i){if(!n.hasOwnProperty(a)&&a!==r){var f=b(t.substring(p,o+1));throw new SyntaxError("Unexpected token ".concat(a," in ").concat(f.line,":").concat(f.column))}o++,i=1}else if("\\"===a)o++,i=2;else{if(a===r){o++;break}o++}}if(o>p){var l=t.substring(p,o);return{type:e.TokenName[11],value:u(l.substring(1,l.length-1),[r]),raw:l,start:b(),end:b(l)}}return null}()||((l=r.find((function(e){return t.substring(p,p+e.length)===e})))?{type:e.TokenName[10],value:l,start:b(),end:b(l)}:null)||function(){if(5!==v)return null;var i=p,o=t[i];if("\\"===o){var a=t[i+1];if("$"!==a&&!~r.indexOf(a)&&!n.hasOwnProperty(a)){var u=b(t.substring(p,p+1));throw new SyntaxError("Unexpected token ".concat(o," in ").concat(u.line,":").concat(u.column))}i++,o="b"===a?"\b":"f"===a?"\f":"n"===a?"\n":"r"===a?"\r":"t"===a?"\t":"v"===a?"\v":a}return{type:e.TokenName[17],value:o,start:b(),end:b(t.substring(p,i+1))}}());if("{"===(null==h?void 0:h.value))m(3);else if("}"===(null==h?void 0:h.value)){5===v&&g();var k=v;if(g(),1===k||2===k)return{type:e.TokenName[2===k?15:5],value:h.value,start:b(),end:b(h.value)}}return 1===v&&"|"===(null==h?void 0:h.value)&&y?(m(5),{type:e.TokenName[16],value:"|",start:b(),end:b("|")}):5===v&&"|"===(null==h?void 0:h.value)?{type:e.TokenName[16],value:"|",start:b(),end:b("|")}:h||"`"!==t[p]?h:(m(4),{type:e.TokenName[10],value:"`",start:b(),end:b("`")})}()||function(){if(4!==v)return null;for(var r=0,i=p;i<t.length;){var o=t[i];if(2===r){if(!n.hasOwnProperty(o)&&"`"!==o&&"$"!==o){var a=b(t.substring(p,i+1));throw new SyntaxError("Unexpected token ".concat(o," in ").concat(a.line,":").concat(a.column))}i++,r=1}else if("\\"===o)i++,r=2;else{if("`"===o){g(),h.push({type:e.TokenName[10],value:"`",start:b(t.substring(p,i)),end:b(t.substring(p,i+1))});break}if("$"===o){if("{"===t[i+1]){m(2),h.push({type:e.TokenName[14],value:"${",start:b(t.substring(p,i)),end:b(t.substring(p,i+2))});break}i++}else i++}}if(i>p){var f=t.substring(p,i);return{type:e.TokenName[13],value:u(f,["`","$"]),raw:f,start:b(),end:b(f)}}return h.length?h.shift():null}())}return(null==l?void 0:l.evalMode)&&m(2),{next:function(){var e=k();if(e)return p=e.end.index,s=e.end.line,c=e.end.column,e;var r=b();throw new SyntaxError('unexpected character "'.concat(t[p],'" at ').concat(r.line,":").concat(r.column))}}}},833:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parse=void 0;var n=r(682);e.parse=function(t,e){var r,i,o=(0,n.lexer)(t,e),a=[],u=[];function f(){if(!(i=u.length?u.shift():o.next()))throw new TypeError("next token is undefined");a.push(i)}function l(t){return i.type===n.TokenName[10]&&(Array.isArray(t)?~t.indexOf(i.value):i.value===t)}function s(){throw TypeError("Unexpected token <".concat(i.type,">").concat(i.value," in ").concat(i.start.line,":").concat(i.start.column))}function c(t){return t||s(),t}function p(){return z()}function v(){for(;i.type===n.TokenName[17]&&/^\s+$/m.test(i.value);)f()}function d(){for(var t=[];!l(":")&&i.type!==n.TokenName[16]&&i.type!==n.TokenName[5];){var e=M()||E()||F()||I()||j();e?t.push(e):(c(~[n.TokenName[7],n.TokenName[10],n.TokenName[17]].indexOf(i.type)),t.length&&"string"==typeof t[t.length-1]?t[t.length-1]+=i.raw||i.value:t.push(i.raw||i.value),f())}return t.length&&"string"==typeof t[t.length-1]&&(t[t.length-1]=t[t.length-1].replace(/\s+$/,""),t[t.length-1]||t.pop()),t}function h(t,e,r,n,i,o){var a;void 0===n&&(n=r),void 0===i&&(i="left"),void 0===o&&(o="right");var u=r();if(!u)return null;if(l(e))for(;l(e);){f();var s=c(n());(a={type:t,op:e})[i]=u,a[o]=s,u=a}return u}function y(){return h("and","&&",m)}function m(){return h("binary","|",g)}function g(){return h("binary","^",b)}function b(){return h("binary","&",k)}function k(){return h("eq","==",(function(){return h("ne","!=",(function(){return h("streq","===",(function(){return h("strneq","!==",T)}))}))}))}function T(){return h("lt","<",(function(){return h("gt",">",(function(){return h("le","<=",(function(){return h("ge",">=",N)}))}))}))}function N(){return h("shift","<<",(function(){return h("shift",">>",(function(){return h("shift",">>>",w)}))}))}function w(){return h("add","+",(function(){return h("minus","-",O)}))}function O(){return h("multiply","*",(function(){return h("divide","/",(function(){return h("remainder","%",x)}))}))}function x(){return h("power","**",D)}function D(){for(var t=["+","-","~","!"],e=[];l(t);)e.push(i),f();var r=function(){var t=function(){if(i.type===n.TokenName[7]){var t=i;if(f(),l("(")){var e=S();return{type:"func_call",identifier:t.value,args:null==e?void 0:e.body}}u.unshift(a.pop()),i=a[a.length-1]}return null}()||_()||M()||E()||F()||j()||function(){var t=S();return 1===(null==t?void 0:t.body.length)?t.body[0]:t}()||I();if(!t)return null;for(;l("[")||l(".");){var e=l(".");f();var r=c(e?_()||I():A());e||(l("]")?f():s()),t={type:"get",host:t,key:r}}return t}();for(c(!e.length||r);e.length;)r={type:"unary",op:e.pop().value,value:r};return r}function A(){if(i.type===n.TokenName[7]){var t=i;return f(),t.value}return function(){if(i.type===n.TokenName[11]){var t=i;return f(),{type:"string",value:t.value}}return null}()||E()}function E(){if(l("`")){f();for(var t=0,e={type:"template",body:[]};;)if(1===t){var r=c(p());e.body.push(r),c(i.type===n.TokenName[15]),t=0,f()}else{if(l("`")){f();break}i.type===n.TokenName[14]?(f(),t=1):i.type===n.TokenName[13]&&(e.body.push({type:"template_raw",value:i.value}),f())}return e}return null}function _(){if(i.type===n.TokenName[7]){var t=i;return f(),{type:"variable",name:t.value}}return null}function M(){if(i.type===n.TokenName[8]||i.type===n.TokenName[1]||i.type===n.TokenName[9]||i.type===n.TokenName[11]){var t=i.value;return f(),{type:"literal",value:t}}return null}function F(){if(l("[")){var t=S("[","]");return{type:"array",members:null==t?void 0:t.body}}return null}function S(t,e){if(void 0===t&&(t="("),void 0===e&&(e=")"),l(t)){f();for(var r=[],n=0;;)if(1!==n&&l(e)){if(l(e)){f();break}}else{var i=c(p());r.push(i),n=0,l(",")&&(f(),n=1)}return{type:"expression-list",body:r}}return null}function j(){if(l("{")){f();for(var t={type:"object",members:[]},e=0,r=void 0,n=void 0;;)if(1===e)c(l(":")),f(),e=2;else if(2===e)n=c(p()),t.members.push({key:r,value:n}),e=3;else if(3===e){if(l(","))f(),e=4;else if(l("}")){f();break}}else{if(4!=e&&l("}")){f();break}r=c(A()),e=1}return t}return null}function z(){return function(){var t=h("or","||",y);if(!t)return null;if(l("?")){f();var e=z();c(e),c(l(":")),f();var r=z();return c(r),{type:"conditional",test:t,consequent:e,alternate:r}}return t}()}function P(){if(i.type!==n.TokenName[2])return null;var t=i;return f(),{type:"raw",value:t.value}}function I(){if(i.type!==n.TokenName[4])return null;f();var t=function(){for(var t=p(),e=[];i.type===n.TokenName[16];){f(),v();var r=c(_()).name,o=[];for(v();l(":");){f(),v();var a=d();1===a.length?a=a[0]:a.length||(a=""),o.push(Array.isArray(a)?{type:"mixed",body:a}:a)}e.push({name:r,args:o})}return e.length&&(t={type:"filter",input:t,filters:e}),t}();if(!t)throw TypeError("Unexpected token ".concat(i.value," in ").concat(i.start.line,":").concat(i.start.column));if(i.type!==n.TokenName[5])throw TypeError("expect ".concat(n.TokenName[5]," got ").concat(i.type));return f(),{type:"script",body:t}}function R(){if(i.type!==n.TokenName[3])return null;var t=i;return f(),{type:"script",body:{type:"variable",name:t.value}}}f();var $=(null==e?void 0:e.evalMode)?p():function(){for(var t={type:"document",body:[]};i.type!==n.TokenName[6];){var e=P()||I()||R();if(!e)break;t.body.push(e)}return t}();return c((null===(r=i)||void 0===r?void 0:r.type)===n.TokenName[6]),$}},378:(t,e,r)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.resolveVariableAndFilter=e.isPureVariable=e.resolveVariable=e.pickValues=e.stripNumber=e.parseDuration=e.filterDate=e.relativeValueRe=e.formatDuration=e.escapeHtml=e.prettyBytes=e.tokenize=e.keyToPath=e.deleteVariable=e.setVariable=e.getVariable=e.string2regExp=e.isObject=e.cloneObject=e.createObject=void 0;var n=r(752),i=(0,n.__importDefault)(r(452)),o=r(453),a=r(833),u=(0,n.__importDefault)(r(245));function f(t,e){void 0===e&&(e=!0);var r=t&&t.__super?Object.create(t.__super,{__super:{value:t.__super,writable:!1,enumerable:!1}}):Object.create(Object.prototype);return e&&t&&Object.keys(t).forEach((function(e){return r[e]=t[e]})),r}function l(t){var e=typeof t;return t&&"string"!==e&&"number"!==e&&"boolean"!==e&&"function"!==e&&!Array.isArray(t)}function s(t,r,o,a){if(r in(t=t||{}))t[r]=o;else{for(var u=!1!==a?(0,e.keyToPath)(r):[r],f=u.pop();u.length;){var l=u.shift();(0,i.default)(t[l])?t=t[l]=(0,n.__assign)({},t[l]):Array.isArray(t[l])?(t[l]=t[l].concat(),t=t[l]):(t[l],t[l]={},t=t[l])}t[f]=o}}e.createObject=function(t,e,r){t&&Object.isFrozen(t)&&(t=f(t));var i=t?Object.create(t,(0,n.__assign)((0,n.__assign)({},r),{__super:{value:t,writable:!1,enumerable:!1}})):Object.create(Object.prototype,r);return e&&l(e)&&Object.keys(e).forEach((function(t){return i[t]=e[t]})),i},e.cloneObject=f,e.isObject=l,e.string2regExp=function(t,e){if(void 0===e&&(e=!1),"string"!=typeof t)throw new TypeError("Expected a string");return new RegExp(t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),e?"":"i")},e.getVariable=function(t,r,n){if(void 0===n&&(n=!0),t&&r)return(n?r in t:t.hasOwnProperty(r))?t[r]:(0,e.keyToPath)(r).reduce((function(t,e){return t&&"object"==typeof t&&(n?e in t:t.hasOwnProperty(e))?t[e]:void 0}),t)},e.setVariable=s,e.deleteVariable=function(t,r){if(t)if(t.hasOwnProperty(r))delete t[r];else{for(var o=(0,e.keyToPath)(r),a=o.pop();o.length;){var u=o.shift();if(!(0,i.default)(t[u])){if(t[u])throw new Error("目标路径不是纯对象,不能修改");break}t=t[u]=(0,n.__assign)({},t[u])}t&&t.hasOwnProperty&&t.hasOwnProperty(a)&&delete t[a]}},e.keyToPath=function(t){var e=[];return t.charCodeAt(0)===".".charCodeAt(0)&&e.push(""),t.replace(new RegExp("[^.[\\]]+|\\[(?:([^\"'][^[]*)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))","g"),(function(t,r,n,i){var o=t;return n?o=i.replace(/\\(\\)?/g,"$1"):r&&(o=r.trim()),e.push(o),""})),e},e.tokenize=function(t,e,r){if(void 0===r&&(r="| html"),!t||"string"!=typeof t)return t;var n=(0,a.parse)(t,{evalMode:!1,allowFilter:!0}),i=new o.Evaluator({defaultFilter:r}).evalute(n,e);return"".concat(null==i?"":i)};var c=["B","KB","MB","GB","TB","PB","EB","ZB","YB"];e.prettyBytes=function(t){if(!Number.isFinite(t))throw new TypeError("Expected a finite number, got ".concat(typeof t,": ").concat(t));var e=t<0;if(e&&(t=-t),t<1)return(e?"-":"")+t+" B";var r=Math.min(Math.floor(Math.log(t)/Math.log(1e3)),c.length-1);return(e?"-":"")+Number((t/Math.pow(1e3,r)).toPrecision(3))+" "+c[r]};var p={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};e.escapeHtml=function(t){return String(t).replace(/[&<>"'\/]/g,(function(t){return p[t]}))},e.formatDuration=function(t){for(var e=["秒","分","时","天","月","季","年"],r=[1,60,3600,86400,2592e3,7776e3,31104e3],n=r.length,i=[];n--;)r[n]&&t>=r[n]?(i.push(Math.floor(t/r[n])+e[n]),t%=r[n]):0===n&&t&&i.push((t.toFixed?t.toFixed(2):"0")+e[0]);return i.join("")};var v={year:"Y",month:"M",week:"w",weekday:"W",day:"d",hour:"h",minute:"m",min:"m",second:"s",millisecond:"ms"};function d(t,r){return void 0!==t[r]?t[r]:(0,e.keyToPath)(r.replace(/^{|}$/g,"")).reduce((function(t,e){if((l(t)||Array.isArray(t))&&e in t)return t[e]}),t)}function h(t,r){if(void 0===r&&(r={}),t&&r&&"string"==typeof t){var n=t.split(":"),i=n[0],o=n[1];if(!o&&i&&(o=i,i=""),"window"===i)r=window;else{if("ls"===i||"ss"===i){var a=(0,e.keyToPath)(o.replace(/^{|}$/g,"")),u=a.shift(),f="ss"===i?sessionStorage.getItem(u):localStorage.getItem(u);if("string"==typeof f){var s=function(t,e){try{return JSON.parse(t)}catch(t){return e}}(f,f);return l(s)&&a.length?d(s,a.join(".")):s}return}if("cookie"===i)return function(t){var e="; ".concat(document.cookie).split("; ".concat(t,"="));if(2===e.length)return e.pop().split(";").shift()}(u=o.replace(/^{|}$/g,"").trim())}if("$$"===o)return r;if("$"===o[0])o=t.substring(1);else if("&"===o)return r;return d(r,o)}}e.relativeValueRe=/^(.+)?(\+|-)(\d+)(minute|min|hour|day|week|month|year|weekday|second|millisecond)s?$/i,e.filterDate=function(t,r,n,i){void 0===r&&(r={}),void 0===n&&(n="X"),void 0===i&&(i=!1);var o,a=i?u.default.utc:u.default;if("string"==typeof t&&(t=t.trim()),(t=(0,e.tokenize)(t,r))&&"string"==typeof t&&(o=e.relativeValueRe.exec(t))){var f=new Date,l=parseInt(o[3],10),s=o[1]?(0,e.filterDate)(o[1],r,n,i):a(/(minute|min|hour|second)s?/.test(o[4])?[f.getFullYear(),f.getMonth(),f.getDate(),f.getHours(),f.getMinutes(),f.getSeconds()]:[f.getFullYear(),f.getMonth(),f.getDate()]);return"-"===o[2]?s.subtract(l,v[o[4]]):s.add(l,v[o[4]])}return"now"===t?a():"today"===t?a([(f=new Date).getFullYear(),f.getMonth(),f.getDate()]):a(t,n)},e.parseDuration=function(t){var e=/^((?:\-|\+)?(?:\d*\.)?\d+)(minute|min|hour|day|week|month|quarter|year|weekday|second|millisecond)s?$/.exec(t);if(e){var r=u.default.duration(parseFloat(e[1]),e[2]);if(u.default.isDuration(r))return r}},e.stripNumber=function(t){return"number"==typeof t?parseFloat(t.toPrecision(12)):t},e.pickValues=function(t,e){var r,n;if(!t||(n=t.split(","))&&n.length<2){var i=t.indexOf("~");if(~i){var o=t.substring(0,i),a=t.substring(i+1);return(r={})[o]=h(a,e),r}return h(t,e)}var u={};return n.forEach((function(t){var r=t.indexOf("~"),n=t;~r&&(n=t.substring(r+1),t=t.substring(0,r)),s(u,t,h(n,e))})),u},e.resolveVariable=h,e.isPureVariable=function(t){return"string"==typeof t&&/^\$(?:((?:\w+\:)?[a-z0-9_.][a-z0-9_.\[\]]*)|{[^}{]+})$/i.test(t)},e.resolveVariableAndFilter=function(t,e,r,n){if(void 0===e&&(e={}),void 0===r&&(r="| html"),void 0===n&&(n=function(t){return t}),t&&"string"==typeof t){var i=(0,a.parse)(t,{evalMode:!1,allowFilter:!0}),u=new o.Evaluator({defaultFilter:r}).evalute(i,e);return null==u?n(u):u}}},492:t=>{t.exports=require("lodash/groupBy")},452:t=>{t.exports=require("lodash/isPlainObject")},341:t=>{t.exports=require("lodash/transform")},459:t=>{t.exports=require("lodash/uniq")},309:t=>{t.exports=require("lodash/uniqBy")},245:t=>{t.exports=require("moment")},752:t=>{t.exports=require("tslib")}},e={},r=function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,r),o.exports}(303),n=exports;for(var i in r)n[i]=r[i];r.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})})();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack:///src/Users/liaoxuezhi/project/amis-formula/src/evalutor.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/filter.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/index.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/lexer.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/parser.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/util.ts","webpack:///external commonjs \"lodash/groupBy\"","webpack:///external commonjs \"lodash/isPlainObject\"","webpack:///external commonjs \"lodash/transform\"","webpack:///external commonjs \"lodash/uniq\"","webpack:///external commonjs \"lodash/uniqBy\"","webpack:///external commonjs \"moment\"","webpack:///external commonjs \"tslib\"","webpack:///webpack/bootstrap","webpack:///webpack/startup"],"sourcesContent":["/**\n * @file 公式内置函数\n */\n\nimport moment from 'moment';\nimport {getFilters} from './filter';\n\nexport interface FilterMap {\n [propName: string]: (this: FilterContext, input: any, ...args: any[]) => any;\n}\n\nexport interface FunctionMap {\n [propName: string]: (this: Evaluator, ast: Object, data: any) => any;\n}\n\nexport interface FilterContext {\n data: Object;\n restFilters: Array<{\n name: string;\n args: Array<any>;\n }>;\n}\n\nexport interface EvaluatorOptions {\n /**\n * 可以外部传入 ast 节点处理器,定制或者扩充自定义函数\n */\n functions?: FunctionMap;\n\n /**\n * 可以外部扩充 filter\n */\n filters?: FilterMap;\n\n defaultFilter?: string;\n}\n\nexport class Evaluator {\n readonly filters: FilterMap;\n readonly functions: FunctionMap = {};\n data: any;\n\n constructor(\n readonly options: EvaluatorOptions = {\n defaultFilter: 'html'\n }\n ) {\n this.filters = {\n ...this.filters,\n ...getFilters(),\n ...options?.filters\n };\n this.functions = {\n ...this.functions,\n ...options?.functions\n };\n }\n\n // 主入口\n evalute(ast: any, data: any = {}) {\n this.data = data;\n if (ast && ast.type) {\n const name = (ast.type as string).replace(/(?:_|\\-)(\\w)/g, (_, l) =>\n l.toUpperCase()\n );\n const fn = this.functions[name] || (this as any)[name];\n\n if (!fn) {\n throw new Error(`${ast.type} unkown.`);\n }\n\n return fn.call(this, ast, data);\n } else {\n return ast;\n }\n }\n\n document(ast: {type: 'document'; body: Array<any>}, data: any) {\n if (!ast.body.length) {\n return undefined;\n }\n\n const content = ast.body.map(item => this.evalute(item, data));\n return content.length === 1 ? content[0] : content.join('');\n }\n\n filter(\n ast: {\n type: 'filter';\n input: any;\n filters: Array<{name: string; args: Array<any>}>;\n },\n data: any\n ) {\n let input = this.evalute(ast.input, data);\n const filters = ast.filters.concat();\n const context = {\n data,\n restFilters: filters\n };\n\n while (filters.length) {\n const filter = filters.shift()!;\n const fn = this.filters[filter.name];\n if (!fn) {\n throw new Error(`filter \\`${filter.name}\\` not exits`);\n }\n input = fn.apply(\n context,\n [input].concat(\n filter.args.map((item: any) => {\n if (item?.type === 'mixed') {\n return item.body\n .map((item: any) =>\n typeof item === 'string' ? item : this.evalute(item, data)\n )\n .join('');\n } else if (item.type) {\n return this.evalute(item, data);\n }\n return item;\n })\n )\n );\n }\n return input;\n }\n\n raw(ast: {type: 'raw'; value: string}) {\n return ast.value;\n }\n\n script(ast: {type: 'script'; body: any}, data: any) {\n const defaultFilter = this.options.defaultFilter;\n\n if (defaultFilter && ast.body?.type !== 'filter') {\n ast.body = {\n type: 'filter',\n input: ast.body,\n filters: [\n {\n name: defaultFilter.replace(/^\\|\\s/, ''),\n args: []\n }\n ]\n };\n }\n\n return this.evalute(ast.body, data);\n }\n\n expressionList(ast: {type: 'expression-list'; body: Array<any>}, data: any) {\n return ast.body.reduce((prev, current) => this.evalute(current, data));\n }\n\n template(ast: {type: 'template'; args: Array<any>}, data: any) {\n return ast.args.map(arg => this.evalute(arg, data)).join('');\n }\n\n templateRaw(ast: {type: 'template_raw'; value: any}) {\n return ast.value;\n }\n\n // 下标获取\n get(ast: {host: any; key: any}, data: any) {\n const host = this.evalute(ast.host, data);\n const key = this.evalute(ast.key, data);\n return host?.[key];\n }\n\n // 位操作如 +2 ~3 !\n unary(ast: {op: '+' | '-' | '~' | '!'; value: any}, data: any) {\n let value = this.evalute(ast.value, data);\n\n switch (ast.op) {\n case '+':\n return +value;\n case '-':\n return -value;\n case '~':\n return ~value;\n case '!':\n return !value;\n }\n }\n\n formatNumber(value: any, int = false) {\n const typeName = typeof value;\n if (typeName === 'string') {\n return (int ? parseInt(value, 10) : parseFloat(value)) || 0;\n } else if (typeName === 'number' && int) {\n return Math.round(value);\n }\n\n return value ?? 0;\n }\n\n power(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return Math.pow(this.formatNumber(left), this.formatNumber(right));\n }\n\n multiply(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) * this.formatNumber(right);\n }\n\n divide(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) / this.formatNumber(right);\n }\n\n remainder(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) % this.formatNumber(right);\n }\n\n add(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) + this.formatNumber(right);\n }\n\n minus(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) - this.formatNumber(right);\n }\n\n shift(ast: {op: '<<' | '>>' | '>>>'; left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.formatNumber(this.evalute(ast.right, data), true);\n\n if (ast.op === '<<') {\n return left << right;\n } else if (ast.op == '>>') {\n return left >> right;\n } else {\n return left >>> right;\n }\n }\n\n lt(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left < right;\n }\n\n gt(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n return left > right;\n }\n\n le(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left <= right;\n }\n\n ge(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left >= right;\n }\n\n eq(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left == right;\n }\n\n ne(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left != right;\n }\n\n streq(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left === right;\n }\n\n strneq(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left !== right;\n }\n\n binary(ast: {op: '&' | '^' | '|'; left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n if (ast.op === '&') {\n return left & right;\n } else if (ast.op === '^') {\n return left ^ right;\n } else {\n return left | right;\n }\n }\n\n and(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n return left && this.evalute(ast.right, data);\n }\n\n or(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n return left || this.evalute(ast.right, data);\n }\n\n number(ast: {value: any; raw: string}, data: any) {\n // todo 以后可以在这支持大数字。\n return ast.value;\n }\n\n variable(ast: {name: string}, data: any) {\n return ast.name === '&' ? data : data[ast.name];\n }\n\n array(ast: {type: 'array'; members: Array<any>}, data: any) {\n return ast.members.map(member => this.evalute(member, data));\n }\n\n literal(ast: {type: 'literal'; value: any}) {\n return ast.value;\n }\n\n string(ast: {type: 'string'; value: string}) {\n return ast.value;\n }\n\n object(ast: {memebers: Array<{key: string; value: any}>}, data: any) {\n let object: any = {};\n ast.memebers.forEach(({key, value}) => {\n object[key] = this.evalute(value, data);\n });\n return object;\n }\n\n conditional(\n ast: {type: 'conditional'; test: any; consequent: any; alternate: any},\n data: any\n ) {\n return this.evalute(ast.test, data)\n ? this.evalute(ast.consequent, data)\n : this.evalute(ast.alternate, data);\n }\n\n funcCall(this: any, ast: {identifier: string; args: Array<any>}, data: any) {\n const fnName = `fn${ast.identifier}`;\n const fn =\n this.functions[fnName] || this[fnName] || this.filters[ast.identifier];\n\n if (!fn) {\n throw new Error(`${ast.identifier}函数没有定义`);\n }\n\n let args: Array<any> = ast.args;\n\n // 逻辑函数特殊处理,因为有时候有些运算是可以跳过的。\n if (~['IF', 'AND', 'OR', 'XOR', 'IFS'].indexOf(ast.identifier)) {\n args = args.map(a => () => this.evalute(a, data));\n } else {\n args = args.map(a => this.evalute(a, data));\n }\n\n return fn.apply(this, args);\n }\n\n // 逻辑函数\n\n fnIF(condition: () => any, trueValue: () => any, falseValue: () => any) {\n return condition() ? trueValue() : falseValue();\n }\n\n fnAND(...condtions: Array<() => any>) {\n return condtions.every(c => c());\n }\n\n fnOR(...condtions: Array<() => any>) {\n return condtions.some(c => c());\n }\n\n fnXOR(c1: () => any, c2: () => any) {\n return !!c1() === !!c2();\n }\n\n fnIFS(...args: Array<() => any>) {\n if (args.length % 2) {\n args.splice(args.length - 1, 0, () => true);\n }\n\n while (args.length) {\n const c = args.shift()!;\n const v = args.shift()!;\n\n if (c()) {\n return v();\n }\n }\n return;\n }\n\n // 数学函数\n\n fnABS(a: number) {\n return Math.abs(a);\n }\n\n fnMax(...args: Array<any>) {\n return Math.max.apply(Math, args);\n }\n\n fnMin(...args: Array<number>) {\n return Math.min.apply(Math, args);\n }\n\n fnSUM(...args: Array<number>) {\n return args.reduce((sum, a) => sum + this.formatNumber(a) || 0, 0);\n }\n\n fnINT(n: number) {\n return Math.floor(n);\n }\n\n fnMOD(a: number, b: number) {\n return a % b;\n }\n\n fnPI() {\n return Math.PI;\n }\n\n fnROUND(a: number, b: number) {\n const bResult = Math.round(b);\n\n if (bResult) {\n const c = Math.pow(10, bResult);\n return Math.round(a * c) / c;\n }\n\n return Math.round(a);\n }\n\n fnSQRT(n: number) {\n return Math.sqrt(n);\n }\n\n fnAVG(...args: Array<any>) {\n return this.fnSUM.apply(this, args) / args.length;\n }\n\n fnUPPERMONEY() {\n return 'todo';\n }\n\n fnRAND() {\n return Math.random();\n }\n\n // 文本函数\n\n normalizeText(raw: any) {\n if (raw instanceof Date) {\n return moment(raw).format();\n }\n\n return `${raw}`;\n }\n\n fnLEFT(text: string, len: number) {\n text = this.normalizeText(text);\n return text.substring(0, len);\n }\n\n fnRIGHT(text: string, len: number) {\n text = this.normalizeText(text);\n return text.substring(text.length - len, text.length);\n }\n\n fnLEN(text: string) {\n text = this.normalizeText(text);\n return text?.length;\n }\n\n fnISEMPTY(text: string) {\n return !text || !String(text).trim();\n }\n\n fnCONCATENATE(...args: Array<any>) {\n return args.join('');\n }\n\n fnCHAR(code: number) {\n return String.fromCharCode(code);\n }\n\n fnLOWER(text: string) {\n text = this.normalizeText(text);\n return text.toLowerCase();\n }\n\n fnUPPER(text: string) {\n text = this.normalizeText(text);\n return text.toUpperCase();\n }\n\n fnSPLIT(text: string, sep: string) {\n text = this.normalizeText(text);\n return text.split(sep);\n }\n\n fnTRIM(text: string) {\n text = this.normalizeText(text);\n return text.trim();\n }\n\n fnSTARTSWITH(text: string, search: string) {\n if (!search) {\n return false;\n }\n\n text = this.normalizeText(text);\n return text.indexOf(search) === 0;\n }\n\n fnCONTAINS(text: string, search: string) {\n if (!search) {\n return false;\n }\n\n text = this.normalizeText(text);\n return !!~text.indexOf(search);\n }\n\n fnREPLACE(text: string, search: string, replace: string) {\n text = this.normalizeText(text);\n let result = text;\n\n while (true) {\n const idx = result.indexOf(search);\n\n if (!~idx) {\n break;\n }\n\n result =\n result.substring(0, idx) +\n replace +\n result.substring(idx + search.length);\n }\n\n return result;\n }\n\n fnSEARCH(text: string, search: string, start?: number) {\n text = this.normalizeText(text);\n start = start || 0;\n let str = text;\n\n if (start) {\n str = str.substring(start);\n }\n\n const idx = str.indexOf(search);\n if (~idx) {\n return idx + search;\n }\n\n return -1;\n }\n\n fnMID(text: string, from: number, len: number) {\n text = this.normalizeText(text);\n return text.substring(from, from + len);\n }\n\n // 日期函数\n fnDATE(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number\n ) {\n if (month === undefined) {\n return new Date(year);\n }\n\n return new Date(year, month, day, hour, minute, second);\n }\n\n fnTIMESTAMP(date: Date, format?: 'x' | 'X') {\n return parseInt(moment(date).format(format === 'x' ? 'x' : 'X'), 10);\n }\n\n fnTODAY() {\n return new Date();\n }\n\n fnNOW() {\n return new Date();\n }\n\n fnSTARTOF(date: Date, unit?: any) {\n return moment(date)\n .startOf(unit || 'day')\n .toDate();\n }\n\n fnENDOF(date: Date, unit?: any) {\n return moment(date)\n .endOf(unit || 'day')\n .toDate();\n }\n\n normalizeDate(raw: any): Date {\n if (typeof raw === 'string') {\n const formats = ['', 'YYYY-MM-DD HH:mm:ss'];\n\n while (formats.length) {\n const format = formats.shift()!;\n const date = moment(raw, format);\n\n if (date.isValid()) {\n return date.toDate();\n }\n }\n } else if (typeof raw === 'number') {\n return new Date(raw);\n }\n\n return raw;\n }\n\n fnYEAR(date: Date) {\n date = this.normalizeDate(date);\n return date.getFullYear();\n }\n\n fnMONTH(date: Date) {\n date = this.normalizeDate(date);\n return date.getMonth() + 1;\n }\n\n fnDAY(date: Date) {\n date = this.normalizeDate(date);\n return date.getDate();\n }\n\n fnHOUR(date: Date) {\n date = this.normalizeDate(date);\n return date.getHours();\n }\n\n fnHMINUTE(date: Date) {\n date = this.normalizeDate(date);\n return date.getMinutes();\n }\n\n fnSECOND(date: Date) {\n date = this.normalizeDate(date);\n return date.getSeconds();\n }\n\n fnYEARS(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'year');\n }\n\n fnMINUTES(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'minutes');\n }\n\n fnDAYS(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'days');\n }\n\n fnHOURS(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'hour');\n }\n\n fnDATEMODIFY(date: Date, num: number, format: any) {\n date = this.normalizeDate(date);\n return moment(date).add(num, format).toDate();\n }\n\n fnSTRTODATE(value: any, format: string = '') {\n return moment(value, format).toDate();\n }\n\n fnISBEFORE(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isBefore(moment(b), unit);\n }\n\n fnISAFTER(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isAfter(moment(b), unit);\n }\n\n fnISSAMEORBEFORE(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isSameOrBefore(moment(b), unit);\n }\n\n fnISSAMEORAFTER(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isSameOrAfter(moment(b), unit);\n }\n\n fnCOUNT(value: any) {\n return Array.isArray(value) ? value.length : value ? 1 : 0;\n }\n}\n","import moment from 'moment';\nimport transform from 'lodash/transform';\nimport groupBy from 'lodash/groupBy';\nimport uniqBy from 'lodash/uniqBy';\nimport uniq from 'lodash/uniq';\nimport {\n createObject,\n escapeHtml,\n filterDate,\n formatDuration,\n pickValues,\n prettyBytes,\n resolveVariable,\n string2regExp,\n stripNumber\n} from './util';\nimport type {FilterContext, FilterMap} from './evalutor';\n\nfunction makeSorter(\n key: string,\n method?: 'alpha' | 'numerical',\n order?: 'desc' | 'asc'\n) {\n return function (a: any, b: any) {\n if (!a || !b) {\n return 0;\n }\n\n const va = resolveVariable(key, a);\n const vb = resolveVariable(key, b);\n let result = 0;\n\n if (method === 'numerical') {\n result = (parseFloat(va) || 0) - (parseFloat(vb) || 0);\n } else {\n result = String(va).localeCompare(String(vb));\n }\n\n return result * (order === 'desc' ? -1 : 1);\n };\n}\n\nexport const filters: FilterMap = {\n map: (input: Array<unknown>, fn: string, ...arg: any) =>\n Array.isArray(input) && filters[fn]\n ? input.map(item => filters[fn].call(this, item, ...arg))\n : input,\n html: (input: string) => escapeHtml(input),\n json: (input, tabSize: number | string = 2) =>\n tabSize\n ? JSON.stringify(input, null, parseInt(tabSize as string, 10))\n : JSON.stringify(input),\n toJson: input => {\n let ret;\n try {\n ret = JSON.parse(input);\n } catch (e) {\n ret = null;\n }\n return ret;\n },\n toInt: input => (typeof input === 'string' ? parseInt(input, 10) : input),\n toFloat: input => (typeof input === 'string' ? parseFloat(input) : input),\n raw: input => input,\n now: () => new Date(),\n toDate: (input: any, inputFormat = '') => {\n const data = moment(input, inputFormat);\n data.add();\n return data.isValid() ? data.toDate() : undefined;\n },\n fromNow: (input: any, inputFormat = '') =>\n moment(input, inputFormat).fromNow(),\n dateModify: (\n input: any,\n modifier: 'add' | 'subtract' | 'endOf' | 'startOf' = 'add',\n amount = 0,\n unit = 'days'\n ) => {\n if (!(input instanceof Date)) {\n input = new Date();\n }\n\n if (modifier === 'endOf' || modifier === 'startOf') {\n return moment(input)\n [modifier === 'endOf' ? 'endOf' : 'startOf'](amount || 'day')\n .toDate();\n }\n\n return moment(input)\n [modifier === 'add' ? 'add' : 'subtract'](parseInt(amount, 10) || 0, unit)\n .toDate();\n },\n date: (input, format = 'LLL', inputFormat = 'X') =>\n moment(input, inputFormat).format(format),\n number: input => {\n let parts = String(input).split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n },\n trim: input => (typeof input === 'string' ? input.trim() : input),\n percent: (input, decimals = 0) => {\n input = parseFloat(input) || 0;\n decimals = parseInt(decimals, 10) || 0;\n\n let whole = input * 100;\n let multiplier = Math.pow(10, decimals);\n\n return (\n (Math.round(whole * multiplier) / multiplier).toFixed(decimals) + '%'\n );\n },\n duration: input => (input ? formatDuration(input) : input),\n bytes: input => (input ? prettyBytes(parseFloat(input)) : input),\n round: (input, decimals = 2) => {\n if (isNaN(input)) {\n return 0;\n }\n\n decimals = parseInt(decimals, 10) ?? 2;\n\n let multiplier = Math.pow(10, decimals);\n return (Math.round(input * multiplier) / multiplier).toFixed(decimals);\n },\n truncate: (input, length, end) => {\n if (typeof input !== 'string') {\n return input;\n }\n\n end = end || '...';\n\n if (length == null) {\n return input;\n }\n\n length = parseInt(length, 10) || 200;\n\n return input.substring(0, length) + (input.length > length ? end : '');\n },\n url_encode: input => encodeURIComponent(input),\n url_decode: input => decodeURIComponent(input),\n default: (input, defaultValue, strict = false) =>\n (strict ? input : input ? input : undefined) ??\n (() => {\n try {\n if (defaultValue === 'undefined') {\n return undefined;\n }\n\n return JSON.parse(defaultValue);\n } catch (e) {\n return defaultValue;\n }\n })(),\n join: (input, glue) => (input && input.join ? input.join(glue) : input),\n split: (input, delimiter = ',') =>\n typeof input === 'string' ? input.split(delimiter) : input,\n sortBy: (\n input: any,\n key: string,\n method: 'alpha' | 'numerical' = 'alpha',\n order?: 'asc' | 'desc'\n ) =>\n Array.isArray(input) ? input.sort(makeSorter(key, method, order)) : input,\n objectToArray: (\n input: any,\n label: string = 'label',\n value: string = 'value'\n ) =>\n transform(\n input,\n (result: any, v, k) => {\n (result || (result = [])).push({\n [label]: v,\n [value]: k\n });\n },\n []\n ),\n unique: (input: any, key?: string) =>\n Array.isArray(input) ? (key ? uniqBy(input, key) : uniq(input)) : input,\n topAndOther: (\n input: any,\n len: number = 10,\n labelField: string = 'name',\n restLabel = '其他'\n ) => {\n if (Array.isArray(input) && len) {\n const grouped = groupBy(input, (item: any) => {\n const index = input.indexOf(item) + 1;\n return index >= len ? len : index;\n });\n\n return Object.keys(grouped).map((key, index) => {\n const group = grouped[key];\n const obj = group.reduce((obj, item) => {\n Object.keys(item).forEach(key => {\n if (!obj.hasOwnProperty(key) || key === 'labelField') {\n obj[key] = item[key];\n } else if (\n typeof item[key] === 'number' &&\n typeof obj[key] === 'number'\n ) {\n obj[key] += item[key];\n } else if (\n typeof item[key] === 'string' &&\n /^(?:\\-|\\.)\\d/.test(item[key]) &&\n typeof obj[key] === 'number'\n ) {\n obj[key] += parseFloat(item[key]) || 0;\n } else if (\n typeof item[key] === 'string' &&\n typeof obj[key] === 'string'\n ) {\n obj[key] += `, ${item[key]}`;\n } else {\n obj[key] = item[key];\n }\n });\n\n return obj;\n }, {});\n\n if (index === len - 1) {\n obj[labelField] = restLabel || '其他';\n }\n return obj;\n });\n }\n return input;\n },\n first: input => input && input[0],\n nth: (input, nth = 0) => input && input[nth],\n last: input => input && (input.length ? input[input.length - 1] : null),\n minus(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) - Number(getStrOrVariable(step, this.data))\n );\n },\n plus(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) + Number(getStrOrVariable(step, this.data))\n );\n },\n times(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) * Number(getStrOrVariable(step, this.data))\n );\n },\n division(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) / Number(getStrOrVariable(step, this.data))\n );\n },\n count: (input: any) =>\n Array.isArray(input) || typeof input === 'string' ? input.length : 0,\n sum: (input, field) => {\n if (!Array.isArray(input)) {\n return input;\n }\n const restult = input.reduce(\n (sum, item) =>\n sum + (parseFloat(field ? pickValues(field, item) : item) || 0),\n 0\n );\n return stripNumber(restult);\n },\n abs: (input: any) => (typeof input === 'number' ? Math.abs(input) : input),\n pick: (input, path = '&') =>\n Array.isArray(input) && !/^\\d+$/.test(path)\n ? input.map((item, index) =>\n pickValues(path, createObject({index}, item))\n )\n : pickValues(path, input),\n pick_if_exist: (input, path = '&') =>\n Array.isArray(input)\n ? input.map(item => resolveVariable(path, item) || item)\n : resolveVariable(path, input) || input,\n str2date: function (input, inputFormat = 'X', outputFormat = 'X') {\n return input\n ? filterDate(input, this.data, inputFormat).format(outputFormat)\n : '';\n },\n asArray: input => (Array.isArray(input) ? input : input ? [input] : input),\n concat(input, ...args: any[]) {\n return Array.isArray(input)\n ? input.concat(...args.map(arg => getStrOrVariable(arg, this.data)))\n : input;\n },\n filter: function (input, keys, expOrDirective, arg1) {\n if (!Array.isArray(input) || !keys || !expOrDirective) {\n return input;\n }\n\n let directive = expOrDirective;\n let fn: (value: any, key: string, item: any) => boolean = () => true;\n\n if (directive === 'isTrue') {\n fn = value => !!value;\n } else if (directive === 'isFalse') {\n fn = value => !value;\n } else if (directive === 'isExists') {\n fn = value => typeof value !== 'undefined';\n } else if (directive === 'equals' || directive === 'equal') {\n arg1 = arg1 ? getStrOrVariable(arg1, this.data) : '';\n fn = value => arg1 == value;\n } else if (directive === 'isIn') {\n let list: any = arg1 ? getStrOrVariable(arg1, this.data) : [];\n\n list = str2array(list);\n list = Array.isArray(list) ? list : list ? [list] : [];\n fn = value => (list.length ? !!~list.indexOf(value) : true);\n } else if (directive === 'notIn') {\n let list: Array<any> = arg1 ? getStrOrVariable(arg1, this.data) : [];\n list = str2array(list);\n list = Array.isArray(list) ? list : list ? [list] : [];\n fn = value => !~list.indexOf(value);\n } else {\n if (directive !== 'match') {\n directive = 'match';\n arg1 = expOrDirective;\n }\n arg1 = arg1 ? getStrOrVariable(arg1, this.data) : '';\n\n // 比对的值是空时直接返回。\n if (!arg1) {\n return input;\n }\n\n let reg = string2regExp(`${arg1}`, false);\n fn = value => reg.test(String(value));\n }\n\n // 判断keys是否为*\n const isAsterisk = /\\s*\\*\\s*/.test(keys);\n keys = keys.split(/\\s*,\\s*/);\n return input.filter((item: any) =>\n // 当keys为*时从item中获取key\n (isAsterisk ? Object.keys(item) : keys).some((key: string) =>\n fn(resolveVariable(key, item), key, item)\n )\n );\n },\n base64Encode(str) {\n return btoa(\n encodeURIComponent(str).replace(\n /%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode(('0x' + p1) as any);\n }\n )\n );\n },\n\n base64Decode(str) {\n return decodeURIComponent(\n atob(str)\n .split('')\n .map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n },\n\n lowerCase: input =>\n input && typeof input === 'string' ? input.toLowerCase() : input,\n upperCase: input =>\n input && typeof input === 'string' ? input.toUpperCase() : input,\n\n isTrue(input, trueValue, falseValue) {\n const hasAlternate = arguments.length > 2;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n !!input,\n trueValue,\n falseValue\n );\n },\n isFalse(input, trueValue, falseValue) {\n const hasAlternate = arguments.length > 2;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n !input,\n trueValue,\n falseValue\n );\n },\n isMatch(input, matchArg, trueValue, falseValue) {\n const hasAlternate = arguments.length > 3;\n matchArg = getStrOrVariable(matchArg, this.data as any);\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n matchArg && string2regExp(`${matchArg}`, false).test(String(input)),\n trueValue,\n falseValue\n );\n },\n notMatch(input, matchArg, trueValue, falseValue) {\n const hasAlternate = arguments.length > 3;\n matchArg = getStrOrVariable(matchArg, this.data as any);\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n matchArg && !string2regExp(`${matchArg}`, false).test(String(input)),\n trueValue,\n falseValue\n );\n },\n isEquals(input, equalsValue, trueValue, falseValue) {\n equalsValue = /^\\d+$/.test(equalsValue)\n ? parseInt(equalsValue, 10)\n : getStrOrVariable(equalsValue, this.data as any);\n\n const hasAlternate = arguments.length > 3;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n input === equalsValue,\n trueValue,\n falseValue\n );\n },\n notEquals(input, equalsValue, trueValue, falseValue) {\n equalsValue = /^\\d+$/.test(equalsValue)\n ? parseInt(equalsValue, 10)\n : getStrOrVariable(equalsValue, this.data as any);\n\n const hasAlternate = arguments.length > 3;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n input !== equalsValue,\n trueValue,\n falseValue\n );\n }\n};\n\nfunction conditionalFilter(\n input: any,\n hasAlternate: boolean,\n filterContext: FilterContext,\n test: any,\n trueValue: any,\n falseValue: any\n) {\n hasAlternate && skipRestTest(filterContext.restFilters);\n\n return test || hasAlternate\n ? getStrOrVariable(test ? trueValue : falseValue, filterContext.data)\n : input;\n}\n\n/**\n * 如果当前传入字符为:'xxx'或者\"xxx\",则返回字符xxx\n * 否则去数据域中,获取变量xxx\n *\n * @param value 传入字符\n * @param data 数据域\n */\nfunction getStrOrVariable(value: any, data: any) {\n return typeof value === 'string' && /,/.test(value)\n ? value.split(/\\s*,\\s*/).filter(item => item)\n : typeof value === 'string'\n ? resolveVariable(value, data) ?? value\n : value;\n}\n\nfunction str2array(list: any) {\n if (list && typeof list === 'string') {\n if (/^\\[.*\\]$/.test(list)) {\n return list\n .substring(1, list.length - 1)\n .split(/\\s*,\\s*/)\n .filter(item => item);\n } else {\n return list.split(/\\s*,\\s*/).filter(item => item);\n }\n }\n return list;\n}\n\nfunction skipRestTest(restFilters: Array<{name: string}>) {\n while (\n ~[\n 'isTrue',\n 'isFalse',\n 'isMatch',\n 'isEquals',\n 'notMatch',\n 'notEquals'\n ].indexOf(restFilters[0]?.name)\n ) {\n restFilters.shift();\n }\n}\n\nexport function registerFilter(\n name: string,\n fn: (input: any, ...args: any[]) => any\n): void {\n filters[name] = fn;\n}\n\nexport function getFilters() {\n return filters;\n}\n","import {Evaluator, EvaluatorOptions} from './evalutor';\nimport {parse, ParserOptions} from './parser';\nimport {lexer} from './lexer';\nimport {registerFilter, filters, getFilters} from './filter';\nexport {parse, lexer, Evaluator, filters, getFilters, registerFilter};\nexport * from './util';\n\nexport function evaluate(\n astOrString: string,\n data: any,\n options?: ParserOptions & EvaluatorOptions\n) {\n if (typeof astOrString === 'string') {\n astOrString = parse(astOrString, options);\n }\n\n return new Evaluator(options).evalute(astOrString, data);\n}\n","export interface LexerOptions {\n /**\n * 直接是运算表达式?还是从模板开始 ${} 里面才算运算表达式\n */\n evalMode?: boolean;\n\n /**\n * 是否允许 filter 语法,比如:\n *\n * ${abc | html}\n */\n allowFilter?: boolean;\n}\n\nexport const enum TokenEnum {\n BooleanLiteral = 1,\n RAW,\n Variable,\n OpenScript,\n CloseScript,\n EOF,\n Identifier,\n Literal,\n NumericLiteral,\n Punctuator,\n StringLiteral,\n RegularExpression,\n TemplateRaw,\n TemplateLeftBrace,\n TemplateRightBrace,\n OpenFilter,\n Char\n}\n\nexport type TokenTypeName =\n | 'Boolean'\n | 'Raw'\n | 'Variable'\n | 'OpenScript'\n | 'CloseScript'\n | 'EOF'\n | 'Identifier'\n | 'Literal'\n | 'Numeric'\n | 'Punctuator'\n | 'String'\n | 'RegularExpression'\n | 'TemplateRaw'\n | 'TemplateLeftBrace'\n | 'TemplateRightBrace'\n | 'OpenFilter'\n | 'Char';\n\nexport const TokenName: {\n [propName: string]: TokenTypeName;\n} = {};\nTokenName[TokenEnum.BooleanLiteral] = 'Boolean';\nTokenName[TokenEnum.RAW] = 'Raw';\nTokenName[TokenEnum.Variable] = 'Variable';\nTokenName[TokenEnum.OpenScript] = 'OpenScript';\nTokenName[TokenEnum.CloseScript] = 'CloseScript';\nTokenName[TokenEnum.EOF] = 'EOF';\nTokenName[TokenEnum.Identifier] = 'Identifier';\nTokenName[TokenEnum.Literal] = 'Literal';\nTokenName[TokenEnum.NumericLiteral] = 'Numeric';\nTokenName[TokenEnum.Punctuator] = 'Punctuator';\nTokenName[TokenEnum.StringLiteral] = 'String';\nTokenName[TokenEnum.RegularExpression] = 'RegularExpression';\nTokenName[TokenEnum.TemplateRaw] = 'TemplateRaw';\nTokenName[TokenEnum.TemplateLeftBrace] = 'TemplateLeftBrace';\nTokenName[TokenEnum.TemplateRightBrace] = 'TemplateRightBrace';\nTokenName[TokenEnum.OpenFilter] = 'OpenFilter';\nTokenName[TokenEnum.Char] = 'Char';\n\nexport interface Position {\n index: number;\n line: number;\n column: number;\n}\n\nexport interface Token {\n type: TokenTypeName;\n value: any;\n raw?: string;\n start: Position;\n end: Position;\n}\n\nconst mainStates = {\n START: 0,\n SCRIPT: 1,\n EXPRESSION: 2,\n BLOCK: 3,\n Template: 4,\n Filter: 5\n};\n\nconst rawStates = {\n START: 0,\n ESCAPE: 1\n};\n\nconst numberStates = {\n START: 0,\n MINUS: 1,\n ZERO: 2,\n DIGIT: 3,\n POINT: 4,\n DIGIT_FRACTION: 5,\n EXP: 6,\n EXP_DIGIT_OR_SIGN: 7\n};\n\nconst stringStates = {\n START: 0,\n START_QUOTE_OR_CHAR: 1,\n ESCAPE: 2\n};\n\nconst filterStates = {\n START: 0,\n Func: 1,\n SEP: 2,\n ESCAPE: 3\n};\n\nconst punctuatorList = [\n '===',\n '!==',\n '==',\n '!=',\n '<>',\n '<',\n '>',\n '<=',\n '>=',\n '||',\n '&&',\n '++',\n '--',\n '<<',\n '>>',\n '>>>',\n '+=',\n '*=',\n '/=',\n\n '=',\n '*',\n '/',\n '-',\n '+',\n '^',\n '!',\n '%',\n '&',\n '|',\n '(',\n ')',\n '[',\n ']',\n '{',\n '}',\n '?',\n ':',\n ';',\n ',',\n '.',\n '$'\n];\n\nconst escapes = {\n '\"': 0, // Quotation mask\n '\\\\': 1, // Reverse solidus\n '/': 2, // Solidus\n 'b': 3, // Backspace\n 'f': 4, // Form feed\n 'n': 5, // New line\n 'r': 6, // Carriage return\n 't': 7, // Horizontal tab\n 'u': 8 // 4 hexadecimal digits\n};\n\nfunction isDigit1to9(char: string) {\n return char >= '1' && char <= '9';\n}\n\nfunction isDigit(char: string) {\n return char >= '0' && char <= '9';\n}\n\nfunction isHex(char: string) {\n return (\n isDigit(char) ||\n (char >= 'a' && char <= 'f') ||\n (char >= 'A' && char <= 'F')\n );\n}\n\nfunction isExp(char: string) {\n return char === 'e' || char === 'E';\n}\n\nfunction escapeString(text: string, allowedLetter: Array<string> = []) {\n return text.replace(/\\\\(.)/g, function (_, text) {\n return text === 'b'\n ? '\\b'\n : text === 'f'\n ? '\\f'\n : text === 'n'\n ? '\\n'\n : text === 'r'\n ? '\\r'\n : text === 't'\n ? '\\t'\n : text === 'v'\n ? '\\v'\n : ~allowedLetter.indexOf(text)\n ? text\n : _;\n });\n}\n\nfunction formatNumber(value: string) {\n return Number(value);\n}\n\nexport function lexer(input: string, options?: LexerOptions) {\n let line = 1;\n let column = 1;\n let index = 0;\n let mainState = mainStates.START;\n const states: Array<any> = [mainState];\n let tokenCache: Array<Token> = [];\n const allowFilter = options?.allowFilter !== false;\n\n if (options?.evalMode) {\n pushState(mainStates.EXPRESSION);\n }\n\n function pushState(state: any) {\n states.push((mainState = state));\n }\n function popState() {\n states.pop();\n mainState = states[states.length - 1];\n }\n\n function position(value?: string) {\n if (value && typeof value === 'string') {\n const lines = value.split(/[\\r\\n]+/);\n return {\n index: index + value.length,\n line: line + lines.length - 1,\n column: column + lines[lines.length - 1].length\n };\n }\n\n return {index: index, line, column};\n }\n\n function eof(): Token | void | null {\n if (index >= input.length) {\n return {\n type: TokenName[TokenEnum.EOF],\n value: undefined,\n start: position(),\n end: position()\n };\n }\n }\n\n function raw(): Token | void | null {\n if (mainState !== mainStates.START) {\n return null;\n }\n\n let buffer = '';\n let state = rawStates.START;\n let i = index;\n\n while (i < input.length) {\n const ch = input[i];\n\n if (state === rawStates.ESCAPE) {\n if (escapes.hasOwnProperty(ch) || ch === '$') {\n buffer += ch;\n i++;\n state = rawStates.START;\n } else {\n const pos = position(buffer + ch);\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n } else {\n if (ch === '\\\\') {\n buffer += ch;\n i++;\n state = rawStates.ESCAPE;\n continue;\n } else if (ch === '$') {\n const nextCh = input[i + 1];\n if (nextCh === '{') {\n break;\n } else if (nextCh === '$') {\n // $$ 用法兼容\n tokenCache.push({\n type: TokenName[TokenEnum.Variable],\n value: '&',\n raw: '$$',\n start: position(input.substring(index, i)),\n end: position(input.substring(index, i + 2))\n });\n break;\n } else {\n // 支持旧的 $varName 的取值方法\n let j = i + 2;\n while (\n /^[a-zA-Z0-9_.][a-zA-Z0-9_.\\[\\]]*$/.test(\n input.substring(i + 1, j)\n ) &&\n j <= input.length\n ) {\n j++;\n }\n\n if (j - i > 2) {\n tokenCache.push({\n type: TokenName[TokenEnum.Variable],\n value: input.substring(i + 1, j),\n raw: input.substring(i, j),\n start: position(input.substring(index, i)),\n end: position(input.substring(index, j))\n });\n break;\n }\n }\n }\n i++;\n buffer += ch;\n }\n }\n\n if (i > index) {\n return {\n type: TokenName[TokenEnum.RAW],\n value: escapeString(buffer, ['`', '$']),\n raw: buffer,\n start: position(),\n end: position(buffer)\n };\n }\n return tokenCache.length ? tokenCache.shift() : null;\n }\n\n function openScript() {\n const ch = input[index];\n if (ch === '$') {\n const nextCh = input[index + 1];\n if (nextCh === '{') {\n pushState(mainStates.SCRIPT);\n const value = input.substring(index, index + 2);\n return {\n type: TokenName[TokenEnum.OpenScript],\n value,\n start: position(),\n end: position(value)\n };\n }\n }\n return null;\n }\n\n function expression() {\n if (\n mainState !== mainStates.SCRIPT &&\n mainState !== mainStates.EXPRESSION &&\n mainState !== mainStates.BLOCK &&\n mainState !== mainStates.Filter\n ) {\n return null;\n }\n\n const token =\n literal() ||\n identifier() ||\n numberLiteral() ||\n stringLiteral() ||\n punctuator() ||\n char();\n\n if (token?.value === '{') {\n pushState(mainStates.BLOCK);\n } else if (token?.value === '}') {\n if (mainState === mainStates.Filter) {\n popState();\n }\n\n const prevState = mainState;\n popState();\n\n if (\n prevState === mainStates.SCRIPT ||\n prevState === mainStates.EXPRESSION\n ) {\n return {\n type: TokenName[\n prevState === mainStates.EXPRESSION\n ? TokenEnum.TemplateRightBrace\n : TokenEnum.CloseScript\n ],\n value: token!.value,\n start: position(),\n end: position(token!.value)\n };\n }\n }\n\n // filter 过滤器部分需要特殊处理\n if (\n mainState === mainStates.SCRIPT &&\n token?.value === '|' &&\n allowFilter\n ) {\n pushState(mainStates.Filter);\n return {\n type: TokenName[TokenEnum.OpenFilter],\n value: '|',\n start: position(),\n end: position('|')\n };\n } else if (mainState === mainStates.Filter && token?.value === '|') {\n return {\n type: TokenName[TokenEnum.OpenFilter],\n value: '|',\n start: position(),\n end: position('|')\n };\n }\n\n if (!token && input[index] === '`') {\n pushState(mainStates.Template);\n return {\n type: TokenName[TokenEnum.Punctuator],\n value: '`',\n start: position(),\n end: position('`')\n };\n }\n\n return token;\n }\n\n function char() {\n if (mainState !== mainStates.Filter) {\n return null;\n }\n\n let i = index;\n let ch = input[i];\n if (ch === '\\\\') {\n const nextCh = input[i + 1];\n\n if (\n nextCh === '$' ||\n ~punctuatorList.indexOf(nextCh) ||\n escapes.hasOwnProperty(nextCh)\n ) {\n i++;\n ch =\n nextCh === 'b'\n ? '\\b'\n : nextCh === 'f'\n ? '\\f'\n : nextCh === 'n'\n ? '\\n'\n : nextCh === 'r'\n ? '\\r'\n : nextCh === 't'\n ? '\\t'\n : nextCh === 'v'\n ? '\\v'\n : nextCh;\n } else {\n const pos = position(input.substring(index, index + 1));\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n }\n const token = {\n type: TokenName[TokenEnum.Char],\n value: ch,\n start: position(),\n end: position(input.substring(index, i + 1))\n };\n return token;\n }\n\n function template(): Token | void | null {\n if (mainState !== mainStates.Template) {\n return null;\n }\n let state = stringStates.START;\n let i = index;\n while (i < input.length) {\n const ch = input[i];\n\n if (state === stringStates.ESCAPE) {\n if (escapes.hasOwnProperty(ch) || ch === '`' || ch === '$') {\n i++;\n state = stringStates.START_QUOTE_OR_CHAR;\n } else {\n const pos = position(input.substring(index, i + 1));\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n } else if (ch === '\\\\') {\n i++;\n state = stringStates.ESCAPE;\n } else if (ch === '`') {\n popState();\n tokenCache.push({\n type: TokenName[TokenEnum.Punctuator],\n value: '`',\n start: position(input.substring(index, i)),\n end: position(input.substring(index, i + 1))\n });\n break;\n } else if (ch === '$') {\n const nextCh = input[i + 1];\n if (nextCh === '{') {\n pushState(mainStates.EXPRESSION);\n tokenCache.push({\n type: TokenName[TokenEnum.TemplateLeftBrace],\n value: '${',\n start: position(input.substring(index, i)),\n end: position(input.substring(index, i + 2))\n });\n break;\n }\n i++;\n } else {\n i++;\n }\n }\n if (i > index) {\n const value = input.substring(index, i);\n return {\n type: TokenName[TokenEnum.TemplateRaw],\n value: escapeString(value, ['`', '$']),\n raw: value,\n start: position(),\n end: position(value)\n };\n }\n return tokenCache.length ? tokenCache.shift() : null;\n }\n\n function skipWhiteSpace() {\n while (index < input.length) {\n const ch = input[index];\n if (ch === '\\r') {\n // CR (Unix)\n index++;\n line++;\n column = 1;\n if (input.charAt(index) === '\\n') {\n // CRLF (Windows)\n index++;\n }\n } else if (ch === '\\n') {\n // LF (MacOS)\n index++;\n line++;\n column = 1;\n } else if (ch === '\\t' || ch === ' ') {\n index++;\n column++;\n } else {\n break;\n }\n }\n }\n\n function punctuator() {\n const find = punctuatorList.find(\n punctuator =>\n input.substring(index, index + punctuator.length) === punctuator\n );\n if (find) {\n return {\n type: TokenName[TokenEnum.Punctuator],\n value: find,\n start: position(),\n end: position(find)\n };\n }\n return null;\n }\n\n function literal() {\n let keyword = input.substring(index, index + 4).toLowerCase();\n let value: any = keyword;\n let isLiteral = false;\n if (keyword === 'true' || keyword === 'null') {\n isLiteral = true;\n value = keyword === 'true' ? true : null;\n } else if (\n (keyword = input.substring(index, index + 5).toLowerCase()) === 'false'\n ) {\n isLiteral = true;\n value = false;\n } else if (\n (keyword = input.substring(index, index + 9).toLowerCase()) ===\n 'undefined'\n ) {\n isLiteral = true;\n value = undefined;\n }\n\n if (isLiteral) {\n return {\n type:\n value === true || value === false\n ? TokenName[TokenEnum.BooleanLiteral]\n : TokenName[TokenEnum.Literal],\n value,\n raw: keyword,\n start: position(),\n end: position(keyword)\n };\n }\n return null;\n }\n\n function numberLiteral() {\n let i = index;\n\n let passedValueIndex = i;\n let state = numberStates.START;\n\n iterator: while (i < input.length) {\n const char = input.charAt(i);\n\n switch (state) {\n case numberStates.START: {\n if (char === '-') {\n state = numberStates.MINUS;\n } else if (char === '0') {\n passedValueIndex = i + 1;\n state = numberStates.ZERO;\n } else if (isDigit1to9(char)) {\n passedValueIndex = i + 1;\n state = numberStates.DIGIT;\n } else {\n return null;\n }\n break;\n }\n\n case numberStates.MINUS: {\n if (char === '0') {\n passedValueIndex = i + 1;\n state = numberStates.ZERO;\n } else if (isDigit1to9(char)) {\n passedValueIndex = i + 1;\n state = numberStates.DIGIT;\n } else {\n return null;\n }\n break;\n }\n\n case numberStates.ZERO: {\n if (char === '.') {\n state = numberStates.POINT;\n } else if (isExp(char)) {\n state = numberStates.EXP;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.DIGIT: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n } else if (char === '.') {\n state = numberStates.POINT;\n } else if (isExp(char)) {\n state = numberStates.EXP;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.POINT: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n state = numberStates.DIGIT_FRACTION;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.DIGIT_FRACTION: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n } else if (isExp(char)) {\n state = numberStates.EXP;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.EXP: {\n if (char === '+' || char === '-') {\n state = numberStates.EXP_DIGIT_OR_SIGN;\n } else if (isDigit(char)) {\n passedValueIndex = i + 1;\n state = numberStates.EXP_DIGIT_OR_SIGN;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.EXP_DIGIT_OR_SIGN: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n } else {\n break iterator;\n }\n break;\n }\n }\n\n i++;\n }\n\n if (passedValueIndex > 0) {\n const value = input.slice(index, passedValueIndex);\n return {\n type: TokenName[TokenEnum.NumericLiteral],\n value: formatNumber(value),\n raw: value,\n start: position(),\n end: position(value)\n };\n }\n\n return null;\n }\n\n function stringLiteral() {\n let startQuote = '\"';\n let state = stringStates.START;\n let i = index;\n while (i < input.length) {\n const ch = input[i];\n\n if (state === stringStates.START) {\n if (ch === '\"' || ch === \"'\") {\n startQuote = ch;\n i++;\n state = stringStates.START_QUOTE_OR_CHAR;\n } else {\n break;\n }\n } else if (state === stringStates.ESCAPE) {\n if (escapes.hasOwnProperty(ch) || ch === startQuote) {\n i++;\n state = stringStates.START_QUOTE_OR_CHAR;\n } else {\n const pos = position(input.substring(index, i + 1));\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n } else if (ch === '\\\\') {\n i++;\n state = stringStates.ESCAPE;\n } else if (ch === startQuote) {\n i++;\n break;\n } else {\n i++;\n }\n }\n if (i > index) {\n const value = input.substring(index, i);\n return {\n type: TokenName[TokenEnum.StringLiteral],\n value: escapeString(value.substring(1, value.length - 1), [startQuote]),\n raw: value,\n start: position(),\n end: position(value)\n };\n }\n return null;\n }\n\n function identifier() {\n let i = index;\n let chunk = '';\n while (i < input.length) {\n const ch = input[i];\n if (\n /^[\\u4e00-\\u9fa5A-Za-z_$@][\\u4e00-\\u9fa5A-Za-z0-9_]*$/.test(chunk + ch)\n ) {\n chunk += ch;\n i++;\n } else {\n break;\n }\n }\n if (i > index) {\n const value = input.substring(index, i);\n return {\n type: TokenName[TokenEnum.Identifier],\n value: value,\n start: position(),\n end: position(value)\n };\n }\n return null;\n }\n\n function getNextToken(): Token | void | null {\n if (tokenCache.length) {\n return tokenCache.shift()!;\n }\n\n if (\n mainState === mainStates.SCRIPT ||\n mainState === mainStates.EXPRESSION ||\n mainState === mainStates.BLOCK\n ) {\n skipWhiteSpace();\n }\n\n return eof() || raw() || openScript() || expression() || template();\n }\n\n return {\n next: function () {\n const token = getNextToken();\n\n if (token) {\n index = token.end.index;\n line = token.end.line;\n column = token.end.column;\n return token;\n }\n\n const pos = position();\n throw new SyntaxError(\n `unexpected character \"${input[index]}\" at ${pos.line}:${pos.column}`\n );\n }\n };\n}\n","import {\n lexer as createLexer,\n Token,\n TokenEnum,\n TokenName,\n TokenTypeName\n} from './lexer';\n\nexport type NodeType = 'content' | 'raw' | 'conditional';\n\nexport interface ParserOptions {\n /**\n * 直接是运算表达式?还是从模板开始 ${} 里面才算运算表达式\n */\n evalMode?: boolean;\n\n /**\n * 是否允许 filter 语法,比如:\n *\n * ${abc | html}\n */\n allowFilter?: boolean;\n}\n\nconst argListStates = {\n START: 0,\n COMMA: 1\n};\n\nconst tempalteStates = {\n START: 0,\n SCRIPTING: 1\n};\n\nconst objectStates = {\n START: 0,\n KEY: 1,\n COLON: 2,\n VALUE: 3,\n COMMA: 4\n};\n\nexport function parse(input: string, options?: ParserOptions) {\n let token: Token;\n const lexer = createLexer(input, options);\n const tokens: Array<Token> = [];\n const tokenChunk: Array<Token> = [];\n\n function next() {\n token = tokenChunk.length ? tokenChunk.shift()! : lexer.next();\n\n if (!token) {\n throw new TypeError('next token is undefined');\n }\n tokens.push(token);\n }\n\n function back() {\n tokenChunk.unshift(tokens.pop()!);\n token = tokens[tokens.length - 1];\n }\n\n function matchPunctuator(operator: string | Array<string>) {\n return (\n token.type === TokenName[TokenEnum.Punctuator] &&\n (Array.isArray(operator)\n ? ~operator.indexOf(token.value!)\n : token.value === operator)\n );\n }\n\n function fatal() {\n throw TypeError(\n `Unexpected token <${token.type}>${token!.value} in ${\n token!.start.line\n }:${token!.start.column}`\n );\n }\n\n function assert(result: any) {\n if (!result) {\n fatal();\n }\n return result;\n }\n\n function expression() {\n return assignmentExpression();\n }\n\n function skipWhiteSpaceChar() {\n while (\n token.type === TokenName[TokenEnum.Char] &&\n /^\\s+$/m.test(token.value)\n ) {\n next();\n }\n }\n\n function collectFilterArg() {\n const arg: Array<any> = [];\n while (\n !matchPunctuator(':') &&\n token.type !== TokenName[TokenEnum.OpenFilter] &&\n token.type !== TokenName[TokenEnum.CloseScript]\n ) {\n const item =\n literal() ||\n template() ||\n arrayLiteral() ||\n rawScript() ||\n objectLiteral();\n\n if (item) {\n arg.push(item);\n } else {\n assert(\n ~[\n TokenName[TokenEnum.Identifier],\n TokenName[TokenEnum.Punctuator],\n TokenName[TokenEnum.Char]\n ].indexOf(token.type)\n );\n\n // 其他的都当字符处理\n if (arg.length && typeof arg[arg.length - 1] === 'string') {\n arg[arg.length - 1] += token.raw || token.value;\n } else {\n arg.push(token.raw || token.value);\n }\n next();\n }\n }\n if (arg.length && typeof arg[arg.length - 1] === 'string') {\n arg[arg.length - 1] = arg[arg.length - 1].replace(/\\s+$/, '');\n if (!arg[arg.length - 1]) {\n arg.pop();\n }\n }\n return arg;\n }\n\n function complexExpression() {\n let ast = expression();\n\n const filters: Array<any> = [];\n while (token.type === TokenName[TokenEnum.OpenFilter]) {\n next();\n\n skipWhiteSpaceChar();\n const name = assert(identifier());\n const fnName = name.name;\n const args = [];\n\n skipWhiteSpaceChar();\n while (matchPunctuator(':')) {\n next();\n skipWhiteSpaceChar();\n\n let argContents: any = collectFilterArg();\n if (argContents.length === 1) {\n argContents = argContents[0];\n } else if (!argContents.length) {\n argContents = '';\n }\n\n args.push(\n Array.isArray(argContents)\n ? {\n type: 'mixed',\n body: argContents\n }\n : argContents\n );\n }\n filters.push({\n name: fnName,\n args\n });\n }\n\n if (filters.length) {\n ast = {\n type: 'filter',\n input: ast,\n filters\n };\n }\n\n return ast;\n }\n\n function conditionalExpression(): any {\n const ast = logicalOrExpression();\n\n if (!ast) {\n return null;\n }\n\n if (matchPunctuator('?')) {\n next();\n let consequent = assignmentExpression();\n assert(consequent);\n assert(matchPunctuator(':'));\n\n next();\n let alternate = assignmentExpression();\n assert(alternate);\n\n return {\n type: 'conditional',\n test: ast,\n consequent: consequent,\n alternate: alternate\n };\n }\n\n return ast;\n }\n\n function binaryExpressionParser(\n type: string,\n operator: string,\n parseFunction: () => any,\n rightParseFunction = parseFunction,\n leftKey = 'left',\n rightKey = 'right'\n ) {\n let ast = parseFunction();\n if (!ast) {\n return null;\n }\n\n if (matchPunctuator(operator)) {\n while (matchPunctuator(operator)) {\n next();\n const right = assert(rightParseFunction());\n\n ast = {\n type: type,\n op: operator,\n [leftKey]: ast,\n [rightKey]: right\n };\n }\n }\n\n return ast;\n }\n\n function logicalOrExpression() {\n return binaryExpressionParser('or', '||', logicalAndExpression);\n }\n\n function logicalAndExpression() {\n return binaryExpressionParser('and', '&&', bitwiseOrExpression);\n }\n\n function bitwiseOrExpression() {\n return binaryExpressionParser('binary', '|', bitwiseXOrExpression);\n }\n\n function bitwiseXOrExpression() {\n return binaryExpressionParser('binary', '^', bitwiseAndExpression);\n }\n\n function bitwiseAndExpression() {\n return binaryExpressionParser('binary', '&', equalityExpression);\n }\n\n function equalityExpression() {\n return binaryExpressionParser('eq', '==', () =>\n binaryExpressionParser('ne', '!=', () =>\n binaryExpressionParser('streq', '===', () =>\n binaryExpressionParser('strneq', '!==', relationalExpression)\n )\n )\n );\n }\n\n function relationalExpression() {\n return binaryExpressionParser('lt', '<', () =>\n binaryExpressionParser('gt', '>', () =>\n binaryExpressionParser('le', '<=', () =>\n binaryExpressionParser('ge', '>=', shiftExpression)\n )\n )\n );\n }\n\n function shiftExpression() {\n return binaryExpressionParser('shift', '<<', () =>\n binaryExpressionParser('shift', '>>', () =>\n binaryExpressionParser('shift', '>>>', additiveExpression)\n )\n );\n }\n\n function additiveExpression() {\n return binaryExpressionParser('add', '+', () =>\n binaryExpressionParser('minus', '-', multiplicativeExpression)\n );\n }\n\n function multiplicativeExpression() {\n return binaryExpressionParser('multiply', '*', () =>\n binaryExpressionParser('divide', '/', () =>\n binaryExpressionParser('remainder', '%', powerExpression)\n )\n );\n }\n\n function powerExpression() {\n return binaryExpressionParser('power', '**', unaryExpression);\n }\n\n function unaryExpression() {\n const unaryOperators = ['+', '-', '~', '!'];\n const stack: Array<any> = [];\n while (matchPunctuator(unaryOperators)) {\n stack.push(token);\n next();\n }\n let ast: any = postfixExpression();\n assert(!stack.length || ast);\n while (stack.length) {\n const op = stack.pop();\n\n ast = {\n type: 'unary',\n op: op.value,\n value: ast\n };\n }\n return ast;\n }\n\n function postfixExpression() {\n let ast = leftHandSideExpression();\n if (!ast) {\n return null;\n }\n\n while (matchPunctuator('[') || matchPunctuator('.')) {\n const isDot = matchPunctuator('.');\n next();\n const right = assert(\n isDot\n ? identifier() /* 为了兼容久的语法,理论上来说只需要 identifier, 下面的 rawScript 是不应该有的 */ ||\n rawScript()\n : varibleKey()\n );\n\n if (!isDot) {\n if (matchPunctuator(']')) {\n next();\n } else {\n fatal();\n }\n }\n ast = {\n type: 'get',\n host: ast,\n key: right\n };\n }\n\n return ast;\n }\n\n function leftHandSideExpression() {\n return functionCall() || primaryExpression();\n }\n\n function varibleKey() {\n if (token.type === TokenName[TokenEnum.Identifier]) {\n const cToken = token;\n next();\n return cToken.value;\n }\n\n return stringLiteral() || template();\n }\n\n function stringLiteral() {\n if (token.type === TokenName[TokenEnum.StringLiteral]) {\n const cToken = token;\n next();\n return {\n type: 'string',\n value: cToken.value\n };\n }\n return null;\n }\n\n function template() {\n if (matchPunctuator('`')) {\n next();\n let state = tempalteStates.START;\n const ast: any = {\n type: 'template',\n body: []\n };\n while (true) {\n if (state === tempalteStates.SCRIPTING) {\n const exp = assert(expression());\n ast.body.push(exp);\n assert(token.type === TokenName[TokenEnum.TemplateRightBrace]);\n\n state = tempalteStates.START;\n next();\n } else {\n if (matchPunctuator('`')) {\n next();\n break;\n } else if (token.type === TokenName[TokenEnum.TemplateLeftBrace]) {\n next();\n state = tempalteStates.SCRIPTING;\n } else if (token.type === TokenName[TokenEnum.TemplateRaw]) {\n ast.body.push({\n type: 'template_raw',\n value: token.value\n });\n next();\n }\n }\n }\n\n return ast;\n }\n return null;\n }\n\n function identifier() {\n if (token.type === TokenName[TokenEnum.Identifier]) {\n const cToken = token;\n next();\n return {\n type: 'variable',\n name: cToken.value\n };\n }\n return null;\n }\n\n function primaryExpression() {\n return (\n identifier() ||\n literal() ||\n template() ||\n arrayLiteral() ||\n objectLiteral() ||\n (() => {\n const ast = expressionList();\n\n if (ast?.body.length === 1) {\n return ast.body[0];\n }\n\n return ast;\n })() ||\n rawScript()\n );\n }\n\n function literal() {\n if (\n token.type === TokenName[TokenEnum.Literal] ||\n token.type === TokenName[TokenEnum.BooleanLiteral] ||\n token.type === TokenName[TokenEnum.NumericLiteral] ||\n token.type === TokenName[TokenEnum.StringLiteral]\n ) {\n const value = token.value;\n next();\n return {\n type: 'literal',\n value: value\n };\n }\n\n return null;\n }\n\n function functionCall() {\n if (token.type === TokenName[TokenEnum.Identifier]) {\n const id = token;\n next();\n if (matchPunctuator('(')) {\n const argList = expressionList();\n return {\n type: 'func_call',\n identifier: id.value,\n args: argList?.body\n };\n } else {\n back();\n }\n }\n return null;\n }\n\n function arrayLiteral() {\n if (matchPunctuator('[')) {\n const argList = expressionList('[', ']');\n return {\n type: 'array',\n members: argList?.body\n };\n }\n return null;\n }\n\n function expressionList(startOP = '(', endOp = ')') {\n if (matchPunctuator(startOP)) {\n next();\n const args: Array<any> = [];\n let state = argListStates.START;\n\n while (true) {\n if (state === argListStates.COMMA || !matchPunctuator(endOp)) {\n const arg = assert(expression());\n args.push(arg);\n state = argListStates.START;\n\n if (matchPunctuator(',')) {\n next();\n state = argListStates.COMMA;\n }\n } else if (matchPunctuator(endOp)) {\n next();\n break;\n }\n }\n return {\n type: 'expression-list',\n body: args\n };\n }\n return null;\n }\n\n function objectLiteral() {\n if (matchPunctuator('{')) {\n next();\n let ast: any = {\n type: 'object',\n members: []\n };\n let state = objectStates.START;\n let key: any, value: any;\n while (true) {\n if (state === objectStates.KEY) {\n assert(matchPunctuator(':'));\n next();\n state = objectStates.COLON;\n } else if (state === objectStates.COLON) {\n value = assert(expression());\n ast.members.push({\n key,\n value\n });\n state = objectStates.VALUE;\n } else if (state === objectStates.VALUE) {\n if (matchPunctuator(',')) {\n next();\n state = objectStates.COMMA;\n } else if (matchPunctuator('}')) {\n next();\n break;\n }\n } else {\n if (state != objectStates.COMMA && matchPunctuator('}')) {\n next();\n break;\n }\n\n key = assert(varibleKey());\n state = objectStates.KEY;\n }\n }\n\n return ast;\n }\n return null;\n }\n\n function assignmentExpression() {\n return conditionalExpression();\n }\n\n function contents() {\n const node: any = {\n type: 'document',\n body: []\n };\n while (token.type !== TokenName[TokenEnum.EOF]) {\n const ast = raw() || rawScript() || oldVariable();\n\n if (!ast) {\n break;\n }\n node.body.push(ast);\n }\n return node;\n }\n\n function raw() {\n if (token.type !== TokenName[TokenEnum.RAW]) {\n return null;\n }\n\n const cToken = token;\n next();\n return {\n type: 'raw',\n value: cToken.value\n };\n }\n\n function rawScript() {\n if (token.type !== TokenName[TokenEnum.OpenScript]) {\n return null;\n }\n\n next();\n const exp = complexExpression();\n if (!exp) {\n throw TypeError(\n `Unexpected token ${token.value} in ${token.start.line}:${token.start.column}`\n );\n }\n if (token.type !== TokenName[TokenEnum.CloseScript]) {\n throw TypeError(\n `expect ${TokenName[TokenEnum.CloseScript]} got ${token.type}`\n );\n }\n next();\n\n return {\n type: 'script',\n body: exp\n };\n }\n\n function oldVariable() {\n if (token.type !== TokenName[TokenEnum.Variable]) {\n return null;\n }\n const prevToken = token;\n next();\n return {\n type: 'script',\n body: {\n type: 'variable',\n name: prevToken.value\n }\n };\n }\n\n next();\n const ast = options?.evalMode ? expression() : contents();\n assert(token!?.type === TokenName[TokenEnum.EOF]);\n\n return ast;\n}\n","import isPlainObject from 'lodash/isPlainObject';\nimport {Evaluator} from './evalutor';\nimport {parse} from './parser';\nimport moment from 'moment';\n\n// 方便取值的时候能够把上层的取到,但是获取的时候不会全部把所有的数据获取到。\nexport function createObject(\n superProps?: {[propName: string]: any},\n props?: {[propName: string]: any},\n properties?: any\n): object {\n if (superProps && Object.isFrozen(superProps)) {\n superProps = cloneObject(superProps);\n }\n\n const obj = superProps\n ? Object.create(superProps, {\n ...properties,\n __super: {\n value: superProps,\n writable: false,\n enumerable: false\n }\n })\n : Object.create(Object.prototype, properties);\n\n props &&\n isObject(props) &&\n Object.keys(props).forEach(key => (obj[key] = props[key]));\n\n return obj;\n}\n\nexport function cloneObject(target: any, persistOwnProps: boolean = true) {\n const obj =\n target && target.__super\n ? Object.create(target.__super, {\n __super: {\n value: target.__super,\n writable: false,\n enumerable: false\n }\n })\n : Object.create(Object.prototype);\n persistOwnProps &&\n target &&\n Object.keys(target).forEach(key => (obj[key] = target[key]));\n return obj;\n}\n\nexport function isObject(obj: any) {\n const typename = typeof obj;\n return (\n obj &&\n typename !== 'string' &&\n typename !== 'number' &&\n typename !== 'boolean' &&\n typename !== 'function' &&\n !Array.isArray(obj)\n );\n}\n\nexport function string2regExp(value: string, caseSensitive = false) {\n if (typeof value !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n return new RegExp(\n value.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d'),\n !caseSensitive ? 'i' : ''\n );\n}\n\nexport function getVariable(\n data: {[propName: string]: any},\n key: string | undefined,\n canAccessSuper: boolean = true\n): any {\n if (!data || !key) {\n return undefined;\n } else if (canAccessSuper ? key in data : data.hasOwnProperty(key)) {\n return data[key];\n }\n\n return keyToPath(key).reduce(\n (obj, key) =>\n obj &&\n typeof obj === 'object' &&\n (canAccessSuper ? key in obj : obj.hasOwnProperty(key))\n ? obj[key]\n : undefined,\n data\n );\n}\n\nexport function setVariable(\n data: {[propName: string]: any},\n key: string,\n value: any,\n convertKeyToPath?: boolean\n) {\n data = data || {};\n\n if (key in data) {\n data[key] = value;\n return;\n }\n\n const parts = convertKeyToPath !== false ? keyToPath(key) : [key];\n const last = parts.pop() as string;\n\n while (parts.length) {\n let key = parts.shift() as string;\n if (isPlainObject(data[key])) {\n data = data[key] = {\n ...data[key]\n };\n } else if (Array.isArray(data[key])) {\n data[key] = data[key].concat();\n data = data[key];\n } else if (data[key]) {\n // throw new Error(`目标路径不是纯对象,不能覆盖`);\n // 强行转成对象\n data[key] = {};\n data = data[key];\n } else {\n data[key] = {};\n data = data[key];\n }\n }\n\n data[last] = value;\n}\n\nexport function deleteVariable(data: {[propName: string]: any}, key: string) {\n if (!data) {\n return;\n } else if (data.hasOwnProperty(key)) {\n delete data[key];\n return;\n }\n\n const parts = keyToPath(key);\n const last = parts.pop() as string;\n\n while (parts.length) {\n let key = parts.shift() as string;\n if (isPlainObject(data[key])) {\n data = data[key] = {\n ...data[key]\n };\n } else if (data[key]) {\n throw new Error(`目标路径不是纯对象,不能修改`);\n } else {\n break;\n }\n }\n\n if (data && data.hasOwnProperty && data.hasOwnProperty(last)) {\n delete data[last];\n }\n}\n\n/**\n * 将例如像 a.b.c 或 a[1].b 的字符串转换为路径数组\n *\n * @param string 要转换的字符串\n */\nexport const keyToPath = (string: string) => {\n const result = [];\n\n if (string.charCodeAt(0) === '.'.charCodeAt(0)) {\n result.push('');\n }\n\n string.replace(\n new RegExp(\n '[^.[\\\\]]+|\\\\[(?:([^\"\\'][^[]*)|([\"\\'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))',\n 'g'\n ),\n (match, expression, quote, subString) => {\n let key = match;\n if (quote) {\n key = subString.replace(/\\\\(\\\\)?/g, '$1');\n } else if (expression) {\n key = expression.trim();\n }\n result.push(key);\n return '';\n }\n );\n\n return result;\n};\n\nexport const tokenize = (\n str: string,\n data: object,\n defaultFilter: string = '| html'\n) => {\n if (!str || typeof str !== 'string') {\n return str;\n }\n\n const ast = parse(str, {\n evalMode: false,\n allowFilter: true\n });\n const result = new Evaluator({\n defaultFilter\n }).evalute(ast, data);\n\n return `${result == null ? '' : result}`;\n};\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\nexport const prettyBytes = (num: number) => {\n if (!Number.isFinite(num)) {\n throw new TypeError(`Expected a finite number, got ${typeof num}: ${num}`);\n }\n\n const neg = num < 0;\n\n if (neg) {\n num = -num;\n }\n\n if (num < 1) {\n return (neg ? '-' : '') + num + ' B';\n }\n\n const exponent = Math.min(\n Math.floor(Math.log(num) / Math.log(1000)),\n UNITS.length - 1\n );\n const numStr = Number((num / Math.pow(1000, exponent)).toPrecision(3));\n const unit = UNITS[exponent];\n\n return (neg ? '-' : '') + numStr + ' ' + unit;\n};\n\nconst entityMap: {\n [propName: string]: string;\n} = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;'\n};\nexport const escapeHtml = (str: string) =>\n String(str).replace(/[&<>\"'\\/]/g, function (s) {\n return entityMap[s];\n });\n\nexport function formatDuration(value: number): string {\n const unit = ['秒', '分', '时', '天', '月', '季', '年'];\n const steps = [1, 60, 3600, 86400, 2592000, 7776000, 31104000];\n let len = steps.length;\n const parts = [];\n\n while (len--) {\n if (steps[len] && value >= steps[len]) {\n parts.push(Math.floor(value / steps[len]) + unit[len]);\n value %= steps[len];\n } else if (len === 0 && value) {\n parts.push((value.toFixed ? value.toFixed(2) : '0') + unit[0]);\n }\n }\n\n return parts.join('');\n}\n\nconst timeUnitMap: {\n [propName: string]: string;\n} = {\n year: 'Y',\n month: 'M',\n week: 'w',\n weekday: 'W',\n day: 'd',\n hour: 'h',\n minute: 'm',\n min: 'm',\n second: 's',\n millisecond: 'ms'\n};\n\nexport const relativeValueRe =\n /^(.+)?(\\+|-)(\\d+)(minute|min|hour|day|week|month|year|weekday|second|millisecond)s?$/i;\nexport const filterDate = (\n value: string,\n data: object = {},\n format = 'X',\n utc: boolean = false\n): moment.Moment => {\n let m,\n mm = utc ? moment.utc : moment;\n\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n // todo\n value = tokenize(value, data);\n\n if (value && typeof value === 'string' && (m = relativeValueRe.exec(value))) {\n const date = new Date();\n const step = parseInt(m[3], 10);\n const from = m[1]\n ? filterDate(m[1], data, format, utc)\n : mm(\n /(minute|min|hour|second)s?/.test(m[4])\n ? [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n ]\n : [date.getFullYear(), date.getMonth(), date.getDate()]\n );\n\n return m[2] === '-'\n ? from.subtract(step, timeUnitMap[m[4]] as moment.DurationInputArg2)\n : from.add(step, timeUnitMap[m[4]] as moment.DurationInputArg2);\n // return from[m[2] === '-' ? 'subtract' : 'add'](step, mapping[m[4]] || m[4]);\n } else if (value === 'now') {\n return mm();\n } else if (value === 'today') {\n const date = new Date();\n return mm([date.getFullYear(), date.getMonth(), date.getDate()]);\n } else {\n return mm(value, format);\n }\n};\n\nexport function parseDuration(str: string): moment.Duration | undefined {\n const matches =\n /^((?:\\-|\\+)?(?:\\d*\\.)?\\d+)(minute|min|hour|day|week|month|quarter|year|weekday|second|millisecond)s?$/.exec(\n str\n );\n\n if (matches) {\n const duration = moment.duration(parseFloat(matches[1]), matches[2] as any);\n\n if (moment.isDuration(duration)) {\n return duration;\n }\n }\n\n return;\n}\n\n// 主要用于解决 0.1+0.2 结果的精度问题导致太长\nexport function stripNumber(number: number) {\n if (typeof number === 'number') {\n return parseFloat(number.toPrecision(12));\n } else {\n return number;\n }\n}\n\nexport function pickValues(names: string, data: object) {\n let arr: Array<string>;\n if (!names || ((arr = names.split(',')) && arr.length < 2)) {\n let idx = names.indexOf('~');\n if (~idx) {\n let key = names.substring(0, idx);\n let target = names.substring(idx + 1);\n return {\n [key]: resolveVariable(target, data)\n };\n }\n return resolveVariable(names, data);\n }\n\n let ret: any = {};\n arr.forEach(name => {\n let idx = name.indexOf('~');\n let target = name;\n\n if (~idx) {\n target = name.substring(idx + 1);\n name = name.substring(0, idx);\n }\n\n setVariable(ret, name, resolveVariable(target, data));\n });\n return ret;\n}\n\nfunction objectGet(data: any, path: string) {\n if (typeof data[path] !== 'undefined') {\n return data[path];\n }\n\n let parts = keyToPath(path.replace(/^{|}$/g, ''));\n return parts.reduce((data, path) => {\n if ((isObject(data) || Array.isArray(data)) && path in data) {\n return (data as {[propName: string]: any})[path];\n }\n\n return undefined;\n }, data);\n}\n\nfunction parseJson(str: string, defaultValue?: any) {\n try {\n return JSON.parse(str);\n } catch (e) {\n return defaultValue;\n }\n}\n\nfunction getCookie(name: string) {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop()!.split(';').shift();\n }\n return undefined;\n}\n\nexport function resolveVariable(path?: string, data: any = {}): any {\n if (!path || !data || typeof path !== 'string') {\n return undefined;\n }\n\n let [ns, varname] = path.split(':');\n\n if (!varname && ns) {\n varname = ns;\n ns = '';\n }\n\n if (ns === 'window') {\n data = window;\n } else if (ns === 'ls' || ns === 'ss') {\n let parts = keyToPath(varname.replace(/^{|}$/g, ''));\n const key = parts.shift()!;\n const raw =\n ns === 'ss' ? sessionStorage.getItem(key) : localStorage.getItem(key);\n\n if (typeof raw === 'string') {\n const data = parseJson(raw, raw);\n\n if (isObject(data) && parts.length) {\n return objectGet(data, parts.join('.'));\n }\n\n return data;\n }\n\n return undefined;\n } else if (ns === 'cookie') {\n const key = varname.replace(/^{|}$/g, '').trim();\n return getCookie(key);\n }\n\n if (varname === '$$') {\n return data;\n } else if (varname[0] === '$') {\n varname = path.substring(1);\n } else if (varname === '&') {\n return data;\n }\n\n return objectGet(data, varname);\n}\n\nexport function isPureVariable(path?: any): path is string {\n return typeof path === 'string'\n ? /^\\$(?:((?:\\w+\\:)?[a-z0-9_.][a-z0-9_.\\[\\]]*)|{[^}{]+})$/i.test(path)\n : false;\n}\n\nexport const resolveVariableAndFilter = (\n str: string,\n data: object,\n defaultFilter: string = '| html',\n fallbackValue = (value: any) => value\n) => {\n if (!str || typeof str !== 'string') {\n return undefined;\n }\n\n const ast = parse(str, {\n evalMode: false,\n allowFilter: true\n });\n\n const ret = new Evaluator({\n defaultFilter\n }).evalute(ast, data);\n\n return ret == null ? fallbackValue(ret) : ret;\n};\n","module.exports = require(\"lodash/groupBy\");","module.exports = require(\"lodash/isPlainObject\");","module.exports = require(\"lodash/transform\");","module.exports = require(\"lodash/uniq\");","module.exports = require(\"lodash/uniqBy\");","module.exports = require(\"moment\");","module.exports = require(\"tslib\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(303);\n"],"names":["options","defaultFilter","functions","this","filters","getFilters","evalute","ast","data","type","replace","_","l","toUpperCase","fn","Error","call","document","body","length","content","map","item","join","filter","input","concat","context","restFilters","shift","name","apply","args","raw","value","script","expressionList","reduce","prev","current","template","arg","templateRaw","get","host","key","unary","op","formatNumber","int","typeName","parseInt","parseFloat","Math","round","power","left","right","pow","multiply","divide","remainder","add","minus","lt","gt","le","ge","eq","ne","streq","strneq","binary","and","or","number","variable","array","members","member","literal","string","object","memebers","forEach","conditional","test","consequent","alternate","funcCall","fnName","identifier","indexOf","a","fnIF","condition","trueValue","falseValue","fnAND","condtions","every","c","fnOR","some","fnXOR","c1","c2","fnIFS","splice","v","fnABS","abs","fnMax","max","fnMin","min","fnSUM","sum","fnINT","n","floor","fnMOD","b","fnPI","PI","fnROUND","bResult","fnSQRT","sqrt","fnAVG","fnUPPERMONEY","fnRAND","random","normalizeText","Date","format","fnLEFT","text","len","substring","fnRIGHT","fnLEN","fnISEMPTY","String","trim","fnCONCATENATE","fnCHAR","code","fromCharCode","fnLOWER","toLowerCase","fnUPPER","fnSPLIT","sep","split","fnTRIM","fnSTARTSWITH","search","fnCONTAINS","fnREPLACE","result","idx","fnSEARCH","start","str","fnMID","from","fnDATE","year","month","day","hour","minute","second","undefined","fnTIMESTAMP","date","fnTODAY","fnNOW","fnSTARTOF","unit","startOf","toDate","fnENDOF","endOf","normalizeDate","formats","isValid","fnYEAR","getFullYear","fnMONTH","getMonth","fnDAY","getDate","fnHOUR","getHours","fnHMINUTE","getMinutes","fnSECOND","getSeconds","fnYEARS","endDate","startDate","diff","fnMINUTES","fnDAYS","fnHOURS","fnDATEMODIFY","num","fnSTRTODATE","fnISBEFORE","isBefore","fnISAFTER","isAfter","fnISSAMEORBEFORE","isSameOrBefore","fnISSAMEORAFTER","isSameOrAfter","fnCOUNT","Array","isArray","Evaluator","conditionalFilter","hasAlternate","filterContext","skipRestTest","getStrOrVariable","resolveVariable","str2array","list","html","escapeHtml","json","tabSize","JSON","stringify","toJson","ret","parse","e","toInt","toFloat","now","inputFormat","fromNow","dateModify","modifier","amount","parts","percent","decimals","whole","multiplier","toFixed","duration","formatDuration","bytes","prettyBytes","isNaN","truncate","end","url_encode","encodeURIComponent","url_decode","decodeURIComponent","default","defaultValue","strict","glue","delimiter","sortBy","method","order","sort","va","vb","localeCompare","makeSorter","objectToArray","label","k","push","unique","topAndOther","labelField","restLabel","index","Object","keys","obj","hasOwnProperty","first","nth","last","step","stripNumber","Number","plus","times","division","count","field","restult","pickValues","pick","path","createObject","pick_if_exist","str2date","outputFormat","filterDate","asArray","expOrDirective","arg1","directive","string2regExp","isAsterisk","base64Encode","btoa","match","p1","base64Decode","atob","charCodeAt","toString","slice","lowerCase","upperCase","isTrue","arguments","isFalse","isMatch","matchArg","notMatch","isEquals","equalsValue","notEquals","lexer","registerFilter","astOrString","TokenName","punctuatorList","escapes","isDigit1to9","char","isDigit","isExp","escapeString","allowedLetter","line","column","mainState","states","tokenCache","allowFilter","pushState","state","popState","pop","position","lines","getNextToken","ch","charAt","skipWhiteSpace","eof","buffer","i","pos","SyntaxError","nextCh","j","openScript","find","keyword","isLiteral","token","chunk","passedValueIndex","iterator","numberLiteral","startQuote","stringLiteral","punctuator","prevState","expression","evalMode","next","tokens","tokenChunk","TypeError","matchPunctuator","operator","fatal","assert","assignmentExpression","skipWhiteSpaceChar","collectFilterArg","arrayLiteral","rawScript","objectLiteral","binaryExpressionParser","parseFunction","rightParseFunction","leftKey","rightKey","logicalAndExpression","bitwiseOrExpression","bitwiseXOrExpression","bitwiseAndExpression","equalityExpression","relationalExpression","shiftExpression","additiveExpression","multiplicativeExpression","powerExpression","unaryExpression","unaryOperators","stack","id","argList","unshift","functionCall","isDot","varibleKey","postfixExpression","cToken","exp","startOP","endOp","conditionalExpression","argContents","complexExpression","oldVariable","prevToken","node","contents","cloneObject","target","persistOwnProps","__super","create","writable","enumerable","prototype","isObject","typename","setVariable","convertKeyToPath","keyToPath","superProps","props","properties","isFrozen","caseSensitive","RegExp","canAccessSuper","quote","subString","tokenize","UNITS","isFinite","neg","exponent","log","toPrecision","entityMap","s","steps","timeUnitMap","week","weekday","millisecond","objectGet","ns","varname","window","sessionStorage","getItem","localStorage","parseJson","cookie","getCookie","relativeValueRe","utc","m","mm","exec","subtract","matches","isDuration","names","arr","resolveVariableAndFilter","fallbackValue","module","exports","require","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack:///src/Users/liaoxuezhi/project/amis-formula/src/evalutor.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/filter.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/index.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/lexer.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/parser.ts","webpack:///src/Users/liaoxuezhi/project/amis-formula/src/util.ts","webpack:///external commonjs \"lodash/groupBy\"","webpack:///external commonjs \"lodash/isPlainObject\"","webpack:///external commonjs \"lodash/transform\"","webpack:///external commonjs \"lodash/uniq\"","webpack:///external commonjs \"lodash/uniqBy\"","webpack:///external commonjs \"moment\"","webpack:///external commonjs \"tslib\"","webpack:///webpack/bootstrap","webpack:///webpack/startup"],"sourcesContent":["/**\n * @file 公式内置函数\n */\n\nimport moment from 'moment';\nimport {getFilters} from './filter';\n\nexport interface FilterMap {\n [propName: string]: (this: FilterContext, input: any, ...args: any[]) => any;\n}\n\nexport interface FunctionMap {\n [propName: string]: (this: Evaluator, ast: Object, data: any) => any;\n}\n\nexport interface FilterContext {\n data: Object;\n restFilters: Array<{\n name: string;\n args: Array<any>;\n }>;\n}\n\nexport interface EvaluatorOptions {\n /**\n * 可以外部传入 ast 节点处理器,定制或者扩充自定义函数\n */\n functions?: FunctionMap;\n\n /**\n * 可以外部扩充 filter\n */\n filters?: FilterMap;\n\n defaultFilter?: string;\n}\n\nexport class Evaluator {\n readonly filters: FilterMap;\n readonly functions: FunctionMap = {};\n data: any;\n\n constructor(\n readonly options: EvaluatorOptions = {\n defaultFilter: 'html'\n }\n ) {\n this.filters = {\n ...this.filters,\n ...getFilters(),\n ...options?.filters\n };\n this.functions = {\n ...this.functions,\n ...options?.functions\n };\n }\n\n // 主入口\n evalute(ast: any, data: any = {}) {\n this.data = data;\n if (ast && ast.type) {\n const name = (ast.type as string).replace(/(?:_|\\-)(\\w)/g, (_, l) =>\n l.toUpperCase()\n );\n const fn = this.functions[name] || (this as any)[name];\n\n if (!fn) {\n throw new Error(`${ast.type} unkown.`);\n }\n\n return fn.call(this, ast, data);\n } else {\n return ast;\n }\n }\n\n document(ast: {type: 'document'; body: Array<any>}, data: any) {\n if (!ast.body.length) {\n return undefined;\n }\n\n const content = ast.body.map(item => this.evalute(item, data));\n return content.length === 1 ? content[0] : content.join('');\n }\n\n filter(\n ast: {\n type: 'filter';\n input: any;\n filters: Array<{name: string; args: Array<any>}>;\n },\n data: any\n ) {\n let input = this.evalute(ast.input, data);\n const filters = ast.filters.concat();\n const context = {\n data,\n restFilters: filters\n };\n\n while (filters.length) {\n const filter = filters.shift()!;\n const fn = this.filters[filter.name];\n if (!fn) {\n throw new Error(`filter \\`${filter.name}\\` not exits`);\n }\n input = fn.apply(\n context,\n [input].concat(\n filter.args.map((item: any) => {\n if (item?.type === 'mixed') {\n return item.body\n .map((item: any) =>\n typeof item === 'string' ? item : this.evalute(item, data)\n )\n .join('');\n } else if (item.type) {\n return this.evalute(item, data);\n }\n return item;\n })\n )\n );\n }\n return input;\n }\n\n raw(ast: {type: 'raw'; value: string}) {\n return ast.value;\n }\n\n script(ast: {type: 'script'; body: any}, data: any) {\n const defaultFilter = this.options.defaultFilter;\n\n if (defaultFilter && ast.body?.type !== 'filter') {\n ast.body = {\n type: 'filter',\n input: ast.body,\n filters: [\n {\n name: defaultFilter.replace(/^\\|\\s/, ''),\n args: []\n }\n ]\n };\n }\n\n return this.evalute(ast.body, data);\n }\n\n expressionList(ast: {type: 'expression-list'; body: Array<any>}, data: any) {\n return ast.body.reduce((prev, current) => this.evalute(current, data));\n }\n\n template(ast: {type: 'template'; args: Array<any>}, data: any) {\n return ast.args.map(arg => this.evalute(arg, data)).join('');\n }\n\n templateRaw(ast: {type: 'template_raw'; value: any}) {\n return ast.value;\n }\n\n // 下标获取\n get(ast: {host: any; key: any}, data: any) {\n const host = this.evalute(ast.host, data);\n const key = this.evalute(ast.key, data);\n return host?.[key];\n }\n\n // 位操作如 +2 ~3 !\n unary(ast: {op: '+' | '-' | '~' | '!'; value: any}, data: any) {\n let value = this.evalute(ast.value, data);\n\n switch (ast.op) {\n case '+':\n return +value;\n case '-':\n return -value;\n case '~':\n return ~value;\n case '!':\n return !value;\n }\n }\n\n formatNumber(value: any, int = false) {\n const typeName = typeof value;\n if (typeName === 'string') {\n return (int ? parseInt(value, 10) : parseFloat(value)) || 0;\n } else if (typeName === 'number' && int) {\n return Math.round(value);\n }\n\n return value ?? 0;\n }\n\n power(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return Math.pow(this.formatNumber(left), this.formatNumber(right));\n }\n\n multiply(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) * this.formatNumber(right);\n }\n\n divide(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) / this.formatNumber(right);\n }\n\n remainder(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) % this.formatNumber(right);\n }\n\n add(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) + this.formatNumber(right);\n }\n\n minus(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n return this.formatNumber(left) - this.formatNumber(right);\n }\n\n shift(ast: {op: '<<' | '>>' | '>>>'; left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.formatNumber(this.evalute(ast.right, data), true);\n\n if (ast.op === '<<') {\n return left << right;\n } else if (ast.op == '>>') {\n return left >> right;\n } else {\n return left >>> right;\n }\n }\n\n lt(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left < right;\n }\n\n gt(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n return left > right;\n }\n\n le(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left <= right;\n }\n\n ge(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left >= right;\n }\n\n eq(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left == right;\n }\n\n ne(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left != right;\n }\n\n streq(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left === right;\n }\n\n strneq(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n // todo 如果是日期的对比,这个地方可以优化一下。\n\n return left !== right;\n }\n\n binary(ast: {op: '&' | '^' | '|'; left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n const right = this.evalute(ast.right, data);\n\n if (ast.op === '&') {\n return left & right;\n } else if (ast.op === '^') {\n return left ^ right;\n } else {\n return left | right;\n }\n }\n\n and(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n return left && this.evalute(ast.right, data);\n }\n\n or(ast: {left: any; right: any}, data: any) {\n const left = this.evalute(ast.left, data);\n return left || this.evalute(ast.right, data);\n }\n\n number(ast: {value: any; raw: string}, data: any) {\n // todo 以后可以在这支持大数字。\n return ast.value;\n }\n\n variable(ast: {name: string}, data: any) {\n return ast.name === '&' ? data : data[ast.name];\n }\n\n array(ast: {type: 'array'; members: Array<any>}, data: any) {\n return ast.members.map(member => this.evalute(member, data));\n }\n\n literal(ast: {type: 'literal'; value: any}) {\n return ast.value;\n }\n\n string(ast: {type: 'string'; value: string}) {\n return ast.value;\n }\n\n object(ast: {memebers: Array<{key: string; value: any}>}, data: any) {\n let object: any = {};\n ast.memebers.forEach(({key, value}) => {\n object[key] = this.evalute(value, data);\n });\n return object;\n }\n\n conditional(\n ast: {type: 'conditional'; test: any; consequent: any; alternate: any},\n data: any\n ) {\n return this.evalute(ast.test, data)\n ? this.evalute(ast.consequent, data)\n : this.evalute(ast.alternate, data);\n }\n\n funcCall(this: any, ast: {identifier: string; args: Array<any>}, data: any) {\n const fnName = `fn${ast.identifier}`;\n const fn =\n this.functions[fnName] || this[fnName] || this.filters[ast.identifier];\n\n if (!fn) {\n throw new Error(`${ast.identifier}函数没有定义`);\n }\n\n let args: Array<any> = ast.args;\n\n // 逻辑函数特殊处理,因为有时候有些运算是可以跳过的。\n if (~['IF', 'AND', 'OR', 'XOR', 'IFS'].indexOf(ast.identifier)) {\n args = args.map(a => () => this.evalute(a, data));\n } else {\n args = args.map(a => this.evalute(a, data));\n }\n\n return fn.apply(this, args);\n }\n\n // 逻辑函数\n\n fnIF(condition: () => any, trueValue: () => any, falseValue: () => any) {\n return condition() ? trueValue() : falseValue();\n }\n\n fnAND(...condtions: Array<() => any>) {\n return condtions.every(c => c());\n }\n\n fnOR(...condtions: Array<() => any>) {\n return condtions.some(c => c());\n }\n\n fnXOR(c1: () => any, c2: () => any) {\n return !!c1() === !!c2();\n }\n\n fnIFS(...args: Array<() => any>) {\n if (args.length % 2) {\n args.splice(args.length - 1, 0, () => true);\n }\n\n while (args.length) {\n const c = args.shift()!;\n const v = args.shift()!;\n\n if (c()) {\n return v();\n }\n }\n return;\n }\n\n // 数学函数\n\n fnABS(a: number) {\n return Math.abs(a);\n }\n\n fnMax(...args: Array<any>) {\n return Math.max.apply(Math, args);\n }\n\n fnMin(...args: Array<number>) {\n return Math.min.apply(Math, args);\n }\n\n fnSUM(...args: Array<number>) {\n return args.reduce((sum, a) => sum + this.formatNumber(a) || 0, 0);\n }\n\n fnINT(n: number) {\n return Math.floor(n);\n }\n\n fnMOD(a: number, b: number) {\n return a % b;\n }\n\n fnPI() {\n return Math.PI;\n }\n\n fnROUND(a: number, b: number) {\n const bResult = Math.round(b);\n\n if (bResult) {\n const c = Math.pow(10, bResult);\n return Math.round(a * c) / c;\n }\n\n return Math.round(a);\n }\n\n fnSQRT(n: number) {\n return Math.sqrt(n);\n }\n\n fnAVG(...args: Array<any>) {\n return this.fnSUM.apply(this, args) / args.length;\n }\n\n fnUPPERMONEY() {\n return 'todo';\n }\n\n fnRAND() {\n return Math.random();\n }\n\n // 文本函数\n\n normalizeText(raw: any) {\n if (raw instanceof Date) {\n return moment(raw).format();\n }\n\n return `${raw}`;\n }\n\n fnLEFT(text: string, len: number) {\n text = this.normalizeText(text);\n return text.substring(0, len);\n }\n\n fnRIGHT(text: string, len: number) {\n text = this.normalizeText(text);\n return text.substring(text.length - len, text.length);\n }\n\n fnLEN(text: string) {\n text = this.normalizeText(text);\n return text?.length;\n }\n\n fnISEMPTY(text: string) {\n return !text || !String(text).trim();\n }\n\n fnCONCATENATE(...args: Array<any>) {\n return args.join('');\n }\n\n fnCHAR(code: number) {\n return String.fromCharCode(code);\n }\n\n fnLOWER(text: string) {\n text = this.normalizeText(text);\n return text.toLowerCase();\n }\n\n fnUPPER(text: string) {\n text = this.normalizeText(text);\n return text.toUpperCase();\n }\n\n fnSPLIT(text: string, sep: string) {\n text = this.normalizeText(text);\n return text.split(sep);\n }\n\n fnTRIM(text: string) {\n text = this.normalizeText(text);\n return text.trim();\n }\n\n fnSTARTSWITH(text: string, search: string) {\n if (!search) {\n return false;\n }\n\n text = this.normalizeText(text);\n return text.indexOf(search) === 0;\n }\n\n fnCONTAINS(text: string, search: string) {\n if (!search) {\n return false;\n }\n\n text = this.normalizeText(text);\n return !!~text.indexOf(search);\n }\n\n fnREPLACE(text: string, search: string, replace: string) {\n text = this.normalizeText(text);\n let result = text;\n\n while (true) {\n const idx = result.indexOf(search);\n\n if (!~idx) {\n break;\n }\n\n result =\n result.substring(0, idx) +\n replace +\n result.substring(idx + search.length);\n }\n\n return result;\n }\n\n fnSEARCH(text: string, search: string, start?: number) {\n text = this.normalizeText(text);\n start = start || 0;\n let str = text;\n\n if (start) {\n str = str.substring(start);\n }\n\n const idx = str.indexOf(search);\n if (~idx) {\n return idx + search;\n }\n\n return -1;\n }\n\n fnMID(text: string, from: number, len: number) {\n text = this.normalizeText(text);\n return text.substring(from, from + len);\n }\n\n // 日期函数\n fnDATE(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number,\n second: number\n ) {\n if (month === undefined) {\n return new Date(year);\n }\n\n return new Date(year, month, day, hour, minute, second);\n }\n\n fnTIMESTAMP(date: Date, format?: 'x' | 'X') {\n return parseInt(moment(date).format(format === 'x' ? 'x' : 'X'), 10);\n }\n\n fnTODAY() {\n return new Date();\n }\n\n fnNOW() {\n return new Date();\n }\n\n fnSTARTOF(date: Date, unit?: any) {\n return moment(date)\n .startOf(unit || 'day')\n .toDate();\n }\n\n fnENDOF(date: Date, unit?: any) {\n return moment(date)\n .endOf(unit || 'day')\n .toDate();\n }\n\n normalizeDate(raw: any): Date {\n if (typeof raw === 'string') {\n const formats = ['', 'YYYY-MM-DD HH:mm:ss'];\n\n while (formats.length) {\n const format = formats.shift()!;\n const date = moment(raw, format);\n\n if (date.isValid()) {\n return date.toDate();\n }\n }\n } else if (typeof raw === 'number') {\n return new Date(raw);\n }\n\n return raw;\n }\n\n fnYEAR(date: Date) {\n date = this.normalizeDate(date);\n return date.getFullYear();\n }\n\n fnMONTH(date: Date) {\n date = this.normalizeDate(date);\n return date.getMonth() + 1;\n }\n\n fnDAY(date: Date) {\n date = this.normalizeDate(date);\n return date.getDate();\n }\n\n fnHOUR(date: Date) {\n date = this.normalizeDate(date);\n return date.getHours();\n }\n\n fnHMINUTE(date: Date) {\n date = this.normalizeDate(date);\n return date.getMinutes();\n }\n\n fnSECOND(date: Date) {\n date = this.normalizeDate(date);\n return date.getSeconds();\n }\n\n fnYEARS(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'year');\n }\n\n fnMINUTES(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'minutes');\n }\n\n fnDAYS(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'days');\n }\n\n fnHOURS(endDate: Date, startDate: Date) {\n endDate = this.normalizeDate(endDate);\n startDate = this.normalizeDate(startDate);\n return moment(endDate).diff(moment(startDate), 'hour');\n }\n\n fnDATEMODIFY(date: Date, num: number, format: any) {\n date = this.normalizeDate(date);\n return moment(date).add(num, format).toDate();\n }\n\n fnSTRTODATE(value: any, format: string = '') {\n return moment(value, format).toDate();\n }\n\n fnISBEFORE(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isBefore(moment(b), unit);\n }\n\n fnISAFTER(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isAfter(moment(b), unit);\n }\n\n fnISSAMEORBEFORE(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isSameOrBefore(moment(b), unit);\n }\n\n fnISSAMEORAFTER(a: Date, b: Date, unit: any = 'day') {\n a = this.normalizeDate(a);\n b = this.normalizeDate(b);\n return moment(a).isSameOrAfter(moment(b), unit);\n }\n\n fnCOUNT(value: any) {\n return Array.isArray(value) ? value.length : value ? 1 : 0;\n }\n}\n","import moment from 'moment';\nimport transform from 'lodash/transform';\nimport groupBy from 'lodash/groupBy';\nimport uniqBy from 'lodash/uniqBy';\nimport uniq from 'lodash/uniq';\nimport {\n createObject,\n escapeHtml,\n filterDate,\n formatDuration,\n pickValues,\n prettyBytes,\n resolveVariable,\n string2regExp,\n stripNumber\n} from './util';\nimport type {FilterContext, FilterMap} from './evalutor';\n\nfunction makeSorter(\n key: string,\n method?: 'alpha' | 'numerical',\n order?: 'desc' | 'asc'\n) {\n return function (a: any, b: any) {\n if (!a || !b) {\n return 0;\n }\n\n const va = resolveVariable(key, a);\n const vb = resolveVariable(key, b);\n let result = 0;\n\n if (method === 'numerical') {\n result = (parseFloat(va) || 0) - (parseFloat(vb) || 0);\n } else {\n result = String(va).localeCompare(String(vb));\n }\n\n return result * (order === 'desc' ? -1 : 1);\n };\n}\n\nexport const filters: FilterMap = {\n map: (input: Array<unknown>, fn: string, ...arg: any) =>\n Array.isArray(input) && filters[fn]\n ? input.map(item => filters[fn].call(this, item, ...arg))\n : input,\n html: (input: string) => escapeHtml(input),\n json: (input, tabSize: number | string = 2) =>\n tabSize\n ? JSON.stringify(input, null, parseInt(tabSize as string, 10))\n : JSON.stringify(input),\n toJson: input => {\n let ret;\n try {\n ret = JSON.parse(input);\n } catch (e) {\n ret = null;\n }\n return ret;\n },\n toInt: input => (typeof input === 'string' ? parseInt(input, 10) : input),\n toFloat: input => (typeof input === 'string' ? parseFloat(input) : input),\n raw: input => input,\n now: () => new Date(),\n toDate: (input: any, inputFormat = '') => {\n const data = moment(input, inputFormat);\n data.add();\n return data.isValid() ? data.toDate() : undefined;\n },\n fromNow: (input: any, inputFormat = '') =>\n moment(input, inputFormat).fromNow(),\n dateModify: (\n input: any,\n modifier: 'add' | 'subtract' | 'endOf' | 'startOf' = 'add',\n amount = 0,\n unit = 'days'\n ) => {\n if (!(input instanceof Date)) {\n input = new Date();\n }\n\n if (modifier === 'endOf' || modifier === 'startOf') {\n return moment(input)\n [modifier === 'endOf' ? 'endOf' : 'startOf'](amount || 'day')\n .toDate();\n }\n\n return moment(input)\n [modifier === 'add' ? 'add' : 'subtract'](parseInt(amount, 10) || 0, unit)\n .toDate();\n },\n date: (input, format = 'LLL', inputFormat = 'X') =>\n moment(input, inputFormat).format(format),\n number: input => {\n let parts = String(input).split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n return parts.join('.');\n },\n trim: input => (typeof input === 'string' ? input.trim() : input),\n percent: (input, decimals = 0) => {\n input = parseFloat(input) || 0;\n decimals = parseInt(decimals, 10) || 0;\n\n let whole = input * 100;\n let multiplier = Math.pow(10, decimals);\n\n return (\n (Math.round(whole * multiplier) / multiplier).toFixed(decimals) + '%'\n );\n },\n duration: input => (input ? formatDuration(input) : input),\n bytes: input => (input ? prettyBytes(parseFloat(input)) : input),\n round: (input, decimals = 2) => {\n if (isNaN(input)) {\n return 0;\n }\n\n decimals = parseInt(decimals, 10) ?? 2;\n\n let multiplier = Math.pow(10, decimals);\n return (Math.round(input * multiplier) / multiplier).toFixed(decimals);\n },\n truncate: (input, length, end) => {\n if (typeof input !== 'string') {\n return input;\n }\n\n end = end || '...';\n\n if (length == null) {\n return input;\n }\n\n length = parseInt(length, 10) || 200;\n\n return input.substring(0, length) + (input.length > length ? end : '');\n },\n url_encode: input => encodeURIComponent(input),\n url_decode: input => decodeURIComponent(input),\n default: (input, defaultValue, strict = false) =>\n (strict ? input : input ? input : undefined) ??\n (() => {\n try {\n if (defaultValue === 'undefined') {\n return undefined;\n }\n\n return JSON.parse(defaultValue);\n } catch (e) {\n return defaultValue;\n }\n })(),\n join: (input, glue) => (input && input.join ? input.join(glue) : input),\n split: (input, delimiter = ',') =>\n typeof input === 'string' ? input.split(delimiter) : input,\n sortBy: (\n input: any,\n key: string,\n method: 'alpha' | 'numerical' = 'alpha',\n order?: 'asc' | 'desc'\n ) =>\n Array.isArray(input) ? input.sort(makeSorter(key, method, order)) : input,\n objectToArray: (\n input: any,\n label: string = 'label',\n value: string = 'value'\n ) =>\n transform(\n input,\n (result: any, v, k) => {\n (result || (result = [])).push({\n [label]: v,\n [value]: k\n });\n },\n []\n ),\n unique: (input: any, key?: string) =>\n Array.isArray(input) ? (key ? uniqBy(input, key) : uniq(input)) : input,\n topAndOther: (\n input: any,\n len: number = 10,\n labelField: string = 'name',\n restLabel = '其他'\n ) => {\n if (Array.isArray(input) && len) {\n const grouped = groupBy(input, (item: any) => {\n const index = input.indexOf(item) + 1;\n return index >= len ? len : index;\n });\n\n return Object.keys(grouped).map((key, index) => {\n const group = grouped[key];\n const obj = group.reduce((obj, item) => {\n Object.keys(item).forEach(key => {\n if (!obj.hasOwnProperty(key) || key === 'labelField') {\n obj[key] = item[key];\n } else if (\n typeof item[key] === 'number' &&\n typeof obj[key] === 'number'\n ) {\n obj[key] += item[key];\n } else if (\n typeof item[key] === 'string' &&\n /^(?:\\-|\\.)\\d/.test(item[key]) &&\n typeof obj[key] === 'number'\n ) {\n obj[key] += parseFloat(item[key]) || 0;\n } else if (\n typeof item[key] === 'string' &&\n typeof obj[key] === 'string'\n ) {\n obj[key] += `, ${item[key]}`;\n } else {\n obj[key] = item[key];\n }\n });\n\n return obj;\n }, {});\n\n if (index === len - 1) {\n obj[labelField] = restLabel || '其他';\n }\n return obj;\n });\n }\n return input;\n },\n first: input => input && input[0],\n nth: (input, nth = 0) => input && input[nth],\n last: input => input && (input.length ? input[input.length - 1] : null),\n minus(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) - Number(getStrOrVariable(step, this.data))\n );\n },\n plus(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) + Number(getStrOrVariable(step, this.data))\n );\n },\n times(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) * Number(getStrOrVariable(step, this.data))\n );\n },\n division(input, step = 1) {\n return stripNumber(\n (Number(input) || 0) / Number(getStrOrVariable(step, this.data))\n );\n },\n count: (input: any) =>\n Array.isArray(input) || typeof input === 'string' ? input.length : 0,\n sum: (input, field) => {\n if (!Array.isArray(input)) {\n return input;\n }\n const restult = input.reduce(\n (sum, item) =>\n sum + (parseFloat(field ? pickValues(field, item) : item) || 0),\n 0\n );\n return stripNumber(restult);\n },\n abs: (input: any) => (typeof input === 'number' ? Math.abs(input) : input),\n pick: (input, path = '&') =>\n Array.isArray(input) && !/^\\d+$/.test(path)\n ? input.map((item, index) =>\n pickValues(path, createObject({index}, item))\n )\n : pickValues(path, input),\n pick_if_exist: (input, path = '&') =>\n Array.isArray(input)\n ? input.map(item => resolveVariable(path, item) || item)\n : resolveVariable(path, input) || input,\n str2date: function (input, inputFormat = 'X', outputFormat = 'X') {\n return input\n ? filterDate(input, this.data, inputFormat).format(outputFormat)\n : '';\n },\n asArray: input => (Array.isArray(input) ? input : input ? [input] : input),\n concat(input, ...args: any[]) {\n return Array.isArray(input)\n ? input.concat(...args.map(arg => getStrOrVariable(arg, this.data)))\n : input;\n },\n filter: function (input, keys, expOrDirective, arg1) {\n if (!Array.isArray(input) || !keys || !expOrDirective) {\n return input;\n }\n\n let directive = expOrDirective;\n let fn: (value: any, key: string, item: any) => boolean = () => true;\n\n if (directive === 'isTrue') {\n fn = value => !!value;\n } else if (directive === 'isFalse') {\n fn = value => !value;\n } else if (directive === 'isExists') {\n fn = value => typeof value !== 'undefined';\n } else if (directive === 'equals' || directive === 'equal') {\n arg1 = arg1 ? getStrOrVariable(arg1, this.data) : '';\n fn = value => arg1 == value;\n } else if (directive === 'isIn') {\n let list: any = arg1 ? getStrOrVariable(arg1, this.data) : [];\n\n list = str2array(list);\n list = Array.isArray(list) ? list : list ? [list] : [];\n fn = value => (list.length ? !!~list.indexOf(value) : true);\n } else if (directive === 'notIn') {\n let list: Array<any> = arg1 ? getStrOrVariable(arg1, this.data) : [];\n list = str2array(list);\n list = Array.isArray(list) ? list : list ? [list] : [];\n fn = value => !~list.indexOf(value);\n } else {\n if (directive !== 'match') {\n directive = 'match';\n arg1 = expOrDirective;\n }\n arg1 = arg1 ? getStrOrVariable(arg1, this.data) : '';\n\n // 比对的值是空时直接返回。\n if (!arg1) {\n return input;\n }\n\n let reg = string2regExp(`${arg1}`, false);\n fn = value => reg.test(String(value));\n }\n\n // 判断keys是否为*\n const isAsterisk = /\\s*\\*\\s*/.test(keys);\n keys = keys.split(/\\s*,\\s*/);\n return input.filter((item: any) =>\n // 当keys为*时从item中获取key\n (isAsterisk ? Object.keys(item) : keys).some((key: string) =>\n fn(resolveVariable(key, item), key, item)\n )\n );\n },\n base64Encode(str) {\n return btoa(\n encodeURIComponent(str).replace(\n /%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode(('0x' + p1) as any);\n }\n )\n );\n },\n\n base64Decode(str) {\n return decodeURIComponent(\n atob(str)\n .split('')\n .map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n },\n\n lowerCase: input =>\n input && typeof input === 'string' ? input.toLowerCase() : input,\n upperCase: input =>\n input && typeof input === 'string' ? input.toUpperCase() : input,\n\n isTrue(input, trueValue, falseValue) {\n const hasAlternate = arguments.length > 2;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n !!input,\n trueValue,\n falseValue\n );\n },\n isFalse(input, trueValue, falseValue) {\n const hasAlternate = arguments.length > 2;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n !input,\n trueValue,\n falseValue\n );\n },\n isMatch(input, matchArg, trueValue, falseValue) {\n const hasAlternate = arguments.length > 3;\n matchArg = getStrOrVariable(matchArg, this.data as any);\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n matchArg && string2regExp(`${matchArg}`, false).test(String(input)),\n trueValue,\n falseValue\n );\n },\n notMatch(input, matchArg, trueValue, falseValue) {\n const hasAlternate = arguments.length > 3;\n matchArg = getStrOrVariable(matchArg, this.data as any);\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n matchArg && !string2regExp(`${matchArg}`, false).test(String(input)),\n trueValue,\n falseValue\n );\n },\n isEquals(input, equalsValue, trueValue, falseValue) {\n equalsValue = /^\\d+$/.test(equalsValue)\n ? parseInt(equalsValue, 10)\n : getStrOrVariable(equalsValue, this.data as any);\n\n const hasAlternate = arguments.length > 3;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n input === equalsValue,\n trueValue,\n falseValue\n );\n },\n notEquals(input, equalsValue, trueValue, falseValue) {\n equalsValue = /^\\d+$/.test(equalsValue)\n ? parseInt(equalsValue, 10)\n : getStrOrVariable(equalsValue, this.data as any);\n\n const hasAlternate = arguments.length > 3;\n return conditionalFilter(\n input,\n hasAlternate,\n this,\n input !== equalsValue,\n trueValue,\n falseValue\n );\n }\n};\n\nfunction conditionalFilter(\n input: any,\n hasAlternate: boolean,\n filterContext: FilterContext,\n test: any,\n trueValue: any,\n falseValue: any\n) {\n hasAlternate && skipRestTest(filterContext.restFilters);\n\n return test || hasAlternate\n ? getStrOrVariable(test ? trueValue : falseValue, filterContext.data)\n : input;\n}\n\n/**\n * 如果当前传入字符为:'xxx'或者\"xxx\",则返回字符xxx\n * 否则去数据域中,获取变量xxx\n *\n * @param value 传入字符\n * @param data 数据域\n */\nfunction getStrOrVariable(value: any, data: any) {\n return typeof value === 'string' && /,/.test(value)\n ? value.split(/\\s*,\\s*/).filter(item => item)\n : typeof value === 'string'\n ? resolveVariable(value, data) ?? value\n : value;\n}\n\nfunction str2array(list: any) {\n if (list && typeof list === 'string') {\n if (/^\\[.*\\]$/.test(list)) {\n return list\n .substring(1, list.length - 1)\n .split(/\\s*,\\s*/)\n .filter(item => item);\n } else {\n return list.split(/\\s*,\\s*/).filter(item => item);\n }\n }\n return list;\n}\n\nfunction skipRestTest(restFilters: Array<{name: string}>) {\n while (\n ~[\n 'isTrue',\n 'isFalse',\n 'isMatch',\n 'isEquals',\n 'notMatch',\n 'notEquals'\n ].indexOf(restFilters[0]?.name)\n ) {\n restFilters.shift();\n }\n}\n\nexport function registerFilter(\n name: string,\n fn: (input: any, ...args: any[]) => any\n): void {\n filters[name] = fn;\n}\n\nexport function getFilters() {\n return filters;\n}\n","import {Evaluator, EvaluatorOptions} from './evalutor';\nimport {parse, ParserOptions} from './parser';\nimport {lexer} from './lexer';\nimport {registerFilter, filters, getFilters} from './filter';\nexport {parse, lexer, Evaluator, filters, getFilters, registerFilter};\nexport * from './util';\n\nexport function evaluate(\n astOrString: string,\n data: any,\n options?: ParserOptions & EvaluatorOptions\n) {\n if (typeof astOrString === 'string') {\n astOrString = parse(astOrString, options);\n }\n\n return new Evaluator(options).evalute(astOrString, data);\n}\n","export interface LexerOptions {\n /**\n * 直接是运算表达式?还是从模板开始 ${} 里面才算运算表达式\n */\n evalMode?: boolean;\n\n /**\n * 是否允许 filter 语法,比如:\n *\n * ${abc | html}\n */\n allowFilter?: boolean;\n}\n\nexport const enum TokenEnum {\n BooleanLiteral = 1,\n RAW,\n Variable,\n OpenScript,\n CloseScript,\n EOF,\n Identifier,\n Literal,\n NumericLiteral,\n Punctuator,\n StringLiteral,\n RegularExpression,\n TemplateRaw,\n TemplateLeftBrace,\n TemplateRightBrace,\n OpenFilter,\n Char\n}\n\nexport type TokenTypeName =\n | 'Boolean'\n | 'Raw'\n | 'Variable'\n | 'OpenScript'\n | 'CloseScript'\n | 'EOF'\n | 'Identifier'\n | 'Literal'\n | 'Numeric'\n | 'Punctuator'\n | 'String'\n | 'RegularExpression'\n | 'TemplateRaw'\n | 'TemplateLeftBrace'\n | 'TemplateRightBrace'\n | 'OpenFilter'\n | 'Char';\n\nexport const TokenName: {\n [propName: string]: TokenTypeName;\n} = {};\nTokenName[TokenEnum.BooleanLiteral] = 'Boolean';\nTokenName[TokenEnum.RAW] = 'Raw';\nTokenName[TokenEnum.Variable] = 'Variable';\nTokenName[TokenEnum.OpenScript] = 'OpenScript';\nTokenName[TokenEnum.CloseScript] = 'CloseScript';\nTokenName[TokenEnum.EOF] = 'EOF';\nTokenName[TokenEnum.Identifier] = 'Identifier';\nTokenName[TokenEnum.Literal] = 'Literal';\nTokenName[TokenEnum.NumericLiteral] = 'Numeric';\nTokenName[TokenEnum.Punctuator] = 'Punctuator';\nTokenName[TokenEnum.StringLiteral] = 'String';\nTokenName[TokenEnum.RegularExpression] = 'RegularExpression';\nTokenName[TokenEnum.TemplateRaw] = 'TemplateRaw';\nTokenName[TokenEnum.TemplateLeftBrace] = 'TemplateLeftBrace';\nTokenName[TokenEnum.TemplateRightBrace] = 'TemplateRightBrace';\nTokenName[TokenEnum.OpenFilter] = 'OpenFilter';\nTokenName[TokenEnum.Char] = 'Char';\n\nexport interface Position {\n index: number;\n line: number;\n column: number;\n}\n\nexport interface Token {\n type: TokenTypeName;\n value: any;\n raw?: string;\n start: Position;\n end: Position;\n}\n\nconst mainStates = {\n START: 0,\n SCRIPT: 1,\n EXPRESSION: 2,\n BLOCK: 3,\n Template: 4,\n Filter: 5\n};\n\nconst rawStates = {\n START: 0,\n ESCAPE: 1\n};\n\nconst numberStates = {\n START: 0,\n MINUS: 1,\n ZERO: 2,\n DIGIT: 3,\n POINT: 4,\n DIGIT_FRACTION: 5,\n EXP: 6,\n EXP_DIGIT_OR_SIGN: 7\n};\n\nconst stringStates = {\n START: 0,\n START_QUOTE_OR_CHAR: 1,\n ESCAPE: 2\n};\n\nconst filterStates = {\n START: 0,\n Func: 1,\n SEP: 2,\n ESCAPE: 3\n};\n\nconst punctuatorList = [\n '===',\n '!==',\n '==',\n '!=',\n '<>',\n '<',\n '>',\n '<=',\n '>=',\n '||',\n '&&',\n '++',\n '--',\n '<<',\n '>>',\n '>>>',\n '+=',\n '*=',\n '/=',\n\n '=',\n '*',\n '/',\n '-',\n '+',\n '^',\n '!',\n '%',\n '&',\n '|',\n '(',\n ')',\n '[',\n ']',\n '{',\n '}',\n '?',\n ':',\n ';',\n ',',\n '.',\n '$'\n];\n\nconst escapes = {\n '\"': 0, // Quotation mask\n '\\\\': 1, // Reverse solidus\n '/': 2, // Solidus\n 'b': 3, // Backspace\n 'f': 4, // Form feed\n 'n': 5, // New line\n 'r': 6, // Carriage return\n 't': 7, // Horizontal tab\n 'u': 8 // 4 hexadecimal digits\n};\n\nfunction isDigit1to9(char: string) {\n return char >= '1' && char <= '9';\n}\n\nfunction isDigit(char: string) {\n return char >= '0' && char <= '9';\n}\n\nfunction isHex(char: string) {\n return (\n isDigit(char) ||\n (char >= 'a' && char <= 'f') ||\n (char >= 'A' && char <= 'F')\n );\n}\n\nfunction isExp(char: string) {\n return char === 'e' || char === 'E';\n}\n\nfunction escapeString(text: string, allowedLetter: Array<string> = []) {\n return text.replace(/\\\\(.)/g, function (_, text) {\n return text === 'b'\n ? '\\b'\n : text === 'f'\n ? '\\f'\n : text === 'n'\n ? '\\n'\n : text === 'r'\n ? '\\r'\n : text === 't'\n ? '\\t'\n : text === 'v'\n ? '\\v'\n : ~allowedLetter.indexOf(text)\n ? text\n : _;\n });\n}\n\nfunction formatNumber(value: string) {\n return Number(value);\n}\n\nexport function lexer(input: string, options?: LexerOptions) {\n let line = 1;\n let column = 1;\n let index = 0;\n let mainState = mainStates.START;\n const states: Array<any> = [mainState];\n let tokenCache: Array<Token> = [];\n const allowFilter = options?.allowFilter !== false;\n\n if (options?.evalMode) {\n pushState(mainStates.EXPRESSION);\n }\n\n function pushState(state: any) {\n states.push((mainState = state));\n }\n function popState() {\n states.pop();\n mainState = states[states.length - 1];\n }\n\n function position(value?: string) {\n if (value && typeof value === 'string') {\n const lines = value.split(/[\\r\\n]+/);\n return {\n index: index + value.length,\n line: line + lines.length - 1,\n column: column + lines[lines.length - 1].length\n };\n }\n\n return {index: index, line, column};\n }\n\n function eof(): Token | void | null {\n if (index >= input.length) {\n return {\n type: TokenName[TokenEnum.EOF],\n value: undefined,\n start: position(),\n end: position()\n };\n }\n }\n\n function raw(): Token | void | null {\n if (mainState !== mainStates.START) {\n return null;\n }\n\n let buffer = '';\n let state = rawStates.START;\n let i = index;\n\n while (i < input.length) {\n const ch = input[i];\n\n if (state === rawStates.ESCAPE) {\n if (escapes.hasOwnProperty(ch) || ch === '$') {\n buffer += ch;\n i++;\n state = rawStates.START;\n } else {\n const pos = position(buffer + ch);\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n } else {\n if (ch === '\\\\') {\n buffer += ch;\n i++;\n state = rawStates.ESCAPE;\n continue;\n } else if (ch === '$') {\n const nextCh = input[i + 1];\n if (nextCh === '{') {\n break;\n } else if (nextCh === '$') {\n // $$ 用法兼容\n tokenCache.push({\n type: TokenName[TokenEnum.Variable],\n value: '&',\n raw: '$$',\n start: position(input.substring(index, i)),\n end: position(input.substring(index, i + 2))\n });\n break;\n } else {\n // 支持旧的 $varName 的取值方法\n let j = i + 2;\n while (\n /^[a-zA-Z0-9_.][a-zA-Z0-9_.\\[\\]]*$/.test(\n input.substring(i + 1, j)\n ) &&\n j <= input.length\n ) {\n j++;\n }\n\n if (j - i > 2) {\n tokenCache.push({\n type: TokenName[TokenEnum.Variable],\n value: input.substring(i + 1, j),\n raw: input.substring(i, j),\n start: position(input.substring(index, i)),\n end: position(input.substring(index, j))\n });\n break;\n }\n }\n }\n i++;\n buffer += ch;\n }\n }\n\n if (i > index) {\n return {\n type: TokenName[TokenEnum.RAW],\n value: escapeString(buffer, ['`', '$']),\n raw: buffer,\n start: position(),\n end: position(buffer)\n };\n }\n return tokenCache.length ? tokenCache.shift() : null;\n }\n\n function openScript() {\n const ch = input[index];\n if (ch === '$') {\n const nextCh = input[index + 1];\n if (nextCh === '{') {\n pushState(mainStates.SCRIPT);\n const value = input.substring(index, index + 2);\n return {\n type: TokenName[TokenEnum.OpenScript],\n value,\n start: position(),\n end: position(value)\n };\n }\n }\n return null;\n }\n\n function expression() {\n if (\n mainState !== mainStates.SCRIPT &&\n mainState !== mainStates.EXPRESSION &&\n mainState !== mainStates.BLOCK &&\n mainState !== mainStates.Filter\n ) {\n return null;\n }\n\n const token =\n literal() ||\n identifier() ||\n numberLiteral() ||\n stringLiteral() ||\n punctuator() ||\n char();\n\n if (token?.value === '{') {\n pushState(mainStates.BLOCK);\n } else if (token?.value === '}') {\n if (mainState === mainStates.Filter) {\n popState();\n }\n\n const prevState = mainState;\n popState();\n\n if (\n prevState === mainStates.SCRIPT ||\n prevState === mainStates.EXPRESSION\n ) {\n return {\n type: TokenName[\n prevState === mainStates.EXPRESSION\n ? TokenEnum.TemplateRightBrace\n : TokenEnum.CloseScript\n ],\n value: token!.value,\n start: position(),\n end: position(token!.value)\n };\n }\n }\n\n // filter 过滤器部分需要特殊处理\n if (\n mainState === mainStates.SCRIPT &&\n token?.value === '|' &&\n allowFilter\n ) {\n pushState(mainStates.Filter);\n return {\n type: TokenName[TokenEnum.OpenFilter],\n value: '|',\n start: position(),\n end: position('|')\n };\n } else if (mainState === mainStates.Filter && token?.value === '|') {\n return {\n type: TokenName[TokenEnum.OpenFilter],\n value: '|',\n start: position(),\n end: position('|')\n };\n }\n\n if (!token && input[index] === '`') {\n pushState(mainStates.Template);\n return {\n type: TokenName[TokenEnum.Punctuator],\n value: '`',\n start: position(),\n end: position('`')\n };\n }\n\n return token;\n }\n\n function char() {\n if (mainState !== mainStates.Filter) {\n return null;\n }\n\n let i = index;\n let ch = input[i];\n if (ch === '\\\\') {\n const nextCh = input[i + 1];\n\n if (\n nextCh === '$' ||\n ~punctuatorList.indexOf(nextCh) ||\n escapes.hasOwnProperty(nextCh)\n ) {\n i++;\n ch =\n nextCh === 'b'\n ? '\\b'\n : nextCh === 'f'\n ? '\\f'\n : nextCh === 'n'\n ? '\\n'\n : nextCh === 'r'\n ? '\\r'\n : nextCh === 't'\n ? '\\t'\n : nextCh === 'v'\n ? '\\v'\n : nextCh;\n } else {\n const pos = position(input.substring(index, index + 1));\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n }\n const token = {\n type: TokenName[TokenEnum.Char],\n value: ch,\n start: position(),\n end: position(input.substring(index, i + 1))\n };\n return token;\n }\n\n function template(): Token | void | null {\n if (mainState !== mainStates.Template) {\n return null;\n }\n let state = stringStates.START;\n let i = index;\n while (i < input.length) {\n const ch = input[i];\n\n if (state === stringStates.ESCAPE) {\n if (escapes.hasOwnProperty(ch) || ch === '`' || ch === '$') {\n i++;\n state = stringStates.START_QUOTE_OR_CHAR;\n } else {\n const pos = position(input.substring(index, i + 1));\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n } else if (ch === '\\\\') {\n i++;\n state = stringStates.ESCAPE;\n } else if (ch === '`') {\n popState();\n tokenCache.push({\n type: TokenName[TokenEnum.Punctuator],\n value: '`',\n start: position(input.substring(index, i)),\n end: position(input.substring(index, i + 1))\n });\n break;\n } else if (ch === '$') {\n const nextCh = input[i + 1];\n if (nextCh === '{') {\n pushState(mainStates.EXPRESSION);\n tokenCache.push({\n type: TokenName[TokenEnum.TemplateLeftBrace],\n value: '${',\n start: position(input.substring(index, i)),\n end: position(input.substring(index, i + 2))\n });\n break;\n }\n i++;\n } else {\n i++;\n }\n }\n if (i > index) {\n const value = input.substring(index, i);\n return {\n type: TokenName[TokenEnum.TemplateRaw],\n value: escapeString(value, ['`', '$']),\n raw: value,\n start: position(),\n end: position(value)\n };\n }\n return tokenCache.length ? tokenCache.shift() : null;\n }\n\n function skipWhiteSpace() {\n while (index < input.length) {\n const ch = input[index];\n if (ch === '\\r') {\n // CR (Unix)\n index++;\n line++;\n column = 1;\n if (input.charAt(index) === '\\n') {\n // CRLF (Windows)\n index++;\n }\n } else if (ch === '\\n') {\n // LF (MacOS)\n index++;\n line++;\n column = 1;\n } else if (ch === '\\t' || ch === ' ') {\n index++;\n column++;\n } else {\n break;\n }\n }\n }\n\n function punctuator() {\n const find = punctuatorList.find(\n punctuator =>\n input.substring(index, index + punctuator.length) === punctuator\n );\n if (find) {\n return {\n type: TokenName[TokenEnum.Punctuator],\n value: find,\n start: position(),\n end: position(find)\n };\n }\n return null;\n }\n\n function literal() {\n let keyword = input.substring(index, index + 4).toLowerCase();\n let value: any = keyword;\n let isLiteral = false;\n if (keyword === 'true' || keyword === 'null') {\n isLiteral = true;\n value = keyword === 'true' ? true : null;\n } else if (\n (keyword = input.substring(index, index + 5).toLowerCase()) === 'false'\n ) {\n isLiteral = true;\n value = false;\n } else if (\n (keyword = input.substring(index, index + 9).toLowerCase()) ===\n 'undefined'\n ) {\n isLiteral = true;\n value = undefined;\n }\n\n if (isLiteral) {\n return {\n type:\n value === true || value === false\n ? TokenName[TokenEnum.BooleanLiteral]\n : TokenName[TokenEnum.Literal],\n value,\n raw: keyword,\n start: position(),\n end: position(keyword)\n };\n }\n return null;\n }\n\n function numberLiteral() {\n let i = index;\n\n let passedValueIndex = i;\n let state = numberStates.START;\n\n iterator: while (i < input.length) {\n const char = input.charAt(i);\n\n switch (state) {\n case numberStates.START: {\n if (char === '-') {\n state = numberStates.MINUS;\n } else if (char === '0') {\n passedValueIndex = i + 1;\n state = numberStates.ZERO;\n } else if (isDigit1to9(char)) {\n passedValueIndex = i + 1;\n state = numberStates.DIGIT;\n } else {\n return null;\n }\n break;\n }\n\n case numberStates.MINUS: {\n if (char === '0') {\n passedValueIndex = i + 1;\n state = numberStates.ZERO;\n } else if (isDigit1to9(char)) {\n passedValueIndex = i + 1;\n state = numberStates.DIGIT;\n } else {\n return null;\n }\n break;\n }\n\n case numberStates.ZERO: {\n if (char === '.') {\n state = numberStates.POINT;\n } else if (isExp(char)) {\n state = numberStates.EXP;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.DIGIT: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n } else if (char === '.') {\n state = numberStates.POINT;\n } else if (isExp(char)) {\n state = numberStates.EXP;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.POINT: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n state = numberStates.DIGIT_FRACTION;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.DIGIT_FRACTION: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n } else if (isExp(char)) {\n state = numberStates.EXP;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.EXP: {\n if (char === '+' || char === '-') {\n state = numberStates.EXP_DIGIT_OR_SIGN;\n } else if (isDigit(char)) {\n passedValueIndex = i + 1;\n state = numberStates.EXP_DIGIT_OR_SIGN;\n } else {\n break iterator;\n }\n break;\n }\n\n case numberStates.EXP_DIGIT_OR_SIGN: {\n if (isDigit(char)) {\n passedValueIndex = i + 1;\n } else {\n break iterator;\n }\n break;\n }\n }\n\n i++;\n }\n\n if (passedValueIndex > 0) {\n const value = input.slice(index, passedValueIndex);\n return {\n type: TokenName[TokenEnum.NumericLiteral],\n value: formatNumber(value),\n raw: value,\n start: position(),\n end: position(value)\n };\n }\n\n return null;\n }\n\n function stringLiteral() {\n let startQuote = '\"';\n let state = stringStates.START;\n let i = index;\n while (i < input.length) {\n const ch = input[i];\n\n if (state === stringStates.START) {\n if (ch === '\"' || ch === \"'\") {\n startQuote = ch;\n i++;\n state = stringStates.START_QUOTE_OR_CHAR;\n } else {\n break;\n }\n } else if (state === stringStates.ESCAPE) {\n if (escapes.hasOwnProperty(ch) || ch === startQuote) {\n i++;\n state = stringStates.START_QUOTE_OR_CHAR;\n } else {\n const pos = position(input.substring(index, i + 1));\n throw new SyntaxError(\n `Unexpected token ${ch} in ${pos.line}:${pos.column}`\n );\n }\n } else if (ch === '\\\\') {\n i++;\n state = stringStates.ESCAPE;\n } else if (ch === startQuote) {\n i++;\n break;\n } else {\n i++;\n }\n }\n if (i > index) {\n const value = input.substring(index, i);\n return {\n type: TokenName[TokenEnum.StringLiteral],\n value: escapeString(value.substring(1, value.length - 1), [startQuote]),\n raw: value,\n start: position(),\n end: position(value)\n };\n }\n return null;\n }\n\n function identifier() {\n let i = index;\n let chunk = '';\n while (i < input.length) {\n const ch = input[i];\n if (\n /^[\\u4e00-\\u9fa5A-Za-z_$@][\\u4e00-\\u9fa5A-Za-z0-9_]*$/.test(chunk + ch)\n ) {\n chunk += ch;\n i++;\n } else {\n break;\n }\n }\n if (i > index) {\n const value = input.substring(index, i);\n return {\n type: TokenName[TokenEnum.Identifier],\n value: value,\n start: position(),\n end: position(value)\n };\n }\n return null;\n }\n\n function getNextToken(): Token | void | null {\n if (tokenCache.length) {\n return tokenCache.shift()!;\n }\n\n if (\n mainState === mainStates.SCRIPT ||\n mainState === mainStates.EXPRESSION ||\n mainState === mainStates.BLOCK\n ) {\n skipWhiteSpace();\n }\n\n return eof() || raw() || openScript() || expression() || template();\n }\n\n return {\n next: function () {\n const token = getNextToken();\n\n if (token) {\n index = token.end.index;\n line = token.end.line;\n column = token.end.column;\n return token;\n }\n\n const pos = position();\n throw new SyntaxError(\n `unexpected character \"${input[index]}\" at ${pos.line}:${pos.column}`\n );\n }\n };\n}\n","import {\n lexer as createLexer,\n Token,\n TokenEnum,\n TokenName,\n TokenTypeName\n} from './lexer';\n\nexport type NodeType = 'content' | 'raw' | 'conditional';\n\nexport interface ParserOptions {\n /**\n * 直接是运算表达式?还是从模板开始 ${} 里面才算运算表达式\n */\n evalMode?: boolean;\n\n /**\n * 是否允许 filter 语法,比如:\n *\n * ${abc | html}\n */\n allowFilter?: boolean;\n}\n\nconst argListStates = {\n START: 0,\n COMMA: 1\n};\n\nconst tempalteStates = {\n START: 0,\n SCRIPTING: 1\n};\n\nconst objectStates = {\n START: 0,\n KEY: 1,\n COLON: 2,\n VALUE: 3,\n COMMA: 4\n};\n\nexport function parse(input: string, options?: ParserOptions) {\n let token: Token;\n const lexer = createLexer(input, options);\n const tokens: Array<Token> = [];\n const tokenChunk: Array<Token> = [];\n\n function next() {\n token = tokenChunk.length ? tokenChunk.shift()! : lexer.next();\n\n if (!token) {\n throw new TypeError('next token is undefined');\n }\n tokens.push(token);\n }\n\n function back() {\n tokenChunk.unshift(tokens.pop()!);\n token = tokens[tokens.length - 1];\n }\n\n function matchPunctuator(operator: string | Array<string>) {\n return (\n token.type === TokenName[TokenEnum.Punctuator] &&\n (Array.isArray(operator)\n ? ~operator.indexOf(token.value!)\n : token.value === operator)\n );\n }\n\n function fatal() {\n throw TypeError(\n `Unexpected token <${token.type}>${token!.value} in ${\n token!.start.line\n }:${token!.start.column}`\n );\n }\n\n function assert(result: any) {\n if (!result) {\n fatal();\n }\n return result;\n }\n\n function expression() {\n return assignmentExpression();\n }\n\n function skipWhiteSpaceChar() {\n while (\n token.type === TokenName[TokenEnum.Char] &&\n /^\\s+$/m.test(token.value)\n ) {\n next();\n }\n }\n\n function collectFilterArg() {\n const arg: Array<any> = [];\n while (\n !matchPunctuator(':') &&\n token.type !== TokenName[TokenEnum.OpenFilter] &&\n token.type !== TokenName[TokenEnum.CloseScript]\n ) {\n const item =\n literal() ||\n template() ||\n arrayLiteral() ||\n rawScript() ||\n objectLiteral();\n\n if (item) {\n arg.push(item);\n } else {\n assert(\n ~[\n TokenName[TokenEnum.Identifier],\n TokenName[TokenEnum.Punctuator],\n TokenName[TokenEnum.Char]\n ].indexOf(token.type)\n );\n\n // 其他的都当字符处理\n if (arg.length && typeof arg[arg.length - 1] === 'string') {\n arg[arg.length - 1] += token.raw || token.value;\n } else {\n arg.push(token.raw || token.value);\n }\n next();\n }\n }\n if (arg.length && typeof arg[arg.length - 1] === 'string') {\n arg[arg.length - 1] = arg[arg.length - 1].replace(/\\s+$/, '');\n if (!arg[arg.length - 1]) {\n arg.pop();\n }\n }\n return arg;\n }\n\n function complexExpression() {\n let ast = expression();\n\n const filters: Array<any> = [];\n while (token.type === TokenName[TokenEnum.OpenFilter]) {\n next();\n\n skipWhiteSpaceChar();\n const name = assert(identifier());\n const fnName = name.name;\n const args = [];\n\n skipWhiteSpaceChar();\n while (matchPunctuator(':')) {\n next();\n skipWhiteSpaceChar();\n\n let argContents: any = collectFilterArg();\n if (argContents.length === 1) {\n argContents = argContents[0];\n } else if (!argContents.length) {\n argContents = '';\n }\n\n args.push(\n Array.isArray(argContents)\n ? {\n type: 'mixed',\n body: argContents\n }\n : argContents\n );\n }\n filters.push({\n name: fnName,\n args\n });\n }\n\n if (filters.length) {\n ast = {\n type: 'filter',\n input: ast,\n filters\n };\n }\n\n return ast;\n }\n\n function conditionalExpression(): any {\n const ast = logicalOrExpression();\n\n if (!ast) {\n return null;\n }\n\n if (matchPunctuator('?')) {\n next();\n let consequent = assignmentExpression();\n assert(consequent);\n assert(matchPunctuator(':'));\n\n next();\n let alternate = assignmentExpression();\n assert(alternate);\n\n return {\n type: 'conditional',\n test: ast,\n consequent: consequent,\n alternate: alternate\n };\n }\n\n return ast;\n }\n\n function binaryExpressionParser(\n type: string,\n operator: string,\n parseFunction: () => any,\n rightParseFunction = parseFunction,\n leftKey = 'left',\n rightKey = 'right'\n ) {\n let ast = parseFunction();\n if (!ast) {\n return null;\n }\n\n if (matchPunctuator(operator)) {\n while (matchPunctuator(operator)) {\n next();\n const right = assert(rightParseFunction());\n\n ast = {\n type: type,\n op: operator,\n [leftKey]: ast,\n [rightKey]: right\n };\n }\n }\n\n return ast;\n }\n\n function logicalOrExpression() {\n return binaryExpressionParser('or', '||', logicalAndExpression);\n }\n\n function logicalAndExpression() {\n return binaryExpressionParser('and', '&&', bitwiseOrExpression);\n }\n\n function bitwiseOrExpression() {\n return binaryExpressionParser('binary', '|', bitwiseXOrExpression);\n }\n\n function bitwiseXOrExpression() {\n return binaryExpressionParser('binary', '^', bitwiseAndExpression);\n }\n\n function bitwiseAndExpression() {\n return binaryExpressionParser('binary', '&', equalityExpression);\n }\n\n function equalityExpression() {\n return binaryExpressionParser('eq', '==', () =>\n binaryExpressionParser('ne', '!=', () =>\n binaryExpressionParser('streq', '===', () =>\n binaryExpressionParser('strneq', '!==', relationalExpression)\n )\n )\n );\n }\n\n function relationalExpression() {\n return binaryExpressionParser('lt', '<', () =>\n binaryExpressionParser('gt', '>', () =>\n binaryExpressionParser('le', '<=', () =>\n binaryExpressionParser('ge', '>=', shiftExpression)\n )\n )\n );\n }\n\n function shiftExpression() {\n return binaryExpressionParser('shift', '<<', () =>\n binaryExpressionParser('shift', '>>', () =>\n binaryExpressionParser('shift', '>>>', additiveExpression)\n )\n );\n }\n\n function additiveExpression() {\n return binaryExpressionParser('add', '+', () =>\n binaryExpressionParser('minus', '-', multiplicativeExpression)\n );\n }\n\n function multiplicativeExpression() {\n return binaryExpressionParser('multiply', '*', () =>\n binaryExpressionParser('divide', '/', () =>\n binaryExpressionParser('remainder', '%', powerExpression)\n )\n );\n }\n\n function powerExpression() {\n return binaryExpressionParser('power', '**', unaryExpression);\n }\n\n function unaryExpression() {\n const unaryOperators = ['+', '-', '~', '!'];\n const stack: Array<any> = [];\n while (matchPunctuator(unaryOperators)) {\n stack.push(token);\n next();\n }\n let ast: any = postfixExpression();\n assert(!stack.length || ast);\n while (stack.length) {\n const op = stack.pop();\n\n ast = {\n type: 'unary',\n op: op.value,\n value: ast\n };\n }\n return ast;\n }\n\n function postfixExpression() {\n let ast = leftHandSideExpression();\n if (!ast) {\n return null;\n }\n\n while (matchPunctuator('[') || matchPunctuator('.')) {\n const isDot = matchPunctuator('.');\n next();\n const right = assert(\n isDot\n ? identifier() /* 为了兼容久的语法,理论上来说只需要 identifier, 下面的 rawScript 是不应该有的 */ ||\n rawScript()\n : varibleKey()\n );\n\n if (!isDot) {\n if (matchPunctuator(']')) {\n next();\n } else {\n fatal();\n }\n }\n ast = {\n type: 'get',\n host: ast,\n key: right\n };\n }\n\n return ast;\n }\n\n function leftHandSideExpression() {\n return functionCall() || primaryExpression();\n }\n\n function varibleKey() {\n if (token.type === TokenName[TokenEnum.Identifier]) {\n const cToken = token;\n next();\n return cToken.value;\n }\n\n return stringLiteral() || template();\n }\n\n function stringLiteral() {\n if (token.type === TokenName[TokenEnum.StringLiteral]) {\n const cToken = token;\n next();\n return {\n type: 'string',\n value: cToken.value\n };\n }\n return null;\n }\n\n function template() {\n if (matchPunctuator('`')) {\n next();\n let state = tempalteStates.START;\n const ast: any = {\n type: 'template',\n body: []\n };\n while (true) {\n if (state === tempalteStates.SCRIPTING) {\n const exp = assert(expression());\n ast.body.push(exp);\n assert(token.type === TokenName[TokenEnum.TemplateRightBrace]);\n\n state = tempalteStates.START;\n next();\n } else {\n if (matchPunctuator('`')) {\n next();\n break;\n } else if (token.type === TokenName[TokenEnum.TemplateLeftBrace]) {\n next();\n state = tempalteStates.SCRIPTING;\n } else if (token.type === TokenName[TokenEnum.TemplateRaw]) {\n ast.body.push({\n type: 'template_raw',\n value: token.value\n });\n next();\n }\n }\n }\n\n return ast;\n }\n return null;\n }\n\n function identifier() {\n if (token.type === TokenName[TokenEnum.Identifier]) {\n const cToken = token;\n next();\n return {\n type: 'variable',\n name: cToken.value\n };\n }\n return null;\n }\n\n function primaryExpression() {\n return (\n identifier() ||\n literal() ||\n template() ||\n arrayLiteral() ||\n objectLiteral() ||\n (() => {\n const ast = expressionList();\n\n if (ast?.body.length === 1) {\n return ast.body[0];\n }\n\n return ast;\n })() ||\n rawScript()\n );\n }\n\n function literal() {\n if (\n token.type === TokenName[TokenEnum.Literal] ||\n token.type === TokenName[TokenEnum.BooleanLiteral] ||\n token.type === TokenName[TokenEnum.NumericLiteral] ||\n token.type === TokenName[TokenEnum.StringLiteral]\n ) {\n const value = token.value;\n next();\n return {\n type: 'literal',\n value: value\n };\n }\n\n return null;\n }\n\n function functionCall() {\n if (token.type === TokenName[TokenEnum.Identifier]) {\n const id = token;\n next();\n if (matchPunctuator('(')) {\n const argList = expressionList();\n return {\n type: 'func_call',\n identifier: id.value,\n args: argList?.body\n };\n } else {\n back();\n }\n }\n return null;\n }\n\n function arrayLiteral() {\n if (matchPunctuator('[')) {\n const argList = expressionList('[', ']');\n return {\n type: 'array',\n members: argList?.body\n };\n }\n return null;\n }\n\n function expressionList(startOP = '(', endOp = ')') {\n if (matchPunctuator(startOP)) {\n next();\n const args: Array<any> = [];\n let state = argListStates.START;\n\n while (true) {\n if (state === argListStates.COMMA || !matchPunctuator(endOp)) {\n const arg = assert(expression());\n args.push(arg);\n state = argListStates.START;\n\n if (matchPunctuator(',')) {\n next();\n state = argListStates.COMMA;\n }\n } else if (matchPunctuator(endOp)) {\n next();\n break;\n }\n }\n return {\n type: 'expression-list',\n body: args\n };\n }\n return null;\n }\n\n function objectLiteral() {\n if (matchPunctuator('{')) {\n next();\n let ast: any = {\n type: 'object',\n members: []\n };\n let state = objectStates.START;\n let key: any, value: any;\n while (true) {\n if (state === objectStates.KEY) {\n assert(matchPunctuator(':'));\n next();\n state = objectStates.COLON;\n } else if (state === objectStates.COLON) {\n value = assert(expression());\n ast.members.push({\n key,\n value\n });\n state = objectStates.VALUE;\n } else if (state === objectStates.VALUE) {\n if (matchPunctuator(',')) {\n next();\n state = objectStates.COMMA;\n } else if (matchPunctuator('}')) {\n next();\n break;\n }\n } else {\n if (state != objectStates.COMMA && matchPunctuator('}')) {\n next();\n break;\n }\n\n key = assert(varibleKey());\n state = objectStates.KEY;\n }\n }\n\n return ast;\n }\n return null;\n }\n\n function assignmentExpression() {\n return conditionalExpression();\n }\n\n function contents() {\n const node: any = {\n type: 'document',\n body: []\n };\n while (token.type !== TokenName[TokenEnum.EOF]) {\n const ast = raw() || rawScript() || oldVariable();\n\n if (!ast) {\n break;\n }\n node.body.push(ast);\n }\n return node;\n }\n\n function raw() {\n if (token.type !== TokenName[TokenEnum.RAW]) {\n return null;\n }\n\n const cToken = token;\n next();\n return {\n type: 'raw',\n value: cToken.value\n };\n }\n\n function rawScript() {\n if (token.type !== TokenName[TokenEnum.OpenScript]) {\n return null;\n }\n\n next();\n const exp = complexExpression();\n if (!exp) {\n throw TypeError(\n `Unexpected token ${token.value} in ${token.start.line}:${token.start.column}`\n );\n }\n if (token.type !== TokenName[TokenEnum.CloseScript]) {\n throw TypeError(\n `expect ${TokenName[TokenEnum.CloseScript]} got ${token.type}`\n );\n }\n next();\n\n return {\n type: 'script',\n body: exp\n };\n }\n\n function oldVariable() {\n if (token.type !== TokenName[TokenEnum.Variable]) {\n return null;\n }\n const prevToken = token;\n next();\n return {\n type: 'script',\n body: {\n type: 'variable',\n name: prevToken.value\n }\n };\n }\n\n next();\n const ast = options?.evalMode ? expression() : contents();\n assert(token!?.type === TokenName[TokenEnum.EOF]);\n\n return ast;\n}\n","import isPlainObject from 'lodash/isPlainObject';\nimport {Evaluator} from './evalutor';\nimport {parse} from './parser';\nimport moment from 'moment';\n\n// 方便取值的时候能够把上层的取到,但是获取的时候不会全部把所有的数据获取到。\nexport function createObject(\n superProps?: {[propName: string]: any},\n props?: {[propName: string]: any},\n properties?: any\n): object {\n if (superProps && Object.isFrozen(superProps)) {\n superProps = cloneObject(superProps);\n }\n\n const obj = superProps\n ? Object.create(superProps, {\n ...properties,\n __super: {\n value: superProps,\n writable: false,\n enumerable: false\n }\n })\n : Object.create(Object.prototype, properties);\n\n props &&\n isObject(props) &&\n Object.keys(props).forEach(key => (obj[key] = props[key]));\n\n return obj;\n}\n\nexport function cloneObject(target: any, persistOwnProps: boolean = true) {\n const obj =\n target && target.__super\n ? Object.create(target.__super, {\n __super: {\n value: target.__super,\n writable: false,\n enumerable: false\n }\n })\n : Object.create(Object.prototype);\n persistOwnProps &&\n target &&\n Object.keys(target).forEach(key => (obj[key] = target[key]));\n return obj;\n}\n\nexport function isObject(obj: any) {\n const typename = typeof obj;\n return (\n obj &&\n typename !== 'string' &&\n typename !== 'number' &&\n typename !== 'boolean' &&\n typename !== 'function' &&\n !Array.isArray(obj)\n );\n}\n\nexport function string2regExp(value: string, caseSensitive = false) {\n if (typeof value !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n return new RegExp(\n value.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d'),\n !caseSensitive ? 'i' : ''\n );\n}\n\nexport function getVariable(\n data: {[propName: string]: any},\n key: string | undefined,\n canAccessSuper: boolean = true\n): any {\n if (!data || !key) {\n return undefined;\n } else if (canAccessSuper ? key in data : data.hasOwnProperty(key)) {\n return data[key];\n }\n\n return keyToPath(key).reduce(\n (obj, key) =>\n obj &&\n typeof obj === 'object' &&\n (canAccessSuper ? key in obj : obj.hasOwnProperty(key))\n ? obj[key]\n : undefined,\n data\n );\n}\n\nexport function setVariable(\n data: {[propName: string]: any},\n key: string,\n value: any,\n convertKeyToPath?: boolean\n) {\n data = data || {};\n\n if (key in data) {\n data[key] = value;\n return;\n }\n\n const parts = convertKeyToPath !== false ? keyToPath(key) : [key];\n const last = parts.pop() as string;\n\n while (parts.length) {\n let key = parts.shift() as string;\n if (isPlainObject(data[key])) {\n data = data[key] = {\n ...data[key]\n };\n } else if (Array.isArray(data[key])) {\n data[key] = data[key].concat();\n data = data[key];\n } else if (data[key]) {\n // throw new Error(`目标路径不是纯对象,不能覆盖`);\n // 强行转成对象\n data[key] = {};\n data = data[key];\n } else {\n data[key] = {};\n data = data[key];\n }\n }\n\n data[last] = value;\n}\n\nexport function deleteVariable(data: {[propName: string]: any}, key: string) {\n if (!data) {\n return;\n } else if (data.hasOwnProperty(key)) {\n delete data[key];\n return;\n }\n\n const parts = keyToPath(key);\n const last = parts.pop() as string;\n\n while (parts.length) {\n let key = parts.shift() as string;\n if (isPlainObject(data[key])) {\n data = data[key] = {\n ...data[key]\n };\n } else if (data[key]) {\n throw new Error(`目标路径不是纯对象,不能修改`);\n } else {\n break;\n }\n }\n\n if (data && data.hasOwnProperty && data.hasOwnProperty(last)) {\n delete data[last];\n }\n}\n\n/**\n * 将例如像 a.b.c 或 a[1].b 的字符串转换为路径数组\n *\n * @param string 要转换的字符串\n */\nexport const keyToPath = (string: string) => {\n const result = [];\n\n if (string.charCodeAt(0) === '.'.charCodeAt(0)) {\n result.push('');\n }\n\n string.replace(\n new RegExp(\n '[^.[\\\\]]+|\\\\[(?:([^\"\\'][^[]*)|([\"\\'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2)\\\\]|(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))',\n 'g'\n ),\n (match, expression, quote, subString) => {\n let key = match;\n if (quote) {\n key = subString.replace(/\\\\(\\\\)?/g, '$1');\n } else if (expression) {\n key = expression.trim();\n }\n result.push(key);\n return '';\n }\n );\n\n return result;\n};\n\nexport const tokenize = (\n str: string,\n data: object,\n defaultFilter: string = '| html'\n) => {\n if (!str || typeof str !== 'string') {\n return str;\n }\n\n const ast = parse(str, {\n evalMode: false,\n allowFilter: true\n });\n const result = new Evaluator({\n defaultFilter\n }).evalute(ast, data);\n\n return `${result == null ? '' : result}`;\n};\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\nexport const prettyBytes = (num: number) => {\n if (!Number.isFinite(num)) {\n throw new TypeError(`Expected a finite number, got ${typeof num}: ${num}`);\n }\n\n const neg = num < 0;\n\n if (neg) {\n num = -num;\n }\n\n if (num < 1) {\n return (neg ? '-' : '') + num + ' B';\n }\n\n const exponent = Math.min(\n Math.floor(Math.log(num) / Math.log(1000)),\n UNITS.length - 1\n );\n const numStr = Number((num / Math.pow(1000, exponent)).toPrecision(3));\n const unit = UNITS[exponent];\n\n return (neg ? '-' : '') + numStr + ' ' + unit;\n};\n\nconst entityMap: {\n [propName: string]: string;\n} = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;'\n};\nexport const escapeHtml = (str: string) =>\n String(str).replace(/[&<>\"'\\/]/g, function (s) {\n return entityMap[s];\n });\n\nexport function formatDuration(value: number): string {\n const unit = ['秒', '分', '时', '天', '月', '季', '年'];\n const steps = [1, 60, 3600, 86400, 2592000, 7776000, 31104000];\n let len = steps.length;\n const parts = [];\n\n while (len--) {\n if (steps[len] && value >= steps[len]) {\n parts.push(Math.floor(value / steps[len]) + unit[len]);\n value %= steps[len];\n } else if (len === 0 && value) {\n parts.push((value.toFixed ? value.toFixed(2) : '0') + unit[0]);\n }\n }\n\n return parts.join('');\n}\n\nconst timeUnitMap: {\n [propName: string]: string;\n} = {\n year: 'Y',\n month: 'M',\n week: 'w',\n weekday: 'W',\n day: 'd',\n hour: 'h',\n minute: 'm',\n min: 'm',\n second: 's',\n millisecond: 'ms'\n};\n\nexport const relativeValueRe =\n /^(.+)?(\\+|-)(\\d+)(minute|min|hour|day|week|month|year|weekday|second|millisecond)s?$/i;\nexport const filterDate = (\n value: string,\n data: object = {},\n format = 'X',\n utc: boolean = false\n): moment.Moment => {\n let m,\n mm = utc ? moment.utc : moment;\n\n if (typeof value === 'string') {\n value = value.trim();\n }\n\n // todo\n value = tokenize(value, data);\n\n if (value && typeof value === 'string' && (m = relativeValueRe.exec(value))) {\n const date = new Date();\n const step = parseInt(m[3], 10);\n const from = m[1]\n ? filterDate(m[1], data, format, utc)\n : mm(\n /(minute|min|hour|second)s?/.test(m[4])\n ? [\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n ]\n : [date.getFullYear(), date.getMonth(), date.getDate()]\n );\n\n return m[2] === '-'\n ? from.subtract(step, timeUnitMap[m[4]] as moment.DurationInputArg2)\n : from.add(step, timeUnitMap[m[4]] as moment.DurationInputArg2);\n // return from[m[2] === '-' ? 'subtract' : 'add'](step, mapping[m[4]] || m[4]);\n } else if (value === 'now') {\n return mm();\n } else if (value === 'today') {\n const date = new Date();\n return mm([date.getFullYear(), date.getMonth(), date.getDate()]);\n } else {\n return mm(value, format);\n }\n};\n\nexport function parseDuration(str: string): moment.Duration | undefined {\n const matches =\n /^((?:\\-|\\+)?(?:\\d*\\.)?\\d+)(minute|min|hour|day|week|month|quarter|year|weekday|second|millisecond)s?$/.exec(\n str\n );\n\n if (matches) {\n const duration = moment.duration(parseFloat(matches[1]), matches[2] as any);\n\n if (moment.isDuration(duration)) {\n return duration;\n }\n }\n\n return;\n}\n\n// 主要用于解决 0.1+0.2 结果的精度问题导致太长\nexport function stripNumber(number: number) {\n if (typeof number === 'number') {\n return parseFloat(number.toPrecision(12));\n } else {\n return number;\n }\n}\n\nexport function pickValues(names: string, data: object) {\n let arr: Array<string>;\n if (!names || ((arr = names.split(',')) && arr.length < 2)) {\n let idx = names.indexOf('~');\n if (~idx) {\n let key = names.substring(0, idx);\n let target = names.substring(idx + 1);\n return {\n [key]: resolveVariable(target, data)\n };\n }\n return resolveVariable(names, data);\n }\n\n let ret: any = {};\n arr.forEach(name => {\n let idx = name.indexOf('~');\n let target = name;\n\n if (~idx) {\n target = name.substring(idx + 1);\n name = name.substring(0, idx);\n }\n\n setVariable(ret, name, resolveVariable(target, data));\n });\n return ret;\n}\n\nfunction objectGet(data: any, path: string) {\n if (typeof data[path] !== 'undefined') {\n return data[path];\n }\n\n let parts = keyToPath(path.replace(/^{|}$/g, ''));\n return parts.reduce((data, path) => {\n if ((isObject(data) || Array.isArray(data)) && path in data) {\n return (data as {[propName: string]: any})[path];\n }\n\n return undefined;\n }, data);\n}\n\nfunction parseJson(str: string, defaultValue?: any) {\n try {\n return JSON.parse(str);\n } catch (e) {\n return defaultValue;\n }\n}\n\nfunction getCookie(name: string) {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop()!.split(';').shift();\n }\n return undefined;\n}\n\nexport function resolveVariable(path?: string, data: any = {}): any {\n if (!path || !data || typeof path !== 'string') {\n return undefined;\n }\n\n let [ns, varname] = path.split(':');\n\n if (!varname && ns) {\n varname = ns;\n ns = '';\n }\n\n if (ns === 'window') {\n data = window;\n } else if (ns === 'ls' || ns === 'ss') {\n let parts = keyToPath(varname.replace(/^{|}$/g, ''));\n const key = parts.shift()!;\n const raw =\n ns === 'ss' ? sessionStorage.getItem(key) : localStorage.getItem(key);\n\n if (typeof raw === 'string') {\n const data = parseJson(raw, raw);\n\n if (isObject(data) && parts.length) {\n return objectGet(data, parts.join('.'));\n }\n\n return data;\n }\n\n return undefined;\n } else if (ns === 'cookie') {\n const key = varname.replace(/^{|}$/g, '').trim();\n return getCookie(key);\n }\n\n if (varname === '$$') {\n return data;\n } else if (varname[0] === '$') {\n varname = path.substring(1);\n } else if (varname === '&') {\n return data;\n }\n\n return objectGet(data, varname);\n}\n\nexport function isPureVariable(path?: any): path is string {\n return typeof path === 'string'\n ? /^\\$(?:((?:\\w+\\:)?[a-z0-9_.][a-z0-9_.\\[\\]]*)|{[^}{]+})$/i.test(path)\n : false;\n}\n\nexport const resolveVariableAndFilter = (\n path?: string,\n data: object = {},\n defaultFilter: string = '| html',\n fallbackValue = (value: any) => value\n) => {\n if (!path || typeof path !== 'string') {\n return undefined;\n }\n\n const ast = parse(path, {\n evalMode: false,\n allowFilter: true\n });\n\n const ret = new Evaluator({\n defaultFilter\n }).evalute(ast, data);\n\n return ret == null ? fallbackValue(ret) : ret;\n};\n","module.exports = require(\"lodash/groupBy\");","module.exports = require(\"lodash/isPlainObject\");","module.exports = require(\"lodash/transform\");","module.exports = require(\"lodash/uniq\");","module.exports = require(\"lodash/uniqBy\");","module.exports = require(\"moment\");","module.exports = require(\"tslib\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(303);\n"],"names":["options","defaultFilter","functions","this","filters","getFilters","evalute","ast","data","type","replace","_","l","toUpperCase","fn","Error","call","document","body","length","content","map","item","join","filter","input","concat","context","restFilters","shift","name","apply","args","raw","value","script","expressionList","reduce","prev","current","template","arg","templateRaw","get","host","key","unary","op","formatNumber","int","typeName","parseInt","parseFloat","Math","round","power","left","right","pow","multiply","divide","remainder","add","minus","lt","gt","le","ge","eq","ne","streq","strneq","binary","and","or","number","variable","array","members","member","literal","string","object","memebers","forEach","conditional","test","consequent","alternate","funcCall","fnName","identifier","indexOf","a","fnIF","condition","trueValue","falseValue","fnAND","condtions","every","c","fnOR","some","fnXOR","c1","c2","fnIFS","splice","v","fnABS","abs","fnMax","max","fnMin","min","fnSUM","sum","fnINT","n","floor","fnMOD","b","fnPI","PI","fnROUND","bResult","fnSQRT","sqrt","fnAVG","fnUPPERMONEY","fnRAND","random","normalizeText","Date","format","fnLEFT","text","len","substring","fnRIGHT","fnLEN","fnISEMPTY","String","trim","fnCONCATENATE","fnCHAR","code","fromCharCode","fnLOWER","toLowerCase","fnUPPER","fnSPLIT","sep","split","fnTRIM","fnSTARTSWITH","search","fnCONTAINS","fnREPLACE","result","idx","fnSEARCH","start","str","fnMID","from","fnDATE","year","month","day","hour","minute","second","undefined","fnTIMESTAMP","date","fnTODAY","fnNOW","fnSTARTOF","unit","startOf","toDate","fnENDOF","endOf","normalizeDate","formats","isValid","fnYEAR","getFullYear","fnMONTH","getMonth","fnDAY","getDate","fnHOUR","getHours","fnHMINUTE","getMinutes","fnSECOND","getSeconds","fnYEARS","endDate","startDate","diff","fnMINUTES","fnDAYS","fnHOURS","fnDATEMODIFY","num","fnSTRTODATE","fnISBEFORE","isBefore","fnISAFTER","isAfter","fnISSAMEORBEFORE","isSameOrBefore","fnISSAMEORAFTER","isSameOrAfter","fnCOUNT","Array","isArray","Evaluator","conditionalFilter","hasAlternate","filterContext","skipRestTest","getStrOrVariable","resolveVariable","str2array","list","html","escapeHtml","json","tabSize","JSON","stringify","toJson","ret","parse","e","toInt","toFloat","now","inputFormat","fromNow","dateModify","modifier","amount","parts","percent","decimals","whole","multiplier","toFixed","duration","formatDuration","bytes","prettyBytes","isNaN","truncate","end","url_encode","encodeURIComponent","url_decode","decodeURIComponent","default","defaultValue","strict","glue","delimiter","sortBy","method","order","sort","va","vb","localeCompare","makeSorter","objectToArray","label","k","push","unique","topAndOther","labelField","restLabel","index","Object","keys","obj","hasOwnProperty","first","nth","last","step","stripNumber","Number","plus","times","division","count","field","restult","pickValues","pick","path","createObject","pick_if_exist","str2date","outputFormat","filterDate","asArray","expOrDirective","arg1","directive","string2regExp","isAsterisk","base64Encode","btoa","match","p1","base64Decode","atob","charCodeAt","toString","slice","lowerCase","upperCase","isTrue","arguments","isFalse","isMatch","matchArg","notMatch","isEquals","equalsValue","notEquals","lexer","registerFilter","astOrString","TokenName","punctuatorList","escapes","isDigit1to9","char","isDigit","isExp","escapeString","allowedLetter","line","column","mainState","states","tokenCache","allowFilter","pushState","state","popState","pop","position","lines","getNextToken","ch","charAt","skipWhiteSpace","eof","buffer","i","pos","SyntaxError","nextCh","j","openScript","find","keyword","isLiteral","token","chunk","passedValueIndex","iterator","numberLiteral","startQuote","stringLiteral","punctuator","prevState","expression","evalMode","next","tokens","tokenChunk","TypeError","matchPunctuator","operator","fatal","assert","assignmentExpression","skipWhiteSpaceChar","collectFilterArg","arrayLiteral","rawScript","objectLiteral","binaryExpressionParser","parseFunction","rightParseFunction","leftKey","rightKey","logicalAndExpression","bitwiseOrExpression","bitwiseXOrExpression","bitwiseAndExpression","equalityExpression","relationalExpression","shiftExpression","additiveExpression","multiplicativeExpression","powerExpression","unaryExpression","unaryOperators","stack","id","argList","unshift","functionCall","isDot","varibleKey","postfixExpression","cToken","exp","startOP","endOp","conditionalExpression","argContents","complexExpression","oldVariable","prevToken","node","contents","cloneObject","target","persistOwnProps","__super","create","writable","enumerable","prototype","isObject","typename","setVariable","convertKeyToPath","keyToPath","superProps","props","properties","isFrozen","caseSensitive","RegExp","canAccessSuper","quote","subString","tokenize","UNITS","isFinite","neg","exponent","log","toPrecision","entityMap","s","steps","timeUnitMap","week","weekday","millisecond","objectGet","ns","varname","window","sessionStorage","getItem","localStorage","parseJson","cookie","getCookie","relativeValueRe","utc","m","mm","exec","subtract","matches","isDuration","names","arr","resolveVariableAndFilter","fallbackValue","module","exports","require","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
package/dist/util.d.ts CHANGED
@@ -33,4 +33,4 @@ export declare function stripNumber(number: number): number;
33
33
  export declare function pickValues(names: string, data: object): any;
34
34
  export declare function resolveVariable(path?: string, data?: any): any;
35
35
  export declare function isPureVariable(path?: any): path is string;
36
- export declare const resolveVariableAndFilter: (str: string, data: object, defaultFilter?: string, fallbackValue?: (value: any) => any) => any;
36
+ export declare const resolveVariableAndFilter: (path?: string | undefined, data?: object, defaultFilter?: string, fallbackValue?: (value: any) => any) => any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amis-formula",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {