@whitesev/utils 2.9.11 → 2.9.13

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 (73) hide show
  1. package/README.md +176 -176
  2. package/dist/index.amd.js +159 -101
  3. package/dist/index.amd.js.map +1 -1
  4. package/dist/index.amd.min.js +1 -1
  5. package/dist/index.amd.min.js.map +1 -1
  6. package/dist/index.cjs.js +159 -101
  7. package/dist/index.cjs.js.map +1 -1
  8. package/dist/index.cjs.min.js +1 -1
  9. package/dist/index.cjs.min.js.map +1 -1
  10. package/dist/index.esm.js +159 -101
  11. package/dist/index.esm.js.map +1 -1
  12. package/dist/index.esm.min.js +1 -1
  13. package/dist/index.esm.min.js.map +1 -1
  14. package/dist/index.iife.js +159 -101
  15. package/dist/index.iife.js.map +1 -1
  16. package/dist/index.iife.min.js +1 -1
  17. package/dist/index.iife.min.js.map +1 -1
  18. package/dist/index.system.js +159 -101
  19. package/dist/index.system.js.map +1 -1
  20. package/dist/index.system.min.js +1 -1
  21. package/dist/index.system.min.js.map +1 -1
  22. package/dist/index.umd.js +159 -101
  23. package/dist/index.umd.js.map +1 -1
  24. package/dist/index.umd.min.js +1 -1
  25. package/dist/index.umd.min.js.map +1 -1
  26. package/dist/types/src/Dictionary.d.ts +2 -0
  27. package/dist/types/src/Utils.d.ts +5 -2
  28. package/dist/types/src/types/Httpx.d.ts +1344 -1344
  29. package/dist/types/src/types/Log.d.ts +19 -19
  30. package/dist/types/src/types/Progress.d.ts +20 -20
  31. package/dist/types/src/types/React.d.ts +119 -119
  32. package/dist/types/src/types/TryCatch.d.ts +9 -9
  33. package/dist/types/src/types/UtilsGMCookie.d.ts +93 -93
  34. package/dist/types/src/types/UtilsGMMenu.d.ts +77 -77
  35. package/dist/types/src/types/Vue2.d.ts +166 -166
  36. package/dist/types/src/types/WindowApi.d.ts +14 -14
  37. package/dist/types/src/types/ajaxHooker.d.ts +155 -155
  38. package/dist/types/src/types/env.d.ts +7 -7
  39. package/dist/types/src/types/global.d.ts +31 -31
  40. package/package.json +26 -24
  41. package/src/ColorConversion.ts +118 -118
  42. package/src/CommonUtil.ts +301 -285
  43. package/src/DOMUtils.ts +251 -251
  44. package/src/Dictionary.ts +205 -199
  45. package/src/GBKEncoder.ts +108 -108
  46. package/src/Hooks.ts +73 -73
  47. package/src/Httpx.ts +1457 -1457
  48. package/src/LockFunction.ts +65 -62
  49. package/src/Log.ts +233 -233
  50. package/src/ModuleRaid.js +378 -360
  51. package/src/Progress.ts +108 -108
  52. package/src/TryCatch.ts +86 -86
  53. package/src/Utils.ts +3860 -3852
  54. package/src/UtilsCommon.ts +14 -14
  55. package/src/UtilsGMCookie.ts +273 -273
  56. package/src/UtilsGMMenu.ts +460 -460
  57. package/src/Vue.ts +233 -233
  58. package/src/WindowApi.ts +59 -59
  59. package/src/ajaxHooker/ajaxHooker.js +606 -538
  60. package/src/ajaxHooker/ajaxHooker1.2.4.js +440 -438
  61. package/src/indexedDB.ts +497 -497
  62. package/src/types/Httpx.d.ts +1344 -1344
  63. package/src/types/Log.d.ts +19 -19
  64. package/src/types/Progress.d.ts +20 -20
  65. package/src/types/React.d.ts +119 -119
  66. package/src/types/TryCatch.d.ts +9 -9
  67. package/src/types/UtilsGMCookie.d.ts +93 -93
  68. package/src/types/UtilsGMMenu.d.ts +77 -77
  69. package/src/types/Vue2.d.ts +166 -166
  70. package/src/types/WindowApi.d.ts +14 -14
  71. package/src/types/ajaxHooker.d.ts +155 -155
  72. package/src/types/env.d.ts +7 -7
  73. package/src/types/global.d.ts +31 -31
