util-helpers 4.13.0 → 4.14.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.
Files changed (175) hide show
  1. package/README.md +16 -6
  2. package/dist/util-helpers.js +935 -536
  3. package/dist/util-helpers.js.map +1 -1
  4. package/dist/util-helpers.min.js +1 -1
  5. package/dist/util-helpers.min.js.map +1 -1
  6. package/esm/blobToDataURL.js +2 -4
  7. package/esm/bytesToSize.js +13 -5
  8. package/esm/calculateCursorPosition.js +7 -12
  9. package/esm/dataURLToBlob.js +2 -5
  10. package/esm/divide.js +9 -13
  11. package/esm/findTreeNode.js +66 -0
  12. package/esm/findTreeSelect.js +80 -0
  13. package/esm/formatBankCard.js +11 -11
  14. package/esm/formatMobile.js +11 -14
  15. package/esm/formatMoney.js +24 -35
  16. package/esm/index.js +9 -4
  17. package/esm/isBankCard.js +9 -13
  18. package/esm/isBusinessLicense.js +19 -20
  19. package/esm/isChinese.js +6 -6
  20. package/esm/isEmail.js +3 -3
  21. package/esm/isHMCard.js +3 -3
  22. package/esm/isIPv4.js +3 -3
  23. package/esm/isIPv6.js +3 -3
  24. package/esm/isIdCard.js +9 -17
  25. package/esm/isMobile.js +3 -3
  26. package/esm/isPassport.js +3 -3
  27. package/esm/isPassword.js +6 -7
  28. package/esm/isPostcode.js +3 -3
  29. package/esm/isPromiseLike.js +0 -2
  30. package/esm/isQQ.js +3 -3
  31. package/esm/isSocialCreditCode.js +29 -28
  32. package/esm/isSwiftCode.js +1 -2
  33. package/esm/isTWCard.js +6 -7
  34. package/esm/isTelephone.js +3 -3
  35. package/esm/isUrl.js +7 -3
  36. package/esm/isVehicle.js +3 -3
  37. package/esm/isWX.js +3 -3
  38. package/esm/listToTree.js +122 -0
  39. package/esm/minus.js +7 -11
  40. package/esm/normalizeString.js +1 -3
  41. package/esm/numberToChinese.js +43 -52
  42. package/esm/padZero.js +1 -5
  43. package/esm/parseIdCard.js +27 -23
  44. package/esm/plus.js +7 -11
  45. package/esm/randomString.js +2 -8
  46. package/esm/replaceChar.js +11 -16
  47. package/esm/round.js +4 -5
  48. package/esm/safeDate.js +5 -7
  49. package/esm/setDataURLPrefix.js +0 -1
  50. package/esm/strlen.js +1 -5
  51. package/esm/times.js +7 -11
  52. package/esm/transformFieldNames.doc.js +34 -0
  53. package/esm/transformFieldNames.js +98 -0
  54. package/esm/transformFieldNames.type.js +19 -0
  55. package/esm/treeToList.js +88 -0
  56. package/esm/utils/config.js +3 -3
  57. package/esm/utils/constants.js +2 -2
  58. package/esm/utils/convertToString.js +1 -2
  59. package/esm/utils/devWarn.js +1 -3
  60. package/esm/utils/math.util.js +20 -29
  61. package/esm/utils/type/index.js +1 -1
  62. package/esm/utils/type/isArguments.js +1 -2
  63. package/esm/utils/type/isArray.js +1 -2
  64. package/esm/utils/type/isBoolean.js +1 -2
  65. package/esm/utils/type/isDate.js +1 -2
  66. package/esm/utils/type/isError.js +1 -2
  67. package/esm/utils/type/isFunction.js +1 -2
  68. package/esm/utils/type/isMap.js +1 -2
  69. package/esm/utils/type/isNaN.js +1 -2
  70. package/esm/utils/type/isNil.js +1 -2
  71. package/esm/utils/type/isNull.js +0 -1
  72. package/esm/utils/type/isNumber.js +1 -2
  73. package/esm/utils/type/isObject.js +0 -3
  74. package/esm/utils/type/isRegExp.js +1 -2
  75. package/esm/utils/type/isSet.js +1 -2
  76. package/esm/utils/type/isString.js +1 -2
  77. package/esm/utils/type/isSymbol.js +1 -2
  78. package/esm/utils/type/isType.js +1 -2
  79. package/esm/utils/type/isUndefined.js +0 -1
  80. package/esm/utils/type/isWeakMap.js +1 -2
  81. package/esm/utils/type/isWeakSet.js +1 -2
  82. package/esm/validatePassword.js +27 -50
  83. package/esm/waitTime.js +0 -1
  84. package/lib/blobToDataURL.js +2 -5
  85. package/lib/bytesToSize.js +13 -6
  86. package/lib/calculateCursorPosition.js +4 -13
  87. package/lib/dataURLToBlob.js +2 -6
  88. package/lib/divide.js +8 -22
  89. package/lib/findTreeNode.js +76 -0
  90. package/lib/findTreeSelect.js +86 -0
  91. package/lib/formatBankCard.js +10 -13
  92. package/lib/formatMobile.js +10 -16
  93. package/lib/formatMoney.js +25 -47
  94. package/lib/index.js +115 -126
  95. package/lib/isBankCard.js +7 -15
  96. package/lib/isBusinessLicense.js +17 -22
  97. package/lib/isChinese.js +6 -9
  98. package/lib/isEmail.js +1 -5
  99. package/lib/isHMCard.js +1 -5
  100. package/lib/isIPv4.js +1 -5
  101. package/lib/isIPv6.js +1 -5
  102. package/lib/isIdCard.js +7 -19
  103. package/lib/isMobile.js +1 -5
  104. package/lib/isPassport.js +1 -5
  105. package/lib/isPassword.js +5 -9
  106. package/lib/isPostcode.js +1 -5
  107. package/lib/isPromiseLike.js +1 -4
  108. package/lib/isQQ.js +1 -5
  109. package/lib/isSocialCreditCode.js +27 -30
  110. package/lib/isSwiftCode.js +1 -5
  111. package/lib/isTWCard.js +4 -9
  112. package/lib/isTelephone.js +1 -5
  113. package/lib/isUrl.js +5 -5
  114. package/lib/isVehicle.js +1 -5
  115. package/lib/isWX.js +1 -5
  116. package/lib/listToTree.js +131 -0
  117. package/lib/minus.js +6 -20
  118. package/lib/normalizeString.js +0 -6
  119. package/lib/numberToChinese.js +41 -55
  120. package/lib/padZero.js +0 -7
  121. package/lib/parseIdCard.js +30 -29
  122. package/lib/plus.js +6 -20
  123. package/lib/randomString.js +2 -8
  124. package/lib/replaceChar.js +10 -18
  125. package/lib/round.js +3 -9
  126. package/lib/safeDate.js +4 -13
  127. package/lib/setDataURLPrefix.js +0 -2
  128. package/lib/strlen.js +0 -7
  129. package/lib/times.js +6 -18
  130. package/lib/transformFieldNames.doc.js +41 -0
  131. package/lib/transformFieldNames.js +104 -0
  132. package/lib/transformFieldNames.type.js +5 -0
  133. package/lib/treeToList.js +96 -0
  134. package/lib/utils/config.js +8 -7
  135. package/lib/utils/constants.js +2 -2
  136. package/lib/utils/convertToString.js +0 -4
  137. package/lib/utils/devWarn.js +0 -4
  138. package/lib/utils/math.util.js +23 -45
  139. package/lib/utils/type/index.js +20 -39
  140. package/lib/utils/type/isArguments.js +0 -4
  141. package/lib/utils/type/isArray.js +0 -4
  142. package/lib/utils/type/isBoolean.js +0 -4
  143. package/lib/utils/type/isDate.js +0 -4
  144. package/lib/utils/type/isError.js +0 -4
  145. package/lib/utils/type/isFunction.js +0 -4
  146. package/lib/utils/type/isMap.js +0 -4
  147. package/lib/utils/type/isNaN.js +0 -4
  148. package/lib/utils/type/isNil.js +0 -5
  149. package/lib/utils/type/isNull.js +0 -2
  150. package/lib/utils/type/isNumber.js +0 -4
  151. package/lib/utils/type/isObject.js +1 -5
  152. package/lib/utils/type/isRegExp.js +0 -4
  153. package/lib/utils/type/isSet.js +0 -4
  154. package/lib/utils/type/isString.js +0 -4
  155. package/lib/utils/type/isSymbol.js +0 -4
  156. package/lib/utils/type/isType.js +1 -2
  157. package/lib/utils/type/isUndefined.js +0 -2
  158. package/lib/utils/type/isWeakMap.js +0 -4
  159. package/lib/utils/type/isWeakSet.js +0 -4
  160. package/lib/validatePassword.js +27 -53
  161. package/lib/waitTime.js +0 -2
  162. package/package.json +9 -7
  163. package/types/bytesToSize.d.ts +9 -1
  164. package/types/findTreeNode.d.ts +26 -0
  165. package/types/findTreeSelect.d.ts +26 -0
  166. package/types/formatBankCard.d.ts +3 -3
  167. package/types/formatMobile.d.ts +4 -4
  168. package/types/index.d.ts +5 -0
  169. package/types/isIdCard.d.ts +2 -0
  170. package/types/isUrl.d.ts +2 -0
  171. package/types/listToTree.d.ts +41 -0
  172. package/types/transformFieldNames.d.ts +34 -0
  173. package/types/transformFieldNames.type.d.ts +2 -0
  174. package/types/treeToList.d.ts +20 -0
  175. package/types/utils/config.d.ts +1 -2
