amis-formula 3.4.2 → 3.4.3

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 CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
@@ -443,6 +443,28 @@ var doc = [
443
443
  },
444
444
  namespace: "数学函数"
445
445
  },
446
+ {
447
+ name: "POW",
448
+ description: "返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。",
449
+ example: "POW(base, exponent)",
450
+ params: [
451
+ {
452
+ type: "number",
453
+ name: "base",
454
+ description: "基数"
455
+ },
456
+ {
457
+ type: "number",
458
+ name: "exponent",
459
+ description: "指数"
460
+ }
461
+ ],
462
+ returns: {
463
+ type: "number",
464
+ description: "基数的指数次幂"
465
+ },
466
+ namespace: "数学函数"
467
+ },
446
468
  {
447
469
  name: "LEFT",
448
470
  description: "返回传入文本左侧的指定长度字符串。",
package/esm/doc.md CHANGED
@@ -268,6 +268,17 @@
268
268
 
269
269
  取数据最后一个。
270
270
 
271
+ ### POW
272
+
273
+ 用法:`POW(base, exponent)`
274
+
275
+ * `base:number` 基数
276
+ * `exponent:number` 指数
277
+
278
+ 返回:`number` 基数的指数次幂
279
+
280
+ 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
281
+
271
282
  ## 文本函数
272
283
 
273
284
  ### LEFT
package/esm/error.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/evalutor.d.ts CHANGED
@@ -137,6 +137,19 @@ export declare class Evaluator {
137
137
  value: any;
138
138
  raw: string;
139
139
  }): any;
