amis-formula 6.8.0 → 6.9.0-beta.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.
package/esm/doc.d.ts CHANGED
@@ -1,18 +1,4 @@
1
1
  /**
2
2
  * 公式文档 请运行 `npm run genDoc` 自动生成
3
3
  */
4
- export declare const doc: {
5
- name: string;
6
- description: string;
7
- example: string;
8
- params: {
9
- type: string;
10
- name: string;
11
- description: string | null;
12
- }[];
13
- returns: {
14
- type: string;
15
- description: string | null;
16
- };
17
- namespace: string;
18
- }[];
4
+ export {};
package/esm/doc.js CHANGED
@@ -1,12 +1,14 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
6
+ import { bulkRegisterFunctionDoc } from './function.js';
7
+
6
8
  /**
7
9
  * 公式文档 请运行 `npm run genDoc` 自动生成
8
10
  */
9
- var doc = [
11
+ bulkRegisterFunctionDoc([
10
12
  {
11
13
  name: "IF",
12
14
  description: "如果满足条件condition,则返回consequent,否则返回alternate,支持多层嵌套IF函数。\n\n等价于直接用JS表达式如:condition ? consequent : alternate。",
@@ -1917,6 +1919,4 @@ var doc = [
1917
1919
  },
1918
1920
  namespace: "其他"
1919
1921
  }
1920
- ];
1921
-
1922
- export { doc };
1922
+ ]);
package/esm/error.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/esm/evalutor.d.ts CHANGED
@@ -11,9 +11,9 @@ export declare class Evaluator {
11
11
  };
12
12
  contextStack: Array<(varname: string) => any>;
13
13
  static defaultFilters: FilterMap;
14
- static setDefaultFilters(filters: FilterMap): void;
14
+ static extendDefaultFilters(filters: FilterMap): void;
15
15
  static defaultFunctions: FunctionMap;
16
- static setDefaultFunctions(funtions: FunctionMap): void;
16
+ static extendDefaultFunctions(funtions: FunctionMap): void;
17
17
  constructor(context: {
18
18
  [propName: string]: any;
19
19
  }, options?: EvaluatorOptions);
@@ -59,10 +59,11 @@ export declare class Evaluator {
59
59
  value: any;
60
60
  }): number | boolean;
61
61
  formatNumber(value: any, int?: boolean): any;
