sculp-js 1.7.2 → 1.8.1

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 (60) hide show
  1. package/README.md +5 -3
  2. package/lib/cjs/array.js +6 -4
  3. package/lib/cjs/async.js +1 -1
  4. package/lib/cjs/base64.js +1 -1
  5. package/lib/cjs/clipboard.js +1 -1
  6. package/lib/cjs/cookie.js +1 -1
  7. package/lib/cjs/date.js +1 -1
  8. package/lib/cjs/dom.js +1 -28
  9. package/lib/cjs/download.js +1 -1
  10. package/lib/cjs/easing.js +1 -1
  11. package/lib/cjs/file.js +1 -1
  12. package/lib/cjs/func.js +1 -1
  13. package/lib/cjs/index.js +3 -4
  14. package/lib/cjs/math.js +1 -1
  15. package/lib/cjs/number.js +1 -1
  16. package/lib/cjs/object.js +133 -4
  17. package/lib/cjs/path.js +3 -3
  18. package/lib/cjs/qs.js +1 -1
  19. package/lib/cjs/random.js +1 -1
  20. package/lib/cjs/string.js +1 -1
  21. package/lib/cjs/tooltip.js +1 -1
  22. package/lib/cjs/tree.js +12 -96
  23. package/lib/cjs/type.js +11 -4
  24. package/lib/cjs/unique.js +1 -1
  25. package/lib/cjs/url.js +1 -1
  26. package/lib/cjs/validator.js +1 -1
  27. package/lib/cjs/variable.js +1 -1
  28. package/lib/cjs/watermark.js +1 -1
  29. package/lib/cjs/we-decode.js +7 -6
  30. package/lib/es/array.js +6 -4
  31. package/lib/es/async.js +1 -1
  32. package/lib/es/base64.js +1 -1
  33. package/lib/es/clipboard.js +1 -1
  34. package/lib/es/cookie.js +1 -1
  35. package/lib/es/date.js +1 -1
  36. package/lib/es/dom.js +2 -27
  37. package/lib/es/download.js +1 -1
  38. package/lib/es/easing.js +1 -1
  39. package/lib/es/file.js +1 -1
  40. package/lib/es/func.js +1 -1
  41. package/lib/es/index.js +5 -5
  42. package/lib/es/math.js +1 -1
  43. package/lib/es/number.js +1 -1
  44. package/lib/es/object.js +133 -5
  45. package/lib/es/path.js +3 -3
  46. package/lib/es/qs.js +1 -1
  47. package/lib/es/random.js +1 -1
  48. package/lib/es/string.js +1 -1
  49. package/lib/es/tooltip.js +1 -1
  50. package/lib/es/tree.js +13 -96
  51. package/lib/es/type.js +11 -5
  52. package/lib/es/unique.js +1 -1
  53. package/lib/es/url.js +1 -1
  54. package/lib/es/validator.js +1 -1
  55. package/lib/es/variable.js +1 -1
  56. package/lib/es/watermark.js +1 -1
  57. package/lib/es/we-decode.js +7 -6
  58. package/lib/index.d.ts +27 -49
  59. package/lib/umd/index.js +166 -139
  60. package/package.json +3 -10
package/lib/cjs/unique.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
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.7.2
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -116,31 +116,6 @@ function smoothScroll(options) {
116
116
  render();
117
117
  });
118
118
  }
119
- const domReadyCallbacks = [];
120
- const eventType = 'DOMContentLoaded';
121
- const listener = () => {
122
- domReadyCallbacks.forEach(callback => callback());
123
- domReadyCallbacks.length = 0;
124
- document.removeEventListener(eventType, listener);
125
- };
126
- document.addEventListener(eventType, listener);
127
- let readied = false;
128
- function isDomReady() {
129
- if (readied)
130
- return true;
131
- readied = ['complete', 'loaded', 'interactive'].indexOf(document.readyState) !== -1;
132
- return readied;
133
- }
134
- function onDomReady(callback) {
135
- // document readied
136
- if (isDomReady()) {
137
- setTimeout(callback, 0);
138
- }
139
- // listen document to ready
140
- else {
141
- domReadyCallbacks.push(callback);
142
- }
143
- }
144
119
  /**
145
120
  * 获取元素样式属性的计算值
146
121
  * @param {HTMLElement} el
@@ -183,4 +158,4 @@ function getStrWidthPx(str, fontSize = 14, isRemoveDom = false) {
183
158
  return strWidth;
184
159
  }
185
160
 
186
- export { addClass, getComputedCssVal, getStrWidthPx, getStyle, hasClass, isDomReady, onDomReady, removeClass, setStyle, smoothScroll };
161
+ export { addClass, getComputedCssVal, getStrWidthPx, getStyle, hasClass, removeClass, setStyle, smoothScroll };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.7.2
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.7.2
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.7.2
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.7.2
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.7.2
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */
@@ -8,13 +8,13 @@ export { arrayEach, arrayEachAsync, arrayInsertBefore, arrayRemove } from './arr
8
8
  export { copyText } from './clipboard.js';