@@ -3,6 +3,7 @@ var regNumber = /[\d]/;
3
3
  var regLowerCaseLetter = /[a-z]/;
4
4
  var regUpperCaseLetter = /[A-Z]/;
5
5
  var regAllNumberAndLetter = /[\d|a-z]/gi;
6
+
6
7
  /**
7
8
  * 是否包含数字
8
9
  *
@@ -10,10 +11,10 @@ var regAllNumberAndLetter = /[\d|a-z]/gi;
10
11
  * @param {string} val 检查的值
11
12
  * @returns {boolean} 是否包含数字
12
13
  */
13
-
14
14
  function hasNumber(val) {
15
15
  return regNumber.test(val);
16
16
  }
17
+
17
18
  /**
18
19
  * 是否包含小写字母
19
20
  *
@@ -21,11 +22,10 @@ function hasNumber(val) {
21
22
  * @param {string} val 检测的值
22
23
  * @returns {boolean} 是否包含小写字母
23
24
  */
24
-
25
-
26
25
  function hasLowerCaseLetter(val) {
27
26
  return regLowerCaseLetter.test(val);
28
27
  }
28
+
29
29
  /**
30
30
  * 是否包含大写字母
31
31
  *
@@ -33,11 +33,10 @@ function hasLowerCaseLetter(val) {
33
33
  * @param {string} val 检测的值
34
34
  * @returns {boolean} 是否包含大写字母
35
35
  */
