util-helpers 4.22.1 → 4.23.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/AsyncMemo.js CHANGED
@@ -9,7 +9,7 @@ var AsyncMemo = (function () {
9
9
  }
10
10
  AsyncMemo.prototype.run = function (asyncFn, key, options) {
11
11
  var _this = this;
12
- if (!isString(key)) {
12
+ if (!key || !isString(key)) {
13
13
  return asyncFn();
14
14
  }
15
15
  var opts = __assign({ persisted: true }, options);
package/esm/VERSION.js CHANGED
@@ -1,4 +1,4 @@
1
- var VERSION = "4.22.1";
1
+ var VERSION = "4.23.0";
2
2
  var VERSION$1 = VERSION;
3
3
 
4
4
  export { VERSION$1 as default };
package/esm/index.js CHANGED
@@ -35,6 +35,7 @@ export { default as normalizeString } from './normalizeString.js';
35
35
  export { default as safeDate } from './safeDate.js';
36
36
  export { default as formatMobile } from './formatMobile.js';
37
37
  export { default as padZero } from './padZero.js';
38
+ export { default as transformObjectValue } from './transformObjectValue.js';
38
39
  export { default as plus } from './plus.js';
39
40
  export { default as minus } from './minus.js';
40
41
  export { default as times } from './times.js';
@@ -65,6 +66,6 @@ export { setDisableWarning } from './utils/config.js';
65
66
  export { default as VERSION } from './VERSION.js';
66
67
  export { default as AsyncMemo } from './AsyncMemo.js';
67
68
 
68
- var version = "4.22.1";
69
+ var version = "4.23.0";
69
70
 
70
71
  export { version };
@@ -1,20 +1,34 @@
1
- import { toNumber } from 'ut2';
1
+ import { toNumber, randomInt } from 'ut2';
2
2
 
3
- var numberChars = '0123456789';
4
- var letterChars = 'abcdefghijklmnopqrstuvwxyz';
5
- var defaultChars = numberChars + letterChars + letterChars.toUpperCase();
6
- function internalRandomString(len, optionalChars, prefix) {
3
+ var letter = 'abcdefghijklmnopqrstuvwxyz';
4
+ var chars = {
5
+ number: '0123456789',
6
+ lower: letter,
7
+ upper: letter.toUpperCase()
8
+ };
9
+ var allChars = chars.number + chars.lower + chars.upper;
10
+ function internalRandomString(len, pool, prefix) {
7
11
  if (prefix === void 0) { prefix = ''; }
8
12
  while (len-- > 0) {
9
- var r = optionalChars[Math.floor(Math.random() * optionalChars.length)];
10
- return internalRandomString(len, optionalChars, prefix + r);
13
+ var r = pool[randomInt(0, pool.length - 1)];
14
+ return internalRandomString(len, pool, prefix + r);
11
15
  }
12
16
  return prefix;
13
17
  }
14
- function randomString(len, optionalChars) {
18
+ var randomString = function (len, pool) {
15
19
  if (len === void 0) { len = 0; }
16
- var realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;
17
- return internalRandomString(toNumber(len), realChars);
18
- }
20
+ var _pool;
21
+ if (typeof pool !== 'string') {
22
+ _pool = allChars;
23
+ }
24
+ else if (chars[pool]) {
25
+ _pool = chars[pool];
26
+ }
27
+ else {
28
+ _pool = pool;
29
+ }
30
+ return internalRandomString(toNumber(len), _pool);
31
+ };
32
+ var randomString$1 = randomString;
19
33
 
20
- export { randomString as default };
34
+ export { randomString$1 as default };
@@ -0,0 +1,25 @@
1
+ import { isPlainObject, forEach, isArray } from 'ut2';
2
+
3
+ var transformObjectValue = function (data, fn, deep) {
4
+ if (deep === void 0) { deep = true; }
5
+ if (isPlainObject(data)) {
6
+ var result_1 = {};
7
+ forEach(data, function (value, key) {
8
+ var newValue = deep && (isPlainObject(value) || isArray(value)) ? transformObjectValue(value, fn) : fn(value, key);
9
+ result_1[key] = newValue;
10
+ });
11
+ return result_1;
12
+ }
13
+ else if (isArray(data)) {
14
+ var result_2 = [];
15
+ forEach(data, function (value, index) {
16
+ var newValue = deep && (isPlainObject(value) || isArray(value)) ? transformObjectValue(value, fn) : fn(value, index);
17
+ result_2.push(newValue);
18
+ });
19
+ return result_2;
20
+ }
21
+ return data;
22
+ };
23
+ var transformObjectValue$1 = transformObjectValue;
24
+
25
+ export { transformObjectValue$1 as default };
@@ -1,18 +1,9 @@
1
1
  import devWarn from './utils/devWarn.js';
2
2
 
3
- var regNumber = /[\d]/;
3
+ var regNumber = /\d/;
4
4
  var regLowerCaseLetter = /[a-z]/;
5
5
  var regUpperCaseLetter = /[A-Z]/;
6
6
  var regAllNumberAndLetter = /[\d|a-z]/gi;
7
- function hasNumber(val) {
8
- return regNumber.test(val);
9
- }
10
- function hasLowerCaseLetter(val) {
11
- return regLowerCaseLetter.test(val);
12
- }
13
- function hasUpperCaseLetter(val) {
14
- return regUpperCaseLetter.test(val);
15
- }
16
7
  function hasHex(val) {
17
8
  return val.indexOf('\\x') > -1 || val.indexOf('\\u') > -1;
18
9
  }
@@ -70,9 +61,9 @@ function validatePassword(value, options) {
70
61
  valStr = '';
71
62
  }
72
63
  var currentLevel = 0;
73
- var containesNumber = hasNumber(valStr);
74
- var containesLowerCaseLetter = hasLowerCaseLetter(valStr);
75
- var containesUpperCaseLetter = hasUpperCaseLetter(valStr);
64
+ var containesNumber = regNumber.test(valStr);
65
+ var containesLowerCaseLetter = regLowerCaseLetter.test(valStr);
66
+ var containesUpperCaseLetter = regUpperCaseLetter.test(valStr);
76
67
  var containesSpecialCharacter = hasSpecialCharacter(valStr, special);
77
68
  var containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);
78
69
  if (containesNumber) {
package/lib/AsyncMemo.js CHANGED
@@ -11,7 +11,7 @@ var AsyncMemo = (function () {
11
11
  }
12
12
  AsyncMemo.prototype.run = function (asyncFn, key, options) {
13
13
  var _this = this;
14
- if (!ut2.isString(key)) {
14
+ if (!key || !ut2.isString(key)) {
15
15
  return asyncFn();
16
16
  }
17
17
  var opts = tslib.__assign({ persisted: true }, options);
package/lib/VERSION.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var VERSION = "4.22.1";
3
+ var VERSION = "4.23.0";
4
4
  var VERSION$1 = VERSION;
5
5
 
6
6
  module.exports = VERSION$1;
package/lib/index.js CHANGED
@@ -37,6 +37,7 @@ var normalizeString = require('./normalizeString.js');
37
37
  var safeDate = require('./safeDate.js');
38
38
  var formatMobile = require('./formatMobile.js');
39
39
  var padZero = require('./padZero.js');
40
+ var transformObjectValue = require('./transformObjectValue.js');
40
41
  var plus = require('./plus.js');
41
42
  var minus = require('./minus.js');
42
43
  var times = require('./times.js');
@@ -67,7 +68,7 @@ var config = require('./utils/config.js');
67
68
  var VERSION = require('./VERSION.js');
68
69
  var AsyncMemo = require('./AsyncMemo.js');
69
70
 
70
- exports.version = "4.22.1";
71
+ exports.version = "4.23.0";
71
72
 
72
73
  exports.isMobile = isMobile;
73
74
  exports.isTelephone = isTelephone;
@@ -106,6 +107,7 @@ exports.normalizeString = normalizeString;
106
107
  exports.safeDate = safeDate;
107
108
  exports.formatMobile = formatMobile;
108
109
  exports.padZero = padZero;
110
+ exports.transformObjectValue = transformObjectValue;
109
111
  exports.plus = plus;
110
112
  exports.minus = minus;
111
113
  exports.times = times;
@@ -2,21 +2,35 @@
2
2
 
3
3
  var ut2 = require('ut2');
4
4
 
5
- var numberChars = '0123456789';
6
- var letterChars = 'abcdefghijklmnopqrstuvwxyz';
7
- var defaultChars = numberChars + letterChars + letterChars.toUpperCase();
8
- function internalRandomString(len, optionalChars, prefix) {
5
+ var letter = 'abcdefghijklmnopqrstuvwxyz';
6
+ var chars = {
7
+ number: '0123456789',
8
+ lower: letter,
9
+ upper: letter.toUpperCase()
10
+ };
11
+ var allChars = chars.number + chars.lower + chars.upper;
12
+ function internalRandomString(len, pool, prefix) {
9
13
  if (prefix === void 0) { prefix = ''; }
10
14
  while (len-- > 0) {
11
- var r = optionalChars[Math.floor(Math.random() * optionalChars.length)];
12
- return internalRandomString(len, optionalChars, prefix + r);
15
+ var r = pool[ut2.randomInt(0, pool.length - 1)];
16
+ return internalRandomString(len, pool, prefix + r);
13
17
  }
14
18
  return prefix;
15
19
  }
16
- function randomString(len, optionalChars) {
20
+ var randomString = function (len, pool) {
17
21
  if (len === void 0) { len = 0; }
18
- var realChars = typeof optionalChars === 'string' && optionalChars ? optionalChars : defaultChars;
19
- return internalRandomString(ut2.toNumber(len), realChars);
20
- }
22
+ var _pool;
23
+ if (typeof pool !== 'string') {
24
+ _pool = allChars;
25
+ }
26
+ else if (chars[pool]) {
27
+ _pool = chars[pool];
28
+ }
29
+ else {
30
+ _pool = pool;
31
+ }
32
+ return internalRandomString(ut2.toNumber(len), _pool);
33
+ };
34
+ var randomString$1 = randomString;
21
35
 
22
- module.exports = randomString;
36
+ module.exports = randomString$1;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var ut2 = require('ut2');
4
+
5
+ var transformObjectValue = function (data, fn, deep) {
6
+ if (deep === void 0) { deep = true; }
7
+ if (ut2.isPlainObject(data)) {
8
+ var result_1 = {};
9
+ ut2.forEach(data, function (value, key) {
10
+ var newValue = deep && (ut2.isPlainObject(value) || ut2.isArray(value)) ? transformObjectValue(value, fn) : fn(value, key);
11
+ result_1[key] = newValue;
12
+ });
13
+ return result_1;
14
+ }
15
+ else if (ut2.isArray(data)) {
16
+ var result_2 = [];
17
+ ut2.forEach(data, function (value, index) {
18
+ var newValue = deep && (ut2.isPlainObject(value) || ut2.isArray(value)) ? transformObjectValue(value, fn) : fn(value, index);
19
+ result_2.push(newValue);
20
+ });
21
+ return result_2;
22
+ }
23
+ return data;
24
+ };
25
+ var transformObjectValue$1 = transformObjectValue;
26
+
27
+ module.exports = transformObjectValue$1;
@@ -2,19 +2,10 @@
2
2
 
3
3
  var devWarn = require('./utils/devWarn.js');
4
4
 
5
- var regNumber = /[\d]/;
5
+ var regNumber = /\d/;
6
6
  var regLowerCaseLetter = /[a-z]/;
7
7
  var regUpperCaseLetter = /[A-Z]/;
8
8
  var regAllNumberAndLetter = /[\d|a-z]/gi;
9
- function hasNumber(val) {
10
- return regNumber.test(val);
11
- }
12
- function hasLowerCaseLetter(val) {
13
- return regLowerCaseLetter.test(val);
14
- }
15
- function hasUpperCaseLetter(val) {
16
- return regUpperCaseLetter.test(val);
17
- }
18
9
  function hasHex(val) {
19
10
  return val.indexOf('\\x') > -1 || val.indexOf('\\u') > -1;
20
11
  }
@@ -72,9 +63,9 @@ function validatePassword(value, options) {
72
63
  valStr = '';
73
64
  }
74
65
  var currentLevel = 0;
75
- var containesNumber = hasNumber(valStr);
76
- var containesLowerCaseLetter = hasLowerCaseLetter(valStr);
77
- var containesUpperCaseLetter = hasUpperCaseLetter(valStr);
66
+ var containesNumber = regNumber.test(valStr);
67
+ var containesLowerCaseLetter = regLowerCaseLetter.test(valStr);
68
+ var containesUpperCaseLetter = regUpperCaseLetter.test(valStr);
78
69
  var containesSpecialCharacter = hasSpecialCharacter(valStr, special);
79
70
  var containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);
80
71
  if (containesNumber) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "util-helpers",
3
- "version": "4.22.1",
3
+ "version": "4.23.0",
4
4
  "description": "一个基于业务场景的工具方法库",
5
5
  "main": "lib/index.js",
6
6
  "module": "esm/index.js",
@@ -2,11 +2,25 @@ import { Cache, CacheOptions } from 'cache2';
2
2
  /**
3
3
  * 异步缓存
4
4
  *
5
+ * 特点:
6
+ * 1. 共享异步。同一个缓存键的异步,最多同时运行一个异步,异步结果共享。
7
+ * 2. 持久化数据。存在缓存结果,不再执行异步方法,直接返回该结果。
8
+ * 3. 每个实例都有独立的缓存空间。相互之间隔离,缓存灵活配置,更多配置请查阅 [`cache2`](https://www.npmjs.com/package/cache2)。
9
+ *
5
10
  * @class
6
11
  * @see {@link https://www.npmjs.com/package/cache2 | cache2}
7
12
  * @param {Object} [options] 缓存配置项,更多配置项可参考 [`cache2`](https://www.npmjs.com/package/cache2)
8
13
  * @param {number} [options.max] 最大缓存数量
9
14
  * @param {'replaced' | 'limited'} [options.maxStrategy] 缓存策略
15
+ * @example
16
+ *
17
+ * const asyncMemo = new AsyncMemo({ max: 20, maxStrategy: 'replaced' });
18
+ * asyncMemo.run(()=>download({ fssid: 'a' }), 'a');
19
+ * asyncMemo.run(()=>download({ fssid: 'b' }), 'b');
20
+ * asyncMemo.run(()=>download({ fssid: 'a' }), 'a'); // 如果有缓存结果直接返回,如果有异步执行中,不会重复触发异步,但共享异步结果。
21
+ *
22
+ * asyncMemo.run(()=>download({ fssid: 'a' }), 'a', { persisted: false }); // 不读取缓存结果,但是异步执行结果还是会缓存。
23
+ * asyncMemo.run(()=>download({ fssid: 'a' })); // 没有缓存键时,直接执行异步方法,不读取缓存结果,也不会缓存异步结果。
10
24
  */
11
25
  declare class AsyncMemo<DataType = any> {
12
26
  private promiseCache;
package/types/index.d.ts CHANGED
@@ -47,6 +47,7 @@ export { default as normalizeString } from './normalizeString';
47
47
  export { default as safeDate } from './safeDate';
48
48
  export { default as formatMobile } from './formatMobile';
49
49
  export { default as padZero } from './padZero';
50
+ export { default as transformObjectValue } from './transformObjectValue';
50
51
  /**
51
52
  * 数学计算,修正浮点数计算问题
52
53
  *
@@ -1,11 +1,15 @@
1
+ interface RandomString {
2
+ (len: number, poll: 'number' | 'lower' | 'upper'): string;
3
+ (len: number, poll?: string): string;
4
+ }
1
5
  /**
2
6
  * 生成随机字符串
3
7
  *
4
- * @static
8
+ * @function
5
9
  * @alias module:Other.randomString
6
10
  * @since 4.8.0
7
11
  * @param {number} [len=0] 长度
8
- * @param {string} [optionalChars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'] 允许的字符,默认为数字和大小写字母
12
+ * @param {'number' | 'lower' | 'upper' | string} [pool='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'] 字符池,默认为数字和大小写字母,支持number/lower/upper
9
13
  * @returns {string} 随机字符串
10
14
  * @example
11
15
  *
@@ -17,5 +21,5 @@
17
21
  * randomString(8, 'abcefg'); // bcgcfabg
18
22
  *
19
23
  */
20
- declare function randomString(len?: number, optionalChars?: string): string;
24
+ declare const randomString: RandomString;
21
25
  export default randomString;
@@ -0,0 +1,67 @@
1
+ type PropertyName = string | symbol;
2
+ interface TransformObjectValue {
3
+ <V>(arr: V[], fn: (value: V, index: number) => any, deep: false): any[];
4
+ <V>(arr: V[], fn: (value: any, index: number) => any, deep?: boolean): any[];
5
+ <T extends object>(obj: T, fn: (value: T[keyof T], key: keyof T) => any, deep: false): Record<PropertyName, any>;
6
+ <T extends object>(obj: T, fn: (value: T[keyof T] extends object ? any : T[keyof T], key: T[keyof T] extends object ? any : keyof T) => any, deep?: boolean): Record<PropertyName, any>;
7
+ <T>(obj: T, fn: (...args: any[]) => any): T;
8
+ }
9
+ /**
10
+ * 创建一个转换值的新对象或数组。
11
+ *
12
+ * 例如 antd Form 中的设置表单值时,如果值为空字符串可能需要转为 `undefined` ,才不影响表单的初始值。
13
+ *
14
+ * @static
15
+ * @alias module:Processor.transformObjectValue
16
+ * @since 4.23.0
17
+ * @param {Array | Object} data 要转换值的普通对象或数组
18
+ * @param {Function} fn 遍历普通对象或数组键值方法
19
+ * @param {boolean} [deep=true] 深度遍历,检测值为普通对象或数组时递归处理。默认 true 。
20
+ * @returns {Array | Object} 如果是普通对象或数组,返回一个新的对象或数组,否则返回自身
21
+ * @example
22
+ *
23
+ * const data1 = { foo: 'bar', baz: 42 }
24
+ * // 数字转为字符串
25
+ * transformObjectValue(data1, value => {
26
+ * if(typeof value === 'number'){
27
+ * return String(value)
28
+ * }
29
+ * return value;
30
+ * });
31
+ * // { foo: 'bar', baz: '42' }
32
+ *
33
+ * const data2 = [1,2,3,4];
34
+ * // 数字转为字符串
35
+ * transformObjectValue(data2, value=>{
36
+ * if(typeof value === 'number'){
37
+ * return String(value)
38
+ * }
39
+ * });
40
+ * // ['1', '2', '3', '4']
41
+ *
42
+ * // 嵌套普通对象或数组
43
+ * const data3 = { foo: 'bar', baz: 42, c: [1,2,3,4], d: '' }
44
+ * // 数字转为字符串,空字符串转为undefined
45
+ * transformObjectValue(data3, value=>{
46
+ * if(typeof value === 'number'){
47
+ * return String(value);
48
+ * }
49
+ * retrun value === '' ? undefined : value
50
+ * });
51
+ * // { foo: 'bar', baz: '42', ['1', '2', '3', '4'], d: undefined }
52
+ *
53
+ * // 数组的值不处理,对象值为数字转为字符串,空字符串转为undefined
54
+ * transformObjectValue(data3, (value, key)=>{
55
+ * if(typeof key === 'number'){
56
+ * return value;
57
+ * }
58
+ * if(typeof value === 'number'){
59
+ * return String(value);
60
+ * }
61
+ * retrun value === '' ? undefined : value
62
+ * });
63
+ * // { foo: 'bar', baz: '42', [1, 2, 3, 4], d: undefined }
64
+ *
65
+ */
66
+ declare const transformObjectValue: TransformObjectValue;
67
+ export default transformObjectValue;