@wutiange/log-listener-plugin 2.0.1 → 2.0.2-alpha.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.
Files changed (65) hide show
  1. package/README.md +166 -163
  2. package/dist/index.cjs.js +7 -0
  3. package/dist/index.cjs.js.map +1 -0
  4. package/dist/index.d.ts +34 -2
  5. package/dist/index.esm.js +5 -0
  6. package/dist/index.esm.js.map +1 -0
  7. package/index.ts +3 -3
  8. package/package.json +52 -59
  9. package/src/HTTPInterceptor.ts +340 -340
  10. package/src/Server.ts +174 -178
  11. package/src/__mocks__/react-native/Libraries/Blob/FileReader.js +44 -44
  12. package/src/__mocks__/react-native/Libraries/Network/XHRInterceptor.js +39 -39
  13. package/src/__tests__/HTTPInterceptor.test.ts +322 -322
  14. package/src/__tests__/Server.test.ts +150 -150
  15. package/src/__tests__/utils.test.ts +114 -114
  16. package/src/common.ts +57 -57
  17. package/src/logPlugin.ts +238 -231
  18. package/src/logger.ts +15 -15
  19. package/src/utils.ts +135 -112
  20. package/LICENSE +0 -201
  21. package/dist/console.d.ts +0 -1
  22. package/dist/console.js +0 -20
  23. package/dist/console.js.map +0 -1
  24. package/dist/fetch.d.ts +0 -1
  25. package/dist/fetch.js +0 -48
  26. package/dist/fetch.js.map +0 -1
  27. package/dist/index.js +0 -8
  28. package/dist/index.js.map +0 -1
  29. package/dist/src/HTTPInterceptor.d.ts +0 -50
  30. package/dist/src/HTTPInterceptor.js +0 -227
  31. package/dist/src/HTTPInterceptor.js.map +0 -1
  32. package/dist/src/__mocks__/react-native/Libraries/Blob/FileReader.d.ts +0 -14
  33. package/dist/src/__mocks__/react-native/Libraries/Blob/FileReader.js +0 -41
  34. package/dist/src/__mocks__/react-native/Libraries/Blob/FileReader.js.map +0 -1
  35. package/dist/src/__mocks__/react-native/Libraries/Network/XHRInterceptor.d.ts +0 -17
  36. package/dist/src/__mocks__/react-native/Libraries/Network/XHRInterceptor.js +0 -34
  37. package/dist/src/__mocks__/react-native/Libraries/Network/XHRInterceptor.js.map +0 -1
  38. package/dist/src/__tests__/HTTPInterceptor.test.d.ts +0 -9
  39. package/dist/src/__tests__/HTTPInterceptor.test.js +0 -281
  40. package/dist/src/__tests__/HTTPInterceptor.test.js.map +0 -1
  41. package/dist/src/__tests__/Server.test.d.ts +0 -1
  42. package/dist/src/__tests__/Server.test.js +0 -116
  43. package/dist/src/__tests__/Server.test.js.map +0 -1
  44. package/dist/src/__tests__/console.test.d.ts +0 -1
  45. package/dist/src/__tests__/console.test.js +0 -29
  46. package/dist/src/__tests__/console.test.js.map +0 -1
  47. package/dist/src/__tests__/utils.test.d.ts +0 -1
  48. package/dist/src/__tests__/utils.test.js +0 -112
  49. package/dist/src/__tests__/utils.test.js.map +0 -1
  50. package/dist/src/common.d.ts +0 -14
  51. package/dist/src/common.js +0 -54
  52. package/dist/src/common.js.map +0 -1
  53. package/dist/src/logPlugin.d.ts +0 -35
  54. package/dist/src/logPlugin.js +0 -188
  55. package/dist/src/logPlugin.js.map +0 -1
  56. package/dist/src/logger.d.ts +0 -6
  57. package/dist/src/logger.js +0 -16
  58. package/dist/src/logger.js.map +0 -1
  59. package/dist/src/server.d.ts +0 -21
  60. package/dist/src/server.js +0 -178
  61. package/dist/src/server.js.map +0 -1
  62. package/dist/src/utils.d.ts +0 -6
  63. package/dist/src/utils.js +0 -106
  64. package/dist/src/utils.js.map +0 -1
  65. package/tsconfig.json +0 -27
