sculp-js 1.8.0 → 1.8.2

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 (59) hide show
  1. package/lib/cjs/array.js +6 -4
  2. package/lib/cjs/async.js +1 -1
  3. package/lib/cjs/base64.js +1 -1
  4. package/lib/cjs/clipboard.js +1 -1
  5. package/lib/cjs/cookie.js +1 -1
  6. package/lib/cjs/date.js +1 -1
  7. package/lib/cjs/dom.js +1 -1
  8. package/lib/cjs/download.js +1 -1
  9. package/lib/cjs/easing.js +1 -1
  10. package/lib/cjs/file.js +1 -1
  11. package/lib/cjs/func.js +1 -1
  12. package/lib/cjs/index.js +1 -1
  13. package/lib/cjs/math.js +1 -1
  14. package/lib/cjs/number.js +1 -1
  15. package/lib/cjs/object.js +5 -5
  16. package/lib/cjs/path.js +3 -3
  17. package/lib/cjs/qs.js +1 -1
  18. package/lib/cjs/random.js +1 -1
  19. package/lib/cjs/string.js +1 -1
  20. package/lib/cjs/tooltip.js +1 -1
  21. package/lib/cjs/tree.js +12 -10
  22. package/lib/cjs/type.js +1 -1
  23. package/lib/cjs/unique.js +1 -1
  24. package/lib/cjs/url.js +1 -1
  25. package/lib/cjs/validator.js +1 -1
  26. package/lib/cjs/variable.js +1 -1
  27. package/lib/cjs/watermark.js +1 -1
  28. package/lib/cjs/we-decode.js +7 -6
  29. package/lib/es/array.js +6 -4
  30. package/lib/es/async.js +1 -1
  31. package/lib/es/base64.js +1 -1
  32. package/lib/es/clipboard.js +1 -1
  33. package/lib/es/cookie.js +1 -1
  34. package/lib/es/date.js +1 -1
  35. package/lib/es/dom.js +1 -1
  36. package/lib/es/download.js +1 -1
  37. package/lib/es/easing.js +1 -1
  38. package/lib/es/file.js +1 -1
  39. package/lib/es/func.js +1 -1
  40. package/lib/es/index.js +1 -1
  41. package/lib/es/math.js +1 -1
  42. package/lib/es/number.js +1 -1
  43. package/lib/es/object.js +5 -5
  44. package/lib/es/path.js +3 -3
  45. package/lib/es/qs.js +1 -1
  46. package/lib/es/random.js +1 -1
  47. package/lib/es/string.js +1 -1
  48. package/lib/es/tooltip.js +1 -1
  49. package/lib/es/tree.js +12 -10
  50. package/lib/es/type.js +1 -1
  51. package/lib/es/unique.js +1 -1
  52. package/lib/es/url.js +1 -1
  53. package/lib/es/validator.js +1 -1
  54. package/lib/es/variable.js +1 -1
  55. package/lib/es/watermark.js +1 -1
  56. package/lib/es/we-decode.js +7 -6
  57. package/lib/index.d.ts +3 -3
  58. package/lib/umd/index.js +28 -24
  59. package/package.json +1 -1
package/lib/cjs/array.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -26,7 +26,7 @@ function arrayEach(array, iterator, reverse = false) {
26
26
  }
27
27
  }