36
-
37
-
38
36
  function hasUpperCaseLetter(val) {
39
37
  return regUpperCaseLetter.test(val);
40
38
  }
39
+
41
40
  /**
42
41
  * 是否为十六进制
43
42
  *
@@ -45,11 +44,10 @@ function hasUpperCaseLetter(val) {
45
44
  * @param {string} val 检测的值
46
45
  * @returns {boolean} 是否为十六进制
47
46
  */
48
-
49
-
50
47
  function hasHex(val) {
51
48
  return val.indexOf('\\x') > -1 || val.indexOf("\\u") > -1;
52
49
  }
50
+
53
51
  /**
54
52
  * 是否包含特殊字符
55
53
  *
@@ -58,35 +56,28 @@ function hasHex(val) {
58
56
  * @param {string} chars 特殊字符
59
57
  * @returns {boolean} 是否包含特殊字符
60
58
  */
61
-
62
-
63
59
  function hasSpecialCharacter(val, chars) {
64
60
  if (!chars || !val) {
65
61
  return false;
66
62
  }
67
-
68
63
  var specialChars = val.replace(regAllNumberAndLetter, '');
69
-
70
64
  if (!specialChars) {
71
65
  return false;
72
66
  }
73
-
74
67
  var regChars = hasHex(chars) ? new RegExp("[".concat(chars, "]")) : null;
75
-
76
68
  if (regChars) {
77
69
  return regChars.test(specialChars);
78
70
  }
79
-
80
71
  var ret = false;
81
72
  specialChars.split('').some(function (charItem) {
82
73
  if (chars.indexOf(charItem) > -1) {
83
74
  ret = true;
84
75
  }
85
-
86
76
  return ret;
87
77
  });
88
78
  return ret;
89
79
  }
80
+
90
81
  /**
91
82
  * 是否包含非法字符
92
83
  *
@@ -95,37 +86,30 @@ function hasSpecialCharacter(val, chars) {
95
86
  * @param {string} chars 特殊字符
96
87
  * @returns {boolean} 是否包含非法字符
97
88
  */
98
-
99
-
100
89
  function hasUnallowableCharacter(val, chars) {
101
90
  if (!val) {
102
91
  return false;
103
92
  }
104
-
105
93
  var specialChars = val.replace(regAllNumberAndLetter, '');
106
-
107
94
  if (!specialChars) {
108
95
  return false;
109
96
  } else if (!chars) {
110
97
  return true;
111
98
  }
112
-
113
99
  var regChars = hasHex(chars) ? new RegExp("[^".concat(chars, "]")) : null;
114
-
115
100
  if (regChars) {
116
101
  return regChars.test(specialChars);
117
102
  }
118
-
119
103
  var ret = false;
120
104
  specialChars.split('').some(function (charItem) {
121
105
  if (chars.indexOf(charItem) === -1) {
122
106
  ret = true;
123
107
  }
124
-
125
108
  return ret;
126
109
  });
127
110
  return ret;
128
111
  }