package/src/logPlugin.ts CHANGED
@@ -1,231 +1,238 @@
1
- import Server from './Server';
2
- import { createClassWithErrorHandling } from './utils';
3
- import { httpInterceptor } from './HTTPInterceptor';
4
- import { DEFAULT_TIMEOUT, getDefaultStorage, Level, LOG_KEY, Tag, URLS_KEY } from './common';
5
- import logger from './logger';
6
-
7
- type Options = {
8
- /**
9
- * storage 用于存储已设置的日志系统的 url
10
- * @default @react-native-async-storage/async-storage
11
- */
12
- storage?: Storage
13
- /**
14
- * 设置上传日志的超时时间,单位为毫秒
15
- * @default 3000
16
- */
17
- timeout?: number
18
- /**
19
- * 日志系统的url
20
- */
21
- testUrl?: string
22
- /**
23
- * 是否自动开启日志记录
24
- * @default false
25
- */
26
- isAuto?: boolean
27
- /**
28
- * 设置日志系统的基础数据,这些数据会自动添加到每条日志中
29
- */
30
- baseData?: Record<string, any>
31
- }
32
-
33
- class LogPlugin {
34
- private server: Server | null = null;
35
- private timeout: number | null = null;
36
- private isAuto = false
37
- private storage: Storage | null = getDefaultStorage();
38
-
39
- constructor() {
40
- this.init()
41
- }
42
-
43
- private init = async () => {
44
- this.server = new Server();
45
-
46
- if (this.storage) {
47
- const urlsStr = await this.storage.getItem(URLS_KEY)
48
- if (urlsStr) {
49
- const urls = JSON.parse(urlsStr)
50
- this.server.setBaseUrlArr(new Set(urls))
51
- }
52
- }
53
-
54
-
55
- this.server.addUrlsListener((urlArr) => {
56
- if (this.storage) {
57
- this.storage.setItem(URLS_KEY, JSON.stringify(urlArr))
58
- }
59
- httpInterceptor.setIgnoredUrls(this.handleIgnoredUrls())
60
- })
61
- }
62
-
63
- config = ({ storage, timeout, testUrl, isAuto, baseData = {} }: Options) => {
64
- if (isAuto) {
65
- this.auto()
66
- } else {
67
- this.unAuto()
68
- }
69
- this.storage = storage ?? getDefaultStorage();
70
- this.setTimeout(timeout ?? DEFAULT_TIMEOUT)
71
- this.setBaseUrl(testUrl)
72
- this.setBaseData(baseData)
73
- };
74
-
75
- /**
76
- * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({isAuto: true}) 替代。
77
- */
78
- auto = () => {
79
- this.startRecordNetwork();
80
- this.startRecordLog();
81
- this.isAuto = true
82
- }
83
-
84
- unAuto = () => {
85
- this.stopRecordLog()
86
- httpInterceptor.disable()
87
- httpInterceptor.removeAllListener()
88
- this.isAuto = false
89
- }
90
-
91
- startRecordLog = () => {
92
- console.log = (...data: any[]) => {
93
- this.log(...data);
94
- if (!__DEV__) {
95
- return
96
- }
97
- logger.log(...data)
98
- };
99
-
100
- console.warn = (...data: any[]) => {
101
- this.warn(...data);
102
- if (!__DEV__) {
103
- return
104
- }
105
- logger.warn(...data)
106
- };
107
-
108
- console.error = (...data: any[]) => {
109
- this.error(...data);
110
- if (!__DEV__) {
111
- return
112
- }
113
- logger.error(...data)
114
- };
115
- }
116
-
117
- stopRecordLog = () => {
118
- console.log = logger.log
119
- console.warn = logger.warn
120
- console.error = logger.error
121
- }
122
-
123
- private handleIgnoredUrls = () => {
124
- const urls = this.server?.getBaseUrlArr?.()
125
- const ignoredUrls: string[] = []
126
- if (urls?.size) {
127
- urls.forEach((url) => {
128
- ignoredUrls.push(`${url}/log`, `${url}/network`, `${url}/join`)
129
- })
130
- }
131
- return ignoredUrls
132
- }
133
-
134
- startRecordNetwork = () => {
135
- httpInterceptor.addListener("send", (data) => {
136
- this.server?.network({
137
- url: data.url,
138
- id: data.id,
139
- method: data.method,
140
- headers: data.requestHeaders,
141
- body: data.requestData,
142
- createTime: data.startTime
143
- })
144
- })
145
- httpInterceptor.addListener("response", (data) => {
146
- this.server?.network({
147
- headers: data.responseHeaders,
148
- body: data.responseData,
149
- requestId: data.id,
150
- statusCode: data.status,
151
- endTime: data.endTime
152
- })
153
- })
154
- httpInterceptor.enable({ignoredUrls: this.handleIgnoredUrls()})
155
- }
156
-
157
- /**
158
- * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({testUrl: ''}) 替代。
159
- */
160
- setBaseUrl = (url: string) => {
161
- const tempUrl = url?.trim()
162
- if (this.server) {
163
- this.server.updateUrl(tempUrl);
164
- } else {
165
- this.server = new Server(tempUrl);
166
- }
167
- httpInterceptor.setIgnoredUrls(this.handleIgnoredUrls())
168
- if (this.isAuto) {
169
- this.startRecordNetwork();
170
- this.startRecordLog()
171
- }
172
- }
173
-
174
- /**
175
- * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({timeout: 3000}) 替代。
176
- */
177
- setTimeout = (timeout: number) => {
178
- if (typeof timeout === 'number') {
179
- this.timeout = timeout;
180
- this.server?.updateTimeout(this.timeout);
181
- }
182
- }
183
-
184
- /**
185
- * @deprecated 这个方法将在下一个主要版本中被移除。移除后将不再支持获取超时时间。
186
- */
187
- getTimeout = () => {
188
- if (typeof this.timeout === 'number') {
189
- return this.timeout;
190
- }
191
- return null;
192
- }
193
-
194
- /**
195
- * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({baseData: {}}) 替代。
196
- */
197
- setBaseData = (data: Record<string, any> = {}) => {
198
- this.server.updateBaseData(data)
199
- }
200
-
201
- private _log = (level: string, tag: string, ...data: any[]) => {
202
- const sendData = {
203
- message: data,
204
- tag,
205
- level: level ?? 'log',
206
- createTime: Date.now(),
207
- };
208
- this.server?.log(sendData);
209
- }
210
-
211
- tag = (tag: string, ...data: any[]) => {
212
- this._log(Level.LOG, tag, ...data);
213
- }
214
-
215
- log = (...data: any[]) => {
216
- this._log(Level.LOG, Tag.DEFAULT, ...data);
217
- }
218
-
219
- warn = (...data: any[]) => {
220
- this._log(Level.WARN, Tag.DEFAULT, ...data);
221
- }
222
-
223
- error = (...data: any[]) => {
224
- this._log(Level.ERROR, Tag.DEFAULT, ...data);
225
- }
226
-
227
- }
228
- const SafeLogPlugin = createClassWithErrorHandling(LogPlugin)
229
- const logPlugin = new SafeLogPlugin();
230
- export { SafeLogPlugin };
231
- export default logPlugin;
1
+ import Server from './Server';
2
+ import { createClassWithErrorHandling } from './utils';
3
+ import { httpInterceptor } from './HTTPInterceptor';
4
+ import {
5
+ DEFAULT_TIMEOUT,
6
+ getDefaultStorage,
7
+ Level,
8
+ Tag,
9
+ URLS_KEY,
10
+ } from './common';
11
+ import logger from './logger';
12
+
13
+ type Options = {
14
+ /**
15
+ * storage 用于存储已设置的日志系统的 url
16
+ * @default @react-native-async-storage/async-storage
17
+ */
18
+ storage?: Storage;
19
+ /**
20
+ * 设置上传日志的超时时间,单位为毫秒
21
+ * @default 3000
22
+ */
23
+ timeout?: number;
24
+ /**
25
+ * 日志系统的url
26
+ */
27
+ testUrl?: string;
28
+ /**
29
+ * 是否自动开启日志记录
30
+ * @default false
31
+ */
32
+ isAuto?: boolean;
33
+ /**
34
+ * 设置日志系统的基础数据,这些数据会自动添加到每条日志中
35
+ */
36
+ baseData?: Record<string, any>;
37
+ };
38
+
39
+ class LogPlugin {
40
+ private server: Server | null = null;
41
+ private timeout: number | null = null;
42
+ private isAuto = false;
43
+ private storage: Storage | null = getDefaultStorage();
44
+
45
+ constructor() {
46
+ this.init();
47
+ }
48
+
49
+ private init = async () => {
50
+ this.server = new Server();
51
+
52
+ if (this.storage) {
53
+ const urlsStr = await this.storage.getItem(URLS_KEY);
54
+ if (urlsStr) {
55
+ const urls = JSON.parse(urlsStr);
56
+ if (Array.isArray(urls)) {
57
+ this.server.setBaseUrlArr(new Set(urls));
58
+ httpInterceptor.setIgnoredUrls(this.handleIgnoredUrls());
59
+ }
60
+ }
61
+ }
62
+
63
+ this.server.addUrlsListener((urlArr) => {
64
+ if (this.storage) {
65
+ this.storage.setItem(URLS_KEY, JSON.stringify(urlArr));
66
+ }
67
+ httpInterceptor.setIgnoredUrls(this.handleIgnoredUrls());
68
+ });
69
+ };
70
+
71
+ config = ({ storage, timeout, testUrl, isAuto, baseData = {} }: Options) => {
72
+ if (isAuto) {
73
+ this.auto();
74
+ } else {
75
+ this.unAuto();
76
+ }
77
+ this.storage = storage ?? getDefaultStorage();
78
+ this.setTimeout(timeout ?? DEFAULT_TIMEOUT);
79
+ this.setBaseUrl(testUrl);
80
+ this.setBaseData(baseData);
81
+ };
82
+
83
+ /**
84
+ * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({isAuto: true}) 替代。
85
+ */
86
+ auto = () => {
87
+ this.startRecordNetwork();
88
+ this.startRecordLog();
89
+ this.isAuto = true;
90
+ };
91
+
92
+ unAuto = () => {
93
+ this.stopRecordLog();
94
+ httpInterceptor.disable();
95
+ httpInterceptor.removeAllListener();
96
+ this.isAuto = false;
97
+ };
98
+
99
+ startRecordLog = () => {
100
+ console.log = (...data: any[]) => {
101
+ this.log(...data);
102
+ if (!__DEV__) {
103
+ return;
104
+ }
105
+ logger.log(...data);
106
+ };
107
+
108
+ console.warn = (...data: any[]) => {
109
+ this.warn(...data);
110
+ if (!__DEV__) {
111
+ return;
112
+ }
113
+ logger.warn(...data);
114
+ };
115
+
116
+ console.error = (...data: any[]) => {
117
+ this.error(...data);
118
+ if (!__DEV__) {
119
+ return;
120
+ }
121
+ logger.error(...data);
122
+ };
123
+ };
124
+
125
+ stopRecordLog = () => {
126
+ console.log = logger.log;
127
+ console.warn = logger.warn;
128
+ console.error = logger.error;
129
+ };
130
+
131
+ private handleIgnoredUrls = () => {
132
+ const urls = this.server?.getBaseUrlArr?.();
133
+ const ignoredUrls: string[] = [];
134
+ if (urls?.size) {
135
+ urls.forEach((url) => {
136
+ ignoredUrls.push(`${url}/log`, `${url}/network`, `${url}/join`);
137
+ });
138
+ }
139
+ return ignoredUrls;
140
+ };
141
+
142
+ startRecordNetwork = () => {
143
+ httpInterceptor.addListener('send', (data) => {
144
+ this.server?.network({
145
+ url: data.url,
146
+ id: data.id,
147
+ method: data.method,
148
+ headers: data.requestHeaders,
149
+ body: data.requestData,
150
+ createTime: data.startTime,
151
+ });
152
+ });
153
+ httpInterceptor.addListener('response', (data) => {
154
+ this.server?.network({
155
+ headers: data.responseHeaders,
156
+ body: data.responseData,
157
+ requestId: data.id,
158
+ statusCode: data.status,
159
+ endTime: data.endTime,
160
+ });
161
+ });
162
+ httpInterceptor.enable({ ignoredUrls: this.handleIgnoredUrls() });
163
+ };
164
+
165
+ /**
166
+ * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({testUrl: ''}) 替代。
167
+ */
168
+ setBaseUrl = (url?: string) => {
169
+ const tempUrl = url?.trim();
170
+ if (this.server) {
171
+ this.server.updateUrl(tempUrl);
172
+ } else {
173
+ this.server = new Server(tempUrl);
174
+ }
175
+ httpInterceptor.setIgnoredUrls(this.handleIgnoredUrls());
176
+ if (this.isAuto) {
177
+ this.startRecordNetwork();
178
+ this.startRecordLog();
179
+ }
180
+ };
181
+
182
+ /**
183
+ * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({timeout: 3000}) 替代。
184
+ */
185
+ setTimeout = (timeout: number) => {
186
+ if (typeof timeout === 'number') {
187
+ this.timeout = timeout;
188
+ this.server?.updateTimeout(this.timeout);
189
+ }
190
+ };
191
+
192
+ /**
193
+ * @deprecated 这个方法将在下一个主要版本中被移除。移除后将不再支持获取超时时间。
194
+ */
195
+ getTimeout = () => {
196
+ if (typeof this.timeout === 'number') {
197
+ return this.timeout;
198
+ }
199
+ return null;
200
+ };
201
+
202
+ /**
203
+ * @deprecated 这个方法将在下一个主要版本中被移除。请使用 config({baseData: {}}) 替代。
204
+ */
205
+ setBaseData = (data: Record<string, any> = {}) => {
206
+ this.server?.updateBaseData(data);
207
+ };
208
+
209
+ private _log = (level: string, tag: string, ...data: any[]) => {
210
+ const sendData = {
211
+ message: data,
212
+ tag,
213
+ level: level ?? 'log',
214
+ createTime: Date.now(),
215
+ };
216
+ this.server?.log(sendData);
217
+ };
218
+
219
+ tag = (tag: string, ...data: any[]) => {
220
+ this._log(Level.LOG, tag, ...data);
221
+ };
222
+
223
+ log = (...data: any[]) => {
224
+ this._log(Level.LOG, Tag.DEFAULT, ...data);
225
+ };
226
+
227
+ warn = (...data: any[]) => {
228
+ this._log(Level.WARN, Tag.DEFAULT, ...data);
229
+ };
230
+
231
+ error = (...data: any[]) => {
232
+ this._log(Level.ERROR, Tag.DEFAULT, ...data);
233
+ };
234
+ }
235
+ const SafeLogPlugin = createClassWithErrorHandling(LogPlugin);
236
+ const logPlugin = new SafeLogPlugin();
237
+ export { SafeLogPlugin };
238
+ export default logPlugin;
package/src/logger.ts CHANGED
@@ -1,15 +1,15 @@
1
- const [log, warn, error] = [console.log, console.warn, console.error];
2
-
3
- const logger = {
4
- log: (...data: any[]) => {
5
- log(...data)
6
- },
7
- warn: (...data: any[]) => {
8
- warn(...data)
9
- },
10
- error: (...data: any[]) => {
11
- error(...data)
12
- },
13
- }
14
-
15
- export default logger
1
+ const [log, warn, error] = [console.log, console.warn, console.error];
2
+
3
+ const logger = {
4
+ log: (...data: any[]) => {
5
+ log(...data)
6
+ },
7
+ warn: (...data: any[]) => {
8
+ warn(...data)
9
+ },
10
+ error: (...data: any[]) => {
11
+ error(...data)
12
+ },
13
+ }
14
+
15
+ export default logger