28
28
  else {
29
- for (let idx = 0; idx < array.length; idx++) {
29
+ for (let idx = 0, len = array.length; idx < len; idx++) {
30
30
  const val = array[idx];
31
31
  const re = iterator(val, idx, array);
32
32
  if (re === false)
@@ -51,7 +51,7 @@ async function arrayEachAsync(array, iterator, reverse = false) {
51
51
  }
52
52
  }
53
53
  else {
54
- for (let idx = 0; idx < array.length; idx++) {
54
+ for (let idx = 0, len = array.length; idx < len; idx++) {
55
55
  const val = array[idx];
56
56
  if ((await iterator(val, idx)) === false)
57
57
  break;
@@ -88,7 +88,9 @@ function arrayRemove(array, expect) {
88
88
  if (_expect(val, idx))
89
89
  indexes.push(idx);
90
90
  });
91
- indexes.forEach((val, idx) => array.splice(val - idx, 1));
91
+ arrayEach(indexes, (val, idx) => {
92
+ array.splice(val - idx, 1);
93
+ });
92
94
  return array;
93
95
  }
94
96
 
package/lib/cjs/async.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/base64.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/cookie.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/date.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/dom.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/easing.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/file.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/func.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/math.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/number.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/object.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -143,7 +143,7 @@ const merge = (map, source, target) => {
143
143
  */
144
144
  function objectAssign(source, ...targets) {
145
145
  const map = new Map();
146
- for (let i = 0; i < targets.length; i++) {
146
+ for (let i = 0, len = targets.length; i < len; i++) {
147
147
  const target = targets[i];
148
148
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
149
149
  // @ts-ignore
@@ -268,10 +268,10 @@ function cloneDeep(source, map = new WeakMap()) {
268
268
  }
269
269
  // 处理数组 (包含稀疏数组)
270
270
  if (Array.isArray(source)) {
271
- const copy = Array.from({ length: source.length });
271
+ const copy = new Array(source.length);
272
272
  map.set(source, copy);
273
273
  // 克隆所有有效索引
274
- for (let i = 0; i < source.length; i++) {
274
+ for (let i = 0, len = source.length; i < len; i++) {
275
275
  if (i in source) {
276
276
  // 保留空位
277
277
  copy[i] = cloneDeep(source[i], map);
@@ -424,7 +424,7 @@ function compareArrays(a, b, compared) {
424
424
  if (keysA.length !== keysB.length)
425
425
  return false;
426
426
  // 递归比较每个元素
427
- for (let i = 0; i < a.length; i++) {
427
+ for (let i = 0, len = a.length; i < len; i++) {
428
428
  if (!deepEqual(a[i], b[i], compared))
429
429
  return false;
430
430
  }
package/lib/cjs/path.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -12,7 +12,7 @@
12
12
  * @returns {string}
13
13
  */
14
14
  const pathNormalize = (path) => {
15
- const slicees = path
15
+ const slices = path
16
16
  .replace(/\\/g, '/')
17
17
  .replace(/\/{2,}/g, '/')
18
18
  .replace(/\.{3,}/g, '..')
@@ -37,7 +37,7 @@ const pathNormalize = (path) => {
37
37
  points.pop();
38
38
  }
39
39
  };
40
- slicees.forEach(slice => {
40
+ slices.forEach(slice => {
41
41
  const isCurrent = isCurrentSlice(slice);
42
42
  const isParent = isParentSlice(slice);
43
43
  // 未进入实际路径
package/lib/cjs/qs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/random.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/string.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/tree.js CHANGED
@@ -1,11 +1,12 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
7
  'use strict';
8
8
 
9
+ var array = require('./array.js');
9
10
  var object = require('./object.js');
10
11
  var type = require('./type.js');
11
12
 
@@ -48,7 +49,7 @@ function forEachDeep(tree, iterator, children = 'children', isReverse = false) {
48
49
  }
49
50
  }
50
51
  else {
51
- for (let i = 0; i < arr.length; i++) {
52
+ for (let i = 0, len = arr.length; i < len; i++) {
52
53
  if (isBreak) {
53
54
  break;
54
55
  }
@@ -174,7 +175,7 @@ function searchTreeById(tree, nodeId, config) {
174
175
  return getIds(toFlatArray(tree));
175
176
  }
176
177
  /**
177
- * 扁平化数组转换成树(效率高于buildTree)
178
+ * 扁平化数组转换成树
178
179
  * @param {any[]} list
179
180
  * @param {IFieldOptions} options
180
181
  * @returns {any[]}
@@ -183,10 +184,10 @@ function formatTree(list, options = defaultFieldOptions) {
183
184
  const { keyField, childField, pidField } = options;
184
185
  const treeArr = [];
185
186
  const sourceMap = {};
186
- list.forEach(item => {
187
+ array.arrayEach(list, item => {
187
188
  sourceMap[item[keyField]] = item;
188
189
  });
189
- list.forEach(item => {
190
+ array.arrayEach(list, item => {
190
191
  const parent = sourceMap[item[pidField]];
191
192
  if (parent) {
192
193
  (parent[childField] || (parent[childField] = [])).push(item);
@@ -205,7 +206,8 @@ function formatTree(list, options = defaultFieldOptions) {
205
206
  */
206
207
  function flatTree(treeList, options = defaultFieldOptions) {
207
208
  const { childField, keyField, pidField } = options;
208
- return treeList.reduce((res, node) => {
209
+ let res = [];
210
+ array.arrayEach(treeList, node => {
209
211
  const item = {
210
212
  ...node,
211
213
  [childField]: [] // 清空子级
@@ -219,8 +221,8 @@ function flatTree(treeList, options = defaultFieldOptions) {
219
221
  }));
220
222
  res = res.concat(flatTree(children, options));
221
223
  }
222
- return res;
223
- }, []);
224
+ });
225
+ return res;
224
226
  }
225
227
  /**
226
228
  * 模糊搜索函数,返回包含搜索字符的节点及其祖先节点, 适用于树型组件的字符过滤功能
@@ -242,7 +244,7 @@ function fuzzySearchTree(nodes, filterCondition, options = defaultSearchTreeOpti
242
244
  return nodes;
243
245
  }
244
246
  const result = [];
245
- for (const node of nodes) {
247
+ array.arrayEach(nodes, node => {
246
248
  // 递归检查子节点是否匹配
247
249
  const matchedChildren = node[options.childField] && node[options.childField].length > 0
248
250
  ? fuzzySearchTree(node[options.childField] || [], filterCondition, options)
@@ -282,7 +284,7 @@ function fuzzySearchTree(nodes, filterCondition, options = defaultSearchTreeOpti
282
284
  });
283
285
  }
284
286
  }
285
- }
287
+ });
286
288
  return result;
287
289
  }
288
290
 
package/lib/cjs/type.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/unique.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/cjs/url.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -10,7 +10,7 @@ const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
10
10
  // eslint-disable-next-line
11
11
  const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
12
12
  /**
13
- * 字符串编码成Base64 (适用于任何环境,包括小程序)
13
+ * 字符串编码成Base64, 平替浏览器的btoa, 不包含中文的处理 (适用于任何环境,包括小程序)
14
14
  * @param {string} string
15
15
  * @returns {string}
16
16
  */
@@ -18,8 +18,9 @@ function weBtoa(string) {
18
18
  // 同window.btoa: 字符串编码成Base64
19
19
  string = String(string);
20
20
  let bitmap, a, b, c, result = '', i = 0;
21
- const rest = string.length % 3;
22
- for (; i < string.length;) {
21
+ const strLen = string.length;
22
+ const rest = strLen % 3;
23
+ for (; i < strLen;) {
23
24
  if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string.charCodeAt(i++)) > 255)
24
25
  throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
25
26
  bitmap = (a << 16) | (b << 8) | c;
@@ -32,7 +33,7 @@ function weBtoa(string) {
32
33
  return rest ? result.slice(0, rest - 3) + '==='.substring(rest) : result;
33
34
  }
34
35
  /**
35
- * Base64解码为原始字符串(适用于任何环境,包括小程序)
36
+ * Base64解码为原始字符串,平替浏览器的atob, 不包含中文的处理(适用于任何环境,包括小程序)
36
37
  * @param {string} string
37
38
  * @returns {string}
38
39
  */
@@ -43,7 +44,7 @@ function weAtob(string) {
43
44
  throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
44
45
  string += '=='.slice(2 - (string.length & 3));
45
46
  let bitmap, result = '', r1, r2, i = 0;
46
- for (; i < string.length;) {
47
+ for (const strLen = string.length; i < strLen;) {
47
48
  bitmap =
48
49
  (b64.indexOf(string.charAt(i++)) << 18) |
49
50
  (b64.indexOf(string.charAt(i++)) << 12) |
package/lib/es/array.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -24,7 +24,7 @@ function arrayEach(array, iterator, reverse = false) {
24
24
  }
25
25
  }
26
26
  else {
27
- for (let idx = 0; idx < array.length; idx++) {
27
+ for (let idx = 0, len = array.length; idx < len; idx++) {
28
28
  const val = array[idx];
29
29
  const re = iterator(val, idx, array);
30
30
  if (re === false)
@@ -49,7 +49,7 @@ async function arrayEachAsync(array, iterator, reverse = false) {
49
49
  }
50
50
  }
51
51
  else {
52
- for (let idx = 0; idx < array.length; idx++) {
52
+ for (let idx = 0, len = array.length; idx < len; idx++) {
53
53
  const val = array[idx];
54
54
  if ((await iterator(val, idx)) === false)
55
55
  break;
@@ -86,7 +86,9 @@ function arrayRemove(array, expect) {
86
86
  if (_expect(val, idx))
87
87
  indexes.push(idx);
88
88
  });
89
- indexes.forEach((val, idx) => array.splice(val - idx, 1));
89
+ arrayEach(indexes, (val, idx) => {
90
+ array.splice(val - idx, 1);
91
+ });
90
92
  return array;
91
93
  }
92
94
 
package/lib/es/async.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/base64.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/cookie.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/date.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/dom.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/easing.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/file.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/func.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/math.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/number.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/object.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -141,7 +141,7 @@ const merge = (map, source, target) => {
141
141
  */
142
142
  function objectAssign(source, ...targets) {
143
143
  const map = new Map();
144
- for (let i = 0; i < targets.length; i++) {
144
+ for (let i = 0, len = targets.length; i < len; i++) {
145
145
  const target = targets[i];
146
146
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
147
147
  // @ts-ignore
@@ -266,10 +266,10 @@ function cloneDeep(source, map = new WeakMap()) {
266
266
  }
267
267
  // 处理数组 (包含稀疏数组)
268
268
  if (Array.isArray(source)) {
269
- const copy = Array.from({ length: source.length });
269
+ const copy = new Array(source.length);
270
270
  map.set(source, copy);
271
271
  // 克隆所有有效索引
272
- for (let i = 0; i < source.length; i++) {
272
+ for (let i = 0, len = source.length; i < len; i++) {
273
273
  if (i in source) {
274
274
  // 保留空位
275
275
  copy[i] = cloneDeep(source[i], map);
@@ -422,7 +422,7 @@ function compareArrays(a, b, compared) {
422
422
  if (keysA.length !== keysB.length)
423
423
  return false;
424
424
  // 递归比较每个元素
425
- for (let i = 0; i < a.length; i++) {
425
+ for (let i = 0, len = a.length; i < len; i++) {
426
426
  if (!deepEqual(a[i], b[i], compared))
427
427
  return false;
428
428
  }
package/lib/es/path.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -10,7 +10,7 @@
10
10
  * @returns {string}
11
11
  */
12
12
  const pathNormalize = (path) => {
13
- const slicees = path
13
+ const slices = path
14
14
  .replace(/\\/g, '/')
15
15
  .replace(/\/{2,}/g, '/')
16
16
  .replace(/\.{3,}/g, '..')
@@ -35,7 +35,7 @@ const pathNormalize = (path) => {
35
35
  points.pop();
36
36
  }
37
37
  };
38
- slicees.forEach(slice => {
38
+ slices.forEach(slice => {
39
39
  const isCurrent = isCurrentSlice(slice);
40
40
  const isParent = isParentSlice(slice);
41
41
  // 未进入实际路径
package/lib/es/qs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/random.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/string.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/tooltip.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/tree.js CHANGED
@@ -1,9 +1,10 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
+ import { arrayEach } from './array.js';
7
8
  import { objectOmit } from './object.js';
8
9
  import { objectHas, isEmpty } from './type.js';
9
10
 
@@ -46,7 +47,7 @@ function forEachDeep(tree, iterator, children = 'children', isReverse = false) {
46
47
  }
47
48
  }
48
49
  else {
49
- for (let i = 0; i < arr.length; i++) {
50
+ for (let i = 0, len = arr.length; i < len; i++) {
50
51
  if (isBreak) {
51
52
  break;
52
53
  }
@@ -172,7 +173,7 @@ function searchTreeById(tree, nodeId, config) {
172
173
  return getIds(toFlatArray(tree));
173
174
  }
174
175
  /**
175
- * 扁平化数组转换成树(效率高于buildTree)
176
+ * 扁平化数组转换成树
176
177
  * @param {any[]} list
177
178
  * @param {IFieldOptions} options
178
179
  * @returns {any[]}
@@ -181,10 +182,10 @@ function formatTree(list, options = defaultFieldOptions) {
181
182
  const { keyField, childField, pidField } = options;
182
183
  const treeArr = [];
183
184
  const sourceMap = {};
184
- list.forEach(item => {
185
+ arrayEach(list, item => {
185
186
  sourceMap[item[keyField]] = item;
186
187
  });
187
- list.forEach(item => {
188
+ arrayEach(list, item => {
188
189
  const parent = sourceMap[item[pidField]];
189
190
  if (parent) {
190
191
  (parent[childField] || (parent[childField] = [])).push(item);
@@ -203,7 +204,8 @@ function formatTree(list, options = defaultFieldOptions) {
203
204
  */
204
205
  function flatTree(treeList, options = defaultFieldOptions) {
205
206
  const { childField, keyField, pidField } = options;
206
- return treeList.reduce((res, node) => {
207
+ let res = [];
208
+ arrayEach(treeList, node => {
207
209
  const item = {
208
210
  ...node,
209
211
  [childField]: [] // 清空子级
@@ -217,8 +219,8 @@ function flatTree(treeList, options = defaultFieldOptions) {
217
219
  }));
218
220
  res = res.concat(flatTree(children, options));
219
221
  }
220
- return res;
221
- }, []);
222
+ });
223
+ return res;
222
224
  }
223
225
  /**
224
226
  * 模糊搜索函数,返回包含搜索字符的节点及其祖先节点, 适用于树型组件的字符过滤功能
@@ -240,7 +242,7 @@ function fuzzySearchTree(nodes, filterCondition, options = defaultSearchTreeOpti
240
242
  return nodes;
241
243
  }
242
244
  const result = [];
243
- for (const node of nodes) {
245
+ arrayEach(nodes, node => {
244
246
  // 递归检查子节点是否匹配
245
247
  const matchedChildren = node[options.childField] && node[options.childField].length > 0
246
248
  ? fuzzySearchTree(node[options.childField] || [], filterCondition, options)
@@ -280,7 +282,7 @@ function fuzzySearchTree(nodes, filterCondition, options = defaultSearchTreeOpti
280
282
  });
281
283
  }
282
284
  }
283
- }
285
+ });
284
286
  return result;
285
287
  }
286
288
 
package/lib/es/type.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/unique.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
package/lib/es/url.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -8,7 +8,7 @@ const b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
8
8
  // eslint-disable-next-line
9
9
  const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
10
10
  /**
11
- * 字符串编码成Base64 (适用于任何环境,包括小程序)
11
+ * 字符串编码成Base64, 平替浏览器的btoa, 不包含中文的处理 (适用于任何环境,包括小程序)
12
12
  * @param {string} string
13
13
  * @returns {string}
14
14
  */
@@ -16,8 +16,9 @@ function weBtoa(string) {
16
16
  // 同window.btoa: 字符串编码成Base64
17
17
  string = String(string);
18
18
  let bitmap, a, b, c, result = '', i = 0;
19
- const rest = string.length % 3;
20
- for (; i < string.length;) {
19
+ const strLen = string.length;
20
+ const rest = strLen % 3;
21
+ for (; i < strLen;) {
21
22
  if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string.charCodeAt(i++)) > 255)
22
23
  throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
23
24
  bitmap = (a << 16) | (b << 8) | c;
@@ -30,7 +31,7 @@ function weBtoa(string) {
30
31
  return rest ? result.slice(0, rest - 3) + '==='.substring(rest) : result;
31
32
  }
32
33
  /**
33
- * Base64解码为原始字符串(适用于任何环境,包括小程序)
34
+ * Base64解码为原始字符串,平替浏览器的atob, 不包含中文的处理(适用于任何环境,包括小程序)
34
35
  * @param {string} string
35
36
  * @returns {string}
36
37
  */
@@ -41,7 +42,7 @@ function weAtob(string) {
41
42
  throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
42
43
  string += '=='.slice(2 - (string.length & 3));
43
44
  let bitmap, result = '', r1, r2, i = 0;
44
- for (; i < string.length;) {
45
+ for (const strLen = string.length; i < strLen;) {
45
46
  bitmap =
46
47
  (b64.indexOf(string.charAt(i++)) << 18) |
47
48
  (b64.indexOf(string.charAt(i++)) << 12) |
package/lib/index.d.ts CHANGED
@@ -827,7 +827,7 @@ interface ITreeConf {
827
827
  */
828
828
  declare function searchTreeById<V>(tree: ArrayLike<V>, nodeId: IdLike, config?: ITreeConf): [IdLike[], ArrayLike<V>[]];
829
829
  /**
830
- * 扁平化数组转换成树(效率高于buildTree)
830
+ * 扁平化数组转换成树
831
831
  * @param {any[]} list
832
832
  * @param {IFieldOptions} options
833
833
  * @returns {any[]}
@@ -892,13 +892,13 @@ type NumberType = number | string;
892
892
  declare function strip(num: NumberType, precision?: number): number;
893
893
 
894
894
  /**
895
- * 字符串编码成Base64 (适用于任何环境,包括小程序)
895
+ * 字符串编码成Base64, 平替浏览器的btoa, 不包含中文的处理 (适用于任何环境,包括小程序)
896
896
  * @param {string} string
897
897
  * @returns {string}
898
898
  */
899
899
  declare function weBtoa(string: string): string;
900
900
  /**
901
- * Base64解码为原始字符串(适用于任何环境,包括小程序)
901
+ * Base64解码为原始字符串,平替浏览器的atob, 不包含中文的处理(适用于任何环境,包括小程序)
902
902
  * @param {string} string
903
903
  * @returns {string}
904
904
  */
package/lib/umd/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.8.0
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -30,7 +30,7 @@
30
30
  }
31
31
  }
32
32
  else {
33
- for (let idx = 0; idx < array.length; idx++) {
33
+ for (let idx = 0, len = array.length; idx < len; idx++) {
34
34
  const val = array[idx];
35
35
  const re = iterator(val, idx, array);
36
36
  if (re === false)
@@ -55,7 +55,7 @@
55
55
  }
56
56
  }
57
57
  else {
58
- for (let idx = 0; idx < array.length; idx++) {
58
+ for (let idx = 0, len = array.length; idx < len; idx++) {
59
59
  const val = array[idx];
60
60
  if ((await iterator(val, idx)) === false)
61
61
  break;
@@ -92,7 +92,9 @@
92
92
  if (_expect(val, idx))
93
93
  indexes.push(idx);
94
94
  });
95
- indexes.forEach((val, idx) => array.splice(val - idx, 1));
95
+ arrayEach(indexes, (val, idx) => {
96
+ array.splice(val - idx, 1);
97
+ });
96
98
  return array;
97
99
  }
98
100
 
@@ -375,7 +377,7 @@
375
377
  */
376
378
  function objectAssign(source, ...targets) {
377
379
  const map = new Map();
378
- for (let i = 0; i < targets.length; i++) {
380
+ for (let i = 0, len = targets.length; i < len; i++) {
379
381
  const target = targets[i];
380
382
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
381
383
  // @ts-ignore
@@ -500,10 +502,10 @@
500
502
  }
501
503
  // 处理数组 (包含稀疏数组)
502
504
  if (Array.isArray(source)) {
503
- const copy = Array.from({ length: source.length });
505
+ const copy = new Array(source.length);
504
506
  map.set(source, copy);
505
507
  // 克隆所有有效索引
506
- for (let i = 0; i < source.length; i++) {
508
+ for (let i = 0, len = source.length; i < len; i++) {
507
509
  if (i in source) {
508
510
  // 保留空位
509
511
  copy[i] = cloneDeep(source[i], map);
@@ -656,7 +658,7 @@
656
658
  if (keysA.length !== keysB.length)
657
659
  return false;
658
660
  // 递归比较每个元素
659
- for (let i = 0; i < a.length; i++) {
661
+ for (let i = 0, len = a.length; i < len; i++) {
660
662
  if (!deepEqual(a[i], b[i], compared))
661
663
  return false;
662
664
  }
@@ -1230,7 +1232,7 @@
1230
1232
  * @returns {string}
1231
1233
  */
1232
1234
  const pathNormalize = (path) => {
1233
- const slicees = path
1235
+ const slices = path
1234
1236
  .replace(/\\/g, '/')
1235
1237
  .replace(/\/{2,}/g, '/')
1236
1238
  .replace(/\.{3,}/g, '..')
@@ -1255,7 +1257,7 @@
1255
1257
  points.pop();
1256
1258
  }
1257
1259
  };
1258
- slicees.forEach(slice => {
1260
+ slices.forEach(slice => {
1259
1261
  const isCurrent = isCurrentSlice(slice);
1260
1262
  const isParent = isParentSlice(slice);
1261
1263
  // 未进入实际路径
@@ -1560,7 +1562,7 @@
1560
1562
  // eslint-disable-next-line
1561
1563
  const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
1562
1564
  /**
1563
- * 字符串编码成Base64 (适用于任何环境,包括小程序)
1565
+ * 字符串编码成Base64, 平替浏览器的btoa, 不包含中文的处理 (适用于任何环境,包括小程序)
1564
1566
  * @param {string} string
1565
1567
  * @returns {string}
1566
1568
  */
@@ -1568,8 +1570,9 @@
1568
1570
  // 同window.btoa: 字符串编码成Base64
1569
1571
  string = String(string);
1570
1572
  let bitmap, a, b, c, result = '', i = 0;
1571
- const rest = string.length % 3;
1572
- for (; i < string.length;) {
1573
+ const strLen = string.length;
1574
+ const rest = strLen % 3;
1575
+ for (; i < strLen;) {
1573
1576
  if ((a = string.charCodeAt(i++)) > 255 || (b = string.charCodeAt(i++)) > 255 || (c = string.charCodeAt(i++)) > 255)
1574
1577
  throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
1575
1578
  bitmap = (a << 16) | (b << 8) | c;
@@ -1582,7 +1585,7 @@
1582
1585
  return rest ? result.slice(0, rest - 3) + '==='.substring(rest) : result;
1583
1586
  }
1584
1587
  /**
1585
- * Base64解码为原始字符串(适用于任何环境,包括小程序)
1588
+ * Base64解码为原始字符串,平替浏览器的atob, 不包含中文的处理(适用于任何环境,包括小程序)
1586
1589
  * @param {string} string
1587
1590
  * @returns {string}
1588
1591
  */
@@ -1593,7 +1596,7 @@
1593
1596
  throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
1594
1597
  string += '=='.slice(2 - (string.length & 3));
1595
1598
  let bitmap, result = '', r1, r2, i = 0;
1596
- for (; i < string.length;) {
1599
+ for (const strLen = string.length; i < strLen;) {
1597
1600
  bitmap =
1598
1601
  (b64.indexOf(string.charAt(i++)) << 18) |
1599
1602
  (b64.indexOf(string.charAt(i++)) << 12) |
@@ -2360,7 +2363,7 @@
2360
2363
  }
2361
2364
  }
2362
2365
  else {
2363
- for (let i = 0; i < arr.length; i++) {
2366
+ for (let i = 0, len = arr.length; i < len; i++) {
2364
2367
  if (isBreak) {
2365
2368
  break;
2366
2369
  }
@@ -2486,7 +2489,7 @@
2486
2489
  return getIds(toFlatArray(tree));
2487
2490
  }
2488
2491
  /**
2489
- * 扁平化数组转换成树(效率高于buildTree)
2492
+ * 扁平化数组转换成树
2490
2493
  * @param {any[]} list
2491
2494
  * @param {IFieldOptions} options
2492
2495
  * @returns {any[]}
@@ -2495,10 +2498,10 @@
2495
2498
  const { keyField, childField, pidField } = options;
2496
2499
  const treeArr = [];
2497
2500
  const sourceMap = {};
2498
- list.forEach(item => {
2501
+ arrayEach(list, item => {
2499
2502
  sourceMap[item[keyField]] = item;
2500
2503
  });
2501
- list.forEach(item => {
2504
+ arrayEach(list, item => {
2502
2505
  const parent = sourceMap[item[pidField]];
2503
2506
  if (parent) {
2504
2507
  (parent[childField] || (parent[childField] = [])).push(item);
@@ -2517,7 +2520,8 @@
2517
2520
  */
2518
2521
  function flatTree(treeList, options = defaultFieldOptions) {
2519
2522
  const { childField, keyField, pidField } = options;
2520
- return treeList.reduce((res, node) => {
2523
+ let res = [];
2524
+ arrayEach(treeList, node => {
2521
2525
  const item = {
2522
2526
  ...node,
2523
2527
  [childField]: [] // 清空子级
@@ -2531,8 +2535,8 @@
2531
2535
  }));
2532
2536
  res = res.concat(flatTree(children, options));
2533
2537
  }
2534
- return res;
2535
- }, []);
2538
+ });
2539
+ return res;
2536
2540
  }
2537
2541
  /**
2538
2542
  * 模糊搜索函数,返回包含搜索字符的节点及其祖先节点, 适用于树型组件的字符过滤功能
@@ -2554,7 +2558,7 @@
2554
2558
  return nodes;
2555
2559
  }
2556
2560
  const result = [];
2557
- for (const node of nodes) {
2561
+ arrayEach(nodes, node => {
2558
2562
  // 递归检查子节点是否匹配
2559
2563
  const matchedChildren = node[options.childField] && node[options.childField].length > 0
2560
2564
  ? fuzzySearchTree(node[options.childField] || [], filterCondition, options)
@@ -2594,7 +2598,7 @@
2594
2598
  });
2595
2599
  }
2596
2600
  }
2597
- }
2601
+ });
2598
2602
  return result;
2599
2603
  }
2600
2604
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sculp-js",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "packageManager": "npm@8.19.2",
5
5
  "description": "js utils library, includes function library、class library",
6
6
  "scripts": {