112
+
129
113
  /**
130
114
  * @typedef {Object} PasswordContaines - 验证密码的包含内容
131
115
  * @property {boolean} number - 包含数字
@@ -214,40 +198,36 @@ function hasUnallowableCharacter(val, chars) {
214
198
  * }
215
199
  * }
216
200
  */
217
-
218
-
219
201
  function validatePassword(value) {
220
202
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
221
203
  var _options$level = options.level,
222
- level = _options$level === void 0 ? 2 : _options$level,
223
- _options$ignoreCase = options.ignoreCase,
224
- ignoreCase = _options$ignoreCase === void 0 ? false : _options$ignoreCase,
225
- _options$special = options.special,
226
- special = _options$special === void 0 ? '\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E' : _options$special;
204
+ level = _options$level === void 0 ? 2 : _options$level,
205
+ _options$ignoreCase = options.ignoreCase,
206
+ ignoreCase = _options$ignoreCase === void 0 ? false : _options$ignoreCase,
207
+ _options$special = options.special,
208
+ special = _options$special === void 0 ? '\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E' : _options$special;
227
209
  var valStr = value;
228
-
229
210
  if (typeof value !== 'string') {
230
211
  devWarn("[validatePassword] value must be a string.");
231
212
  valStr = '';
232
213
  }
233
-
234
- var currentLevel = 0; // 包含数字
235
-
236
- var containesNumber = hasNumber(valStr); // 包含小写字母
237
-
238
- var containesLowerCaseLetter = hasLowerCaseLetter(valStr); // 包含大写字母
239
-
240
- var containesUpperCaseLetter = hasUpperCaseLetter(valStr); // 包含特殊字符
241
-
242
- var containesSpecialCharacter = hasSpecialCharacter(valStr, special); // 包含非法字符,即含有非数字字母特殊字符以外的其他字符
243
-
214
+ var currentLevel = 0;
215
+
216
+ // 包含数字
217
+ var containesNumber = hasNumber(valStr);
218
+ // 包含小写字母
219
+ var containesLowerCaseLetter = hasLowerCaseLetter(valStr);
220
+ // 包含大写字母
221
+ var containesUpperCaseLetter = hasUpperCaseLetter(valStr);
222
+ // 包含特殊字符
223
+ var containesSpecialCharacter = hasSpecialCharacter(valStr, special);
224
+ // 包含非法字符,即含有非数字字母特殊字符以外的其他字符
244
225
  var containesUnallowableCharacter = hasUnallowableCharacter(valStr, special);
245
-
246
226
  if (containesNumber) {
247
227
  currentLevel += 1;
248
- } // 不区分大小写
249
-
228
+ }
250
229
 
230
+ // 不区分大小写
251
231
  if (ignoreCase) {
252
232
  if (containesLowerCaseLetter || containesUpperCaseLetter) {
253
233
  currentLevel += 1;
@@ -257,17 +237,15 @@ function validatePassword(value) {
257
237
  if (containesLowerCaseLetter) {
258
238
  currentLevel += 1;
259
239
  }
260
-
261
240
  if (containesUpperCaseLetter) {
262
241
  currentLevel += 1;
263
242
  }
264
243
  }
265
-
266
244
  if (containesSpecialCharacter) {
267
245
  currentLevel += 1;
268
- } // 验证结果
269
-
246
+ }
270
247
 
248
+ // 验证结果
271
249
  var validated = currentLevel >= level && !containesUnallowableCharacter;
272
250
  return {
273
251
  validated: validated,
@@ -281,5 +259,4 @@ function validatePassword(value) {
281
259
  }
282
260
  };
283
261
  }
284
-
285
262
  export default validatePassword;
package/esm/waitTime.js CHANGED
@@ -24,5 +24,4 @@ function waitTime() {
24
24
  setTimeout(resolve, time);
25
25
  });
26
26
  }
27
-
28
27
  export default waitTime;
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  // file、blob文件如何预览图片?
9
8
  // 方法1:将file或者blob类型文件转成base64数据,再作为src赋值给img标签
10
9
  // 方法2:使用 window.URL.createObjectURL(blob) 为blob、file 创建一个指向该参数对象的URL
