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.
- package/README.md +5 -3
- package/lib/cjs/array.js +6 -4
- package/lib/cjs/async.js +1 -1
- package/lib/cjs/base64.js +1 -1
- package/lib/cjs/clipboard.js +1 -1
- package/lib/cjs/cookie.js +1 -1
- package/lib/cjs/date.js +1 -1
- package/lib/cjs/dom.js +1 -28
- package/lib/cjs/download.js +1 -1
- package/lib/cjs/easing.js +1 -1
- package/lib/cjs/file.js +1 -1
- package/lib/cjs/func.js +1 -1
- package/lib/cjs/index.js +3 -4
- package/lib/cjs/math.js +1 -1
- package/lib/cjs/number.js +1 -1
- package/lib/cjs/object.js +133 -4
- package/lib/cjs/path.js +3 -3
- package/lib/cjs/qs.js +1 -1
- package/lib/cjs/random.js +1 -1
- package/lib/cjs/string.js +1 -1
- package/lib/cjs/tooltip.js +1 -1
- package/lib/cjs/tree.js +12 -96
- package/lib/cjs/type.js +11 -4
- package/lib/cjs/unique.js +1 -1
- package/lib/cjs/url.js +1 -1
- package/lib/cjs/validator.js +1 -1
- package/lib/cjs/variable.js +1 -1
- package/lib/cjs/watermark.js +1 -1
- package/lib/cjs/we-decode.js +7 -6
- package/lib/es/array.js +6 -4
- package/lib/es/async.js +1 -1
- package/lib/es/base64.js +1 -1
- package/lib/es/clipboard.js +1 -1
- package/lib/es/cookie.js +1 -1
- package/lib/es/date.js +1 -1
- package/lib/es/dom.js +2 -27
- package/lib/es/download.js +1 -1
- package/lib/es/easing.js +1 -1
- package/lib/es/file.js +1 -1
- package/lib/es/func.js +1 -1
- package/lib/es/index.js +5 -5
- package/lib/es/math.js +1 -1
- package/lib/es/number.js +1 -1
- package/lib/es/object.js +133 -5
- package/lib/es/path.js +3 -3
- package/lib/es/qs.js +1 -1
- package/lib/es/random.js +1 -1
- package/lib/es/string.js +1 -1
- package/lib/es/tooltip.js +1 -1
- package/lib/es/tree.js +13 -96
- package/lib/es/type.js +11 -5
- package/lib/es/unique.js +1 -1
- package/lib/es/url.js +1 -1
- package/lib/es/validator.js +1 -1
- package/lib/es/variable.js +1 -1
- package/lib/es/watermark.js +1 -1
- package/lib/es/we-decode.js +7 -6
- package/lib/index.d.ts +27 -49
- package/lib/umd/index.js +166 -139
- package/package.json +3 -10
package/lib/cjs/unique.js
CHANGED
package/lib/cjs/url.js
CHANGED
package/lib/cjs/validator.js
CHANGED
package/lib/cjs/variable.js
CHANGED
package/lib/cjs/watermark.js
CHANGED
package/lib/cjs/we-decode.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.
|
|
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
|
|
22
|
-
|
|
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 (
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
package/lib/es/base64.js
CHANGED
package/lib/es/clipboard.js
CHANGED
package/lib/es/cookie.js
CHANGED
package/lib/es/date.js
CHANGED
package/lib/es/dom.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.
|
|
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,
|
|
161
|
+
export { addClass, getComputedCssVal, getStrWidthPx, getStyle, hasClass, removeClass, setStyle, smoothScroll };
|
package/lib/es/download.js
CHANGED
package/lib/es/easing.js
CHANGED
package/lib/es/file.js
CHANGED
package/lib/es/func.js
CHANGED
package/lib/es/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.
|
|
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,
|
|
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 {
|
|
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
package/lib/es/number.js
CHANGED
package/lib/es/object.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.
|
|
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
|
|
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
|
|
269
|
+
const copy = new Array(source.length);
|
|
263
270
|
map.set(source, copy);
|
|
264
271
|
// 克隆所有有效索引
|
|
265
|
-
for (let i = 0
|
|
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.
|
|
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
|
|
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
|
-
|
|
38
|
+
slices.forEach(slice => {
|
|
39
39
|
const isCurrent = isCurrentSlice(slice);
|
|
40
40
|
const isParent = isParentSlice(slice);
|
|
41
41
|
// 未进入实际路径
|
package/lib/es/qs.js
CHANGED
package/lib/es/random.js
CHANGED
package/lib/es/string.js
CHANGED
package/lib/es/tooltip.js
CHANGED