@wutiange/log-listener-plugin 2.0.1-alpha.3 → 2.0.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.
Files changed (37) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +163 -163
  3. package/dist/src/HTTPInterceptor.js +2 -1
  4. package/dist/src/HTTPInterceptor.js.map +1 -1
  5. package/dist/src/__tests__/Server.test.js +4 -4
  6. package/dist/src/__tests__/Server.test.js.map +1 -1
  7. package/dist/src/__tests__/console.test.d.ts +1 -0
  8. package/dist/src/__tests__/console.test.js +29 -0
  9. package/dist/src/__tests__/console.test.js.map +1 -0
  10. package/dist/src/__tests__/utils.test.js +5 -1
  11. package/dist/src/__tests__/utils.test.js.map +1 -1
  12. package/dist/src/common.d.ts +1 -7
  13. package/dist/src/common.js +2 -14
  14. package/dist/src/common.js.map +1 -1
  15. package/dist/src/logPlugin.js +22 -17
  16. package/dist/src/logPlugin.js.map +1 -1
  17. package/dist/src/server.d.ts +21 -0
  18. package/dist/src/{Server.js → server.js} +47 -31
  19. package/dist/src/server.js.map +1 -0
  20. package/dist/src/utils.js +4 -4
  21. package/dist/src/utils.js.map +1 -1
  22. package/index.ts +3 -3
  23. package/package.json +59 -59
  24. package/src/HTTPInterceptor.ts +340 -339
  25. package/src/Server.ts +178 -167
  26. package/src/__mocks__/react-native/Libraries/Blob/FileReader.js +44 -44
  27. package/src/__mocks__/react-native/Libraries/Network/XHRInterceptor.js +39 -39
  28. package/src/__tests__/HTTPInterceptor.test.ts +322 -322
  29. package/src/__tests__/Server.test.ts +149 -149
  30. package/src/__tests__/utils.test.ts +113 -112
  31. package/src/common.ts +57 -70
  32. package/src/logPlugin.ts +231 -224
  33. package/src/logger.ts +14 -14
  34. package/src/utils.ts +112 -112
  35. package/tsconfig.json +26 -26
  36. package/dist/src/Server.d.ts +0 -20
  37. package/dist/src/Server.js.map +0 -1