9
9
  export { cookieDel, cookieGet, cookieSet } from './cookie.js';
10
10
  export { calculateDate, calculateDateTime, dateParse, dateToEnd, dateToStart, formatDate, isValidDate } from './date.js';
11
- export { addClass, getComputedCssVal, getStrWidthPx, getStyle, hasClass, isDomReady, onDomReady, removeClass, setStyle, smoothScroll } from './dom.js';
11
+ export { addClass, getComputedCssVal, getStrWidthPx, getStyle, hasClass, removeClass, setStyle, smoothScroll } from './dom.js';
12
12
  export { crossOriginDownload, downloadBlob, downloadData, downloadHref, downloadURL } from './download.js';
13
- export { cloneDeep, isPlainObject, objectAssign, objectEach, objectEachAsync, objectFill, objectGet, objectMap, objectAssign as objectMerge, objectOmit, objectPick } from './object.js';
13
+ export { cloneDeep, isEqual, isPlainObject, objectAssign, objectEach, objectEachAsync, objectFill, objectGet, objectMap, objectAssign as objectMerge, objectOmit, objectPick } from './object.js';
14
14
  export { pathJoin, pathNormalize } from './path.js';
15
15
  export { qsParse, qsStringify } from './qs.js';
16
16
  export { STRING_ARABIC_NUMERALS, STRING_LOWERCASE_ALPHA, STRING_UPPERCASE_ALPHA, parseQueryParams, stringAssign, stringCamelCase, stringEscapeHtml, stringFill, stringFormat, stringKebabCase } from './string.js';
17
- export { arrayLike, isArray, isBigInt, isBoolean, isDate, isEmpty, isError, isFunction, isJsonString, isNaN, isNull, isNullOrUnDef, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isUndefined, objectHas, typeIs } from './type.js';
17
+ export { arrayLike, isArray, isBigInt, isBoolean, isDate, isEmpty, isError, isFunction, isJsonString, isNaN, isNull, isNullOrUnDef, isNullOrUnDef as isNullish, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isUndefined, objectHas, typeIs } from './type.js';
18
18
  export { urlDelParams, urlParse, urlSetParams, urlStringify } from './url.js';
19
19
  export { asyncMap, wait } from './async.js';
20
20
  export { chooseLocalFile, compressImg, supportCanvas } from './file.js';
@@ -24,7 +24,7 @@ export { STRING_POOL, randomNumber, randomString, randomUuid } from './random.js
24
24
  export { HEX_POOL, formatNumber, numberAbbr, numberToHex } from './number.js';
25
25
  export { UNIQUE_NUMBER_SAFE_LENGTH, uniqueNumber, uniqueString } from './unique.js';
26
26
  export { tooltipEvent } from './tooltip.js';
27
- export { buildTree, flatTree, forEachDeep, formatTree, fuzzySearchTree, mapDeep, searchTreeById } from './tree.js';
27
+ export { flatTree, forEachDeep, formatTree, fuzzySearchTree, mapDeep, searchTreeById } from './tree.js';
28
28
  export { add, divide, multiply, strip, subtract } from './math.js';
29
29
  export { weAtob, weBtoa } from './we-decode.js';
30
30
  export { decodeFromBase64, encodeToBase64 } from './base64.js';
package/lib/es/math.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.7.2
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.7.2
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.7.2
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
@@ -166,6 +166,13 @@ function objectFill(source, target, fillable) {
166
166
  });
167
167
  return source;
168
168
  }