package/src/CommonUtil.ts CHANGED
@@ -1,285 +1,301 @@
1
- import { TryCatch } from "./TryCatch";
2
-
3
- class CommonUtil {
4
- /**
5
- * JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
6
- * @param target 目标数据
7
- * @param source 源数据
8
- * @param isAdd 是否可以追加键,默认false
9
- * @example
10
- * Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
11
- * >
12
- * {
13
- "1": 1,
14
- "2": {
15
- "3": 4
16
- }
17
- }
18
- */
19
- assign<T1, T2 extends object, T3 extends boolean>(target: T1, source: T2, isAdd?: T3): T3 extends true ? T1 & T2 : T1;
20
- assign(target = {}, source = {}, isAdd = false) {
21
- const UtilsContext = this;
22
- if (Array.isArray(source)) {
23
- const canTraverse = source.filter((item) => {
24
- return typeof item === "object";
25
- });
26
- if (!canTraverse.length) {
27
- return source;
28
- }
29
- }
30
- if (source == null) {
31
- return target;
32
- }
33
- if (target == null) {
34
- target = {};
35
- }
36
- // 当前遍历的目标对象
37
- let iteratorTarget;
38
- if (isAdd) {
39
- // 追加并覆盖是以source为准
40
- iteratorTarget = source;
41
- } else {
42
- // 覆盖以target为准
43
- iteratorTarget = target;
44
- }
45
- for (const keyName in iteratorTarget) {
46
- if (!isAdd && !(keyName in source)) {
47
- // 仅替换 但是源端没有此键
48
- continue;
49
- }
50
- const targetValue = Reflect.get(target, keyName);
51
- const sourceValue = Reflect.get(source, keyName);
52
- if (
53
- typeof sourceValue === "object" &&
54
- sourceValue != null &&
55
- keyName in target &&
56
- !UtilsContext.isDOM(sourceValue)
57
- ) {
58
- // 源端的值是object类型,且不是元素节点
59
- // 如果是数组,那此数组中有值,清空旧的数组再赋值
60
- let childObjectValue;
61
- if (Array.isArray(sourceValue)) {
62
- if (Array.isArray(targetValue)) {
63
- targetValue.length = 0;
64
- }
65
- childObjectValue = sourceValue;
66
- } else {
67
- childObjectValue = UtilsContext.assign(targetValue, sourceValue, isAdd);
68
- }
69
- Reflect.set(target, keyName, childObjectValue);
70
- } else {
71
- /* 直接赋值 */
72
- Reflect.set(target, keyName, sourceValue);
73
- }
74
- }
75
-
76
- return target;
77
- }
78
- /**
79
- * 判断对象或数据是否为空
80
- * + `String`判空的值,如 ""、"null"、"undefined"、" "
81
- * + `Number`判空的值,如 0
82
- * + `Object`判空的值,如 {}、null、undefined
83
- * + `Array`(存在属性Symbol.iterator)判空的值,如 []
84
- * + `Boolean`判空的值,如false
85
- * + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
86
- * @returns
87
- * + true 为空
88
- * + false 不为空
89
- * @example
90
- Utils.isNull({});
91
- > true
92
- * @example
93
- Utils.isNull([]);
94
- > true
95
- * @example
96
- Utils.isNull(" ");
97
- > true
98
- * @example
99
- Utils.isNull(function(){});
100
- > true
101
- * @example
102
- Utils.isNull(()=>{}));
103
- > true
104
- * @example
105
- Utils.isNull("undefined");
106
- > true
107
- * @example
108
- Utils.isNull("null");
109
- > true
110
- * @example
111
- Utils.isNull(" ", false);
112
- > true
113
- * @example
114
- Utils.isNull([1],[]);
115
- > false
116
- * @example
117
- Utils.isNull([],[1]);
118
- > false
119
- * @example
120
- Utils.isNull(false,[123]);
121
- > false
122
- **/
123
- isNull<T>(value: T | undefined | null): value is null | undefined;
124
- isNull(...args: any[]): boolean;
125
- isNull(...args: any[]): boolean {
126
- let result = true;
127
- const checkList = [...args];
128
- for (const objItem of checkList) {
129
- let itemResult = false;
130
- if (objItem === null || objItem === undefined) {
131
- itemResult = true;
132
- } else {
133
- switch (typeof objItem) {
134
- case "object":
135
- if (typeof objItem[Symbol.iterator] === "function") {
136
- /* 可迭代 */
137
- itemResult = objItem.length === 0;
138
- } else {
139
- itemResult = Object.keys(objItem).length === 0;
140
- }
141
- break;
142
- case "number":
143
- itemResult = objItem === 0;
144
- break;
145
- case "string":
146
- itemResult = objItem.trim() === "" || objItem === "null" || objItem === "undefined";
147
- break;
148
- case "boolean":
149
- itemResult = !objItem;
150
- break;
151
- case "function": {
152
- const funcStr = objItem.toString().replace(/\s/g, "");
153
- /* 排除()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){} */
154
- itemResult = Boolean(funcStr.match(/^\(.*?\)=>\{\}$|^function.*?\(.*?\)\{\}$/));
155
- break;
156
- }
157
- }
158
- }
159
- result = result && itemResult;
160
- }
161
-
162
- return result;
163
- }
164
- /**
165
- * 判断对象是否是元素
166
- * @param target
167
- * @returns
168
- * + true 是元素
169
- * + false 不是元素
170
- * @example
171
- * Utils.isDOM(document.querySelector("a"))
172
- * > true
173
- */
174
- isDOM(target: any): boolean {
175
- return target instanceof Node;
176
- }
177
- /**
178
- * 判断对象是否不为空
179
- * @returns {boolean}
180
- * + true 不为空
181
- * + false 为空
182
- * @example
183
- * Utils.isNotNull("123");
184
- * > true
185
- */
186
- isNotNull<T>(value: T | null | undefined): value is T;
187
- isNotNull(...args: any[]): boolean;
188
- isNotNull(...args: any[]): boolean {
189
- const UtilsContext = this;
190
- return !UtilsContext.isNull.apply(this, args);
191
- }
192
- /**
193
- * 深拷贝
194
- * @param obj 对象
195
- */
196
- deepClone<T extends object | undefined | null>(obj?: T): T;
197
- deepClone<T extends object | undefined | null>(obj?: T) {
198
- const UtilsContext = this;
199
- if (obj === void 0) return void 0;
200
- if (obj === null) return null;
201
- const clone = obj instanceof Array ? [] : {};
202
- for (const [key, value] of Object.entries(obj)) {
203
- if (typeof value === "object") {
204
- Reflect.set(clone, key, UtilsContext.deepClone(value));
205
- } else {
206
- Reflect.set(clone, key, value);
207
- }
208
- }
209
- return clone;
210
- }
211
- /**
212
- * 覆盖对象中的函数this指向
213
- * @param target 需要覆盖的对象
214
- * @param [objectThis] 覆盖的this指向,如果为传入,则默认为对象本身
215
- */
216
- coverObjectFunctionThis(target: any, objectThis?: any) {
217
- if (typeof target !== "object" || target === null) {
218
- throw new Error("target must be object");
219
- }
220
- objectThis = objectThis || target;
221
- Object.keys(target).forEach((key) => {
222
- if (typeof target[key] === "function") {
223
- target[key] = target[key].bind(objectThis);
224
- }
225
- });
226
- }
227
- /**
228
- * 字符串转Object对象,类似'{"test":""}' => {"test":""}
229
- * @param data
230
- * @param errorCallBack (可选)错误回调
231
- * @example
232
- * Utils.toJSON("{123:123}")
233
- * > {123:123}
234
- */
235
- toJSON<T = any>(data: string | null, errorCallBack?: (error: Error) => void): T;
236
- toJSON<T = any>(data: string | null, errorCallBack?: (error: Error) => void): T {
237
- let result: any = {};
238
- if (data == null) {
239
- return result as T;
240
- }
241
- if (typeof data === "object") {
242
- return data as T;
243
- }
244
- TryCatch()
245
- .config({ log: false })
246
- .error(() => {
247
- TryCatch()
248
- .error(() => {
249
- try {
250
- result = new Function(`return ${data}`)();
251
- } catch (error2: any) {
252
- if (typeof errorCallBack === "function") {
253
- errorCallBack(error2);
254
- }
255
- }
256
- })
257
- .run(() => {
258
- if (
259
- data &&
260
- /^[\],:{}\s]*$/.test(
261
- data
262
- .replace(/\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
263
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, "]")
264
- .replace(/(?:^|:|,)(?:\s*\[)+/g, "")
265
- )
266
- ) {
267
- result = new Function(`return ${data}`)();
268
- } else {
269
- if (typeof errorCallBack === "function") {
270
- errorCallBack(new Error("target is not JSON object"));
271
- }
272
- }
273
- });
274
- })
275
- .run(() => {
276
- data = (data as string).trim();
277
- result = JSON.parse(data);
278
- });
279
- return result as T;
280
- }
281
- }
282
-
283
- const commonUtil = new CommonUtil();
284
-
285
- export { commonUtil as CommonUtil };
1
+ import { TryCatch } from "./TryCatch";
2
+
3
+ class CommonUtil {
4
+ /**
5
+ * JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
6
+ * @param target 目标数据
7
+ * @param source 源数据
8
+ * @param isAdd 是否可以追加键,默认false
9
+ * @example
10
+ * Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
11
+ * >
12
+ * {
13
+ "1": 1,
14
+ "2": {
15
+ "3": 4
16
+ }
17
+ }
18
+ */
19
+ assign<T1, T2 extends object, T3 extends boolean>(target: T1, source: T2, isAdd?: T3): T3 extends true ? T1 & T2 : T1;
20
+ assign(target = {}, source = {}, isAdd = false) {
21
+ const UtilsContext = this;
22
+ if (Array.isArray(source)) {
23
+ const canTraverse = source.filter((item) => {
24
+ return typeof item === "object";
25
+ });
26
+ if (!canTraverse.length) {
27
+ return source;
28
+ }
29
+ }
30
+ if (source == null) {
31
+ return target;
32
+ }
33
+ if (target == null) {
34
+ target = {};
35
+ }
36
+ // 当前遍历的目标对象
37
+ let iteratorTarget;
38
+ if (isAdd) {
39
+ // 追加并覆盖是以source为准
40
+ iteratorTarget = source;
41
+ } else {
42
+ // 覆盖以target为准
43
+ iteratorTarget = target;
44
+ }
45
+ for (const keyName in iteratorTarget) {
46
+ if (!isAdd && !(keyName in source)) {
47
+ // 仅替换 但是源端没有此键
48
+ continue;
49
+ }
50
+ const targetValue = Reflect.get(target, keyName);
51
+ const sourceValue = Reflect.get(source, keyName);
52
+ if (
53
+ typeof sourceValue === "object" &&
54
+ sourceValue != null &&
55
+ keyName in target &&
56
+ !UtilsContext.isDOM(sourceValue)
57
+ ) {
58
+ // 源端的值是object类型,且不是元素节点
59
+ // 如果是数组,那此数组中有值,清空旧的数组再赋值
60
+ let childObjectValue;
61
+ if (Array.isArray(sourceValue)) {
62
+ if (Array.isArray(targetValue)) {
63
+ targetValue.length = 0;
64
+ }
65
+ childObjectValue = sourceValue;
66
+ } else {
67
+ childObjectValue = UtilsContext.assign(targetValue, sourceValue, isAdd);
68
+ }
69
+ Reflect.set(target, keyName, childObjectValue);
70
+ } else {
71
+ /* 直接赋值 */
72
+ Reflect.set(target, keyName, sourceValue);
73
+ }
74
+ }
75
+
76
+ return target;
77
+ }
78
+ /**
79
+ * 判断对象或数据是否为空
80
+ * + `String`判空的值,如 ""、"null"、"undefined"、" "
81
+ * + `Number`判空的值,如 0
82
+ * + `Object`判空的值,如 {}、null、undefined
83
+ * + `Array`(存在属性Symbol.iterator)判空的值,如 []
84
+ * + `Boolean`判空的值,如false
85
+ * + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
86
+ * @returns
87
+ * + true 为空
88
+ * + false 不为空
89
+ * @example
90
+ Utils.isNull({});
91
+ > true
92
+ * @example
93
+ Utils.isNull([]);
94
+ > true
95
+ * @example
96
+ Utils.isNull(" ");
97
+ > true
98
+ * @example
99
+ Utils.isNull(function(){});
100
+ > true
101
+ * @example
102
+ Utils.isNull(()=>{}));
103
+ > true
104
+ * @example
105
+ Utils.isNull("undefined");
106
+ > true
107
+ * @example
108
+ Utils.isNull("null");
109
+ > true
110
+ * @example
111
+ Utils.isNull(" ", false);
112
+ > true
113
+ * @example
114
+ Utils.isNull([1],[]);
115
+ > false
116
+ * @example
117
+ Utils.isNull([],[1]);
118
+ > false
119
+ * @example
120
+ Utils.isNull(false,[123]);
121
+ > false
122
+ **/
123
+ isNull<T>(value: T | undefined | null): value is null | undefined;
124
+ isNull(...args: any[]): boolean;
125
+ isNull(...args: any[]): boolean {
126
+ let result = true;
127
+ const checkList = [...args];
128
+ for (const obj of checkList) {
129
+ let flag = false;
130
+ if (obj === null || obj === undefined) {
131
+ // null undefined
132
+ flag = true;
133
+ } else {
134
+ switch (typeof obj) {
135
+ case "object":
136
+ if (typeof obj[Symbol.iterator] === "function") {
137
+ // 可迭代
138
+ // Map Array NodeList HTMLCollection
139
+ if (obj instanceof Map) {
140
+ flag = obj.size === 0;
141
+ } else {
142
+ const length = obj.length;
143
+ if (typeof length === "number") {
144
+ flag = length === 0;
145
+ } else {
146
+ // 其它的不处理
147
+ }
148
+ }
149
+ } else {
150
+ if (obj?.toString() === "[object Object]") {
151
+ // {}
152
+ flag = Object.keys(obj).length === 0;
153
+ }
154
+ }
155
+ break;
156
+ case "number":
157
+ flag = isNaN(obj) ? true : obj === 0;
158
+ break;
159
+ case "string": {
160
+ const trimStr = obj.trim();
161
+ flag = trimStr.trim() === "" || trimStr === "null" || trimStr === "undefined";
162
+ break;
163
+ }
164
+ case "boolean":
165
+ flag = !obj;
166
+ break;
167
+ case "function": {
168
+ const funcStr = obj.toString().replace(/\s/g, "");
169
+ /* 排除()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){} */
170
+ flag = Boolean(funcStr.match(/^\(.*?\)=>\{\}$|^function.*?\(.*?\)\{\}$/));
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ result = result && flag;
176
+ }
177
+
178
+ return result;
179
+ }
180
+ /**
181
+ * 判断对象是否是元素
182
+ * @param target
183
+ * @returns
184
+ * + true 是元素
185
+ * + false 不是元素
186
+ * @example
187
+ * Utils.isDOM(document.querySelector("a"))
188
+ * > true
189
+ */
190
+ isDOM(target: any): boolean {
191
+ return target instanceof Node;
192
+ }
193
+ /**
194
+ * 判断对象是否不为空
195
+ * @returns {boolean}
196
+ * + true 不为空
197
+ * + false 为空
198
+ * @example
199
+ * Utils.isNotNull("123");
200
+ * > true
201
+ */
202
+ isNotNull<T>(value: T | null | undefined): value is T;
203
+ isNotNull(...args: any[]): boolean;
204
+ isNotNull(...args: any[]): boolean {
205
+ const UtilsContext = this;
206
+ return !UtilsContext.isNull.apply(this, args);
207
+ }
208
+ /**
209
+ * 深拷贝
210
+ * @param obj 对象
211
+ */
212
+ deepClone<T extends object | undefined | null>(obj?: T): T;
213
+ deepClone<T extends object | undefined | null>(obj?: T) {
214
+ const UtilsContext = this;
215
+ if (obj === void 0) return void 0;
216
+ if (obj === null) return null;
217
+ const clone = obj instanceof Array ? [] : {};
218
+ for (const [key, value] of Object.entries(obj)) {
219
+ if (typeof value === "object") {
220
+ Reflect.set(clone, key, UtilsContext.deepClone(value));
221
+ } else {
222
+ Reflect.set(clone, key, value);
223
+ }
224
+ }
225
+ return clone;
226
+ }
227
+ /**
228
+ * 覆盖对象中的函数this指向
229
+ * @param target 需要覆盖的对象
230
+ * @param [objectThis] 覆盖的this指向,如果为传入,则默认为对象本身
231
+ */
232
+ coverObjectFunctionThis(target: any, objectThis?: any) {
233
+ if (typeof target !== "object" || target === null) {
234
+ throw new Error("target must be object");
235
+ }
236
+ objectThis = objectThis || target;
237
+ Object.keys(target).forEach((key) => {
238
+ if (typeof target[key] === "function") {
239
+ target[key] = target[key].bind(objectThis);
240
+ }
241
+ });
242
+ }
243
+ /**
244
+ * 字符串转Object对象,类似'{"test":""}' => {"test":""}
245
+ * @param data
246
+ * @param errorCallBack (可选)错误回调
247
+ * @example
248
+ * Utils.toJSON("{123:123}")
249
+ * > {123:123}
250
+ */
251
+ toJSON<T = any>(data: string | null, errorCallBack?: (error: Error) => void): T;
252
+ toJSON<T = any>(data: string | null, errorCallBack?: (error: Error) => void): T {
253
+ let result: any = {};
254
+ if (data == null) {
255
+ return result as T;
256
+ }
257
+ if (typeof data === "object") {
258
+ return data as T;
259
+ }
260
+ TryCatch()
261
+ .config({ log: false })
262
+ .error(() => {
263
+ TryCatch()
264
+ .error(() => {
265
+ try {
266
+ result = new Function(`return ${data}`)();
267
+ } catch (error2: any) {
268
+ if (typeof errorCallBack === "function") {
269
+ errorCallBack(error2);
270
+ }
271
+ }
272
+ })
273
+ .run(() => {
274
+ if (
275
+ data &&
276
+ /^[\],:{}\s]*$/.test(
277
+ data
278
+ .replace(/\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
279
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, "]")
280
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, "")
281
+ )
282
+ ) {
283
+ result = new Function(`return ${data}`)();
284
+ } else {
285
+ if (typeof errorCallBack === "function") {
286
+ errorCallBack(new Error("target is not JSON object"));
287
+ }
288
+ }
289
+ });
290
+ })
291
+ .run(() => {
292
+ data = (data as string).trim();
293
+ result = JSON.parse(data);
294
+ });
295
+ return result as T;
296
+ }
297
+ }
298
+
299
+ const commonUtil = new CommonUtil();
300
+
301
+ export { commonUtil as CommonUtil };