@@ -35,17 +34,15 @@ exports["default"] = void 0;
35
34
  function blobToDataURL(blob) {
36
35
  return new Promise(function (resolve, reject) {
37
36
  var reader = new FileReader();
38
- reader.readAsDataURL(blob); // @ts-ignore
39
-
37
+ reader.readAsDataURL(blob);
38
+ // @ts-ignore
40
39
  reader.onload = function () {
41
40
  return resolve(reader.result);
42
41
  };
43
-
44
42
  reader.onerror = function (error) {
45
43
  return reject(error);
46
44
  };
47
45
  });
48
46
  }
49
-
50
47
  var _default = blobToDataURL;
51
48
  exports["default"] = _default;
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  /**
9
8
  * 字节转换存储单位,保留2位小数点
10
9
  *
@@ -12,6 +11,8 @@ exports["default"] = void 0;
12
11
  * @alias module:Processor.bytesToSize
13
12
  * @since 3.8.0
14
13
  * @param {number} bytes 字节大小
14
+ * @param {Object} [options] 配置项
15
+ * @param {string} [options.spaceMark=' '] 间隔字符
15
16
  * @returns {string} 存储单位值
16
17
  * @example
17
18
  *
@@ -20,16 +21,22 @@ exports["default"] = void 0;
20
21
  * bytesToSize(3.213243*1024*1024); // 3.21 MB
21
22
  * bytesToSize(1024*1024*1024); // 1 GB
22
23
  *
24
+ * // 自定义间隔符号
25
+ * bytesToSize(0, { spaceMark: '' }); // 0B
26
+ * bytesToSize(1024, { spaceMark: '' }); // 1KB
27
+ *
23
28
  */
24
29
  function bytesToSize(bytes) {
30
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
31
+ var _options$spaceMark = options.spaceMark,
32
+ spaceMark = _options$spaceMark === void 0 ? ' ' : _options$spaceMark;
25
33
  var numBytes = typeof bytes !== 'number' ? Number(bytes) : bytes;
26
- if (numBytes === 0 || isNaN(numBytes)) return '0 B';
27
- var k = 1024; // 存储单位
28
-
34
+ if (numBytes === 0 || isNaN(numBytes)) return "0".concat(spaceMark, "B");
35
+ var k = 1024;
36
+ // 存储单位
29
37
  var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
30
38
  var i = Math.floor(Math.log(numBytes) / Math.log(k));
31
- return sizes[i] ? "".concat(Number((numBytes / Math.pow(k, i)).toFixed(2)), " ").concat(sizes[i]) : numBytes + '';
39
+ return sizes[i] ? "".concat(Number((numBytes / Math.pow(k, i)).toFixed(2))).concat(spaceMark).concat(sizes[i]) : numBytes + '';
32
40
  }
33
-
34
41
  var _default = bytesToSize;
