amis-formula 6.9.0 → 6.10.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/lib/evalutor.d.ts CHANGED
@@ -281,7 +281,7 @@ export declare class Evaluator {
281
281
  /**
282
282
  * 获取最大值,如果只有一个参数且是数组,则计算这个数组内的值。
283
283
  *
284
- * @example MAX(num1, num2, ...numN)
284
+ * @example MAX(num1, num2, ...numN) or MAX([num1, num2, ...numN])
285
285
  * @param {...number} num - 数值
286
286
  * @namespace 数学函数
287
287
  *
@@ -291,7 +291,7 @@ export declare class Evaluator {
291
291
  /**
292
292
  * 获取最小值,如果只有一个参数且是数组,则计算这个数组内的值。
293
293
  *
294
- * @example MIN(num1, num2, ...numN)
294
+ * @example MIN(num1, num2, ...numN) or MIN([num1, num2, ...numN])
295
295
  * @param {...number} num - 数值
296
296
  * @namespace 数学函数
297
297
  *
@@ -301,7 +301,7 @@ export declare class Evaluator {
301
301
  /**
302
302
  * 求和,如果只有一个参数且是数组,则计算这个数组内的值。
303
303
  *
304
- * @example SUM(num1, num2, ...numN)
304
+ * @example SUM(num1, num2, ...numN) or SUM([num1, num2, ...numN])
305
305
  * @param {...number} num - 数值
306
306
  * @namespace 数学函数
307
307
  *
@@ -384,7 +384,7 @@ export declare class Evaluator {
384
384
  /**
385
385
  * 返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值。
386
386
  *
387
- * @example AVG(num1, num2, ...numN)
387
+ * @example AVG(num1, num2, ...numN) or AVG([num1, num2, ...numN])
388
388
  * @param {...number} num - 要处理的数字
389
389
  * @namespace 数学函数
390
390
  *
@@ -580,7 +580,7 @@ export declare class Evaluator {
580
580
  *
581
581
  * @returns {string} 结果文本
582
582
  */
583
- fnUPPERFIRST(text: string): string;
583
+ fnUPPERFIRST(text: string): Capitalize<string>;
584
584
  /**
585
585
  * 向前补齐文本长度。
586
586
  *
@@ -712,7 +712,7 @@ export declare class Evaluator {
712
712
  * @param {string} startString - 起始文本
713
713
  * @namespace 文本函数
714
714
  *
715
- * @returns {string} 判断结果
715
+ * @returns {boolean} 判断结果
716
716
  */
717
717
  fnSTARTSWITH(text: string, search: string): boolean;
718
718
  /**
@@ -723,7 +723,7 @@ export declare class Evaluator {
723
723
  * @param {string} endString - 结束文本
724
724
  * @namespace 文本函数
725
725
  *
726
- * @returns {string} 判断结果
726
+ * @returns {boolean} 判断结果
727
727
  */
728
728
  fnENDSWITH(text: string, search: string): boolean;
729
729
  /**
@@ -734,7 +734,7 @@ export declare class Evaluator {
734
734
  * @param {string} searchText - 搜索文本
735
735
  * @namespace 文本函数
736
736
  *
737
- * @returns {string} 判断结果
737
+ * @returns {boolean} 判断结果
738
738
  */
739
739
  fnCONTAINS(text: string, search: string): boolean;
740
740
  /**
@@ -764,13 +764,17 @@ export declare class Evaluator {
764
764
  /**
765
765
  * 返回文本字符串中从指定位置开始的特定数目的字符。
766
766
  *
767
+ * 示例:`MID("amis.baidu.com", 6, 3)`,
768
+ *
769
+ * 返回 `aid`。
770
+ *
767
771
  * @example MID(text, from, len)
768
772
  * @param {string} text - 要处理的文本
769
773
  * @param {number} from - 起始位置
770
774
  * @param {number} len - 处理长度
771
775
  * @namespace 文本函数
772
776
  *
773
- * @returns {number} 命中的位置
777
+ * @returns {string} 命中的位置
774
778
  */
775
779
  fnMID(text: string, from: number, len: number): string;
776
780
  /**
@@ -778,7 +782,7 @@ export declare class Evaluator {
778
782
  *
779
783
  * 示例:`/home/amis/a.json`,
780
784
  *
781
- * 返回:a.json`。
785
+ * 返回:`a.json`。
782
786
  *
783
787
  * @example BASENAME(text)
784
788
  * @param {string} text - 要处理的文本
@@ -919,7 +923,7 @@ export declare class Evaluator {
919
923
  * @param {date} date 日期对象
920
924
  * @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
921
925
  * @param {string} format 日期格式,可选
922
- * @returns {date} 新的日期对象
926
+ * @returns {any} 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
923
927
  */
924
928
  fnSTARTOF(date: Date, unit?: any, format?: string): string | Date;
925
929
  /**
@@ -930,7 +934,7 @@ export declare class Evaluator {
930
934
  * @param {date} date 日期对象
931
935
  * @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
932
936
  * @param {string} format 日期格式,可选
933
- * @returns {date} 新的日期对象
937
+ * @returns {any} 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
934
938
  */
935
939
  fnENDOF(date: Date, unit?: any, format?: string): string | Date;
936
940
  normalizeDate(raw: any): Date;
@@ -1122,28 +1126,38 @@ export declare class Evaluator {
1122
1126
  * @param {Array<any>} arr 数组
1123
1127
  * @namespace 数组
1124
1128
  * @example COUNT(arr)
1125
- * @returns {boolean} 结果
1129
+ * @returns {number} 结果
1126
1130
  */
1127
1131
  fnCOUNT(value: any): number;
1128
1132
  /**
1129
1133
  * 数组做数据转换,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1130
1134
  *
1135
+ * 将数组中的每个元素转换成箭头函数返回的值。
1136
+ *
1137
+ * 示例:
1138
+ *
1139
+ * ARRAYMAP([1, 2, 3], item => item + 1) 得到 [2, 3, 4]。
1140
+ *
1131
1141
  * @param {Array<any>} arr 数组
1132
1142
  * @param {Function<any>} iterator 箭头函数
1133
1143
  * @namespace 数组
1134
1144
  * @example ARRAYMAP(arr, item => item)
1135
- * @returns {boolean} 结果
1145
+ * @returns {Array<any>} 返回转换后的数组
1136
1146
  */
1137
1147
  fnARRAYMAP(value: any, iterator: any): any[];
1138
1148
  /**
1139
1149
  * 数据做数据过滤,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1140
1150
  * 将第二个箭头函数返回为 false 的成员过滤掉。
1141
1151
  *
1152
+ * 示例:
1153
+ *
1154
+ * ARRAYFILTER([1, 2, 3], item => item > 1) 得到 [2, 3]。
1155
+ *
1142
1156
  * @param {Array<any>} arr 数组
1143
1157
  * @param {Function<any>} iterator 箭头函数
1144
1158
  * @namespace 数组
1145
1159
  * @example ARRAYFILTER(arr, item => item)
1146
- * @returns {boolean} 结果
1160
+ * @returns {Array<any>} 返回过滤后的数组
1147
1161
  */
1148
1162
  fnARRAYFILTER(value: any, iterator: any): any[];
1149
1163
  /**
@@ -1244,7 +1258,7 @@ export declare class Evaluator {
1244
1258
  * @param { String} separator 分隔符
1245
1259
  * @namespace 数组
1246
1260
  * @example JOIN(arr, string)
1247
- * @returns {String} 结果
1261
+ * @returns {string} 结果
1248
1262
  */
1249
1263
  fnJOIN(arr: any[], separator?: string): string;
1250
1264
  /**
@@ -1265,7 +1279,7 @@ export declare class Evaluator {
1265
1279
  *
1266
1280
  * 示例:
1267
1281
  *
1268
- * UNIQ([{a: '1'}, {b: '2'}, {a: '1'}] 'id')
1282
+ * UNIQ([{a: '1'}, {b: '2'}, {a: '1'}]) 得到 [{a: '1'}, {b: '2'}]
1269
1283
  *
1270
1284
  * @param {Array<any>} arr 数组
1271
1285
  * @param {string} field 字段
package/lib/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.9.0
2
+ * amis-formula v6.10.0-beta.0
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
@@ -598,7 +598,7 @@ var Evaluator = /** @class */ (function () {
598
598
  /**
599
599
  * 获取最大值,如果只有一个参数且是数组,则计算这个数组内的值。
600
600
  *
601
- * @example MAX(num1, num2, ...numN)
601
+ * @example MAX(num1, num2, ...numN) or MAX([num1, num2, ...numN])
602
602
  * @param {...number} num - 数值
603
603
  * @namespace 数学函数
604
604
  *
@@ -616,7 +616,7 @@ var Evaluator = /** @class */ (function () {
616
616
  /**
617
617
  * 获取最小值,如果只有一个参数且是数组,则计算这个数组内的值。
618
618
  *
619
- * @example MIN(num1, num2, ...numN)
619
+ * @example MIN(num1, num2, ...numN) or MIN([num1, num2, ...numN])
620
620
  * @param {...number} num - 数值
621
621
  * @namespace 数学函数
622
622
  *
@@ -634,7 +634,7 @@ var Evaluator = /** @class */ (function () {
634
634
  /**
635
635
  * 求和,如果只有一个参数且是数组,则计算这个数组内的值。
636
636
  *
637
- * @example SUM(num1, num2, ...numN)
637
+ * @example SUM(num1, num2, ...numN) or SUM([num1, num2, ...numN])
638
638
  * @param {...number} num - 数值
639
639
  * @namespace 数学函数
640
640
  *
@@ -763,7 +763,7 @@ var Evaluator = /** @class */ (function () {
763
763
  /**
764
764
  * 返回所有参数的平均值,如果只有一个参数且是数组,则计算这个数组内的值。
765
765
  *
766
- * @example AVG(num1, num2, ...numN)
766
+ * @example AVG(num1, num2, ...numN) or AVG([num1, num2, ...numN])
767
767
  * @param {...number} num - 要处理的数字
768
768
  * @namespace 数学函数
769
769
  *
@@ -1007,7 +1007,7 @@ var Evaluator = /** @class */ (function () {
1007
1007
  if (!this.isValidValue(base) || !this.isValidValue(exponent)) {
1008
1008
  return base;
1009
1009
  }
1010
- return Math.pow(base, exponent);
1010
+ return Math.pow(this.formatNumber(base), this.formatNumber(exponent));
1011
1011
  };
1012
1012
  // 文本函数
1013
1013
  Evaluator.prototype.normalizeText = function (raw) {
@@ -1054,6 +1054,9 @@ var Evaluator = /** @class */ (function () {
1054
1054
  * @returns {number} 长度
1055
1055
  */
1056
1056
  Evaluator.prototype.fnLEN = function (text) {
1057
+ if (text === undefined || text === null) {
1058
+ return 0;
1059
+ }
1057
1060
  text = this.normalizeText(text);
1058
1061
  return text === null || text === void 0 ? void 0 : text.length;
1059
1062
  };
@@ -1071,7 +1074,7 @@ var Evaluator = /** @class */ (function () {
1071
1074
  for (var _i = 0; _i < arguments.length; _i++) {
1072
1075
  args[_i] = arguments[_i];
1073
1076
  }
1074
- return this.fnLEN.call(this, args);
1077
+ return this.fnLEN.apply(this, args);
1075
1078
  };
1076
1079
  /**
1077
1080
  * 判断文本是否为空。
@@ -1099,7 +1102,7 @@ var Evaluator = /** @class */ (function () {
1099
1102
  for (var _i = 0; _i < arguments.length; _i++) {
1100
1103
  args[_i] = arguments[_i];
1101
1104
  }
1102
- return args.join('');
1105
+ return args.map(this.normalizeText).join('');
1103
1106
  };
1104
1107
  /**
1105
1108
  * 返回计算机字符集的数字代码所对应的字符。
@@ -1315,7 +1318,7 @@ var Evaluator = /** @class */ (function () {
1315
1318
  * @param {string} startString - 起始文本
1316
1319
  * @namespace 文本函数
1317
1320
  *
1318
- * @returns {string} 判断结果
1321
+ * @returns {boolean} 判断结果
1319
1322
  */
1320
1323
  Evaluator.prototype.fnSTARTSWITH = function (text, search) {
1321
1324
  search = this.normalizeText(search);
@@ -1333,7 +1336,7 @@ var Evaluator = /** @class */ (function () {
1333
1336
  * @param {string} endString - 结束文本
1334
1337
  * @namespace 文本函数
1335
1338
  *
1336
- * @returns {string} 判断结果
1339
+ * @returns {boolean} 判断结果
1337
1340
  */
1338
1341
  Evaluator.prototype.fnENDSWITH = function (text, search) {
1339
1342
  search = this.normalizeText(search);
@@ -1351,7 +1354,7 @@ var Evaluator = /** @class */ (function () {
1351
1354
  * @param {string} searchText - 搜索文本
1352
1355
  * @namespace 文本函数
1353
1356
  *
1354
- * @returns {string} 判断结果
1357
+ * @returns {boolean} 判断结果
1355
1358
  */
1356
1359
  Evaluator.prototype.fnCONTAINS = function (text, search) {
1357
1360
  search = this.normalizeText(search);
@@ -1421,13 +1424,17 @@ var Evaluator = /** @class */ (function () {
1421
1424
  /**
1422
1425
  * 返回文本字符串中从指定位置开始的特定数目的字符。
1423
1426
  *
1427
+ * 示例:`MID("amis.baidu.com", 6, 3)`,
1428
+ *
1429
+ * 返回 `aid`。
1430
+ *
1424
1431
  * @example MID(text, from, len)
1425
1432
  * @param {string} text - 要处理的文本
1426
1433
  * @param {number} from - 起始位置
1427
1434
  * @param {number} len - 处理长度
1428
1435
  * @namespace 文本函数
1429
1436
  *
1430
- * @returns {number} 命中的位置
1437
+ * @returns {string} 命中的位置
1431
1438
  */
1432
1439
  Evaluator.prototype.fnMID = function (text, from, len) {
1433
1440
  text = this.normalizeText(text);
@@ -1440,7 +1447,7 @@ var Evaluator = /** @class */ (function () {
1440
1447
  *
1441
1448
  * 示例:`/home/amis/a.json`,
1442
1449
  *
1443
- * 返回:a.json`。
1450
+ * 返回:`a.json`。
1444
1451
  *
1445
1452
  * @example BASENAME(text)
1446
1453
  * @param {string} text - 要处理的文本
@@ -1631,7 +1638,7 @@ var Evaluator = /** @class */ (function () {
1631
1638
  * @param {date} date 日期对象
1632
1639
  * @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
1633
1640
  * @param {string} format 日期格式,可选
1634
- * @returns {date} 新的日期对象
1641
+ * @returns {any} 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
1635
1642
  */
1636
1643
  Evaluator.prototype.fnSTARTOF = function (date, unit, format) {
1637
1644
  var md = moment__default["default"](this.normalizeDate(date)).startOf(unit || 'day');
@@ -1645,7 +1652,7 @@ var Evaluator = /** @class */ (function () {
1645
1652
  * @param {date} date 日期对象
1646
1653
  * @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
1647
1654
  * @param {string} format 日期格式,可选
1648
- * @returns {date} 新的日期对象
1655
+ * @returns {any} 新的日期对象, 如果传入 format 则返回格式化后的日期字符串
1649
1656
  */
1650
1657
  Evaluator.prototype.fnENDOF = function (date, unit, format) {
1651
1658
  var md = moment__default["default"](this.normalizeDate(date)).endOf(unit || 'day');
@@ -1928,7 +1935,7 @@ var Evaluator = /** @class */ (function () {
1928
1935
  * @param {Array<any>} arr 数组
1929
1936
  * @namespace 数组
1930
1937
  * @example COUNT(arr)
1931
- * @returns {boolean} 结果
1938
+ * @returns {number} 结果
1932
1939
  */
1933
1940
  Evaluator.prototype.fnCOUNT = function (value) {
1934
1941
  return Array.isArray(value) ? value.length : value ? 1 : 0;
@@ -1936,11 +1943,17 @@ var Evaluator = /** @class */ (function () {
1936
1943
  /**
1937
1944
  * 数组做数据转换,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1938
1945
  *
1946
+ * 将数组中的每个元素转换成箭头函数返回的值。
1947
+ *
1948
+ * 示例:
1949
+ *
1950
+ * ARRAYMAP([1, 2, 3], item => item + 1) 得到 [2, 3, 4]。
1951
+ *
1939
1952
  * @param {Array<any>} arr 数组
1940
1953
  * @param {Function<any>} iterator 箭头函数
1941
1954
  * @namespace 数组
1942
1955
  * @example ARRAYMAP(arr, item => item)
1943
- * @returns {boolean} 结果
1956
+ * @returns {Array<any>} 返回转换后的数组
1944
1957
  */
1945
1958
  Evaluator.prototype.fnARRAYMAP = function (value, iterator) {
1946
1959
  var _this = this;
@@ -1955,11 +1968,15 @@ var Evaluator = /** @class */ (function () {
1955
1968
  * 数据做数据过滤,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
1956
1969
  * 将第二个箭头函数返回为 false 的成员过滤掉。
1957
1970
  *
1971
+ * 示例:
1972
+ *
1973
+ * ARRAYFILTER([1, 2, 3], item => item > 1) 得到 [2, 3]。
1974
+ *
1958
1975
  * @param {Array<any>} arr 数组
1959
1976
  * @param {Function<any>} iterator 箭头函数
1960
1977
  * @namespace 数组
1961
1978
  * @example ARRAYFILTER(arr, item => item)
1962
- * @returns {boolean} 结果
1979
+ * @returns {Array<any>} 返回过滤后的数组
1963
1980
  */
1964
1981
  Evaluator.prototype.fnARRAYFILTER = function (value, iterator) {
1965
1982
  var _this = this;
@@ -2127,7 +2144,7 @@ var Evaluator = /** @class */ (function () {
2127
2144
  * @param { String} separator 分隔符
2128
2145
  * @namespace 数组
2129
2146
  * @example JOIN(arr, string)
2130
- * @returns {String} 结果
2147
+ * @returns {string} 结果
2131
2148
  */
2132
2149
  Evaluator.prototype.fnJOIN = function (arr, separator) {
2133
2150
  if (separator === void 0) { separator = ''; }
@@ -2165,7 +2182,7 @@ var Evaluator = /** @class */ (function () {
2165
2182
  *
2166
2183
  * 示例:
2167
2184
  *
2168
- * UNIQ([{a: '1'}, {b: '2'}, {a: '1'}] 'id')
2185
+ * UNIQ([{a: '1'}, {b: '2'}, {a: '1'}]) 得到 [{a: '1'}, {b: '2'}]
2169
2186
  *
2170
2187
  * @param {Array<any>} arr 数组
2171
2188
  * @param {string} field 字段
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.9.0
2
+ * amis-formula v6.10.0-beta.0
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.9.0
2
+ * amis-formula v6.10.0-beta.0
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/function.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.9.0
2
+ * amis-formula v6.10.0-beta.0
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.9.0
2
+ * amis-formula v6.10.0-beta.0
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/lib/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v6.9.0
2
+ * amis-formula v6.10.0-beta.0
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.9.0
2
+ * amis-formula v6.10.0-beta.0
3
3
  * Copyright 2021-2024 fex
4
4
  */
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amis-formula",
3
- "version": "6.9.0",
3
+ "version": "6.10.0-beta.0",
4
4
  "description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",