62
+ isValidValue(value: string | number): boolean;
62
63
  power(ast: {
63
64
  left: any;
64
65
  right: any;
65
- }): number;
66
+ }): any;
66
67
  multiply(ast: {
67
68
  left: any;
68
69
  right: any;
package/esm/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -15,7 +15,6 @@ import uniqBy from 'lodash/uniqBy';
15
15
  import isEqual from 'lodash/isEqual';
16
16
  import isPlainObject from 'lodash/isPlainObject';
17
17
  import get from 'lodash/get';
18
- import isNumber from 'lodash/isNumber';
19
18
  import { FormulaEvalError } from './error.js';
20
19
 
21
20
  /**
@@ -36,10 +35,10 @@ var Evaluator = /** @class */ (function () {
36
35
  this.filters = __assign(__assign(__assign({}, Evaluator.defaultFilters), this.filters), options === null || options === void 0 ? void 0 : options.filters);
37
36
  this.functions = __assign(__assign(__assign({}, Evaluator.defaultFunctions), this.functions), options === null || options === void 0 ? void 0 : options.functions);
38
37
  }
39
- Evaluator.setDefaultFilters = function (filters) {
38
+ Evaluator.extendDefaultFilters = function (filters) {
40
39
  Evaluator.defaultFilters = __assign(__assign({}, Evaluator.defaultFilters), filters);
41
40
  };
42
- Evaluator.setDefaultFunctions = function (funtions) {
41
+ Evaluator.extendDefaultFunctions = function (funtions) {
43
42
  Evaluator.defaultFunctions = __assign(__assign({}, Evaluator.defaultFunctions), funtions);
44
43
  };
45
44
  // 主入口
@@ -173,10 +172,18 @@ var Evaluator = /** @class */ (function () {
173
172
  }
174
173
  return value !== null && value !== void 0 ? value : 0;
175
174
  };
175
+ // 判断是否是数字或者字符串数字
176
+ Evaluator.prototype.isValidValue = function (value) {
177
+ return (typeof value === 'number' ||
178
+ (typeof value === 'string' && /^\d+(\.\d+)?$/.test(value)));
179
+ };
176
180
  Evaluator.prototype.power = function (ast) {
177
181
  var left = this.evalute(ast.left);
178
182
  var right = this.evalute(ast.right);
179
- return Math.pow(this.formatNumber(left), this.formatNumber(right));
183
+ if (!this.isValidValue(left) || !this.isValidValue(right)) {
184
+ return left;
185
+ }
186
+ return Math.pow(left, right);
180
187
  };
181
188
  Evaluator.prototype.multiply = function (ast) {
182
189
  var left = this.evalute(ast.left);
@@ -979,7 +986,7 @@ var Evaluator = /** @class */ (function () {
979
986
  * @returns {number} 基数的指数次幂
980
987
  */
981
988
  Evaluator.prototype.fnPOW = function (base, exponent) {
982
- if (!isNumber(base) || !isNumber(exponent)) {
989
+ if (!this.isValidValue(base) || !this.isValidValue(exponent)) {
983
990
  return base;
984
991
  }
985
992
  return Math.pow(base, exponent);
@@ -2232,6 +2239,9 @@ var Evaluator = /** @class */ (function () {
2232
2239
  Evaluator.defaultFunctions = {};
2233
2240
  return Evaluator;
2234
2241
  }());
2242
+ // 兼容
2243
+ Evaluator.setDefaultFilters = Evaluator.extendDefaultFilters;
2244
+ Evaluator.setDefaultFunctions = Evaluator.extendDefaultFunctions;
2235
2245
  function getCookie(name) {
2236
2246
  var value = "; ".concat(document.cookie);
2237
2247
  var parts = value.split("; ".concat(name, "="));
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/esm/filter.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -33,11 +33,11 @@ var filters = {
33
33
  };
34
34
  function registerFilter(name, fn) {
35
35
  filters[name] = fn;
36
- Evaluator.setDefaultFilters(filters);
36
+ Evaluator.extendDefaultFilters(filters);
37
37
  }
38
38
  function extendsFilters(value) {
39
39
  Object.assign(filters, value);
40
- Evaluator.setDefaultFilters(filters);
40
+ Evaluator.extendDefaultFilters(filters);
41
41
  }
42
42
  function getFilters() {
43
43
  return filters;
package/esm/function.d.ts CHANGED
@@ -1,5 +1,27 @@
1
- import { FunctionMap, FunctionDocMap, FunctionDocItem } from './types';
2
- export declare const functions: FunctionMap;
3
- export declare function registerFunction(name: string, fn: (input: any, ...args: any[]) => any): void;
4
- export declare let functionDocs: FunctionDocMap;
1
+ import { Evaluator } from './evalutor';
2
+ import { FunctionDocMap, FunctionDocItem } from './types';
3
+ export declare function registerFunction(name: string, fn: (this: Evaluator, ...args: Array<any>) => any): void;
4
+ export declare const functionDocs: FunctionDocMap;
5
5
  export declare function registerFunctionDoc(groupName: string, item: FunctionDocItem): void;
6
+ export declare function bulkRegisterFunctionDoc(fnDocs: {
7
+ name: string;
8
+ description: string;
9
+ example: string;
10
+ params: {
11
+ type: string;
12
+ name: string;
13
+ description: string | null;
14
+ }[];
15
+ returns: {
16
+ type: string;
17
+ description: string | null;
18
+ };
19
+ namespace: string;
20
+ }[]): void;
21
+ /**
22
+ * 注册公式,并同时注册公式说明
23
+ * @param name
24
+ * @param fn
25
+ * @param fnInfo
26
+ */
27
+ export declare function registerFormula(name: string, fn: (this: Evaluator, ...args: Array<any>) => any, fnInfo?: FunctionDocItem): void;
package/esm/function.js CHANGED
@@ -1,14 +1,15 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
6
6
  import { Evaluator } from './evalutor.js';
7
7
 
8
- var functions = {};
9
8
  function registerFunction(name, fn) {
10
- functions["fn".concat(name)] = fn;
11
- Evaluator.setDefaultFunctions(functions);
9
+ var _a;
10
+ Evaluator.extendDefaultFunctions((_a = {},
11
+ _a["fn".concat(name)] = fn,
12
+ _a));
12
13
  }
13
14
  var functionDocs = {};
14
15
  function registerFunctionDoc(groupName, item) {
@@ -19,5 +20,18 @@ function registerFunctionDoc(groupName, item) {
19
20
  functionDocs[groupName] = [item];
20
21
  }
21
22
  }
23
+ function bulkRegisterFunctionDoc(fnDocs) {
24
+ fnDocs.forEach(function (item) { return registerFunctionDoc(item.namespace || 'Others', item); });
25
+ }
26
+ /**
27
+ * 注册公式,并同时注册公式说明
28
+ * @param name
29
+ * @param fn
30
+ * @param fnInfo
31
+ */
32
+ function registerFormula(name, fn, fnInfo) {
33
+ registerFunction(name, fn);
34
+ fnInfo && registerFunctionDoc(fnInfo.namespace || 'Others', fnInfo);
35
+ }
22
36
 
23
- export { functionDocs, functions, registerFunction, registerFunctionDoc };
37
+ export { bulkRegisterFunctionDoc, functionDocs, registerFormula, registerFunction, registerFunctionDoc };
package/esm/index.d.ts CHANGED
@@ -3,9 +3,13 @@ import { AsyncEvaluator } from './evalutorForAsync';
3
3
  import { parse } from './parser';
4
4
  import { lexer } from './lexer';
5
5
  import { registerFilter, filters, getFilters, extendsFilters } from './filter';
6
- import { registerFunction, registerFunctionDoc, functionDocs } from './function';
6
+ import { registerFunction, registerFunctionDoc, registerFormula } from './function';
7
7
  import type { FilterContext, ASTNode, ParserOptions, EvaluatorOptions } from './types';
8
- export { parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, registerFunction, registerFunctionDoc, functionDocs, extendsFilters };
8
+ export { parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, registerFormula, registerFunction, registerFunctionDoc, extendsFilters };
9
9
  export * from './types';
10
10
  export declare function evaluate(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): any;
11
11
  export declare function evaluateForAsync(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): Promise<any>;
12
+ export declare function getFunctionsDoc(): Promise<{
13
+ groupName: string;
14
+ items: import("./types").FunctionDocItem[];
15
+ }[]>;
package/esm/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
6
- import { __awaiter, __generator } from 'tslib';
6
+ import { __awaiter, __generator, __read } from 'tslib';
7
7
  import { Evaluator } from './evalutor.js';
8
8
  export { Evaluator } from './evalutor.js';
9
9
  import { AsyncEvaluator } from './evalutorForAsync.js';
@@ -13,7 +13,8 @@ export { parse } from './parser.js';
13
13
  export { lexer } from './lexer.js';
14
14
  import { getFilters } from './filter.js';
15
15
  export { extendsFilters, filters, getFilters, registerFilter } from './filter.js';
16
- export { functionDocs, registerFunction, registerFunctionDoc } from './function.js';
16
+ import { functionDocs } from './function.js';
17
+ export { registerFormula, registerFunction, registerFunctionDoc } from './function.js';
17
18
 
18
19
  function evaluate(astOrString, data, options) {
19
20
  var ast = astOrString;
@@ -34,7 +35,25 @@ function evaluateForAsync(astOrString, data, options) {
34
35
  });
35
36
  });
36
37
  }
37
- Evaluator.setDefaultFilters(getFilters());
38
+ Evaluator.extendDefaultFilters(getFilters());
38
39
  AsyncEvaluator.setDefaultFilters(getFilters());
40
+ function getFunctionsDoc() {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ switch (_a.label) {
44
+ case 0: return [4 /*yield*/, import('./doc.js')];
45
+ case 1:
46
+ _a.sent();
47
+ return [2 /*return*/, Object.entries(functionDocs).map(function (_a) {
48
+ var _b = __read(_a, 2), k = _b[0], items = _b[1];
49
+ return ({
50
+ groupName: k,
51
+ items: items
52
+ });
53
+ })];
54
+ }
55
+ });
56
+ });
57
+ }
39
58
 
40
- export { evaluate, evaluateForAsync };
59
+ export { evaluate, evaluateForAsync, getFunctionsDoc };
package/esm/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/esm/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/esm/types.d.ts CHANGED
@@ -3,12 +3,13 @@ export interface FilterMap {
3
3
  [propName: string]: (this: FilterContext, input: any, ...args: any[]) => any;
4
4
  }
5
5
  export interface FunctionMap {
6
- [propName: string]: (this: Evaluator, ast: Object, data: any) => any;
6
+ [propName: string]: (this: Evaluator, ...args: Array<any>) => any;
7
7
  }
8
8
  export interface FunctionDocItem {
9
9
  name: string;
10
10
  example?: string;
11
11
  description?: string;
12
+ namespace?: string;
12
13
  [propName: string]: any;
13
14
  }
14
15
  export interface FunctionDocMap {
package/lib/doc.d.ts CHANGED
@@ -1,18 +1,4 @@
1
1
  /**
2
2
  * 公式文档 请运行 `npm run genDoc` 自动生成
3
3
  */
4
- export declare const doc: {
5
- name: string;
6
- description: string;
7
- example: string;
8
- params: {
9
- type: string;
10
- name: string;
11
- description: string | null;
12
- }[];
13
- returns: {
14
- type: string;
15
- description: string | null;
16
- };
17
- namespace: string;
18
- }[];
4
+ export {};
package/lib/doc.js CHANGED
@@ -1,16 +1,16 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
6
6
  'use strict';
7
7
 
8
- Object.defineProperty(exports, '__esModule', { value: true });
8
+ var _function = require('./function.js');
9
9
 
10
10
  /**
11
11
  * 公式文档 请运行 `npm run genDoc` 自动生成
12
12
  */
13
- var doc = [
13
+ _function.bulkRegisterFunctionDoc([
14
14
  {
15
15
  name: "IF",
16
16
  description: "如果满足条件condition,则返回consequent,否则返回alternate,支持多层嵌套IF函数。\n\n等价于直接用JS表达式如:condition ? consequent : alternate。",
@@ -1921,6 +1921,4 @@ var doc = [
1921
1921
  },
1922
1922
  namespace: "其他"
1923
1923
  }
1924
- ];
1925
-
1926
- exports.doc = doc;
1924
+ ]);
package/lib/error.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/evalutor.d.ts CHANGED
@@ -11,9 +11,9 @@ export declare class Evaluator {
11
11
  };
12
12
  contextStack: Array<(varname: string) => any>;
13
13
  static defaultFilters: FilterMap;
14
- static setDefaultFilters(filters: FilterMap): void;
14
+ static extendDefaultFilters(filters: FilterMap): void;
15
15
  static defaultFunctions: FunctionMap;
16
- static setDefaultFunctions(funtions: FunctionMap): void;
16
+ static extendDefaultFunctions(funtions: FunctionMap): void;
17
17
  constructor(context: {
18
18
  [propName: string]: any;
19
19
  }, options?: EvaluatorOptions);
@@ -59,10 +59,11 @@ export declare class Evaluator {
59
59
  value: any;
60
60
  }): number | boolean;
61
61
  formatNumber(value: any, int?: boolean): any;
62
+ isValidValue(value: string | number): boolean;
62
63
  power(ast: {
63
64
  left: any;
64
65
  right: any;
65
- }): number;
66
+ }): any;
66
67
  multiply(ast: {
67
68
  left: any;
68
69
  right: any;
package/lib/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -19,7 +19,6 @@ var uniqBy = require('lodash/uniqBy');
19
19
  var isEqual = require('lodash/isEqual');
20
20
  var isPlainObject = require('lodash/isPlainObject');
21
21
  var get = require('lodash/get');
22
- var isNumber = require('lodash/isNumber');
23
22
  var error = require('./error.js');
24
23
 
25
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -35,7 +34,6 @@ var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
35
34
  var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
36
35
  var isPlainObject__default = /*#__PURE__*/_interopDefaultLegacy(isPlainObject);
37
36
  var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
38
- var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);
39
37
 
40
38
  /**
41
39
  * @file 公式内置函数
@@ -55,10 +53,10 @@ var Evaluator = /** @class */ (function () {
55
53
  this.filters = tslib.__assign(tslib.__assign(tslib.__assign({}, Evaluator.defaultFilters), this.filters), options === null || options === void 0 ? void 0 : options.filters);
56
54
  this.functions = tslib.__assign(tslib.__assign(tslib.__assign({}, Evaluator.defaultFunctions), this.functions), options === null || options === void 0 ? void 0 : options.functions);
57
55
  }
58
- Evaluator.setDefaultFilters = function (filters) {
56
+ Evaluator.extendDefaultFilters = function (filters) {
59
57
  Evaluator.defaultFilters = tslib.__assign(tslib.__assign({}, Evaluator.defaultFilters), filters);
60
58
  };
61
- Evaluator.setDefaultFunctions = function (funtions) {
59
+ Evaluator.extendDefaultFunctions = function (funtions) {
62
60
  Evaluator.defaultFunctions = tslib.__assign(tslib.__assign({}, Evaluator.defaultFunctions), funtions);
63
61
  };
64
62
  // 主入口
@@ -192,10 +190,18 @@ var Evaluator = /** @class */ (function () {
192
190
  }
193
191
  return value !== null && value !== void 0 ? value : 0;
194
192
  };
193
+ // 判断是否是数字或者字符串数字
194
+ Evaluator.prototype.isValidValue = function (value) {
195
+ return (typeof value === 'number' ||
196
+ (typeof value === 'string' && /^\d+(\.\d+)?$/.test(value)));
197
+ };
195
198
  Evaluator.prototype.power = function (ast) {
196
199
  var left = this.evalute(ast.left);
197
200
  var right = this.evalute(ast.right);
198
- return Math.pow(this.formatNumber(left), this.formatNumber(right));
201
+ if (!this.isValidValue(left) || !this.isValidValue(right)) {
202
+ return left;
203
+ }
204
+ return Math.pow(left, right);
199
205
  };
200
206
  Evaluator.prototype.multiply = function (ast) {
201
207
  var left = this.evalute(ast.left);
@@ -998,7 +1004,7 @@ var Evaluator = /** @class */ (function () {
998
1004
  * @returns {number} 基数的指数次幂
999
1005
  */
1000
1006
  Evaluator.prototype.fnPOW = function (base, exponent) {
1001
- if (!isNumber__default["default"](base) || !isNumber__default["default"](exponent)) {
1007
+ if (!this.isValidValue(base) || !this.isValidValue(exponent)) {
1002
1008
  return base;
1003
1009
  }
1004
1010
  return Math.pow(base, exponent);
@@ -2251,6 +2257,9 @@ var Evaluator = /** @class */ (function () {
2251
2257
  Evaluator.defaultFunctions = {};
2252
2258
  return Evaluator;
2253
2259
  }());
2260
+ // 兼容
2261
+ Evaluator.setDefaultFilters = Evaluator.extendDefaultFilters;
2262
+ Evaluator.setDefaultFunctions = Evaluator.extendDefaultFunctions;
2254
2263
  function getCookie(name) {
2255
2264
  var value = "; ".concat(document.cookie);
2256
2265
  var parts = value.split("; ".concat(name, "="));
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/filter.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -37,11 +37,11 @@ var filters = {
37
37
  };
38
38
  function registerFilter(name, fn) {
39
39
  filters[name] = fn;
40
- evalutor.Evaluator.setDefaultFilters(filters);
40
+ evalutor.Evaluator.extendDefaultFilters(filters);
41
41
  }
42
42
  function extendsFilters(value) {
43
43
  Object.assign(filters, value);
44
- evalutor.Evaluator.setDefaultFilters(filters);
44
+ evalutor.Evaluator.extendDefaultFilters(filters);
45
45
  }
46
46
  function getFilters() {
47
47
  return filters;
package/lib/function.d.ts CHANGED
@@ -1,5 +1,27 @@
1
- import { FunctionMap, FunctionDocMap, FunctionDocItem } from './types';
2
- export declare const functions: FunctionMap;
3
- export declare function registerFunction(name: string, fn: (input: any, ...args: any[]) => any): void;
4
- export declare let functionDocs: FunctionDocMap;
1
+ import { Evaluator } from './evalutor';
2
+ import { FunctionDocMap, FunctionDocItem } from './types';
3
+ export declare function registerFunction(name: string, fn: (this: Evaluator, ...args: Array<any>) => any): void;
4
+ export declare const functionDocs: FunctionDocMap;
5
5
  export declare function registerFunctionDoc(groupName: string, item: FunctionDocItem): void;
6
+ export declare function bulkRegisterFunctionDoc(fnDocs: {
7
+ name: string;
8
+ description: string;
9
+ example: string;
10
+ params: {
11
+ type: string;
12
+ name: string;
13
+ description: string | null;
14
+ }[];
15
+ returns: {
16
+ type: string;
17
+ description: string | null;
18
+ };
19
+ namespace: string;
20
+ }[]): void;
21
+ /**
22
+ * 注册公式,并同时注册公式说明
23
+ * @param name
24
+ * @param fn
25
+ * @param fnInfo
26
+ */
27
+ export declare function registerFormula(name: string, fn: (this: Evaluator, ...args: Array<any>) => any, fnInfo?: FunctionDocItem): void;
package/lib/function.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -9,10 +9,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
9
9
 
10
10
  var evalutor = require('./evalutor.js');
11
11
 
12
- var functions = {};
13
12
  function registerFunction(name, fn) {
14
- functions["fn".concat(name)] = fn;
15
- evalutor.Evaluator.setDefaultFunctions(functions);
13
+ var _a;
14
+ evalutor.Evaluator.extendDefaultFunctions((_a = {},
15
+ _a["fn".concat(name)] = fn,
16
+ _a));
16
17
  }
17
18
  var functionDocs = {};
18
19
  function registerFunctionDoc(groupName, item) {
@@ -23,8 +24,22 @@ function registerFunctionDoc(groupName, item) {
23
24
  functionDocs[groupName] = [item];
24
25
  }
25
26
  }
27
+ function bulkRegisterFunctionDoc(fnDocs) {
28
+ fnDocs.forEach(function (item) { return registerFunctionDoc(item.namespace || 'Others', item); });
29
+ }
30
+ /**
31
+ * 注册公式,并同时注册公式说明
32
+ * @param name
33
+ * @param fn
34
+ * @param fnInfo
35
+ */
36
+ function registerFormula(name, fn, fnInfo) {
37
+ registerFunction(name, fn);
38
+ fnInfo && registerFunctionDoc(fnInfo.namespace || 'Others', fnInfo);
39
+ }
26
40
 
41
+ exports.bulkRegisterFunctionDoc = bulkRegisterFunctionDoc;
27
42
  exports.functionDocs = functionDocs;
28
- exports.functions = functions;
43
+ exports.registerFormula = registerFormula;
29
44
  exports.registerFunction = registerFunction;
30
45
  exports.registerFunctionDoc = registerFunctionDoc;
package/lib/index.d.ts CHANGED
@@ -3,9 +3,13 @@ import { AsyncEvaluator } from './evalutorForAsync';
3
3
  import { parse } from './parser';
4
4
  import { lexer } from './lexer';
5
5
  import { registerFilter, filters, getFilters, extendsFilters } from './filter';
6
- import { registerFunction, registerFunctionDoc, functionDocs } from './function';
6
+ import { registerFunction, registerFunctionDoc, registerFormula } from './function';
7
7
  import type { FilterContext, ASTNode, ParserOptions, EvaluatorOptions } from './types';
8
- export { parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, registerFunction, registerFunctionDoc, functionDocs, extendsFilters };
8
+ export { parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, registerFormula, registerFunction, registerFunctionDoc, extendsFilters };
9
9
  export * from './types';
10
10
  export declare function evaluate(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): any;
11
11
  export declare function evaluateForAsync(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): Promise<any>;
12
+ export declare function getFunctionsDoc(): Promise<{
13
+ groupName: string;
14
+ items: import("./types").FunctionDocItem[];
15
+ }[]>;
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -34,8 +34,26 @@ function evaluateForAsync(astOrString, data, options) {
34
34
  });
35
35
  });
36
36
  }
37
- evalutor.Evaluator.setDefaultFilters(filter.getFilters());
37
+ evalutor.Evaluator.extendDefaultFilters(filter.getFilters());
38
38
  evalutorForAsync.AsyncEvaluator.setDefaultFilters(filter.getFilters());
39
+ function getFunctionsDoc() {
40
+ return tslib.__awaiter(this, void 0, void 0, function () {
41
+ return tslib.__generator(this, function (_a) {
42
+ switch (_a.label) {
43
+ case 0: return [4 /*yield*/, Promise.resolve().then(function() {return new Promise(function(fullfill) {require(['./doc.js', "tslib"], function(mod, tslib) {fullfill(tslib.__importStar(mod))})})})];
44
+ case 1:
45
+ _a.sent();
46
+ return [2 /*return*/, Object.entries(_function.functionDocs).map(function (_a) {
47
+ var _b = tslib.__read(_a, 2), k = _b[0], items = _b[1];
48
+ return ({
49
+ groupName: k,
50
+ items: items
51
+ });
52
+ })];
53
+ }
54
+ });
55
+ });
56
+ }
39
57
 
40
58
  exports.Evaluator = evalutor.Evaluator;
41
59
  exports.AsyncEvaluator = evalutorForAsync.AsyncEvaluator;
@@ -45,8 +63,9 @@ exports.extendsFilters = filter.extendsFilters;
45
63
  exports.filters = filter.filters;
46
64
  exports.getFilters = filter.getFilters;
47
65
  exports.registerFilter = filter.registerFilter;
48
- exports.functionDocs = _function.functionDocs;
66
+ exports.registerFormula = _function.registerFormula;
49
67
  exports.registerFunction = _function.registerFunction;
50
68
  exports.registerFunctionDoc = _function.registerFunctionDoc;
51
69
  exports.evaluate = evaluate;
52
70
  exports.evaluateForAsync = evaluateForAsync;
71
+ exports.getFunctionsDoc = getFunctionsDoc;
package/lib/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.8.0
2
+ * amis-formula v6.9.0-beta.1
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/types.d.ts CHANGED
@@ -3,12 +3,13 @@ export interface FilterMap {
3
3
  [propName: string]: (this: FilterContext, input: any, ...args: any[]) => any;
4
4
  }
5
5
  export interface FunctionMap {
6
- [propName: string]: (this: Evaluator, ast: Object, data: any) => any;
6
+ [propName: string]: (this: Evaluator, ...args: Array<any>) => any;
7
7
  }
8
8
  export interface FunctionDocItem {
9
9
  name: string;
10
10
  example?: string;
11
11
  description?: string;
12
+ namespace?: string;
12
13
  [propName: string]: any;
13
14
  }
14
15
  export interface FunctionDocMap {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amis-formula",
3
- "version": "6.8.0",
3
+ "version": "6.9.0-beta.1",
4
4
  "description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",