amis-formula 6.7.0 → 6.9.0-beta.0
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 +1 -15
- package/esm/doc.js +5 -5
- package/esm/error.js +1 -1
- package/esm/evalutor.d.ts +4 -3
- package/esm/evalutor.js +16 -6
- package/esm/evalutorForAsync.js +1 -1
- package/esm/filter.js +3 -3
- package/esm/function.d.ts +26 -4
- package/esm/function.js +19 -5
- package/esm/index.d.ts +7 -2
- package/esm/index.js +24 -5
- package/esm/lexer.js +1 -1
- package/esm/parser.js +1 -1
- package/esm/types.d.ts +2 -1
- package/lib/doc.d.ts +1 -15
- package/lib/doc.js +4 -6
- package/lib/error.js +1 -1
- package/lib/evalutor.d.ts +4 -3
- package/lib/evalutor.js +16 -7
- package/lib/evalutorForAsync.js +1 -1
- package/lib/filter.js +3 -3
- package/lib/function.d.ts +26 -4
- package/lib/function.js +20 -5
- package/lib/index.d.ts +7 -2
- package/lib/index.js +22 -3
- package/lib/lexer.js +1 -1
- package/lib/parser.js +1 -1
- package/lib/types.d.ts +2 -1
- package/package.json +1 -1
package/esm/doc.d.ts
CHANGED
|
@@ -1,18 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 公式文档 请运行 `npm run genDoc` 自动生成
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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
|
-
|
|
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
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
|
|
14
|
+
static extendDefaultFilters(filters: FilterMap): void;
|
|
15
15
|
static defaultFunctions: FunctionMap;
|
|
16
|
-
static
|
|
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
|
-
}):
|
|
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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.
|
|
38
|
+
Evaluator.extendDefaultFilters = function (filters) {
|
|
40
39
|
Evaluator.defaultFilters = __assign(__assign({}, Evaluator.defaultFilters), filters);
|
|
41
40
|
};
|
|
42
|
-
Evaluator.
|
|
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
|
-
|
|
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 (!
|
|
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, "="));
|
package/esm/evalutorForAsync.js
CHANGED
package/esm/filter.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-formula v6.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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.
|
|
36
|
+
Evaluator.extendDefaultFilters(filters);
|
|
37
37
|
}
|
|
38
38
|
function extendsFilters(value) {
|
|
39
39
|
Object.assign(filters, value);
|
|
40
|
-
Evaluator.
|
|
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 {
|
|
2
|
-
|
|
3
|
-
export declare function registerFunction(name: string, fn: (
|
|
4
|
-
export declare
|
|
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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
|
-
|
|
11
|
-
Evaluator.
|
|
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,
|
|
37
|
+
export { bulkRegisterFunctionDoc, functionDocs, registerFormula, registerFunction, registerFunctionDoc };
|
package/esm/index.d.ts
CHANGED
|
@@ -3,8 +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,
|
|
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,
|
|
8
|
+
export { parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, registerFormula, registerFunction, registerFunctionDoc, extendsFilters };
|
|
9
|
+
export * from './types';
|
|
9
10
|
export declare function evaluate(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): any;
|
|
10
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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
|
-
|
|
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.
|
|
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
package/esm/parser.js
CHANGED
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,
|
|
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
|
|
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
3
3
|
* Copyright 2021-2024 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
var _function = require('./function.js');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* 公式文档 请运行 `npm run genDoc` 自动生成
|
|
12
12
|
*/
|
|
13
|
-
|
|
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
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
|
|
14
|
+
static extendDefaultFilters(filters: FilterMap): void;
|
|
15
15
|
static defaultFunctions: FunctionMap;
|
|
16
|
-
static
|
|
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
|
-
}):
|
|
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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.
|
|
56
|
+
Evaluator.extendDefaultFilters = function (filters) {
|
|
59
57
|
Evaluator.defaultFilters = tslib.__assign(tslib.__assign({}, Evaluator.defaultFilters), filters);
|
|
60
58
|
};
|
|
61
|
-
Evaluator.
|
|
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
|
-
|
|
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 (!
|
|
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, "="));
|
package/lib/evalutorForAsync.js
CHANGED
package/lib/filter.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-formula v6.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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.
|
|
40
|
+
evalutor.Evaluator.extendDefaultFilters(filters);
|
|
41
41
|
}
|
|
42
42
|
function extendsFilters(value) {
|
|
43
43
|
Object.assign(filters, value);
|
|
44
|
-
evalutor.Evaluator.
|
|
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 {
|
|
2
|
-
|
|
3
|
-
export declare function registerFunction(name: string, fn: (
|
|
4
|
-
export declare
|
|
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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
|
-
|
|
15
|
-
evalutor.Evaluator.
|
|
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.
|
|
43
|
+
exports.registerFormula = registerFormula;
|
|
29
44
|
exports.registerFunction = registerFunction;
|
|
30
45
|
exports.registerFunctionDoc = registerFunctionDoc;
|
package/lib/index.d.ts
CHANGED
|
@@ -3,8 +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,
|
|
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,
|
|
8
|
+
export { parse, lexer, Evaluator, AsyncEvaluator, FilterContext, filters, getFilters, registerFilter, registerFormula, registerFunction, registerFunctionDoc, extendsFilters };
|
|
9
|
+
export * from './types';
|
|
9
10
|
export declare function evaluate(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): any;
|
|
10
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.
|
|
2
|
+
* amis-formula v6.9.0-beta.0
|
|
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.
|
|
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.
|
|
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
package/lib/parser.js
CHANGED
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,
|
|
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 {
|