amis-formula 1.1.0 → 1.1.1

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.
@@ -154,6 +154,9 @@ export declare class Evaluator {
154
154
  variable(ast: {
155
155
  name: string;
156
156
  }, data: any): any;
157
+ identifier(ast: {
158
+ name: string;
159
+ }, data: any): string;
157
160
  array(ast: {
158
161
  type: 'array';
159
162
  members: Array<any>;
package/dist/index.js CHANGED
@@ -269,6 +269,9 @@ var Evaluator = /** @class */ (function () {
269
269
  Evaluator.prototype.variable = function (ast, data) {
270
270
  return ast.name === '&' ? data : data[ast.name];
271
271
  };
272
+ Evaluator.prototype.identifier = function (ast, data) {
273
+ return ast.name;
274
+ };
272
275
  Evaluator.prototype.array = function (ast, data) {
273
276
  var _this = this;
274
277
  return ast.members.map(function (member) { return _this.evalute(member, data); });
@@ -2126,10 +2129,10 @@ function parse(input, options) {
2126
2129
  while (matchPunctuator('[') || matchPunctuator('.')) {
2127
2130
  var isDot = matchPunctuator('.');
2128
2131
  next();
2129
- var right = assert(isDot
2130
- ? identifier() /* 为了兼容久的语法,理论上来说只需要 identifier, 下面的 rawScript 是不应该有的 */ ||
2131
- rawScript()
2132
- : varibleKey());
2132
+ var right = assert((isDot
2133
+ ? identifier()
2134
+ : varibleKey(true)) /* 为了兼容久的语法,理论上来说只需要 identifier, 下面的 rawScript 是不应该有的 */ ||
2135
+ rawScript());
2133
2136
  if (!isDot) {
2134
2137
  if (matchPunctuator(']')) {
2135
2138
  next();
@@ -2149,13 +2152,11 @@ function parse(input, options) {
2149
2152
  function leftHandSideExpression() {
2150
2153
  return functionCall() || primaryExpression();
2151
2154
  }
2152
- function varibleKey() {
2153
- if (token.type === lexer_1.TokenName[7 /* Identifier */]) {
2154
- var cToken = token;
2155
- next();
2156
- return cToken.value;
2157
- }
2158
- return stringLiteral() || template();
2155
+ function varibleKey(allowVariable) {
2156
+ if (allowVariable === void 0) { allowVariable = false; }
2157
+ return ((allowVariable ? variable() : identifier()) ||
2158
+ stringLiteral() ||
2159
+ template());
2159
2160
  }
2160
2161
  function stringLiteral() {
2161
2162
  if (token.type === lexer_1.TokenName[11 /* StringLiteral */]) {
@@ -2211,14 +2212,14 @@ function parse(input, options) {
2211
2212
  var cToken = token;
2212
2213
  next();
2213
2214
  return {
2214
- type: 'variable',
2215
+ type: 'identifier',
2215
2216
  name: cToken.value
2216
2217
  };
2217
2218
  }
2218
2219
  return null;
2219
2220
  }
2220
2221
  function primaryExpression() {
2221
- return (identifier() ||
2222
+ return (variable() ||
2222
2223
  literal() ||
2223
2224
  template() ||
2224
2225
  arrayLiteral() ||
@@ -2395,6 +2396,17 @@ function parse(input, options) {
2395
2396
  body: exp
2396
2397
  };
2397
2398
  }
2399
+ function variable() {
2400
+ if (token.type === lexer_1.TokenName[7 /* Identifier */]) {
2401
+ var cToken = token;
2402
+ next();
2403
+ return {
2404
+ type: 'variable',
2405
+ name: cToken.value
2406
+ };
2407
+ }
2408
+ return null;
2409
+ }
2398
2410
  function oldVariable() {
2399
2411
  if (token.type !== lexer_1.TokenName[3 /* Variable */]) {
2400
2412
  return null;
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/before-startup","webpack:///webpack/startup","webpack:///webpack/after-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 const isString = ast.body.length > 1;\n const content = ast.body.map(item => {\n let result = this.evalute(item, data);\n\n if (isString && result == null) {\n // 不要出现 undefined, null 之类的文案\n return '';\n }\n\n return result;\n });\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) => {\n if (input == null) {\n return input;\n }\n return escapeHtml(input);\n },\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":[],"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/before-startup","webpack:///webpack/startup","webpack:///webpack/after-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 const isString = ast.body.length > 1;\n const content = ast.body.map(item => {\n let result = this.evalute(item, data);\n\n if (isString && result == null) {\n // 不要出现 undefined, null 之类的文案\n return '';\n }\n\n return result;\n });\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 identifier(ast: {name: string}, data: any) {\n return 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) => {\n if (input == null) {\n return input;\n }\n return escapeHtml(input);\n },\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()\n : varibleKey(\n true\n )) /* 为了兼容久的语法,理论上来说只需要 identifier, 下面的 rawScript 是不应该有的 */ ||\n rawScript()\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(allowVariable = false) {\n return (\n (allowVariable ? variable() : identifier()) ||\n stringLiteral() ||\n template()\n );\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: 'identifier',\n name: cToken.value\n };\n }\n return null;\n }\n\n function primaryExpression() {\n return (\n variable() ||\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 variable() {\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 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":[],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amis-formula",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {