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.
Files changed (119) hide show
  1. package/dist/cjs/_virtual/_commonjsHelpers.js +3 -3
  2. package/dist/cjs/array.js +36 -46
  3. package/dist/cjs/async.js +41 -43
  4. package/dist/cjs/base64.js +77 -66
  5. package/dist/cjs/clipboard.js +54 -53
  6. package/dist/cjs/cloneDeep.js +90 -91
  7. package/dist/cjs/cookie.js +27 -30
  8. package/dist/cjs/date.js +101 -98
  9. package/dist/cjs/dom.js +114 -121
  10. package/dist/cjs/download.js +77 -78
  11. package/dist/cjs/easing.js +29 -32
  12. package/dist/cjs/file.js +147 -152
  13. package/dist/cjs/func.js +64 -78
  14. package/dist/cjs/index.js +1 -3
  15. package/dist/cjs/math.js +32 -38
  16. package/dist/cjs/node_modules/bezier-easing/src/index.js +35 -23
  17. package/dist/cjs/number.js +58 -61
  18. package/dist/cjs/object.js +112 -126
  19. package/dist/cjs/path.js +39 -43
  20. package/dist/cjs/qs.js +34 -41
  21. package/dist/cjs/random.js +31 -34
  22. package/dist/cjs/string.js +62 -63
  23. package/dist/cjs/tooltip.js +66 -69
  24. package/dist/cjs/tree.js +265 -263
  25. package/dist/cjs/type.js +42 -46
  26. package/dist/cjs/unique.js +39 -42
  27. package/dist/cjs/url.js +47 -48
  28. package/dist/cjs/validator.js +38 -38
  29. package/dist/cjs/variable.js +27 -21
  30. package/dist/cjs/watermark.js +78 -67
  31. package/dist/esm/array.js +36 -46
  32. package/dist/esm/async.js +41 -43
  33. package/dist/esm/base64.js +77 -66
  34. package/dist/esm/clipboard.js +55 -54
  35. package/dist/esm/cloneDeep.js +90 -91
  36. package/dist/esm/cookie.js +27 -30
  37. package/dist/esm/date.js +101 -98
  38. package/dist/esm/dom.js +114 -121
  39. package/dist/esm/download.js +78 -79
  40. package/dist/esm/easing.js +29 -32
  41. package/dist/esm/file.js +147 -152
  42. package/dist/esm/func.js +64 -78
  43. package/dist/esm/index.js +96 -8
  44. package/dist/esm/math.js +32 -38
  45. package/dist/esm/number.js +58 -61
  46. package/dist/esm/object.js +124 -127
  47. package/dist/esm/path.js +39 -43
  48. package/dist/esm/qs.js +34 -41
  49. package/dist/esm/random.js +31 -34
  50. package/dist/esm/string.js +74 -64
  51. package/dist/esm/tooltip.js +66 -69
  52. package/dist/esm/tree.js +265 -263
  53. package/dist/esm/type.js +68 -47
  54. package/dist/esm/unique.js +39 -42
  55. package/dist/esm/url.js +47 -48
  56. package/dist/esm/validator.js +56 -39
  57. package/dist/esm/variable.js +27 -21
  58. package/dist/esm/watermark.js +79 -68
  59. package/dist/types/array.d.ts +0 -1
  60. package/dist/types/async.d.ts +0 -1
  61. package/dist/types/base64.d.ts +0 -1
  62. package/dist/types/clipboard.d.ts +0 -1
  63. package/dist/types/cloneDeep.d.ts +0 -1
  64. package/dist/types/cookie.d.ts +0 -1
  65. package/dist/types/date.d.ts +0 -1
  66. package/dist/types/dom.d.ts +0 -1
  67. package/dist/types/download.d.ts +0 -1
  68. package/dist/types/easing.d.ts +0 -1
  69. package/dist/types/file.d.ts +0 -1
  70. package/dist/types/func.d.ts +0 -1
  71. package/dist/types/index.d.ts +0 -1
  72. package/dist/types/math.d.ts +0 -1
  73. package/dist/types/number.d.ts +0 -1
  74. package/dist/types/object.d.ts +0 -1
  75. package/dist/types/path.d.ts +0 -1
  76. package/dist/types/qs.d.ts +0 -1
  77. package/dist/types/random.d.ts +0 -1
  78. package/dist/types/string.d.ts +0 -1
  79. package/dist/types/tooltip.d.ts +0 -1
  80. package/dist/types/tree.d.ts +2 -2
  81. package/dist/types/type.d.ts +0 -1
  82. package/dist/types/unique.d.ts +0 -1
  83. package/dist/types/url.d.ts +0 -1
  84. package/dist/types/validator.d.ts +0 -1
  85. package/dist/types/variable.d.ts +0 -1
  86. package/dist/types/watermark.d.ts +0 -1
  87. package/dist/umd/index.min.js +2 -2
  88. package/package.json +12 -6
  89. package/dist/types/array.d.ts.map +0 -1
  90. package/dist/types/async.d.ts.map +0 -1
  91. package/dist/types/base64.d.ts.map +0 -1
  92. package/dist/types/clipboard.d.ts.map +0 -1
  93. package/dist/types/cloneDeep.d.ts.map +0 -1
  94. package/dist/types/cookie.d.ts.map +0 -1
  95. package/dist/types/core-index.d.ts +0 -17
  96. package/dist/types/core-index.d.ts.map +0 -1
  97. package/dist/types/date.d.ts.map +0 -1
  98. package/dist/types/dom.d.ts.map +0 -1
  99. package/dist/types/download.d.ts.map +0 -1
  100. package/dist/types/easing.d.ts.map +0 -1
  101. package/dist/types/file.d.ts.map +0 -1
  102. package/dist/types/func.d.ts.map +0 -1
  103. package/dist/types/index.d.ts.map +0 -1
  104. package/dist/types/index.js +0 -3278
  105. package/dist/types/math.d.ts.map +0 -1
  106. package/dist/types/number.d.ts.map +0 -1
  107. package/dist/types/object.d.ts.map +0 -1
  108. package/dist/types/path.d.ts.map +0 -1
  109. package/dist/types/qs.d.ts.map +0 -1
  110. package/dist/types/random.d.ts.map +0 -1
  111. package/dist/types/string.d.ts.map +0 -1
  112. package/dist/types/tooltip.d.ts.map +0 -1
  113. package/dist/types/tree.d.ts.map +0 -1
  114. package/dist/types/type.d.ts.map +0 -1
  115. package/dist/types/unique.d.ts.map +0 -1
  116. package/dist/types/url.d.ts.map +0 -1
  117. package/dist/types/validator.d.ts.map +0 -1
  118. package/dist/types/variable.d.ts.map +0 -1
  119. package/dist/types/watermark.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.13.3-beta.0
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 = (obj) => {
15
- if (!isObject(obj))
16
- return false;
17
- const proto = Object.getPrototypeOf(obj);
18
- // 对象无原型
19
- if (!proto)
20
- return true;
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
- for (const key in obj) {
31
- if (!objectHas(obj, key))
32
- continue;
33
- if (iterator(obj[key], key) === false)
34
- break;
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
- for (const key in obj) {
46
- if (!objectHas(obj, key))
47
- continue;
48
- if ((await iterator(obj[key], key)) === false)
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
- const obj2 = {};
60
- for (const key in obj) {
61
- if (!objectHas(obj, key))
62
- continue;
63
- obj2[key] = iterator(obj[key], key);
64
- }
65
- // @ts-ignore
66
- obj = null;
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
- const obj2 = {};
77
- objectEach(obj, (v, k) => {
78
- if (keys.includes(k)) {
79
- // @ts-ignore
80
- obj2[k] = v;
81
- }
82
- });
83
- // @ts-ignore
84
- obj = null;
85
- return obj2;
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
- const obj2 = {};
95
- objectEach(obj, (v, k) => {
96
- if (!keys.includes(k)) {
97
- // @ts-ignore
98
- obj2[k] = v;
99
- }
100
- });
101
- // @ts-ignore
102
- obj = null;
103
- return obj2;
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
- if (isUndefined(target))
107
- return source;
108
- const sourceType = typeIs(source);
109
- const targetType = typeIs(target);
110
- if (sourceType !== targetType) {
111
- if (isArray(target))
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
- const map = new Map();
149
- for (let i = 0, len = targets.length; i < len; i++) {
150
- const target = targets[i];
151
- // @ts-ignore
152
- source = merge(map, source, target);
153
- }
154
- map.clear();
155
- return source;
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
- const _fillable = fillable || ((source, target, key) => source[key] === undefined);
166
- objectEach(target, (val, key) => {
167
- if (_fillable(source, target, key)) {
168
- source[key] = val;
169
- }
170
- });
171
- return source;
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
- path = path.replace(/\[(\w+)\]/g, '.$1');
182
- path = path.replace(/^\./, '');
183
- const keyArr = path.split('.');
184
- let tempObj = obj;
185
- let i = 0;
186
- for (let len = keyArr.length; i < len - 1; ++i) {
187
- const key = keyArr[i];
188
- if (isNumber(Number(key)) && Array.isArray(tempObj)) {
189
- tempObj = tempObj[key];
190
- }
191
- else if (isObject(tempObj) && objectHas(tempObj, key)) {
192
- tempObj = tempObj[key];
193
- }
194
- else {
195
- tempObj = undefined;
196
- if (strict) {
197
- throw new Error('[Object] objectGet path 路径不正确');
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
- return {
203
- p: tempObj,
204
- k: tempObj ? keyArr[i] : undefined,
205
- v: tempObj ? tempObj[keyArr[i]] : undefined
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 { isPlainObject, objectAssign, objectEach, objectEachAsync, objectFill, objectGet, objectMap, objectAssign as objectMerge, objectOmit, objectPick };
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.3-beta.0
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 = (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)
29
- return;
30
- const lastSlice = points[points.length - 1];
31
- if (isParentSlice(lastSlice)) {
32
- points.push('..');
33
- }
34
- else {
35
- points.pop();
36
- }
37
- };
38
- slices.forEach(slice => {
39
- const isCurrent = isCurrentSlice(slice);
40
- const isParent = isParentSlice(slice);
41
- // 未进入实际路径
42
- if (!inPoints) {
43
- push(slice);
44
- inPoints = !isCurrent && !isParent;
45
- return;
46
- }
47
- if (isCurrent)
48
- return;
49
- if (isParent)
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.3-beta.0
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
- 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;
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
- return result;
23
+ if (isArray(result[key])) {
24
+ continue;
25
+ }
26
+ result[key] = params.getAll(key);
27
+ }
28
+ return result;
29
29
  }
30
- const defaultReplacer = (val) => {
31
- if (isString(val))
32
- return val;
33
- if (isNumber(val))
34
- return String(val);
35
- if (isBoolean(val))
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
- const params = new URLSearchParams();
49
- objectEach(query, (val, key) => {
50
- if (isArray(val)) {
51
- val.forEach(i => {
52
- const replaced = replacer(i);
53
- if (replaced === null)
54
- return;
55
- params.append(key.toString(), replaced);
56
- });
57
- }
58
- else {
59
- const replaced = replacer(val);
60
- if (replaced === null)
61
- return;
62
- params.set(key.toString(), replaced);
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 };
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * sculp-js v1.13.3-beta.0
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
- let _length = 0;
26
- let _pool = STRING_POOL;
27
- if (isString(pool)) {
28
- _length = length;
29
- _pool = pool;
30
- }
31
- else if (isNumber(length)) {
32
- _length = length;
33
- }
34
- else if (isString(length)) {
35
- _pool = length;
36
- }
37
- let times = Math.max(_length, 1);
38
- let result = '';
39
- const min = 0;
40
- const max = _pool.length - 1;
41
- if (max < 2)
42
- throw new Error('字符串池长度不能少于 2');
43
- while (times--) {
44
- const index = randomNumber(min, max);
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
- if (typeof URL === 'undefined' || !URL.createObjectURL || typeof Blob === 'undefined') {
55
- const hex = '0123456789abcdef';
56
- const model = 'xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx';
57
- let str = '';
58
- for (let i = 0; i < model.length; i++) {
59
- const rnd = randomNumber(0, 15);
60
- str += model[i] == '-' || model[i] == '4' ? model[i] : hex[rnd];
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 /[^/]+$/.exec(URL.createObjectURL(new Blob()).slice())[0];
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 };