amis-formula 2.7.2 → 2.8.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.js +295 -6
- package/esm/doc.md +209 -4
- package/esm/evalutor.d.ts +202 -8
- package/esm/evalutor.js +347 -33
- package/esm/filter.js +1 -1
- package/esm/function.js +1 -1
- package/esm/index.js +1 -1
- package/esm/lexer.js +1 -1
- package/esm/parser.js +1 -1
- package/lib/doc.js +295 -6
- package/lib/doc.md +209 -4
- package/lib/evalutor.d.ts +202 -8
- package/lib/evalutor.js +347 -32
- package/lib/filter.js +1 -1
- package/lib/function.js +1 -1
- package/lib/index.js +1 -1
- package/lib/lexer.js +1 -1
- package/lib/parser.js +1 -1
- package/package.json +2 -2
package/lib/evalutor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-formula v2.
|
|
2
|
+
* amis-formula v2.8.0
|
|
3
3
|
* Copyright 2021-2023 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -18,6 +18,7 @@ var uniqWith = require('lodash/uniqWith');
|
|
|
18
18
|
var uniqBy = require('lodash/uniqBy');
|
|
19
19
|
var isEqual = require('lodash/isEqual');
|
|
20
20
|
var isPlainObject = require('lodash/isPlainObject');
|
|
21
|
+
var get = require('lodash/get');
|
|
21
22
|
|
|
22
23
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
24
|
|
|
@@ -31,6 +32,7 @@ var uniqWith__default = /*#__PURE__*/_interopDefaultLegacy(uniqWith);
|
|
|
31
32
|
var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
|
|
32
33
|
var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
|
|
33
34
|
var isPlainObject__default = /*#__PURE__*/_interopDefaultLegacy(isPlainObject);
|
|
35
|
+
var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
|
|
34
36
|
|
|
35
37
|
/**
|
|
36
38
|
* @file 公式内置函数
|
|
@@ -726,6 +728,7 @@ var Evaluator = /** @class */ (function () {
|
|
|
726
728
|
* @returns {number} 所有数值的平均值
|
|
727
729
|
*/
|
|
728
730
|
Evaluator.prototype.fnDEVSQ = function () {
|
|
731
|
+
var e_1, _a;
|
|
729
732
|
var _this = this;
|
|
730
733
|
var args = [];
|
|
731
734
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -739,9 +742,18 @@ var Evaluator = /** @class */ (function () {
|
|
|
739
742
|
var sum = nums.reduce(function (sum, a) { return sum + a || 0; }, 0);
|
|
740
743
|
var mean = sum / nums.length;
|
|
741
744
|
var result = 0;
|
|
742
|
-
|
|
743
|
-
var
|
|
744
|
-
|
|
745
|
+
try {
|
|
746
|
+
for (var nums_1 = tslib.__values(nums), nums_1_1 = nums_1.next(); !nums_1_1.done; nums_1_1 = nums_1.next()) {
|
|
747
|
+
var num = nums_1_1.value;
|
|
748
|
+
result += Math.pow(num - mean, 2);
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
752
|
+
finally {
|
|
753
|
+
try {
|
|
754
|
+
if (nums_1_1 && !nums_1_1.done && (_a = nums_1.return)) _a.call(nums_1);
|
|
755
|
+
}
|
|
756
|
+
finally { if (e_1) throw e_1.error; }
|
|
745
757
|
}
|
|
746
758
|
return result;
|
|
747
759
|
};
|
|
@@ -755,6 +767,7 @@ var Evaluator = /** @class */ (function () {
|
|
|
755
767
|
* @returns {number} 所有数值的平均值
|
|
756
768
|
*/
|
|
757
769
|
Evaluator.prototype.fnAVEDEV = function () {
|
|
770
|
+
var e_2, _a;
|
|
758
771
|
var _this = this;
|
|
759
772
|
var args = [];
|
|
760
773
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -771,9 +784,18 @@ var Evaluator = /** @class */ (function () {
|
|
|
771
784
|
var sum = nums.reduce(function (sum, a) { return sum + a || 0; }, 0);
|
|
772
785
|
var mean = sum / nums.length;
|
|
773
786
|
var result = 0;
|
|
774
|
-
|
|
775
|
-
var
|
|
776
|
-
|
|
787
|
+
try {
|
|
788
|
+
for (var nums_2 = tslib.__values(nums), nums_2_1 = nums_2.next(); !nums_2_1.done; nums_2_1 = nums_2.next()) {
|
|
789
|
+
var num = nums_2_1.value;
|
|
790
|
+
result += Math.abs(num - mean);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
794
|
+
finally {
|
|
795
|
+
try {
|
|
796
|
+
if (nums_2_1 && !nums_2_1.done && (_a = nums_2.return)) _a.call(nums_2);
|
|
797
|
+
}
|
|
798
|
+
finally { if (e_2) throw e_2.error; }
|
|
777
799
|
}
|
|
778
800
|
return result / nums.length;
|
|
779
801
|
};
|
|
@@ -787,6 +809,7 @@ var Evaluator = /** @class */ (function () {
|
|
|
787
809
|
* @returns {number} 所有数值的平均值
|
|
788
810
|
*/
|
|
789
811
|
Evaluator.prototype.fnHARMEAN = function () {
|
|
812
|
+
var e_3, _a;
|
|
790
813
|
var _this = this;
|
|
791
814
|
var args = [];
|
|
792
815
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -801,9 +824,18 @@ var Evaluator = /** @class */ (function () {
|
|
|
801
824
|
}
|
|
802
825
|
var nums = arr.map(function (item) { return _this.formatNumber(item); });
|
|
803
826
|
var den = 0;
|
|
804
|
-
|
|
805
|
-
var
|
|
806
|
-
|
|
827
|
+
try {
|
|
828
|
+
for (var nums_3 = tslib.__values(nums), nums_3_1 = nums_3.next(); !nums_3_1.done; nums_3_1 = nums_3.next()) {
|
|
829
|
+
var num = nums_3_1.value;
|
|
830
|
+
den += 1 / num;
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
834
|
+
finally {
|
|
835
|
+
try {
|
|
836
|
+
if (nums_3_1 && !nums_3_1.done && (_a = nums_3.return)) _a.call(nums_3);
|
|
837
|
+
}
|
|
838
|
+
finally { if (e_3) throw e_3.error; }
|
|
807
839
|
}
|
|
808
840
|
return nums.length / den;
|
|
809
841
|
};
|
|
@@ -1359,7 +1391,7 @@ var Evaluator = /** @class */ (function () {
|
|
|
1359
1391
|
* @returns {number} 时间戳
|
|
1360
1392
|
*/
|
|
1361
1393
|
Evaluator.prototype.fnTIMESTAMP = function (date, format) {
|
|
1362
|
-
return parseInt(moment__default["default"](date).format(format === 'x' ? 'x' : 'X'), 10);
|
|
1394
|
+
return parseInt(moment__default["default"](this.normalizeDate(date)).format(format === 'x' ? 'x' : 'X'), 10);
|
|
1363
1395
|
};
|
|
1364
1396
|
/**
|
|
1365
1397
|
* 返回今天的日期
|
|
@@ -1384,20 +1416,106 @@ var Evaluator = /** @class */ (function () {
|
|
|
1384
1416
|
return new Date();
|
|
1385
1417
|
};
|
|
1386
1418
|
/**
|
|
1387
|
-
*
|
|
1419
|
+
* 获取日期的星期几,
|
|
1420
|
+
*
|
|
1421
|
+
* 示例:
|
|
1422
|
+
*
|
|
1423
|
+
* WEEKDAY('2023-02-27') 得到 1
|
|
1424
|
+
*
|
|
1425
|
+
* @example WEEKDAY(date)
|
|
1426
|
+
* @namespace 日期函数
|
|
1427
|
+
* @param {any} date 日期
|
|
1428
|
+
* @param {number} type 星期定义类型,默认为1,1表示0至6代表星期一到星期日,2表示1至7代表星期一到星期日
|
|
1429
|
+
*
|
|
1430
|
+
* @returns {number} 星期几的数字标识
|
|
1431
|
+
*/
|
|
1432
|
+
Evaluator.prototype.fnWEEKDAY = function (date, type) {
|
|
1433
|
+
var md = moment__default["default"](this.normalizeDate(date));
|
|
1434
|
+
return type === 2 ? md.isoWeekday() : md.weekday();
|
|
1435
|
+
};
|
|
1436
|
+
/**
|
|
1437
|
+
* 获取年份的星期,即第几周
|
|
1438
|
+
*
|
|
1439
|
+
* 示例:
|
|
1440
|
+
*
|
|
1441
|
+
* WEEK('2023-03-05') 得到 10
|
|
1442
|
+
*
|
|
1443
|
+
* @example WEEK(date)
|
|
1444
|
+
* @namespace 日期函数
|
|
1445
|
+
* @param {any} date 日期
|
|
1446
|
+
* @param {boolean} isISO 是否ISO星期
|
|
1447
|
+
*
|
|
1448
|
+
* @returns {number} 星期几的数字标识
|
|
1449
|
+
*/
|
|
1450
|
+
Evaluator.prototype.fnWEEK = function (date, isISO) {
|
|
1451
|
+
if (isISO === void 0) { isISO = false; }
|
|
1452
|
+
var md = moment__default["default"](this.normalizeDate(date));
|
|
1453
|
+
return isISO ? md.isoWeek() : md.week();
|
|
1454
|
+
};
|
|
1455
|
+
/**
|
|
1456
|
+
* 对日期、日期字符串、时间戳进行格式化
|
|
1457
|
+
*
|
|
1458
|
+
* 示例:
|
|
1459
|
+
*
|
|
1460
|
+
* DATETOSTR('12/25/2022', 'YYYY-MM-DD') 得到 '2022.12.25'
|
|
1461
|
+
* DATETOSTR(1676563200, 'YYYY.MM.DD') 得到 '2023.02.17'
|
|
1462
|
+
* DATETOSTR(1676563200000, 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
|
|
1463
|
+
* DATETOSTR(DATE('2021-12-21'), 'YYYY.MM.DD hh:mm:ss') 得到 '2021.12.21 08:00:00'
|
|
1388
1464
|
*
|
|
1389
|
-
* @example DATETOSTR(date[, format="YYYY-MM-DD HH:mm:ss"])
|
|
1390
1465
|
* @example DATETOSTR(date, 'YYYY-MM-DD')
|
|
1391
1466
|
* @namespace 日期函数
|
|
1392
|
-
* @param {
|
|
1467
|
+
* @param {any} date 日期对象、日期字符串、时间戳
|
|
1393
1468
|
* @param {string} format 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
|
|
1394
1469
|
*
|
|
1395
|
-
* @returns {
|
|
1470
|
+
* @returns {string} 日期字符串
|
|
1396
1471
|
*/
|
|
1397
1472
|
Evaluator.prototype.fnDATETOSTR = function (date, format) {
|
|
1398
1473
|
if (format === void 0) { format = 'YYYY-MM-DD HH:mm:ss'; }
|
|
1474
|
+
date = this.normalizeDate(date);
|
|
1399
1475
|
return moment__default["default"](date).format(format);
|
|
1400
1476
|
};
|
|
1477
|
+
/**
|
|
1478
|
+
* 获取日期范围字符串中的开始时间、结束时间
|
|
1479
|
+
*
|
|
1480
|
+
* 示例:
|
|
1481
|
+
*
|
|
1482
|
+
* DATERANGESPLIT('1676563200, 1676735999') 得到 [1676563200, 1676735999]
|
|
1483
|
+
* DATERANGESPLIT('1676563200, 1676735999', undefined , 'YYYY.MM.DD hh:mm:ss') 得到 [2023.02.17 12:00:00, 2023.02.18 11:59:59]
|
|
1484
|
+
* DATERANGESPLIT('1676563200, 1676735999', 0 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
|
|
1485
|
+
* DATERANGESPLIT('1676563200, 1676735999', 'start' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.17 12:00:00'
|
|
1486
|
+
* DATERANGESPLIT('1676563200, 1676735999', 1 , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
|
|
1487
|
+
* DATERANGESPLIT('1676563200, 1676735999', 'end' , 'YYYY.MM.DD hh:mm:ss') 得到 '2023.02.18 11:59:59'
|
|
1488
|
+
*
|
|
1489
|
+
* @example DATERANGESPLIT(date, 'YYYY-MM-DD')
|
|
1490
|
+
* @namespace 日期函数
|
|
1491
|
+
* @param {string} date 日期范围字符串
|
|
1492
|
+
* @param {string} key 取值标识,0或'start'表示获取开始时间,1或'end'表示获取结束时间
|
|
1493
|
+
* @param {string} format 日期格式,可选
|
|
1494
|
+
* @param {string} delimiter 分隔符,可选,默认为','
|
|
1495
|
+
*
|
|
1496
|
+
* @returns {string} 日期字符串
|
|
1497
|
+
*/
|
|
1498
|
+
Evaluator.prototype.fnDATERANGESPLIT = function (daterange, key, format, delimiter) {
|
|
1499
|
+
var _this = this;
|
|
1500
|
+
if (delimiter === void 0) { delimiter = ','; }
|
|
1501
|
+
if (!daterange || typeof daterange !== 'string') {
|
|
1502
|
+
return daterange;
|
|
1503
|
+
}
|
|
1504
|
+
var dateArr = daterange
|
|
1505
|
+
.split(delimiter)
|
|
1506
|
+
.map(function (item) {
|
|
1507
|
+
return item && format
|
|
1508
|
+
? moment__default["default"](_this.normalizeDate(item.trim())).format(format)
|
|
1509
|
+
: item.trim();
|
|
1510
|
+
});
|
|
1511
|
+
if ([0, '0', 'start'].includes(key)) {
|
|
1512
|
+
return dateArr[0];
|
|
1513
|
+
}
|
|
1514
|
+
if ([1, '1', 'end'].includes(key)) {
|
|
1515
|
+
return dateArr[1];
|
|
1516
|
+
}
|
|
1517
|
+
return dateArr;
|
|
1518
|
+
};
|
|
1401
1519
|
/**
|
|
1402
1520
|
* 返回日期的指定范围的开端
|
|
1403
1521
|
*
|
|
@@ -1405,12 +1523,12 @@ var Evaluator = /** @class */ (function () {
|
|
|
1405
1523
|
* @example STARTOF(date[unit = "day"])
|
|
1406
1524
|
* @param {date} date 日期对象
|
|
1407
1525
|
* @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
|
|
1526
|
+
* @param {string} format 日期格式,可选
|
|
1408
1527
|
* @returns {date} 新的日期对象
|
|
1409
1528
|
*/
|
|
1410
|
-
Evaluator.prototype.fnSTARTOF = function (date, unit) {
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
.toDate();
|
|
1529
|
+
Evaluator.prototype.fnSTARTOF = function (date, unit, format) {
|
|
1530
|
+
var md = moment__default["default"](this.normalizeDate(date)).startOf(unit || 'day');
|
|
1531
|
+
return format ? md.format(format) : md.toDate();
|
|
1414
1532
|
};
|
|
1415
1533
|
/**
|
|
1416
1534
|
* 返回日期的指定范围的末尾
|
|
@@ -1418,19 +1536,22 @@ var Evaluator = /** @class */ (function () {
|
|
|
1418
1536
|
* @example ENDOF(date[unit = "day"])
|
|
1419
1537
|
* @param {date} date 日期对象
|
|
1420
1538
|
* @param {string} unit 比如可以传入 'day'、'month'、'year' 或者 `week` 等等
|
|
1539
|
+
* @param {string} format 日期格式,可选
|
|
1421
1540
|
* @returns {date} 新的日期对象
|
|
1422
1541
|
*/
|
|
1423
|
-
Evaluator.prototype.fnENDOF = function (date, unit) {
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
.toDate();
|
|
1542
|
+
Evaluator.prototype.fnENDOF = function (date, unit, format) {
|
|
1543
|
+
var md = moment__default["default"](this.normalizeDate(date)).endOf(unit || 'day');
|
|
1544
|
+
return format ? md.format(format) : md.toDate();
|
|
1427
1545
|
};
|
|
1428
1546
|
Evaluator.prototype.normalizeDate = function (raw) {
|
|
1429
|
-
if (typeof raw === '
|
|
1430
|
-
return new Date(Number(raw));
|
|
1431
|
-
}
|
|
1432
|
-
if (typeof raw === 'string') {
|
|
1547
|
+
if (typeof raw === 'string' || typeof raw === 'number') {
|
|
1433
1548
|
var formats = ['', 'YYYY-MM-DD HH:mm:ss', 'X'];
|
|
1549
|
+
if (/^\d{10}((\.\d+)*)$/.test(raw.toString())) {
|
|
1550
|
+
formats = ['X', 'x', 'YYYY-MM-DD HH:mm:ss', ''];
|
|
1551
|
+
}
|
|
1552
|
+
else if (/^\d{13}((\.\d+)*)$/.test(raw.toString())) {
|
|
1553
|
+
formats = ['x', 'X', 'YYYY-MM-DD HH:mm:ss', ''];
|
|
1554
|
+
}
|
|
1434
1555
|
while (formats.length) {
|
|
1435
1556
|
var format = formats.shift();
|
|
1436
1557
|
var date = moment__default["default"](raw, format);
|
|
@@ -1441,6 +1562,12 @@ var Evaluator = /** @class */ (function () {
|
|
|
1441
1562
|
}
|
|
1442
1563
|
return raw;
|
|
1443
1564
|
};
|
|
1565
|
+
Evaluator.prototype.normalizeDateRange = function (raw) {
|
|
1566
|
+
var _this = this;
|
|
1567
|
+
return (Array.isArray(raw) ? raw : raw.split(',')).map(function (item) {
|
|
1568
|
+
return _this.normalizeDate(String(item).trim());
|
|
1569
|
+
});
|
|
1570
|
+
};
|
|
1444
1571
|
/**
|
|
1445
1572
|
* 返回日期的年份
|
|
1446
1573
|
* @namespace 日期函数
|
|
@@ -1627,6 +1754,25 @@ var Evaluator = /** @class */ (function () {
|
|
|
1627
1754
|
b = this.normalizeDate(b);
|
|
1628
1755
|
return moment__default["default"](a).isAfter(moment__default["default"](b), unit);
|
|
1629
1756
|
};
|
|
1757
|
+
/**
|
|
1758
|
+
* 判断日期是否在指定范围内
|
|
1759
|
+
*
|
|
1760
|
+
* 示例:BETWEENRANGE('2021/12/6', ['2021/12/5','2021/12/7'])
|
|
1761
|
+
*
|
|
1762
|
+
* @param {any} date 第一个日期
|
|
1763
|
+
* @param {any[]} daterange 日期范围
|
|
1764
|
+
* @param {string} unit 单位,默认是 'day', 即之比较到天
|
|
1765
|
+
* @param {string} inclusivity 包容性规则,默认为'[]'。[ 表示包含、( 表示排除,如果使用包容性参数,则必须传入两个指示符,如'()'表示左右范围都排除
|
|
1766
|
+
* @namespace 日期函数
|
|
1767
|
+
* @example BETWEENRANGE(date, [start, end])
|
|
1768
|
+
* @returns {boolean} 判断结果
|
|
1769
|
+
*/
|
|
1770
|
+
Evaluator.prototype.fnBETWEENRANGE = function (date, daterange, unit, inclusivity) {
|
|
1771
|
+
if (unit === void 0) { unit = 'day'; }
|
|
1772
|
+
if (inclusivity === void 0) { inclusivity = '[]'; }
|
|
1773
|
+
var range = this.normalizeDateRange(daterange);
|
|
1774
|
+
return moment__default["default"](this.normalizeDate(date)).isBetween(range[0], range[1], unit, inclusivity);
|
|
1775
|
+
};
|
|
1630
1776
|
/**
|
|
1631
1777
|
* 判断两个日期,是否第一个日期在第二个日期的前面或者相等
|
|
1632
1778
|
*
|
|
@@ -1707,6 +1853,114 @@ var Evaluator = /** @class */ (function () {
|
|
|
1707
1853
|
return _this.callAnonymousFunction(iterator, [item, index, arr]);
|
|
1708
1854
|
});
|
|
1709
1855
|
};
|
|
1856
|
+
/**
|
|
1857
|
+
* 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
|
|
1858
|
+
* 找出第二个箭头函数返回为 true 的成员的索引。
|
|
1859
|
+
*
|
|
1860
|
+
* 示例:
|
|
1861
|
+
*
|
|
1862
|
+
* ARRAYFINDINDEX([0, 2, false], item => item === 2) 得到 1
|
|
1863
|
+
*
|
|
1864
|
+
* @param {Array<any>} arr 数组
|
|
1865
|
+
* @param {Function<any>} iterator 箭头函数
|
|
1866
|
+
* @namespace 数组
|
|
1867
|
+
* @example ARRAYFINDINDEX(arr, item => item === 2)
|
|
1868
|
+
* @returns {number} 结果
|
|
1869
|
+
*/
|
|
1870
|
+
Evaluator.prototype.fnARRAYFINDINDEX = function (arr, iterator) {
|
|
1871
|
+
var _this = this;
|
|
1872
|
+
if (!iterator || iterator.type !== 'anonymous_function') {
|
|
1873
|
+
throw new Error('expected an anonymous function get ' + iterator);
|
|
1874
|
+
}
|
|
1875
|
+
return (Array.isArray(arr) ? arr : []).findIndex(function (item, index, arr) {
|
|
1876
|
+
return _this.callAnonymousFunction(iterator, [item, index, arr]);
|
|
1877
|
+
});
|
|
1878
|
+
};
|
|
1879
|
+
/**
|
|
1880
|
+
* 数据做数据查找,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
|
|
1881
|
+
* 找出第二个箭头函数返回为 true 的成员。
|
|
1882
|
+
*
|
|
1883
|
+
* 示例:
|
|
1884
|
+
*
|
|
1885
|
+
* ARRAYFIND([0, 2, false], item => item === 2) 得到 2
|
|
1886
|
+
*
|
|
1887
|
+
* @param {Array<any>} arr 数组
|
|
1888
|
+
* @param {Function<any>} iterator 箭头函数
|
|
1889
|
+
* @namespace 数组
|
|
1890
|
+
* @example ARRAYFIND(arr, item => item === 2)
|
|
1891
|
+
* @returns {any} 结果
|
|
1892
|
+
*/
|
|
1893
|
+
Evaluator.prototype.fnARRAYFIND = function (arr, iterator) {
|
|
1894
|
+
var _this = this;
|
|
1895
|
+
if (!iterator || iterator.type !== 'anonymous_function') {
|
|
1896
|
+
throw new Error('expected an anonymous function get ' + iterator);
|
|
1897
|
+
}
|
|
1898
|
+
return (Array.isArray(arr) ? arr : []).find(function (item, index, arr) {
|
|
1899
|
+
return _this.callAnonymousFunction(iterator, [item, index, arr]);
|
|
1900
|
+
});
|
|
1901
|
+
};
|
|
1902
|
+
/**
|
|
1903
|
+
* 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
|
|
1904
|
+
* 判断第二个箭头函数是否存在返回为 true 的成员。
|
|
1905
|
+
*
|
|
1906
|
+
* 示例:
|
|
1907
|
+
*
|
|
1908
|
+
* ARRAYSOME([0, 2, false], item => item === 2) 得到 true
|
|
1909
|
+
*
|
|
1910
|
+
* @param {Array<any>} arr 数组
|
|
1911
|
+
* @param {Function<any>} iterator 箭头函数
|
|
1912
|
+
* @namespace 数组
|
|
1913
|
+
* @example ARRAYSOME(arr, item => item === 2)
|
|
1914
|
+
* @returns {boolean} 结果
|
|
1915
|
+
*/
|
|
1916
|
+
Evaluator.prototype.fnARRAYSOME = function (arr, iterator) {
|
|
1917
|
+
var _this = this;
|
|
1918
|
+
if (!iterator || iterator.type !== 'anonymous_function') {
|
|
1919
|
+
throw new Error('expected an anonymous function get ' + iterator);
|
|
1920
|
+
}
|
|
1921
|
+
return (Array.isArray(arr) ? arr : []).some(function (item, index, arr) {
|
|
1922
|
+
return _this.callAnonymousFunction(iterator, [item, index, arr]);
|
|
1923
|
+
});
|
|
1924
|
+
};
|
|
1925
|
+
/**
|
|
1926
|
+
* 数据做数据遍历判断,需要搭配箭头函数一起使用,注意箭头函数只支持单表达式用法。
|
|
1927
|
+
* 判断第二个箭头函数返回是否都为 true。
|
|
1928
|
+
*
|
|
1929
|
+
* 示例:
|
|
1930
|
+
*
|
|
1931
|
+
* ARRAYEVERY([0, 2, false], item => item === 2) 得到 false
|
|
1932
|
+
*
|
|
1933
|
+
* @param {Array<any>} arr 数组
|
|
1934
|
+
* @param {Function<any>} iterator 箭头函数
|
|
1935
|
+
* @namespace 数组
|
|
1936
|
+
* @example ARRAYEVERY(arr, item => item === 2)
|
|
1937
|
+
* @returns {boolean} 结果
|
|
1938
|
+
*/
|
|
1939
|
+
Evaluator.prototype.fnARRAYEVERY = function (arr, iterator) {
|
|
1940
|
+
var _this = this;
|
|
1941
|
+
if (!iterator || iterator.type !== 'anonymous_function') {
|
|
1942
|
+
throw new Error('expected an anonymous function get ' + iterator);
|
|
1943
|
+
}
|
|
1944
|
+
return (Array.isArray(arr) ? arr : []).every(function (item, index, arr) {
|
|
1945
|
+
return _this.callAnonymousFunction(iterator, [item, index, arr]);
|
|
1946
|
+
});
|
|
1947
|
+
};
|
|
1948
|
+
/**
|
|
1949
|
+
* 判断数据中是否存在指定元素
|
|
1950
|
+
*
|
|
1951
|
+
* 示例:
|
|
1952
|
+
*
|
|
1953
|
+
* ARRAYINCLUDES([0, 2, false], 2) 得到 true
|
|
1954
|
+
*
|
|
1955
|
+
* @param {Array<any>} arr 数组
|
|
1956
|
+
* @param {any} item 元素
|
|
1957
|
+
* @namespace 数组
|
|
1958
|
+
* @example ARRAYINCLUDES(arr, 2)
|
|
1959
|
+
* @returns {any} 结果
|
|
1960
|
+
*/
|
|
1961
|
+
Evaluator.prototype.fnARRAYINCLUDES = function (arr, item) {
|
|
1962
|
+
return (Array.isArray(arr) ? arr : []).includes(item);
|
|
1963
|
+
};
|
|
1710
1964
|
/**
|
|
1711
1965
|
* 数组过滤掉 false、null、0 和 ""
|
|
1712
1966
|
*
|
|
@@ -1720,14 +1974,24 @@ var Evaluator = /** @class */ (function () {
|
|
|
1720
1974
|
* @returns {Array<any>} 结果
|
|
1721
1975
|
*/
|
|
1722
1976
|
Evaluator.prototype.fnCOMPACT = function (arr) {
|
|
1977
|
+
var e_4, _a;
|
|
1723
1978
|
if (Array.isArray(arr)) {
|
|
1724
1979
|
var resIndex = 0;
|
|
1725
1980
|
var result = [];
|
|
1726
|
-
|
|
1727
|
-
var
|
|
1728
|
-
|
|
1729
|
-
|
|
1981
|
+
try {
|
|
1982
|
+
for (var arr_1 = tslib.__values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {
|
|
1983
|
+
var item = arr_1_1.value;
|
|
1984
|
+
if (item) {
|
|
1985
|
+
result[resIndex++] = item;
|
|
1986
|
+
}
|
|
1987
|
+
}
|
|
1988
|
+
}
|
|
1989
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
1990
|
+
finally {
|
|
1991
|
+
try {
|
|
1992
|
+
if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);
|
|
1730
1993
|
}
|
|
1994
|
+
finally { if (e_4) throw e_4.error; }
|
|
1731
1995
|
}
|
|
1732
1996
|
return result;
|
|
1733
1997
|
}
|
|
@@ -1796,13 +2060,64 @@ var Evaluator = /** @class */ (function () {
|
|
|
1796
2060
|
Evaluator.prototype.fnUNIQ = function (arr, field) {
|
|
1797
2061
|
return field ? uniqBy__default["default"](arr, field) : uniqWith__default["default"](arr, isEqual__default["default"]);
|
|
1798
2062
|
};
|
|
2063
|
+
/**
|
|
2064
|
+
* 将JS对象转换成JSON字符串
|
|
2065
|
+
*
|
|
2066
|
+
* 示例:
|
|
2067
|
+
*
|
|
2068
|
+
* ENCODEJSON({name: 'amis'}) 得到 '{"name":"amis"}'
|
|
2069
|
+
*
|
|
2070
|
+
* @param {object} obj JS对象
|
|
2071
|
+
* @namespace 编码
|
|
2072
|
+
* @example ENCODEJSON({name: 'amis'})
|
|
2073
|
+
* @returns {string} 结果
|
|
2074
|
+
*/
|
|
2075
|
+
Evaluator.prototype.fnENCODEJSON = function (obj) {
|
|
2076
|
+
return JSON.stringify(obj);
|
|
2077
|
+
};
|
|
2078
|
+
/**
|
|
2079
|
+
* 解析JSON编码数据,返回JS对象
|
|
2080
|
+
*
|
|
2081
|
+
* 示例:
|
|
2082
|
+
*
|
|
2083
|
+
* DECODEJSON('{\"name\": "amis"}') 得到 {name: 'amis'}
|
|
2084
|
+
*
|
|
2085
|
+
* @param {string} str 字符串
|
|
2086
|
+
* @namespace 编码
|
|
2087
|
+
* @example DECODEJSON('{\"name\": "amis"}')
|
|
2088
|
+
* @returns {object} 结果
|
|
2089
|
+
*/
|
|
2090
|
+
Evaluator.prototype.fnDECODEJSON = function (str) {
|
|
2091
|
+
return JSON.parse(str);
|
|
2092
|
+
};
|
|
2093
|
+
/**
|
|
2094
|
+
* 根据对象或者数组的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代
|
|
2095
|
+
*
|
|
2096
|
+
* 示例:
|
|
2097
|
+
*
|
|
2098
|
+
* GET([0, 2, {name: 'amis', age: 18}], 1) 得到 2
|
|
2099
|
+
* GET([0, 2, {name: 'amis', age: 18}], '2.name') 得到 'amis'
|
|
2100
|
+
* GET({arr: [{name: 'amis', age: 18}]}, 'arr[0].name') 得到 'amis'
|
|
2101
|
+
* GET({arr: [{name: 'amis', age: 18}]}, 'arr.0.name') 得到 'amis'
|
|
2102
|
+
* GET({arr: [{name: 'amis', age: 18}]}, 'arr.1.name', 'not-found') 得到 'not-found'
|
|
2103
|
+
*
|
|
2104
|
+
* @param {any} obj 对象或数组
|
|
2105
|
+
* @param {string} path 路径
|
|
2106
|
+
* @param {any} defaultValue 如果解析不到则返回该值
|
|
2107
|
+
* @namespace 其他
|
|
2108
|
+
* @example GET(arr, 2)
|
|
2109
|
+
* @returns {any} 结果
|
|
2110
|
+
*/
|
|
2111
|
+
Evaluator.prototype.fnGET = function (obj, path, defaultValue) {
|
|
2112
|
+
return get__default["default"](obj, path, defaultValue);
|
|
2113
|
+
};
|
|
1799
2114
|
/**
|
|
1800
2115
|
* 判断是否为类型支持:string, number, array, date, plain-object。
|
|
1801
2116
|
*
|
|
1802
2117
|
* @param {string} 判断对象
|
|
1803
2118
|
* @namespace 其他
|
|
1804
2119
|
* @example ISTYPE([{a: '1'}, {b: '2'}, {a: '1'}], 'array')
|
|
1805
|
-
* @returns {boolean}
|
|
2120
|
+
* @returns {boolean} 结果
|
|
1806
2121
|
*/
|
|
1807
2122
|
Evaluator.prototype.fnISTYPE = function (target, type) {
|
|
1808
2123
|
switch (type) {
|
package/lib/filter.js
CHANGED
package/lib/function.js
CHANGED
package/lib/index.js
CHANGED
package/lib/lexer.js
CHANGED
package/lib/parser.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "amis-formula",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -113,5 +113,5 @@
|
|
|
113
113
|
"printBasicPrototype": false
|
|
114
114
|
}
|
|
115
115
|
},
|
|
116
|
-
"gitHead": "
|
|
116
|
+
"gitHead": "b92b6ca54eb2bbe0029d79b9d185ff2ee6d8d7d5"
|
|
117
117
|
}
|