35
42
  exports["default"] = _default;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _normalizeString = _interopRequireDefault(require("./normalizeString"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
-
12
9
  // 参考了: https://github.com/ant-design/ant-design-mobile/blob/v2/components/input-item/index.tsx#L240
13
10
 
14
11
  /**
@@ -34,23 +31,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
34
31
  function calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue) {
35
32
  var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
36
33
  var _options$placeholderC = options.placeholderChar,
37
- placeholderChar = _options$placeholderC === void 0 ? ' ' : _options$placeholderC,
38
- _options$maskReg = options.maskReg,
39
- maskReg = _options$maskReg === void 0 ? /\D/g : _options$maskReg,
40
- type = options.type;
34
+ placeholderChar = _options$placeholderC === void 0 ? ' ' : _options$placeholderC,
35
+ _options$maskReg = options.maskReg,
36
+ maskReg = _options$maskReg === void 0 ? /\D/g : _options$maskReg,
37
+ type = options.type;
41
38
  var realCtrlValue = (0, _normalizeString["default"])(prevCtrlValue);
42
39
  var realRawValue = (0, _normalizeString["default"])(rawValue);
43
40
  var placeholderChars = Array.isArray(placeholderChar) ? placeholderChar : [placeholderChar];
44
41
  var editLength = realRawValue.length - realCtrlValue.length;
45
42
  var isAddition = editLength > 0;
46
43
  var pos = prevPos;
47
-
48
44
  if (isAddition) {
49
45
  var additionStr = realRawValue.substring(pos - editLength, pos);
50
46
  var ctrlCharCount = additionStr.replace(maskReg, '').length;
51
47
  pos -= editLength - ctrlCharCount;
52
48
  var placeholderCharCount = 0;
53
-
54
49
  while (ctrlCharCount > 0) {
55
50
  if (placeholderChars.indexOf(ctrlValue.charAt(pos - ctrlCharCount + placeholderCharCount)) !== -1) {
56
51
  placeholderCharCount++;
@@ -58,16 +53,12 @@ function calculateCursorPosition(prevPos, prevCtrlValue, rawValue, ctrlValue) {
58
53
  ctrlCharCount--;
59
54
  }
60
55
  }
61
-
62
56
  pos += placeholderCharCount;
63
57
  }
64
-
65
58
  if (type === 'mobile' && (pos === 4 || pos === 9) || type === 'bankCard' && pos > 0 && pos % 5 === 0) {
66
59
  pos -= 1;
67
60
  }
68
-
69
61
  return pos;
70
62
  }
71
-
72
63
  var _default = calculateCursorPosition;
73
64
  exports["default"] = _default;
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  /**
9
8
  * 将 DataURL 转为 Blob 对象
10
9
  *
@@ -19,21 +18,18 @@ exports["default"] = void 0;
19
18
  * dataURLToBlob(dataurl); // Blob {size: 32, type: 'text/html'}
20
19
  */
21
20
  function dataURLToBlob(dataurl) {
22
- var arr = dataurl.split(','); // @ts-ignore
23
-
21
+ var arr = dataurl.split(',');
22
+ // @ts-ignore
24
23
  var mime = arr[0].match(/:(.*?);/)[1];
25
24
  var bstr = atob(arr[1]);
26
25
  var n = bstr.length;
27
26
  var u8arr = new Uint8Array(n);
28
-
29
27
  while (n--) {
30
28
  u8arr[n] = bstr.charCodeAt(n);
31
29
  }
32
-
33
30
  return new Blob([u8arr], {
34
31
  type: mime
35
32
  });
36
33
  }
37
-
38
34
  var _default = dataURLToBlob;
39
35
  exports["default"] = _default;
package/lib/divide.js CHANGED
@@ -4,25 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _math = require("./utils/math.util");
9
-
10
8
  var _times = _interopRequireDefault(require("./times"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
-
14
10
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
15
-
16
11
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
-
18
12
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
-
20
13
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
21
-
22
14
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
23
-
24
15
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
25
-
26
16
  /**
27
17
  * 精确除法,支持多个数相除,除数默认为 1 。
28
18
  *
@@ -47,31 +37,27 @@ function divide() {
47
37
  for (var _len = arguments.length, nums = new Array(_len), _key = 0; _key < _len; _key++) {
48
38
  nums[_key] = arguments[_key];
49
39
  }
50
-
51
40
  var num1 = nums[0],
52
- _nums$ = nums[1],
53
- num2 = _nums$ === void 0 ? 1 : _nums$,
54
- rest = nums.slice(2);
55
-
41
+ _nums$ = nums[1],
42
+ num2 = _nums$ === void 0 ? 1 : _nums$,
43
+ rest = nums.slice(2);
56
44
  if (rest.length > 0) {
57
45
  return divide.apply(void 0, [divide(num1, num2)].concat(_toConsumableArray(rest)));
58
46
  }
59
-
60
47
  num1 = (0, _math.transformEffectiveNumber)(num1);
61
- num2 = (0, _math.transformEffectiveNumber)(num2); // 兼容处理,如果参数包含无效数值时,返回 NaN
62
- // @ts-ignore
48
+ num2 = (0, _math.transformEffectiveNumber)(num2);
63
49
 
50
+ // 兼容处理,如果参数包含无效数值时,返回 NaN
51
+ // @ts-ignore
64
52
  if (isNaN(num1) || isNaN(num2)) {
65
53
  return Number.NaN;
66
54
  }
67
-
68
55
  var num1Changed = (0, _math.float2Fixed)(num1);
69
56
  var num2Changed = (0, _math.float2Fixed)(num2);
70
57
  (0, _math.checkBoundary)(num1Changed);
71
- (0, _math.checkBoundary)(num2Changed); // fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正
72
-
58
+ (0, _math.checkBoundary)(num2Changed);
59
+ // fix: 类似 10 ** -4 为 0.00009999999999999999,strip 修正
73
60
  return (0, _times["default"])(num1Changed / num2Changed, (0, _math.strip)(Math.pow(10, (0, _math.digitLength)(num2) - (0, _math.digitLength)(num1))));
74
61
  }
75
-
76
62
  var _default = divide;
77
63
  exports["default"] = _default;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
10
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
11
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
12
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
+ /**
15
+ * 查找树结构数据节点
16
+ *
17
+ * @static
18
+ * @alias module:Other.findTreeNode
19
+ * @since 4.14.0
20
+ * @template {any} T
21
+ * @template {(item: T) => boolean} F
22
+ * @param {T[]} tree 树结构数据
23
+ * @param {F} predicate 遍历每一项执行的函数,参数是当前遍历到的节点数据,如果返回 Truthy 将返回该节点
24
+ * @param {string} [childrenField='children'] 子级字段名
25
+ * @returns {T|undefined}
26
+ * @example
27
+ * const menus = [{ "id": "1", "name": "首页", "code": "trade", "pid": null }, { "id": "2", "name": "交易管理", "code": "trade", "pid": null, "children": [{ "id": "3", "name": "交易查询", "code": "trade-1", "pid": "2", "children": [{ "id": "4", "name": "交易查询-查询操作", "code": "trade-1-1", "pid": "3" }] }] }, { "id": "5", "name": "权限管理", "code": "authorization", "pid": null, "children": [{ "id": "6", "name": "角色管理", "code": "authorization-1", "pid": "5" }, { "id": "7", "name": "用户管理", "code": "authorization-2", "pid": "5" }] }];
28
+ *
29
+ * findTreeNode(menus, item=>item.id === '2');
30
+ * // {"id":"2","name":"交易管理","code":"trade","pid":null,"children":[{"id":"3","name":"交易查询","code":"trade-1","pid":"2","children":[{"id":"4","name":"交易查询-查询操作","code":"trade-1-1","pid":"3"}]}]}
31
+ *
32
+ * findTreeNode(menus, item=>item.id === '7');
33
+ * // {"id":"7","name":"用户管理","code":"authorization-2","pid":"5"}
34
+ *
35
+ * findTreeNode(menus, item=>item.id === 'not found');
36
+ * // undefined
37
+ */
38
+ function findTreeNode(tree, predicate) {
39
+ var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
40
+ var stack = [];
41
+
42
+ /** @type {T|undefined} */
43
+ var node;
44
+ var _iterator = _createForOfIteratorHelper(tree),
45
+ _step;
46
+ try {
47
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
48
+ var item = _step.value;
49
+ stack.push(item);
50
+ while (stack.length) {
51
+ /** @type {T} */
52
+ // @ts-ignore
53
+ var temp = stack.pop();
54
+ if (predicate(temp)) {
55
+ node = temp;
56
+ break;
57
+ }
58
+
59
+ /** @type {T[]} */
60
+ // @ts-ignore
61
+ var children = temp[childrenField] || [];
62
+ stack.push.apply(stack, _toConsumableArray(children));
63
+ }
64
+ if (node) {
65
+ break;
66
+ }
67
+ }
68
+ } catch (err) {
69
+ _iterator.e(err);
70
+ } finally {
71
+ _iterator.f();
72
+ }
73
+ return node;
74
+ }
75
+ var _default = findTreeNode;
76
+ exports["default"] = _default;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _type = require("./utils/type");
8
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
11
+ /**
12
+ * 内部实现
13
+ *
14
+ * @private
15
+ * @template {any} T
16
+ * @template {(item: T) => boolean} F
17
+ * @param {T[]} tree 树结构数据
18
+ * @param {F} predicate 遍历每一项执行的函数,参数是当前遍历到的节点数据,如果返回 Truthy 将返回包含该节点的所有父级节点
19
+ * @param {string} [childrenField='children'] 子级字段名
20
+ * @param {T[]} [path=[]] 当前遍历路径
21
+ * @returns {T[]}
22
+ */
23
+ function internalFindTreeSelect(tree, predicate) {
24
+ var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
25
+ var path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
26
+ if (!tree) {
27
+ return [];
28
+ }
29
+ var _iterator = _createForOfIteratorHelper(tree),
30
+ _step;
31
+ try {
32
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
33
+ var item = _step.value;
34
+ path.push(item);
35
+ if (predicate(item)) {
36
+ return path;
37
+ }
38
+
39
+ // @ts-ignore
40
+ if ((0, _type.isObject)(item) && Array.isArray(item[childrenField]) && item[childrenField].length > 0) {
41
+ // @ts-ignore
42
+ var findChildren = internalFindTreeSelect(item[childrenField], predicate, childrenField, path);
43
+ if (findChildren.length > 0) {
44
+ return findChildren;
45
+ }
46
+ }
47
+ path.pop();
48
+ }
49
+ } catch (err) {
50
+ _iterator.e(err);
51
+ } finally {
52
+ _iterator.f();
53
+ }
54
+ return [];
55
+ }
56
+
57
+ /**
58
+ * 查找包含当前节点的所有父级节点
59
+ *
60
+ * @static
61
+ * @alias module:Other.findTreeSelect
62
+ * @since 4.14.0
63
+ * @template {any} T
64
+ * @template {(item: T) => boolean} F
65
+ * @param {T[]} tree 树结构数据
66
+ * @param {F} predicate 遍历每一项执行的函数,参数是当前遍历到的节点数据,如果返回 Truthy 将返回包含该节点的所有父级节点
67
+ * @param {string} [childrenField='children'] 子级字段名
68
+ * @returns {T[]}
69
+ * @example
70
+ * const menus = [{ "id": "1", "name": "首页", "code": "trade", "pid": null }, { "id": "2", "name": "交易管理", "code": "trade", "pid": null, "children": [{ "id": "3", "name": "交易查询", "code": "trade-1", "pid": "2", "children": [{ "id": "4", "name": "交易查询-查询操作", "code": "trade-1-1", "pid": "3" }] }] }, { "id": "5", "name": "权限管理", "code": "authorization", "pid": null, "children": [{ "id": "6", "name": "角色管理", "code": "authorization-1", "pid": "5" }, { "id": "7", "name": "用户管理", "code": "authorization-2", "pid": "5" }] }];
71
+ *
72
+ * findTreeSelect(menus, item => item.id === '2');
73
+ * // [{"id":"2","name":"交易管理","code":"trade","pid":null,"children":[{"id":"3","name":"交易查询","code":"trade-1","pid":"2","children":[{"id":"4","name":"交易查询-查询操作","code":"trade-1-1","pid":"3"}]}]}]
74
+ *
75
+ * findTreeSelect(menus, item => item.id === '7');
76
+ * // [{"id":"5","name":"权限管理","code":"authorization","pid":null,"children":[{"id":"6","name":"角色管理","code":"authorization-1","pid":"5"},{"id":"7","name":"用户管理","code":"authorization-2","pid":"5"}]},{"id":"7","name":"用户管理","code":"authorization-2","pid":"5"}]
77
+ *
78
+ * findTreeSelect(menus, item => item.id === 'not found');
79
+ * // []
80
+ */
81
+ function findTreeSelect(tree, predicate) {
82
+ var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
83
+ return internalFindTreeSelect(tree, predicate, childrenField);
84
+ }
85
+ var _default = findTreeSelect;
86
+ exports["default"] = _default;
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _normalizeString = _interopRequireDefault(require("./normalizeString"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
11
-
12
9
  /**
13
10
  * 格式化银行卡号
14
11
  *
@@ -17,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
17
14
  * @since 1.1.0
18
15
  * @param {string} bankCardNo 要处理的字符串
19
16
  * @param {Object} [options] 配置项
20
- * @param {string} [options.char=" "] 间隔字符
17
+ * @param {string} [options.spaceMark=' '] 间隔字符
21
18
  * @param {number} [options.length=4] 间隔长度
22
19
  * @returns {string} 格式化的银行卡号
23
20
  * @example
@@ -32,24 +29,24 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
32
29
  * formatBankCard('6228********890'); // 6228 **** **** 890
33
30
  *
34
31
  * // 16位银行卡,"-"间隔
35
- * formatBankCard('6228480402564890', {char: '-'}); // 6228-4804-0256-4890
32
+ * formatBankCard('6228480402564890', {spaceMark: '-'}); // 6228-4804-0256-4890
36
33
  *
37
34
  */
38
35
  function formatBankCard() {
39
36
  var bankCardNo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
40
37
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
41
-
38
+ // @ts-ignore
39
+ // TODO 下个版本废弃 char
42
40
  var _options$char = options["char"],
43
- _char = _options$char === void 0 ? ' ' : _options$char,
44
- _options$length = options.length,
45
- length = _options$length === void 0 ? 4 : _options$length;
46
-
41
+ _char = _options$char === void 0 ? ' ' : _options$char,
42
+ _options$length = options.length,
43
+ length = _options$length === void 0 ? 4 : _options$length;
44
+ var realSpaceMark = 'spaceMark' in options ? options.spaceMark : _char;
47
45
  var reg = new RegExp("(.{".concat(length, "})"), 'g');
48
- var regChar = new RegExp("".concat(_char), 'g');
46
+ var regChar = new RegExp("".concat(realSpaceMark), 'g');
49
47
  var realValue = (0, _normalizeString["default"])(bankCardNo).replace(regChar, '');
50
- var str = realValue.replace(reg, "$1".concat(_char));
48
+ var str = realValue.replace(reg, "$1".concat(realSpaceMark));
51
49
  return realValue.length % length === 0 ? str.substring(0, str.length - 1) : str;
52
50
  }
53
-
54
51
  var _default = formatBankCard;
55
52
  exports["default"] = _default;