169
+ /**
170
+ * 获取对象指定层级下的属性值(现在可用ES6+的可选链?.来替代)
171
+ * @param {AnyObject} obj
172
+ * @param {string} path
173
+ * @param {boolean} strict
174
+ * @returns
175
+ */
169
176
  function objectGet(obj, path, strict = false) {
170
177
  path = path.replace(/\[(\w+)\]/g, '.$1');
171
178
  path = path.replace(/^\./, '');
@@ -259,10 +266,10 @@ function cloneDeep(source, map = new WeakMap()) {
259
266
  }
260
267
  // 处理数组 (包含稀疏数组)
261
268
  if (Array.isArray(source)) {
262
- const copy = Array.from({ length: source.length });
269
+ const copy = new Array(source.length);
263
270
  map.set(source, copy);
264
271
  // 克隆所有有效索引
265
- for (let i = 0; i < source.length; i++) {
272
+ for (let i = 0, len = source.length; i < len; i++) {
266
273
  if (i in source) {
267
274
  // 保留空位
268
275
  copy[i] = cloneDeep(source[i], map);
@@ -301,5 +308,126 @@ function cloneDeep(source, map = new WeakMap()) {
301
308
  }
302
309
  return copy;
303
310
  }
311
+ /**
312
+ * 比较两值是否相等,适用所有数据类型
313
+ * @param {Comparable} a
314
+ * @param {Comparable} b
315
+ * @returns {boolean}
316
+ */
317
+ function isEqual(a, b) {
318
+ return deepEqual(a, b);
319
+ }
320
+ function deepEqual(a, b, compared = new WeakMap()) {
321
+ // 相同值快速返回
322
+ if (Object.is(a, b))
323
+ return true;
324
+ // 类型不同直接返回false
325
+ const typeA = Object.prototype.toString.call(a);
326
+ const typeB = Object.prototype.toString.call(b);
327
+ if (typeA !== typeB)
328
+ return false;
329
+ // 只缓存对象类型
330
+ if (isObject(a) && isObject(b)) {
331
+ if (compared.has(a))
332
+ return compared.get(a) === b;
333
+ compared.set(a, b);
334
+ compared.set(b, a);
335
+ }
336
+ // 处理特殊对象类型
337
+ switch (typeA) {
338
+ case '[object Date]':
339
+ return a.getTime() === b.getTime();
340
+ case '[object RegExp]':
341
+ return a.toString() === b.toString();
342
+ case '[object Map]':
343
+ return compareMap(a, b, compared);
344
+ case '[object Set]':
345
+ return compareSet(a, b, compared);
346
+ case '[object ArrayBuffer]':
347
+ return compareArrayBuffer(a, b);
348
+ case '[object DataView]':
349
+ return compareDataView(a, b, compared);
350
+ case '[object Int8Array]':
351
+ case '[object Uint8Array]':
352
+ case '[object Uint8ClampedArray]':
353
+ case '[object Int16Array]':
354
+ case '[object Uint16Array]':
355
+ case '[object Int32Array]':
356
+ case '[object Uint32Array]':
357
+ case '[object Float32Array]':
358
+ case '[object Float64Array]':
359
+ return compareTypedArray(a, b, compared);
360
+ case '[object Object]':
361
+ return compareObjects(a, b, compared);
362
+ case '[object Array]':
363
+ return compareArrays(a, b, compared);
364
+ }
365
+ return false;
366
+ }
367
+ // 辅助比较函数
368
+ function compareMap(a, b, compared) {
369
+ if (a.size !== b.size)
370
+ return false;
371
+ for (const [key, value] of a) {
372
+ if (!b.has(key) || !deepEqual(value, b.get(key), compared))
373
+ return false;
374
+ }
375
+ return true;
376
+ }
377
+ function compareSet(a, b, compared) {
378
+ if (a.size !== b.size)
379
+ return false;
380
+ for (const value of a) {
381
+ let found = false;
382
+ for (const bValue of b) {
383
+ if (deepEqual(value, bValue, compared)) {
384
+ found = true;
385
+ break;
386
+ }
387
+ }
388
+ if (!found)
389
+ return false;
390
+ }
391
+ return true;
392
+ }
393
+ function compareArrayBuffer(a, b) {
394
+ if (a.byteLength !== b.byteLength)
395
+ return false;
396
+ return new DataView(a).getInt32(0) === new DataView(b).getInt32(0);
397
+ }
398
+ function compareDataView(a, b, compared) {
399
+ return a.byteLength === b.byteLength && deepEqual(new Uint8Array(a.buffer), new Uint8Array(b.buffer), compared);
400
+ }
401
+ function compareTypedArray(a, b, compared) {
402
+ return a.byteLength === b.byteLength && deepEqual(Array.from(a), Array.from(b), compared);
403
+ }
404
+ function compareObjects(a, b, compared) {
405
+ const keysA = Reflect.ownKeys(a);
406
+ const keysB = Reflect.ownKeys(b);
407
+ if (keysA.length !== keysB.length)
408
+ return false;
409
+ for (const key of keysA) {
410
+ if (!keysB.includes(key))
411
+ return false;
412
+ if (!deepEqual(a[key], b[key], compared))
413
+ return false;
414
+ }
415
+ // 原型链比较
416
+ return Object.getPrototypeOf(a) === Object.getPrototypeOf(b);
417
+ }
418
+ function compareArrays(a, b, compared) {
419
+ // 增加有效索引检查
420
+ const keysA = Object.keys(a).map(Number);
421
+ const keysB = Object.keys(b).map(Number);
422
+ if (keysA.length !== keysB.length)
423
+ return false;
424
+ // 递归比较每个元素
425
+ for (let i = 0, len = a.length; i < len; i++) {
426
+ if (!deepEqual(a[i], b[i], compared))
427
+ return false;
428
+ }
429
+ // 比较数组对象的其他属性
430
+ return compareObjects(a, b, compared);
431
+ }
304
432
 
305
- export { cloneDeep, isPlainObject, objectAssign, objectEach, objectEachAsync, objectFill, objectGet, objectMap, objectAssign as objectMerge, objectOmit, objectPick };
433
+ export { cloneDeep, isEqual, isPlainObject, objectAssign, objectEach, objectEachAsync, objectFill, objectGet, objectMap, objectAssign as objectMerge, objectOmit, objectPick };
package/lib/es/path.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.7.2
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.7.2
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.7.2
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.7.2
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.7.2
2
+ * sculp-js v1.8.1
3
3
  * (c) 2023-present chandq
4
4
  * Released under the MIT License.
5
5
  */