140
+ /**
141
+ * 名字空间下获取变量,可能存在变量名中带-的特殊情况,目前无法直接获取 ${ns:xxx-xxx}
142
+ * 想借助 ${ns:&['xxx-xxx']} 用法来支持特殊字符。
143
+ *
144
+ * 而 cookie, localstorage, sessionstorage 都不支持获取全量数据,如 ${ns: &}
145
+ * 所以当存在上述用法时,将 & 作为一个占位
146
+ *
147
+ * 比如 cookie 中有一个 key 为 xxx-xxx 的值,那么可以通过 &['xxx-xxx'] 来获取。
148
+ * 而无法通过 ${cookie:xxx-xxx} 来获取。 因为这样会被认为是减操作
149
+ * @param ast
150
+ * @returns
151
+ */
152
+ convertHostGetterToVariable(ast: any): any;
140
153
  nsVariable(ast: {
141
154
  namespace: string;
142
155
  body: any;
@@ -451,6 +464,17 @@ export declare class Evaluator {
451
464
  * @returns {any} 最后一个值
452
465
  */
453
466
  fnLAST(arr: Array<any>): any;
467
+ /**
468
+ * 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
469
+ *
470
+ * @example POW(base, exponent)
471
+ * @param {number} base 基数
472
+ * @param {number} exponent 指数
473
+ * @namespace 数学函数
474
+ *
475
+ * @returns {number} 基数的指数次幂
476
+ */
477
+ fnPOW(base: number, exponent: number): number;
454
478
  normalizeText(raw: any): string;
455
479
  /**
456
480
  * 返回传入文本左侧的指定长度字符串。
package/esm/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
@@ -15,6 +15,7 @@ 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';
18
19
  import { FormulaEvalError } from './error.js';
19
20
 
20
21
  /**
@@ -292,19 +293,66 @@ var Evaluator = /** @class */ (function () {
292
293
  // todo 以后可以在这支持大数字。
293
294
  return ast.value;
294
295
  };
296
+ /**
297
+ * 名字空间下获取变量,可能存在变量名中带-的特殊情况,目前无法直接获取 ${ns:xxx-xxx}
298
+ * 想借助 ${ns:&['xxx-xxx']} 用法来支持特殊字符。
299
+ *
300
+ * 而 cookie, localstorage, sessionstorage 都不支持获取全量数据,如 ${ns: &}
301
+ * 所以当存在上述用法时,将 & 作为一个占位
302
+ *
303
+ * 比如 cookie 中有一个 key 为 xxx-xxx 的值,那么可以通过 &['xxx-xxx'] 来获取。
304
+ * 而无法通过 ${cookie:xxx-xxx} 来获取。 因为这样会被认为是减操作
305
+ * @param ast
306
+ * @returns
307
+ */
308
+ Evaluator.prototype.convertHostGetterToVariable = function (ast) {
309
+ var _a, _b;
310
+ if (ast.type !== 'getter') {
311
+ return ast;
312
+ }
313
+ var gettter = ast;
314
+ var keys = [];
315
+ while (((_a = gettter.host) === null || _a === void 0 ? void 0 : _a.type) === 'getter') {
316
+ keys.push('host');
317
+ gettter = gettter.host;
318
+ }
319
+ if (((_b = gettter.host) === null || _b === void 0 ? void 0 : _b.type) === 'variable' && gettter.host.name === '&') {
320
+ var ret = {
321
+ host: ast
322
+ };
323
+ var host = keys.reduce(function (host, key) {
324
+ host[key] = __assign({}, host[key]);
325
+ return host[key];
326
+ }, ret);
327
+ host.host = {
328
+ start: host.host.start,
329
+ end: host.host.end,
330
+ type: 'variable',
331
+ name: this.evalute(host.host.key)
332
+ };
333
+ return ret.host;
334
+ }
335
+ return ast;
336
+ };
295
337
  Evaluator.prototype.nsVariable = function (ast) {
338
+ var _this = this;
339
+ var body = ast.body;
296
340
  if (ast.namespace === 'window') {
297
341
  this.contextStack.push(function (name) {
298
342
  return name === '&' ? window : window[name];
299
343
  });
300
344
  }
301
345
  else if (ast.namespace === 'cookie') {
346
+ // 可能会利用 &['xxx-xxx'] 来取需要特殊变量
347
+ body = this.convertHostGetterToVariable(body);
302
348
  this.contextStack.push(function (name) {
303
349
  return getCookie(name);
304
350
  });
305
351
  }
306
352
  else if (ast.namespace === 'ls' || ast.namespace === 'ss') {
307
353
  var ns_1 = ast.namespace;
354
+ // 可能会利用 &['xxx-xxx'] 来取需要特殊变量
355
+ body = this.convertHostGetterToVariable(body);
308
356
  this.contextStack.push(function (name) {
309
357
  var raw = ns_1 === 'ss'
310
358
  ? sessionStorage.getItem(name)
@@ -324,8 +372,10 @@ var Evaluator = /** @class */ (function () {
324
372
  else {
325
373
  throw new Error('Unsupported namespace: ' + ast.namespace);
326
374
  }
327
- var result = this.evalute(ast.body);
328
- this.contextStack.pop();
375
+ var result = this.evalute(body);
376
+ (result === null || result === void 0 ? void 0 : result.then)
377
+ ? result.then(function () { return _this.contextStack.pop(); })
378
+ : this.contextStack.pop();
329
379
  return result;
330
380
  };
331
381
  Evaluator.prototype.variable = function (ast) {
@@ -918,6 +968,22 @@ var Evaluator = /** @class */ (function () {
918
968
  Evaluator.prototype.fnLAST = function (arr) {
919
969
  return arr.length ? arr[arr.length - 1] : null;
920
970
  };
971
+ /**
972
+ * 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
973
+ *
974
+ * @example POW(base, exponent)
975
+ * @param {number} base 基数
976
+ * @param {number} exponent 指数
977
+ * @namespace 数学函数
978
+ *
979
+ * @returns {number} 基数的指数次幂
980
+ */
981
+ Evaluator.prototype.fnPOW = function (base, exponent) {
982
+ if (!isNumber(base) || !isNumber(exponent)) {
983
+ return base;
984
+ }
985
+ return Math.pow(base, exponent);
986
+ };
921
987
  // 文本函数
922
988
  Evaluator.prototype.normalizeText = function (raw) {
923
989
  if (raw instanceof Date) {
@@ -1147,6 +1213,7 @@ var Evaluator = /** @class */ (function () {
1147
1213
  Evaluator.prototype.fnBEFORELAST = function (text, delimiter) {
1148
1214
  if (delimiter === void 0) { delimiter = '.'; }
1149
1215
  text = this.normalizeText(text);
1216
+ delimiter = this.normalizeText(delimiter);
1150
1217
  return text.split(delimiter).slice(0, -1).join(delimiter) || text + '';
1151
1218
  };
1152
1219
  /**
@@ -1226,6 +1293,7 @@ var Evaluator = /** @class */ (function () {
1226
1293
  * @returns {string} 判断结果
1227
1294
  */
1228
1295
  Evaluator.prototype.fnSTARTSWITH = function (text, search) {
1296
+ search = this.normalizeText(search);
1229
1297
  if (!search) {
1230
1298
  return false;
1231
1299
  }
@@ -1243,6 +1311,7 @@ var Evaluator = /** @class */ (function () {
1243
1311
  * @returns {string} 判断结果
1244
1312
  */
1245
1313
  Evaluator.prototype.fnENDSWITH = function (text, search) {
1314
+ search = this.normalizeText(search);
1246
1315
  if (!search) {
1247
1316
  return false;
1248
1317
  }
@@ -1260,6 +1329,7 @@ var Evaluator = /** @class */ (function () {
1260
1329
  * @returns {string} 判断结果
1261
1330
  */
1262
1331
  Evaluator.prototype.fnCONTAINS = function (text, search) {
1332
+ search = this.normalizeText(search);
1263
1333
  if (!search) {
1264
1334
  return false;
1265
1335
  }
@@ -1279,7 +1349,12 @@ var Evaluator = /** @class */ (function () {
1279
1349
  */
1280
1350
  Evaluator.prototype.fnREPLACE = function (text, search, replace) {
1281
1351
  text = this.normalizeText(text);
1352
+ search = this.normalizeText(search);
1353
+ replace = this.normalizeText(replace);
1282
1354
  var result = text;
1355
+ if (typeof replace === 'undefined' || !search) {
1356
+ return result;
1357
+ }
1283
1358
  while (true) {
1284
1359
  var idx = result.indexOf(search);
1285
1360
  if (!~idx) {
@@ -1305,10 +1380,11 @@ var Evaluator = /** @class */ (function () {
1305
1380
  */
1306
1381
  Evaluator.prototype.fnSEARCH = function (text, search, start) {
1307
1382
  if (start === void 0) { start = 0; }
1383
+ search = this.normalizeText(search);
1308
1384
  text = this.normalizeText(text);
1309
1385
  start = this.formatNumber(start);
1310
1386
  var idx = text.indexOf(search, start);
1311
- if (~idx) {
1387
+ if (~idx && search) {
1312
1388
  return idx;
1313
1389
  }
1314
1390
  return -1;
@@ -1326,6 +1402,8 @@ var Evaluator = /** @class */ (function () {
1326
1402
  */
1327
1403
  Evaluator.prototype.fnMID = function (text, from, len) {
1328
1404
  text = this.normalizeText(text);
1405
+ from = this.formatNumber(from);
1406
+ len = this.formatNumber(len);
1329
1407
  return text.substring(from, from + len);
1330
1408
  };
1331
1409
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/filter.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/function.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/esm/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/doc.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
@@ -447,6 +447,28 @@ var doc = [
447
447
  },
448
448
  namespace: "数学函数"
449
449
  },
450
+ {
451
+ name: "POW",
452
+ description: "返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。",
453
+ example: "POW(base, exponent)",
454
+ params: [
455
+ {
456
+ type: "number",
457
+ name: "base",
458
+ description: "基数"
459
+ },
460
+ {
461
+ type: "number",
462
+ name: "exponent",
463
+ description: "指数"
464
+ }
465
+ ],
466
+ returns: {
467
+ type: "number",
468
+ description: "基数的指数次幂"
469
+ },
470
+ namespace: "数学函数"
471
+ },
450
472
  {
451
473
  name: "LEFT",
452
474
  description: "返回传入文本左侧的指定长度字符串。",
package/lib/doc.md CHANGED
@@ -268,6 +268,17 @@
268
268
 
269
269
  取数据最后一个。
270
270
 
271
+ ### POW
272
+
273
+ 用法:`POW(base, exponent)`
274
+
275
+ * `base:number` 基数
276
+ * `exponent:number` 指数
277
+
278
+ 返回:`number` 基数的指数次幂
279
+
280
+ 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
281
+
271
282
  ## 文本函数
272
283
 
273
284
  ### LEFT
package/lib/error.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/evalutor.d.ts CHANGED
@@ -137,6 +137,19 @@ export declare class Evaluator {
137
137
  value: any;
138
138
  raw: string;
139
139
  }): any;
140
+ /**
141
+ * 名字空间下获取变量,可能存在变量名中带-的特殊情况,目前无法直接获取 ${ns:xxx-xxx}
142
+ * 想借助 ${ns:&['xxx-xxx']} 用法来支持特殊字符。
143
+ *
144
+ * 而 cookie, localstorage, sessionstorage 都不支持获取全量数据,如 ${ns: &}
145
+ * 所以当存在上述用法时,将 & 作为一个占位
146
+ *
147
+ * 比如 cookie 中有一个 key 为 xxx-xxx 的值,那么可以通过 &['xxx-xxx'] 来获取。
148
+ * 而无法通过 ${cookie:xxx-xxx} 来获取。 因为这样会被认为是减操作
149
+ * @param ast
150
+ * @returns
151
+ */
152
+ convertHostGetterToVariable(ast: any): any;
140
153
  nsVariable(ast: {
141
154
  namespace: string;
142
155
  body: any;
@@ -451,6 +464,17 @@ export declare class Evaluator {
451
464
  * @returns {any} 最后一个值
452
465
  */
453
466
  fnLAST(arr: Array<any>): any;
467
+ /**
468
+ * 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
469
+ *
470
+ * @example POW(base, exponent)
471
+ * @param {number} base 基数
472
+ * @param {number} exponent 指数
473
+ * @namespace 数学函数
474
+ *
475
+ * @returns {number} 基数的指数次幂
476
+ */
477
+ fnPOW(base: number, exponent: number): number;
454
478
  normalizeText(raw: any): string;
455
479
  /**
456
480
  * 返回传入文本左侧的指定长度字符串。
package/lib/evalutor.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
@@ -19,6 +19,7 @@ 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');
22
23
  var error = require('./error.js');
23
24
 
24
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -34,6 +35,7 @@ var uniqBy__default = /*#__PURE__*/_interopDefaultLegacy(uniqBy);
34
35
  var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
35
36
  var isPlainObject__default = /*#__PURE__*/_interopDefaultLegacy(isPlainObject);
36
37
  var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
38
+ var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);
37
39
 
38
40
  /**
39
41
  * @file 公式内置函数
@@ -310,19 +312,66 @@ var Evaluator = /** @class */ (function () {
310
312
  // todo 以后可以在这支持大数字。
311
313
  return ast.value;
312
314
  };
315
+ /**
316
+ * 名字空间下获取变量,可能存在变量名中带-的特殊情况,目前无法直接获取 ${ns:xxx-xxx}
317
+ * 想借助 ${ns:&['xxx-xxx']} 用法来支持特殊字符。
318
+ *
319
+ * 而 cookie, localstorage, sessionstorage 都不支持获取全量数据,如 ${ns: &}
320
+ * 所以当存在上述用法时,将 & 作为一个占位
321
+ *
322
+ * 比如 cookie 中有一个 key 为 xxx-xxx 的值,那么可以通过 &['xxx-xxx'] 来获取。
323
+ * 而无法通过 ${cookie:xxx-xxx} 来获取。 因为这样会被认为是减操作
324
+ * @param ast
325
+ * @returns
326
+ */
327
+ Evaluator.prototype.convertHostGetterToVariable = function (ast) {
328
+ var _a, _b;
329
+ if (ast.type !== 'getter') {
330
+ return ast;
331
+ }
332
+ var gettter = ast;
333
+ var keys = [];
334
+ while (((_a = gettter.host) === null || _a === void 0 ? void 0 : _a.type) === 'getter') {
335
+ keys.push('host');
336
+ gettter = gettter.host;
337
+ }
338
+ if (((_b = gettter.host) === null || _b === void 0 ? void 0 : _b.type) === 'variable' && gettter.host.name === '&') {
339
+ var ret = {
340
+ host: ast
341
+ };
342
+ var host = keys.reduce(function (host, key) {
343
+ host[key] = tslib.__assign({}, host[key]);
344
+ return host[key];
345
+ }, ret);
346
+ host.host = {
347
+ start: host.host.start,
348
+ end: host.host.end,
349
+ type: 'variable',
350
+ name: this.evalute(host.host.key)
351
+ };
352
+ return ret.host;
353
+ }
354
+ return ast;
355
+ };
313
356
  Evaluator.prototype.nsVariable = function (ast) {
357
+ var _this = this;
358
+ var body = ast.body;
314
359
  if (ast.namespace === 'window') {
315
360
  this.contextStack.push(function (name) {
316
361
  return name === '&' ? window : window[name];
317
362
  });
318
363
  }
319
364
  else if (ast.namespace === 'cookie') {
365
+ // 可能会利用 &['xxx-xxx'] 来取需要特殊变量
366
+ body = this.convertHostGetterToVariable(body);
320
367
  this.contextStack.push(function (name) {
321
368
  return getCookie(name);
322
369
  });
323
370
  }
324
371
  else if (ast.namespace === 'ls' || ast.namespace === 'ss') {
325
372
  var ns_1 = ast.namespace;
373
+ // 可能会利用 &['xxx-xxx'] 来取需要特殊变量
374
+ body = this.convertHostGetterToVariable(body);
326
375
  this.contextStack.push(function (name) {
327
376
  var raw = ns_1 === 'ss'
328
377
  ? sessionStorage.getItem(name)
@@ -342,8 +391,10 @@ var Evaluator = /** @class */ (function () {
342
391
  else {
343
392
  throw new Error('Unsupported namespace: ' + ast.namespace);
344
393
  }
345
- var result = this.evalute(ast.body);
346
- this.contextStack.pop();
394
+ var result = this.evalute(body);
395
+ (result === null || result === void 0 ? void 0 : result.then)
396
+ ? result.then(function () { return _this.contextStack.pop(); })
397
+ : this.contextStack.pop();
347
398
  return result;
348
399
  };
349
400
  Evaluator.prototype.variable = function (ast) {
@@ -936,6 +987,22 @@ var Evaluator = /** @class */ (function () {
936
987
  Evaluator.prototype.fnLAST = function (arr) {
937
988
  return arr.length ? arr[arr.length - 1] : null;
938
989
  };
990
+ /**
991
+ * 返回基数的指数次幂,参数base为基数,exponent为指数,如果参数值不合法则返回基数本身,计算结果不合法,则返回NaN。
992
+ *
993
+ * @example POW(base, exponent)
994
+ * @param {number} base 基数
995
+ * @param {number} exponent 指数
996
+ * @namespace 数学函数
997
+ *
998
+ * @returns {number} 基数的指数次幂
999
+ */
1000
+ Evaluator.prototype.fnPOW = function (base, exponent) {
1001
+ if (!isNumber__default["default"](base) || !isNumber__default["default"](exponent)) {
1002
+ return base;
1003
+ }
1004
+ return Math.pow(base, exponent);
1005
+ };
939
1006
  // 文本函数
940
1007
  Evaluator.prototype.normalizeText = function (raw) {
941
1008
  if (raw instanceof Date) {
@@ -1165,6 +1232,7 @@ var Evaluator = /** @class */ (function () {
1165
1232
  Evaluator.prototype.fnBEFORELAST = function (text, delimiter) {
1166
1233
  if (delimiter === void 0) { delimiter = '.'; }
1167
1234
  text = this.normalizeText(text);
1235
+ delimiter = this.normalizeText(delimiter);
1168
1236
  return text.split(delimiter).slice(0, -1).join(delimiter) || text + '';
1169
1237
  };
1170
1238
  /**
@@ -1244,6 +1312,7 @@ var Evaluator = /** @class */ (function () {
1244
1312
  * @returns {string} 判断结果
1245
1313
  */
1246
1314
  Evaluator.prototype.fnSTARTSWITH = function (text, search) {
1315
+ search = this.normalizeText(search);
1247
1316
  if (!search) {
1248
1317
  return false;
1249
1318
  }
@@ -1261,6 +1330,7 @@ var Evaluator = /** @class */ (function () {
1261
1330
  * @returns {string} 判断结果
1262
1331
  */
1263
1332
  Evaluator.prototype.fnENDSWITH = function (text, search) {
1333
+ search = this.normalizeText(search);
1264
1334
  if (!search) {
1265
1335
  return false;
1266
1336
  }
@@ -1278,6 +1348,7 @@ var Evaluator = /** @class */ (function () {
1278
1348
  * @returns {string} 判断结果
1279
1349
  */
1280
1350
  Evaluator.prototype.fnCONTAINS = function (text, search) {
1351
+ search = this.normalizeText(search);
1281
1352
  if (!search) {
1282
1353
  return false;
1283
1354
  }
@@ -1297,7 +1368,12 @@ var Evaluator = /** @class */ (function () {
1297
1368
  */
1298
1369
  Evaluator.prototype.fnREPLACE = function (text, search, replace) {
1299
1370
  text = this.normalizeText(text);
1371
+ search = this.normalizeText(search);
1372
+ replace = this.normalizeText(replace);
1300
1373
  var result = text;
1374
+ if (typeof replace === 'undefined' || !search) {
1375
+ return result;
1376
+ }
1301
1377
  while (true) {
1302
1378
  var idx = result.indexOf(search);
1303
1379
  if (!~idx) {
@@ -1323,10 +1399,11 @@ var Evaluator = /** @class */ (function () {
1323
1399
  */
1324
1400
  Evaluator.prototype.fnSEARCH = function (text, search, start) {
1325
1401
  if (start === void 0) { start = 0; }
1402
+ search = this.normalizeText(search);
1326
1403
  text = this.normalizeText(text);
1327
1404
  start = this.formatNumber(start);
1328
1405
  var idx = text.indexOf(search, start);
1329
- if (~idx) {
1406
+ if (~idx && search) {
1330
1407
  return idx;
1331
1408
  }
1332
1409
  return -1;
@@ -1344,6 +1421,8 @@ var Evaluator = /** @class */ (function () {
1344
1421
  */
1345
1422
  Evaluator.prototype.fnMID = function (text, from, len) {
1346
1423
  text = this.normalizeText(text);
1424
+ from = this.formatNumber(from);
1425
+ len = this.formatNumber(len);
1347
1426
  return text.substring(from, from + len);
1348
1427
  };
1349
1428
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/filter.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/function.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/lexer.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
3
3
  * Copyright 2021-2023 fex
4
4
  */
5
5
 
package/lib/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * amis-formula v3.4.2
2
+ * amis-formula v3.4.3
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": "3.4.2",
3
+ "version": "3.4.3",
4
4
  "description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",
@@ -118,5 +118,5 @@
118
118
  "printBasicPrototype": false
119
119
  }
120
120
  },
121
- "gitHead": "5d42aff860763acd557a228bc0d774c71d4e041c"
121
+ "gitHead": "a0973fc96e9308311a2002e76cfaf9ee39ad7118"
122
122
  }