package/src/utils.ts CHANGED
@@ -1,112 +1,112 @@
1
- import URL from "url-parse";
2
- import logger from "./logger";
3
-
4
- export function sleep(ms: number, isReject: boolean = false) {
5
- return new Promise((resolve, reject) => {
6
- setTimeout(isReject ? () => reject({
7
- code: 11001,
8
- key: '@wutiange/log-listener-plugin%%timeout',
9
- message: 'Timeout'
10
- }) : resolve, ms)
11
- })
12
- }
13
-
14
- // 检查 url 是否有端口号,不包含内置的端口号,比如 80 ,443 等
15
- export function hasPort(url: string) {
16
- // 如果 url 是空的或不是字符串,返回 false
17
- if (!url || typeof url !== 'string') {
18
- return false;
19
- }
20
-
21
- try {
22
- // 使用 URL 构造函数解析 URL
23
- const parsedUrl = new URL(url);
24
-
25
- // 检查 port 属性是否为空
26
- // 注意:如果使用默认端口(如 HTTP 的 80 或 HTTPS 的 443),port 会是空字符串
27
- return parsedUrl.port !== '';
28
- } catch (error) {
29
- logger.error(error)
30
- // 如果 URL 无效,捕获错误并返回 false
31
- return false;
32
- }
33
- }
34
-
35
-
36
- type Constructor<T = {}> = new (...args: any[]) => T;
37
-
38
- export function createClassWithErrorHandling<T extends Constructor>(BaseClass: T): T {
39
- return new Proxy(BaseClass, {
40
- construct(target: T, args: any[]): object {
41
- const instance = new target(...args);
42
- return new Proxy(instance, {
43
- get(target: any, prop: string | symbol): any {
44
- const value = target[prop];
45
- if (typeof value === 'function') {
46
- return function(this: any, ...args: any[]): any {
47
- try {
48
- const result = value.apply(this, args);
49
- if (result instanceof Promise) {
50
- return result.catch((error: Error) => {
51
- console.error(`Error in ${String(prop)}:`, error);
52
- throw error; // 重新抛出错误,以便调用者可以捕获它
53
- });
54
- }
55
- return result;
56
- } catch (error) {
57
- console.error(`Error in ${String(prop)}:`, error);
58
- throw error; // 重新抛出错误,以便调用者可以捕获它
59
- }
60
- };
61
- }
62
- return value;
63
- },
64
- set(target: any, prop: string | symbol, value: any): boolean {
65
- if (typeof value === 'function') {
66
- target[prop] = function(this: any, ...args: any[]): any {
67
- try {
68
- const result = value.apply(this, args);
69
- if (result instanceof Promise) {
70
- return result.catch((error: Error) => {
71
- console.error(`Error in ${String(prop)}:`, error);
72
- throw error;
73
- });
74
- }
75
- return result;
76
- } catch (error) {
77
- console.error(`Error in ${String(prop)}:`, error);
78
- throw error;
79
- }
80
- };
81
- } else {
82
- target[prop] = value;
83
- }
84
- return true;
85
- }
86
- });
87
- }
88
- });
89
- }
90
-
91
-
92
- export function formDataToString(formData: FormData): string {
93
- const boundary =
94
- '----WebKitFormBoundary' + Math.random().toString(36).substr(2);
95
- let result = '';
96
- // 这是 react-native 中的实现,这里面是存在这个方法的
97
- const parts = (formData as any).getParts();
98
- for (const part of parts) {
99
- result += `--${boundary}\r\n`;
100
- result += `Content-Disposition: ${part.headers['content-disposition']}\r\n`;
101
- if (part.headers['content-type']) {
102
- result += `Content-Type: ${part.headers['content-type']}\r\n`;
103
- }
104
- const value = 'string' in part ? part.string : part.uri;
105
- result += `Content-Length: ${value.length}\r\n\r\n`;
106
- result += `${value}\r\n`;
107
- }
108
- result += `--${boundary}--\r\n`;
109
- return result;
110
- }
111
-
112
-
1
+ import URL from "url-parse";
2
+ import logger from "./logger";
3
+
4
+ export function sleep(ms: number, isReject: boolean = false) {
5
+ return new Promise((resolve, reject) => {
6
+ setTimeout(isReject ? () => reject({
7
+ code: 11001,
8
+ key: '@wutiange/log-listener-plugin%%timeout',
9
+ message: 'Timeout'
10
+ }) : resolve, ms)
11
+ })
12
+ }
13
+
14
+ // 检查 url 是否有端口号,不包含内置的端口号,比如 80 ,443 等
15
+ export function hasPort(url: string) {
16
+ // 如果 url 是空的或不是字符串,返回 false
17
+ if (!url || typeof url !== 'string') {
18
+ return false;
19
+ }
20
+
21
+ try {
22
+ // 使用 URL 构造函数解析 URL
23
+ const parsedUrl = new URL(url);
24
+
25
+ // 检查 port 属性是否为空
26
+ // 注意:如果使用默认端口(如 HTTP 的 80 或 HTTPS 的 443),port 会是空字符串
27
+ return parsedUrl.port !== '';
28
+ } catch (error) {
29
+ logger.error(error)
30
+ // 如果 URL 无效,捕获错误并返回 false
31
+ return false;
32
+ }
33
+ }
34
+
35
+
36
+ type Constructor<T = {}> = new (...args: any[]) => T;
37
+
38
+ export function createClassWithErrorHandling<T extends Constructor>(BaseClass: T): T {
39
+ return new Proxy(BaseClass, {
40
+ construct(target: T, args: any[]): object {
41
+ const instance = new target(...args);
42
+ return new Proxy(instance, {
43
+ get(target: any, prop: string | symbol): any {
44
+ const value = target[prop];
45
+ if (typeof value === 'function') {
46
+ return function(this: any, ...args: any[]): any {
47
+ try {
48
+ const result = value.apply(this, args);
49
+ if (result instanceof Promise) {
50
+ return result.catch((error: Error) => {
51
+ logger.error(`Error in ${String(prop)}:`, error);
52
+ throw error; // 重新抛出错误,以便调用者可以捕获它
53
+ });
54
+ }
55
+ return result;
56
+ } catch (error) {
57
+ logger.error(`Error in ${String(prop)}:`, error);
58
+ throw error; // 重新抛出错误,以便调用者可以捕获它
59
+ }
60
+ };
61
+ }
62
+ return value;
63
+ },
64
+ set(target: any, prop: string | symbol, value: any): boolean {
65
+ if (typeof value === 'function') {
66
+ target[prop] = function(this: any, ...args: any[]): any {
67
+ try {
68
+ const result = value.apply(this, args);
69
+ if (result instanceof Promise) {
70
+ return result.catch((error: Error) => {
71
+ logger.error(`Error in ${String(prop)}:`, error);
72
+ throw error;
73
+ });
74
+ }
75
+ return result;
76
+ } catch (error) {
77
+ logger.error(`Error in ${String(prop)}:`, error);
78
+ throw error;
79
+ }
80
+ };
81
+ } else {
82
+ target[prop] = value;
83
+ }
84
+ return true;
85
+ }
86
+ });
87
+ }
88
+ });
89
+ }
90
+
91
+
92
+ export function formDataToString(formData: FormData): string {
93
+ const boundary =
94
+ '----WebKitFormBoundary' + Math.random().toString(36).substr(2);
95
+ let result = '';
96
+ // 这是 react-native 中的实现,这里面是存在这个方法的
97
+ const parts = (formData as any).getParts();
98
+ for (const part of parts) {
99
+ result += `--${boundary}\r\n`;
100
+ result += `Content-Disposition: ${part.headers['content-disposition']}\r\n`;
101
+ if (part.headers['content-type']) {
102
+ result += `Content-Type: ${part.headers['content-type']}\r\n`;
103
+ }
104
+ const value = 'string' in part ? part.string : part.uri;
105
+ result += `Content-Length: ${value.length}\r\n\r\n`;
106
+ result += `${value}\r\n`;
107
+ }
108
+ result += `--${boundary}--\r\n`;
109
+ return result;
110
+ }
111
+
112
+
package/tsconfig.json CHANGED
@@ -1,27 +1,27 @@
1
- {
2
- "compilerOptions": {
3
- "module": "NodeNext",
4
- "declaration": true,
5
- "noImplicitAny": true,
6
- "removeComments": true,
7
- "preserveConstEnums": true,
8
- "outDir": "dist",
9
- "sourceMap": true,
10
- "target": "es6",
11
- "moduleResolution": "NodeNext",
12
- "allowJs": true,
13
- "esModuleInterop": true,
14
- "skipLibCheck": true,
15
- "forceConsistentCasingInFileNames": true,
16
- "resolveJsonModule": true,
17
- "allowSyntheticDefaultImports": true
18
- },
19
- "exclude": ["node_modules", "**/*.spec.ts"],
20
- "include": [
21
- "src/**/*",
22
- "console.ts",
23
- "fetch.ts",
24
- "index.ts",
25
- "react-native-extensions.d.ts"
26
- ]
1
+ {
2
+ "compilerOptions": {
3
+ "module": "NodeNext",
4
+ "declaration": true,
5
+ "noImplicitAny": true,
6
+ "removeComments": true,
7
+ "preserveConstEnums": true,
8
+ "outDir": "dist",
9
+ "sourceMap": true,
10
+ "target": "es6",
11
+ "moduleResolution": "NodeNext",
12
+ "allowJs": true,
13
+ "esModuleInterop": true,
14
+ "skipLibCheck": true,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "resolveJsonModule": true,
17
+ "allowSyntheticDefaultImports": true
18
+ },
19
+ "exclude": ["node_modules", "**/*.spec.ts"],
20
+ "include": [
21
+ "src/**/*",
22
+ "console.ts",
23
+ "fetch.ts",
24
+ "index.ts",
25
+ "react-native-extensions.d.ts"
26
+ ]
27
27
  }
@@ -1,20 +0,0 @@
1
- declare class Server {
2
- private baseUrlObj;
3
- private timeout;
4
- private baseData;
5
- private urlsListener;
6
- private innerBaseData;
7
- constructor(url?: string | Record<string, string>, timeout?: number);
8
- addUrlsListener: (onNewUrlCallback: (urls: string[], urlsObj: Record<string, string>) => void) => void;
9
- private requestJoin;
10
- private handleZeroConf;
11
- updateTimeout(timeout?: number): void;
12
- getUrls(): string[];
13
- private send;
14
- updateUrl(url: string): void;
15
- setBaseUrlObj(urlObj: Record<string, string>): void;
16
- updateBaseData(data: Record<string, any>): void;
17
- log: (data: Record<string, any>) => Promise<void>;
18
- network: (data: Record<string, any>) => Promise<void>;
19
- }
20
- export default Server;
@@ -1 +0,0 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":"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"}