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/lib/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
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
- for (var _a = 0, nums_1 = nums; _a < nums_1.length; _a++) {
743
- var num = nums_1[_a];
744
- result += Math.pow(num - mean, 2);
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
- for (var _a = 0, nums_2 = nums; _a < nums_2.length; _a++) {
775
- var num = nums_2[_a];
776
- result += Math.abs(num - mean);
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
- for (var _a = 0, nums_3 = nums; _a < nums_3.length; _a++) {
805
- var num = nums_3[_a];
806
- den += 1 / num;
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 {date} date 日期对象
1467
+ * @param {any} date 日期对象、日期字符串、时间戳
1393
1468
  * @param {string} format 日期格式,默认为 "YYYY-MM-DD HH:mm:ss"
1394
1469
  *
1395
- * @returns {number} 日期字符串
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
- return moment__default["default"](date)
1412
- .startOf(unit || 'day')
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
- return moment__default["default"](date)
1425
- .endOf(unit || 'day')
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 === 'number' || !isNaN(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
- for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
1727
- var item = arr_1[_i];
1728
- if (item) {
1729
- result[resIndex++] = item;
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/function.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v2.7.2
2
+ * amis-formula v2.8.0
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amis-formula",
3
- "version": "2.7.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": "a05c704947fd3d86d0db381a20ddf7530a293f79"
116
+ "gitHead": "b92b6ca54eb2bbe0029d79b9d185ff2ee6d8d7d5"
117
117
  }