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.
- 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 -1
- 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 +1 -1
- package/lib/cjs/math.js +1 -1
- package/lib/cjs/number.js +1 -1
- package/lib/cjs/object.js +5 -5
- 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 -10
- package/lib/cjs/type.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/lib/es/math.js +1 -1
- package/lib/es/number.js +1 -1
- package/lib/es/object.js +5 -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 +12 -10
- package/lib/es/type.js +1 -1
- 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 +3 -3
- package/lib/umd/index.js +28 -24
- package/package.json +1 -1
package/lib/cjs/array.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.8.
|
|
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
|
|
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
|
|
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
|
|
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
package/lib/cjs/base64.js
CHANGED
package/lib/cjs/clipboard.js
CHANGED
package/lib/cjs/cookie.js
CHANGED
package/lib/cjs/date.js
CHANGED
package/lib/cjs/dom.js
CHANGED
package/lib/cjs/download.js
CHANGED
package/lib/cjs/easing.js
CHANGED
package/lib/cjs/file.js
CHANGED
package/lib/cjs/func.js
CHANGED
package/lib/cjs/index.js
CHANGED
package/lib/cjs/math.js
CHANGED
package/lib/cjs/number.js
CHANGED
package/lib/cjs/object.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.8.
|
|
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
|
|
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
|
|
271
|
+
const copy = new Array(source.length);
|
|
272
272
|
map.set(source, copy);
|
|
273
273
|
// 克隆所有有效索引
|
|
274
|
-
for (let i = 0
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
40
|
+
slices.forEach(slice => {
|
|
41
41
|
const isCurrent = isCurrentSlice(slice);
|
|
42
42
|
const isParent = isParentSlice(slice);
|
|
43
43
|
// 未进入实际路径
|
package/lib/cjs/qs.js
CHANGED
package/lib/cjs/random.js
CHANGED
package/lib/cjs/string.js
CHANGED
package/lib/cjs/tooltip.js
CHANGED
package/lib/cjs/tree.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.8.
|
|
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
|
|
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
|
-
* 扁平化数组转换成树
|
|
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
|
-
|
|
187
|
+
array.arrayEach(list, item => {
|
|
187
188
|
sourceMap[item[keyField]] = item;
|
|
188
189
|
});
|
|
189
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
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.8.
|
|
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.8.
|
|
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
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
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.8.
|
|
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
|
|
@@ -266,10 +266,10 @@ function cloneDeep(source, map = new WeakMap()) {
|
|
|
266
266
|
}
|
|
267
267
|
// 处理数组 (包含稀疏数组)
|
|
268
268
|
if (Array.isArray(source)) {
|
|
269
|
-
const copy = Array
|
|
269
|
+
const copy = new Array(source.length);
|
|
270
270
|
map.set(source, copy);
|
|
271
271
|
// 克隆所有有效索引
|
|
272
|
-
for (let i = 0
|
|
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
|
|
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.
|
|
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
package/lib/es/tree.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.8.
|
|
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
|
|
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
|
-
* 扁平化数组转换成树
|
|
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
|
|
185
|
+
arrayEach(list, item => {
|
|
185
186
|
sourceMap[item[keyField]] = item;
|
|
186
187
|
});
|
|
187
|
-
list
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
package/lib/es/unique.js
CHANGED
package/lib/es/url.js
CHANGED
package/lib/es/validator.js
CHANGED
package/lib/es/variable.js
CHANGED
package/lib/es/watermark.js
CHANGED
package/lib/es/we-decode.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.8.
|
|
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
|
|
20
|
-
|
|
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 (
|
|
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
|
-
* 扁平化数组转换成树
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
505
|
+
const copy = new Array(source.length);
|
|
504
506
|
map.set(source, copy);
|
|
505
507
|
// 克隆所有有效索引
|
|
506
|
-
for (let i = 0
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
1572
|
-
|
|
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 (
|
|
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
|
|
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
|
-
* 扁平化数组转换成树
|
|
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
|
|
2501
|
+
arrayEach(list, item => {
|
|
2499
2502
|
sourceMap[item[keyField]] = item;
|
|
2500
2503
|
});
|
|
2501
|
-
list
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|