sculp-js 1.13.3-beta.0 → 1.13.6
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/dist/cjs/_virtual/_commonjsHelpers.js +3 -3
- package/dist/cjs/array.js +36 -46
- package/dist/cjs/async.js +41 -43
- package/dist/cjs/base64.js +77 -66
- package/dist/cjs/clipboard.js +54 -53
- package/dist/cjs/cloneDeep.js +90 -91
- package/dist/cjs/cookie.js +27 -30
- package/dist/cjs/date.js +101 -98
- package/dist/cjs/dom.js +114 -121
- package/dist/cjs/download.js +77 -78
- package/dist/cjs/easing.js +29 -32
- package/dist/cjs/file.js +147 -152
- package/dist/cjs/func.js +64 -78
- package/dist/cjs/index.js +1 -3
- package/dist/cjs/math.js +32 -38
- package/dist/cjs/node_modules/bezier-easing/src/index.js +35 -23
- package/dist/cjs/number.js +58 -61
- package/dist/cjs/object.js +112 -126
- package/dist/cjs/path.js +39 -43
- package/dist/cjs/qs.js +34 -41
- package/dist/cjs/random.js +31 -34
- package/dist/cjs/string.js +62 -63
- package/dist/cjs/tooltip.js +66 -69
- package/dist/cjs/tree.js +265 -263
- package/dist/cjs/type.js +42 -46
- package/dist/cjs/unique.js +39 -42
- package/dist/cjs/url.js +47 -48
- package/dist/cjs/validator.js +38 -38
- package/dist/cjs/variable.js +27 -21
- package/dist/cjs/watermark.js +78 -67
- package/dist/esm/array.js +36 -46
- package/dist/esm/async.js +41 -43
- package/dist/esm/base64.js +77 -66
- package/dist/esm/clipboard.js +55 -54
- package/dist/esm/cloneDeep.js +90 -91
- package/dist/esm/cookie.js +27 -30
- package/dist/esm/date.js +101 -98
- package/dist/esm/dom.js +114 -121
- package/dist/esm/download.js +78 -79
- package/dist/esm/easing.js +29 -32
- package/dist/esm/file.js +147 -152
- package/dist/esm/func.js +64 -78
- package/dist/esm/index.js +96 -8
- package/dist/esm/math.js +32 -38
- package/dist/esm/number.js +58 -61
- package/dist/esm/object.js +124 -127
- package/dist/esm/path.js +39 -43
- package/dist/esm/qs.js +34 -41
- package/dist/esm/random.js +31 -34
- package/dist/esm/string.js +74 -64
- package/dist/esm/tooltip.js +66 -69
- package/dist/esm/tree.js +265 -263
- package/dist/esm/type.js +68 -47
- package/dist/esm/unique.js +39 -42
- package/dist/esm/url.js +47 -48
- package/dist/esm/validator.js +56 -39
- package/dist/esm/variable.js +27 -21
- package/dist/esm/watermark.js +79 -68
- package/dist/types/array.d.ts +0 -1
- package/dist/types/async.d.ts +0 -1
- package/dist/types/base64.d.ts +0 -1
- package/dist/types/clipboard.d.ts +0 -1
- package/dist/types/cloneDeep.d.ts +0 -1
- package/dist/types/cookie.d.ts +0 -1
- package/dist/types/date.d.ts +0 -1
- package/dist/types/dom.d.ts +0 -1
- package/dist/types/download.d.ts +0 -1
- package/dist/types/easing.d.ts +0 -1
- package/dist/types/file.d.ts +0 -1
- package/dist/types/func.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/math.d.ts +0 -1
- package/dist/types/number.d.ts +0 -1
- package/dist/types/object.d.ts +0 -1
- package/dist/types/path.d.ts +0 -1
- package/dist/types/qs.d.ts +0 -1
- package/dist/types/random.d.ts +0 -1
- package/dist/types/string.d.ts +0 -1
- package/dist/types/tooltip.d.ts +0 -1
- package/dist/types/tree.d.ts +2 -2
- package/dist/types/type.d.ts +0 -1
- package/dist/types/unique.d.ts +0 -1
- package/dist/types/url.d.ts +0 -1
- package/dist/types/validator.d.ts +0 -1
- package/dist/types/variable.d.ts +0 -1
- package/dist/types/watermark.d.ts +0 -1
- package/dist/umd/index.min.js +2 -2
- package/package.json +12 -6
- package/dist/types/array.d.ts.map +0 -1
- package/dist/types/async.d.ts.map +0 -1
- package/dist/types/base64.d.ts.map +0 -1
- package/dist/types/clipboard.d.ts.map +0 -1
- package/dist/types/cloneDeep.d.ts.map +0 -1
- package/dist/types/cookie.d.ts.map +0 -1
- package/dist/types/core-index.d.ts +0 -17
- package/dist/types/core-index.d.ts.map +0 -1
- package/dist/types/date.d.ts.map +0 -1
- package/dist/types/dom.d.ts.map +0 -1
- package/dist/types/download.d.ts.map +0 -1
- package/dist/types/easing.d.ts.map +0 -1
- package/dist/types/file.d.ts.map +0 -1
- package/dist/types/func.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -3278
- package/dist/types/math.d.ts.map +0 -1
- package/dist/types/number.d.ts.map +0 -1
- package/dist/types/object.d.ts.map +0 -1
- package/dist/types/path.d.ts.map +0 -1
- package/dist/types/qs.d.ts.map +0 -1
- package/dist/types/random.d.ts.map +0 -1
- package/dist/types/string.d.ts.map +0 -1
- package/dist/types/tooltip.d.ts.map +0 -1
- package/dist/types/tree.d.ts.map +0 -1
- package/dist/types/type.d.ts.map +0 -1
- package/dist/types/unique.d.ts.map +0 -1
- package/dist/types/url.d.ts.map +0 -1
- package/dist/types/validator.d.ts.map +0 -1
- package/dist/types/variable.d.ts.map +0 -1
- package/dist/types/watermark.d.ts.map +0 -1
package/dist/esm/object.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -11,15 +11,13 @@ import { isObject, objectHas, isNumber, isUndefined, typeIs, isArray } from './t
|
|
|
11
11
|
* @param {object} obj
|
|
12
12
|
* @returns {boolean}
|
|
13
13
|
*/
|
|
14
|
-
const isPlainObject =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// 是否对象直接实例
|
|
22
|
-
return proto === Object.prototype;
|
|
14
|
+
const isPlainObject = obj => {
|
|
15
|
+
if (!isObject(obj)) return false;
|
|
16
|
+
const proto = Object.getPrototypeOf(obj);
|
|
17
|
+
// 对象无原型
|
|
18
|
+
if (!proto) return true;
|
|
19
|
+
// 是否对象直接实例
|
|
20
|
+
return proto === Object.prototype;
|
|
23
21
|
};
|
|
24
22
|
/**
|
|
25
23
|
* 遍历对象,返回 false 中断遍历
|
|
@@ -27,14 +25,12 @@ const isPlainObject = (obj) => {
|
|
|
27
25
|
* @param {(val: O[keyof O], key: keyof O) => (boolean | void)} iterator
|
|
28
26
|
*/
|
|
29
27
|
function objectEach(obj, iterator) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
obj = null;
|
|
28
|
+
for (const key in obj) {
|
|
29
|
+
if (!objectHas(obj, key)) continue;
|
|
30
|
+
if (iterator(obj[key], key) === false) break;
|
|
31
|
+
}
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
obj = null;
|
|
38
34
|
}
|
|
39
35
|
/**
|
|
40
36
|
* 异步遍历对象,返回 false 中断遍历
|
|
@@ -42,12 +38,10 @@ function objectEach(obj, iterator) {
|
|
|
42
38
|
* @param {(val: O[keyof O], key: keyof O) => (boolean | void)} iterator
|
|
43
39
|
*/
|
|
44
40
|
async function objectEachAsync(obj, iterator) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
41
|
+
for (const key in obj) {
|
|
42
|
+
if (!objectHas(obj, key)) continue;
|
|
43
|
+
if ((await iterator(obj[key], key)) === false) break;
|
|
44
|
+
}
|
|
51
45
|
}
|
|
52
46
|
/**
|
|
53
47
|
* 对象映射
|
|
@@ -56,15 +50,14 @@ async function objectEachAsync(obj, iterator) {
|
|
|
56
50
|
* @returns {Record<Extract<keyof O, string>, T>}
|
|
57
51
|
*/
|
|
58
52
|
function objectMap(obj, iterator) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return obj2;
|
|
53
|
+
const obj2 = {};
|
|
54
|
+
for (const key in obj) {
|
|
55
|
+
if (!objectHas(obj, key)) continue;
|
|
56
|
+
obj2[key] = iterator(obj[key], key);
|
|
57
|
+
}
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
obj = null;
|
|
60
|
+
return obj2;
|
|
68
61
|
}
|
|
69
62
|
/**
|
|
70
63
|
* 对象提取
|
|
@@ -73,16 +66,16 @@ function objectMap(obj, iterator) {
|
|
|
73
66
|
* @returns {Pick<O, ArrayElements<K>>}
|
|
74
67
|
*/
|
|
75
68
|
function objectPick(obj, keys) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
69
|
+
const obj2 = {};
|
|
70
|
+
objectEach(obj, (v, k) => {
|
|
71
|
+
if (keys.includes(k)) {
|
|
72
|
+
// @ts-ignore
|
|
73
|
+
obj2[k] = v;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
obj = null;
|
|
78
|
+
return obj2;
|
|
86
79
|
}
|
|
87
80
|
/**
|
|
88
81
|
* 对象去除
|
|
@@ -91,52 +84,47 @@ function objectPick(obj, keys) {
|
|
|
91
84
|
* @returns {Pick<O, ArrayElements<K>>}
|
|
92
85
|
*/
|
|
93
86
|
function objectOmit(obj, keys) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
87
|
+
const obj2 = {};
|
|
88
|
+
objectEach(obj, (v, k) => {
|
|
89
|
+
if (!keys.includes(k)) {
|
|
90
|
+
// @ts-ignore
|
|
91
|
+
obj2[k] = v;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// @ts-ignore
|
|
95
|
+
obj = null;
|
|
96
|
+
return obj2;
|
|
104
97
|
}
|
|
105
98
|
const merge = (map, source, target) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (
|
|
111
|
-
|
|
112
|
-
return merge(map, [], target);
|
|
113
|
-
if (isObject(target))
|
|
114
|
-
return merge(map, {}, target);
|
|
115
|
-
return target;
|
|
116
|
-
}
|
|
117
|
-
// 朴素对象
|
|
118
|
-
if (isPlainObject(target)) {
|
|
119
|
-
const exist = map.get(target);
|
|
120
|
-
if (exist)
|
|
121
|
-
return exist;
|
|
122
|
-
map.set(target, source);
|
|
123
|
-
objectEach(target, (val, key) => {
|
|
124
|
-
source[key] = merge(map, source[key], val);
|
|
125
|
-
});
|
|
126
|
-
return source;
|
|
127
|
-
}
|
|
128
|
-
// 数组
|
|
129
|
-
else if (isArray(target)) {
|
|
130
|
-
const exist = map.get(target);
|
|
131
|
-
if (exist)
|
|
132
|
-
return exist;
|
|
133
|
-
map.set(target, source);
|
|
134
|
-
target.forEach((val, index) => {
|
|
135
|
-
source[index] = merge(map, source[index], val);
|
|
136
|
-
});
|
|
137
|
-
return source;
|
|
138
|
-
}
|
|
99
|
+
if (isUndefined(target)) return source;
|
|
100
|
+
const sourceType = typeIs(source);
|
|
101
|
+
const targetType = typeIs(target);
|
|
102
|
+
if (sourceType !== targetType) {
|
|
103
|
+
if (isArray(target)) return merge(map, [], target);
|
|
104
|
+
if (isObject(target)) return merge(map, {}, target);
|
|
139
105
|
return target;
|
|
106
|
+
}
|
|
107
|
+
// 朴素对象
|
|
108
|
+
if (isPlainObject(target)) {
|
|
109
|
+
const exist = map.get(target);
|
|
110
|
+
if (exist) return exist;
|
|
111
|
+
map.set(target, source);
|
|
112
|
+
objectEach(target, (val, key) => {
|
|
113
|
+
source[key] = merge(map, source[key], val);
|
|
114
|
+
});
|
|
115
|
+
return source;
|
|
116
|
+
}
|
|
117
|
+
// 数组
|
|
118
|
+
else if (isArray(target)) {
|
|
119
|
+
const exist = map.get(target);
|
|
120
|
+
if (exist) return exist;
|
|
121
|
+
map.set(target, source);
|
|
122
|
+
target.forEach((val, index) => {
|
|
123
|
+
source[index] = merge(map, source[index], val);
|
|
124
|
+
});
|
|
125
|
+
return source;
|
|
126
|
+
}
|
|
127
|
+
return target;
|
|
140
128
|
};
|
|
141
129
|
/**
|
|
142
130
|
* 对象合并,返回原始对象
|
|
@@ -145,14 +133,14 @@ const merge = (map, source, target) => {
|
|
|
145
133
|
* @returns {R}
|
|
146
134
|
*/
|
|
147
135
|
function objectAssign(source, ...targets) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
136
|
+
const map = new Map();
|
|
137
|
+
for (let i = 0, len = targets.length; i < len; i++) {
|
|
138
|
+
const target = targets[i];
|
|
139
|
+
// @ts-ignore
|
|
140
|
+
source = merge(map, source, target);
|
|
141
|
+
}
|
|
142
|
+
map.clear();
|
|
143
|
+
return source;
|
|
156
144
|
}
|
|
157
145
|
/**
|
|
158
146
|
* 对象填充
|
|
@@ -162,13 +150,13 @@ function objectAssign(source, ...targets) {
|
|
|
162
150
|
* @returns {R}
|
|
163
151
|
*/
|
|
164
152
|
function objectFill(source, target, fillable) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
153
|
+
const _fillable = fillable || ((source, target, key) => source[key] === undefined);
|
|
154
|
+
objectEach(target, (val, key) => {
|
|
155
|
+
if (_fillable(source, target, key)) {
|
|
156
|
+
source[key] = val;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return source;
|
|
172
160
|
}
|
|
173
161
|
/**
|
|
174
162
|
* 获取对象/数组指定层级下的属性值(现在可用ES6+的可选链?.来替代)
|
|
@@ -178,32 +166,41 @@ function objectFill(source, target, fillable) {
|
|
|
178
166
|
* @returns
|
|
179
167
|
*/
|
|
180
168
|
function objectGet(obj, path, strict = false) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
169
|
+
path = path.replace(/\[(\w+)\]/g, '.$1');
|
|
170
|
+
path = path.replace(/^\./, '');
|
|
171
|
+
const keyArr = path.split('.');
|
|
172
|
+
let tempObj = obj;
|
|
173
|
+
let i = 0;
|
|
174
|
+
for (let len = keyArr.length; i < len - 1; ++i) {
|
|
175
|
+
const key = keyArr[i];
|
|
176
|
+
if (isNumber(Number(key)) && Array.isArray(tempObj)) {
|
|
177
|
+
tempObj = tempObj[key];
|
|
178
|
+
} else if (isObject(tempObj) && objectHas(tempObj, key)) {
|
|
179
|
+
tempObj = tempObj[key];
|
|
180
|
+
} else {
|
|
181
|
+
tempObj = undefined;
|
|
182
|
+
if (strict) {
|
|
183
|
+
throw new Error('[Object] objectGet path 路径不正确');
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
201
186
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
p: tempObj,
|
|
190
|
+
k: tempObj ? keyArr[i] : undefined,
|
|
191
|
+
v: tempObj ? tempObj[keyArr[i]] : undefined
|
|
192
|
+
};
|
|
207
193
|
}
|
|
208
194
|
|
|
209
|
-
export {
|
|
195
|
+
export {
|
|
196
|
+
isPlainObject,
|
|
197
|
+
objectAssign,
|
|
198
|
+
objectEach,
|
|
199
|
+
objectEachAsync,
|
|
200
|
+
objectFill,
|
|
201
|
+
objectGet,
|
|
202
|
+
objectMap,
|
|
203
|
+
objectAssign as objectMerge,
|
|
204
|
+
objectOmit,
|
|
205
|
+
objectPick
|
|
206
|
+
};
|
package/dist/esm/path.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -9,48 +9,44 @@
|
|
|
9
9
|
* @param {string} path
|
|
10
10
|
* @returns {string}
|
|
11
11
|
*/
|
|
12
|
-
const pathNormalize =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return back();
|
|
51
|
-
push(slice);
|
|
52
|
-
});
|
|
53
|
-
return points.join('/');
|
|
12
|
+
const pathNormalize = path => {
|
|
13
|
+
const slices = path
|
|
14
|
+
.replace(/\\/g, '/')
|
|
15
|
+
.replace(/\/{2,}/g, '/')
|
|
16
|
+
.replace(/\.{3,}/g, '..')
|
|
17
|
+
.replace(/\/\.\//g, '/')
|
|
18
|
+
.split('/')
|
|
19
|
+
.map(point => point.trim());
|
|
20
|
+
const isCurrentSlice = slice => slice === '.';
|
|
21
|
+
const isParentSlice = slice => slice === '..';
|
|
22
|
+
const points = [];
|
|
23
|
+
let inPoints = false;
|
|
24
|
+
const push = point => {
|
|
25
|
+
points.push(point);
|
|
26
|
+
};
|
|
27
|
+
const back = () => {
|
|
28
|
+
if (points.length === 0) return;
|
|
29
|
+
const lastSlice = points[points.length - 1];
|
|
30
|
+
if (isParentSlice(lastSlice)) {
|
|
31
|
+
points.push('..');
|
|
32
|
+
} else {
|
|
33
|
+
points.pop();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
slices.forEach(slice => {
|
|
37
|
+
const isCurrent = isCurrentSlice(slice);
|
|
38
|
+
const isParent = isParentSlice(slice);
|
|
39
|
+
// 未进入实际路径
|
|
40
|
+
if (!inPoints) {
|
|
41
|
+
push(slice);
|
|
42
|
+
inPoints = !isCurrent && !isParent;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (isCurrent) return;
|
|
46
|
+
if (isParent) return back();
|
|
47
|
+
push(slice);
|
|
48
|
+
});
|
|
49
|
+
return points.join('/');
|
|
54
50
|
};
|
|
55
51
|
/**
|
|
56
52
|
* 路径合并
|
package/dist/esm/qs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -13,30 +13,26 @@ import { isUndefined, isArray, isString, isNumber, isBoolean, isDate } from './t
|
|
|
13
13
|
* @returns {Params}
|
|
14
14
|
*/
|
|
15
15
|
function qsParse(queryString) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
if (isArray(result[key])) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
result[key] = params.getAll(key);
|
|
16
|
+
const params = new URLSearchParams(queryString);
|
|
17
|
+
const result = {};
|
|
18
|
+
for (const [key, val] of params.entries()) {
|
|
19
|
+
if (isUndefined(result[key])) {
|
|
20
|
+
result[key] = val;
|
|
21
|
+
continue;
|
|
27
22
|
}
|
|
28
|
-
|
|
23
|
+
if (isArray(result[key])) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
result[key] = params.getAll(key);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
29
|
}
|
|
30
|
-
const defaultReplacer =
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return val ? 'true' : 'false';
|
|
37
|
-
if (isDate(val))
|
|
38
|
-
return val.toISOString();
|
|
39
|
-
return null;
|
|
30
|
+
const defaultReplacer = val => {
|
|
31
|
+
if (isString(val)) return val;
|
|
32
|
+
if (isNumber(val)) return String(val);
|
|
33
|
+
if (isBoolean(val)) return val ? 'true' : 'false';
|
|
34
|
+
if (isDate(val)) return val.toISOString();
|
|
35
|
+
return null;
|
|
40
36
|
};
|
|
41
37
|
/**
|
|
42
38
|
* 字符化查询对象,内部使用的是浏览器内置的 URLSearchParams 进行处理
|
|
@@ -45,24 +41,21 @@ const defaultReplacer = (val) => {
|
|
|
45
41
|
* @returns {string}
|
|
46
42
|
*/
|
|
47
43
|
function qsStringify(query, replacer = defaultReplacer) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
return params.toString();
|
|
44
|
+
const params = new URLSearchParams();
|
|
45
|
+
objectEach(query, (val, key) => {
|
|
46
|
+
if (isArray(val)) {
|
|
47
|
+
val.forEach(i => {
|
|
48
|
+
const replaced = replacer(i);
|
|
49
|
+
if (replaced === null) return;
|
|
50
|
+
params.append(key.toString(), replaced);
|
|
51
|
+
});
|
|
52
|
+
} else {
|
|
53
|
+
const replaced = replacer(val);
|
|
54
|
+
if (replaced === null) return;
|
|
55
|
+
params.set(key.toString(), replaced);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return params.toString();
|
|
66
59
|
}
|
|
67
60
|
|
|
68
61
|
export { qsParse, qsStringify };
|
package/dist/esm/random.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* sculp-js v1.13.
|
|
2
|
+
* sculp-js v1.13.6
|
|
3
3
|
* (c) 2023-present chandq
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -22,46 +22,43 @@ const STRING_POOL = `${STRING_ARABIC_NUMERALS}${STRING_UPPERCASE_ALPHA}${STRING_
|
|
|
22
22
|
* @returns {string}
|
|
23
23
|
*/
|
|
24
24
|
const randomString = (length, pool) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
result += _pool[index];
|
|
46
|
-
}
|
|
47
|
-
return result;
|
|
25
|
+
let _length = 0;
|
|
26
|
+
let _pool = STRING_POOL;
|
|
27
|
+
if (isString(pool)) {
|
|
28
|
+
_length = length;
|
|
29
|
+
_pool = pool;
|
|
30
|
+
} else if (isNumber(length)) {
|
|
31
|
+
_length = length;
|
|
32
|
+
} else if (isString(length)) {
|
|
33
|
+
_pool = length;
|
|
34
|
+
}
|
|
35
|
+
let times = Math.max(_length, 1);
|
|
36
|
+
let result = '';
|
|
37
|
+
const min = 0;
|
|
38
|
+
const max = _pool.length - 1;
|
|
39
|
+
if (max < 2) throw new Error('字符串池长度不能少于 2');
|
|
40
|
+
while (times--) {
|
|
41
|
+
const index = randomNumber(min, max);
|
|
42
|
+
result += _pool[index];
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
48
45
|
};
|
|
49
46
|
/**
|
|
50
47
|
* 优先浏览器原生能力获取 UUID v4
|
|
51
48
|
* @returns {string}
|
|
52
49
|
*/
|
|
53
50
|
function randomUuid() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
return str;
|
|
51
|
+
if (typeof URL === 'undefined' || !URL.createObjectURL || typeof Blob === 'undefined') {
|
|
52
|
+
const hex = '0123456789abcdef';
|
|
53
|
+
const model = 'xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx';
|
|
54
|
+
let str = '';
|
|
55
|
+
for (let i = 0; i < model.length; i++) {
|
|
56
|
+
const rnd = randomNumber(0, 15);
|
|
57
|
+
str += model[i] == '-' || model[i] == '4' ? model[i] : hex[rnd];
|
|
63
58
|
}
|
|
64
|
-
return
|
|
59
|
+
return str;
|
|
60
|
+
}
|
|
61
|
+
return /[^/]+$/.exec(URL.createObjectURL(new Blob()).slice())[0];
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
export { STRING_POOL, randomNumber, randomString, randomUuid };
|