react-native-debug-toolkit 2.0.0 → 2.1.0

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 (228) hide show
  1. package/README.md +72 -72
  2. package/README.zh-CN.md +209 -0
  3. package/lib/commonjs/components/ClipboardTab.js +15 -16
  4. package/lib/commonjs/components/ClipboardTab.js.map +1 -1
  5. package/lib/commonjs/components/ConsoleLogTab.js +69 -202
  6. package/lib/commonjs/components/ConsoleLogTab.js.map +1 -1
  7. package/lib/commonjs/components/DebugPanel.js +230 -0
  8. package/lib/commonjs/components/DebugPanel.js.map +1 -0
  9. package/lib/commonjs/components/DebugView.js +66 -0
  10. package/lib/commonjs/components/DebugView.js.map +1 -0
  11. package/lib/commonjs/components/EnvironmentTab.js +22 -23
  12. package/lib/commonjs/components/EnvironmentTab.js.map +1 -1
  13. package/lib/commonjs/components/FeatureTabBar.js +182 -0
  14. package/lib/commonjs/components/FeatureTabBar.js.map +1 -0
  15. package/lib/commonjs/components/FloatIcon.js +187 -0
  16. package/lib/commonjs/components/FloatIcon.js.map +1 -0
  17. package/lib/commonjs/components/FloatPanelView.js +140 -723
  18. package/lib/commonjs/components/FloatPanelView.js.map +1 -1
  19. package/lib/commonjs/components/NavigationLogTab.js +8 -8
  20. package/lib/commonjs/components/NavigationLogTab.js.map +1 -1
  21. package/lib/commonjs/components/NetworkLogTab.js +179 -350
  22. package/lib/commonjs/components/NetworkLogTab.js.map +1 -1
  23. package/lib/commonjs/components/ThirdPartyLibsTab.js +8 -8
  24. package/lib/commonjs/components/ThirdPartyLibsTab.js.map +1 -1
  25. package/lib/commonjs/components/TrackLogTab.js +106 -248
  26. package/lib/commonjs/components/TrackLogTab.js.map +1 -1
  27. package/lib/commonjs/components/ZustandLogTab.js +148 -288
  28. package/lib/commonjs/components/ZustandLogTab.js.map +1 -1
  29. package/lib/commonjs/components/shared/CollapsibleSection.js +4 -4
  30. package/lib/commonjs/components/shared/CollapsibleSection.js.map +1 -1
  31. package/lib/commonjs/components/shared/CopyButton.js +3 -3
  32. package/lib/commonjs/components/shared/CopyButton.js.map +1 -1
  33. package/lib/commonjs/components/shared/LogListScreen.js +174 -0
  34. package/lib/commonjs/components/shared/LogListScreen.js.map +1 -0
  35. package/lib/commonjs/core/DebugToolkit.js +92 -112
  36. package/lib/commonjs/core/DebugToolkit.js.map +1 -1
  37. package/lib/commonjs/core/DebugToolkitProvider.js +30 -28
  38. package/lib/commonjs/core/DebugToolkitProvider.js.map +1 -1
  39. package/lib/commonjs/features/ClipboardFeature.js +6 -2
  40. package/lib/commonjs/features/ClipboardFeature.js.map +1 -1
  41. package/lib/commonjs/features/ConsoleLogFeature.js +66 -49
  42. package/lib/commonjs/features/ConsoleLogFeature.js.map +1 -1
  43. package/lib/commonjs/features/EnvironmentFeature.js +5 -13
  44. package/lib/commonjs/features/EnvironmentFeature.js.map +1 -1
  45. package/lib/commonjs/features/NavigationLogFeature.js +17 -38
  46. package/lib/commonjs/features/NavigationLogFeature.js.map +1 -1
  47. package/lib/commonjs/features/NetworkFeature.js +35 -256
  48. package/lib/commonjs/features/NetworkFeature.js.map +1 -1
  49. package/lib/commonjs/features/TrackFeature.js +17 -38
  50. package/lib/commonjs/features/TrackFeature.js.map +1 -1
  51. package/lib/commonjs/features/ZustandLogFeature.js +21 -38
  52. package/lib/commonjs/features/ZustandLogFeature.js.map +1 -1
  53. package/lib/commonjs/hooks/useNavigationLogger.js.map +1 -1
  54. package/lib/commonjs/index.js +7 -20
  55. package/lib/commonjs/index.js.map +1 -1
  56. package/lib/commonjs/initialize.js +19 -96
  57. package/lib/commonjs/initialize.js.map +1 -1
  58. package/lib/commonjs/interceptors/networkInterceptor.js +466 -0
  59. package/lib/commonjs/interceptors/networkInterceptor.js.map +1 -0
  60. package/lib/commonjs/utils/colors.js +48 -0
  61. package/lib/commonjs/utils/colors.js.map +1 -0
  62. package/lib/commonjs/utils/createChannelFeature.js +48 -0
  63. package/lib/commonjs/utils/createChannelFeature.js.map +1 -0
  64. package/lib/commonjs/utils/layout.js +8 -0
  65. package/lib/commonjs/utils/layout.js.map +1 -0
  66. package/lib/commonjs/utils/urlRewriterRegistry.js +14 -0
  67. package/lib/commonjs/utils/urlRewriterRegistry.js.map +1 -0
  68. package/lib/module/components/ClipboardTab.js +8 -8
  69. package/lib/module/components/ClipboardTab.js.map +1 -1
  70. package/lib/module/components/ConsoleLogTab.js +66 -199
  71. package/lib/module/components/ConsoleLogTab.js.map +1 -1
  72. package/lib/module/components/DebugPanel.js +225 -0
  73. package/lib/module/components/DebugPanel.js.map +1 -0
  74. package/lib/module/components/DebugView.js +61 -0
  75. package/lib/module/components/DebugView.js.map +1 -0
  76. package/lib/module/components/EnvironmentTab.js +3 -3
  77. package/lib/module/components/EnvironmentTab.js.map +1 -1
  78. package/lib/module/components/FeatureTabBar.js +177 -0
  79. package/lib/module/components/FeatureTabBar.js.map +1 -0
  80. package/lib/module/components/FloatIcon.js +182 -0
  81. package/lib/module/components/FloatIcon.js.map +1 -0
  82. package/lib/module/components/FloatPanelView.js +141 -723
  83. package/lib/module/components/FloatPanelView.js.map +1 -1
  84. package/lib/module/components/NavigationLogTab.js +1 -1
  85. package/lib/module/components/NavigationLogTab.js.map +1 -1
  86. package/lib/module/components/NetworkLogTab.js +167 -338
  87. package/lib/module/components/NetworkLogTab.js.map +1 -1
  88. package/lib/module/components/ThirdPartyLibsTab.js +1 -1
  89. package/lib/module/components/ThirdPartyLibsTab.js.map +1 -1
  90. package/lib/module/components/TrackLogTab.js +94 -236
  91. package/lib/module/components/TrackLogTab.js.map +1 -1
  92. package/lib/module/components/ZustandLogTab.js +136 -276
  93. package/lib/module/components/ZustandLogTab.js.map +1 -1
  94. package/lib/module/components/shared/CollapsibleSection.js +1 -1
  95. package/lib/module/components/shared/CollapsibleSection.js.map +1 -1
  96. package/lib/module/components/shared/CopyButton.js +1 -1
  97. package/lib/module/components/shared/CopyButton.js.map +1 -1
  98. package/lib/module/components/shared/LogListScreen.js +169 -0
  99. package/lib/module/components/shared/LogListScreen.js.map +1 -0
  100. package/lib/module/core/DebugToolkit.js +92 -111
  101. package/lib/module/core/DebugToolkit.js.map +1 -1
  102. package/lib/module/core/DebugToolkitProvider.js +31 -29
  103. package/lib/module/core/DebugToolkitProvider.js.map +1 -1
  104. package/lib/module/features/ClipboardFeature.js +6 -2
  105. package/lib/module/features/ClipboardFeature.js.map +1 -1
  106. package/lib/module/features/ConsoleLogFeature.js +65 -49
  107. package/lib/module/features/ConsoleLogFeature.js.map +1 -1
  108. package/lib/module/features/EnvironmentFeature.js +5 -13
  109. package/lib/module/features/EnvironmentFeature.js.map +1 -1
  110. package/lib/module/features/NavigationLogFeature.js +16 -38
  111. package/lib/module/features/NavigationLogFeature.js.map +1 -1
  112. package/lib/module/features/NetworkFeature.js +34 -255
  113. package/lib/module/features/NetworkFeature.js.map +1 -1
  114. package/lib/module/features/TrackFeature.js +16 -38
  115. package/lib/module/features/TrackFeature.js.map +1 -1
  116. package/lib/module/features/ZustandLogFeature.js +22 -38
  117. package/lib/module/features/ZustandLogFeature.js.map +1 -1
  118. package/lib/module/hooks/useNavigationLogger.js.map +1 -1
  119. package/lib/module/index.js +2 -3
  120. package/lib/module/index.js.map +1 -1
  121. package/lib/module/initialize.js +19 -95
  122. package/lib/module/initialize.js.map +1 -1
  123. package/lib/module/interceptors/networkInterceptor.js +460 -0
  124. package/lib/module/interceptors/networkInterceptor.js.map +1 -0
  125. package/lib/module/utils/colors.js +43 -0
  126. package/lib/module/utils/colors.js.map +1 -0
  127. package/lib/module/utils/createChannelFeature.js +44 -0
  128. package/lib/module/utils/createChannelFeature.js.map +1 -0
  129. package/lib/module/utils/layout.js +4 -0
  130. package/lib/module/utils/layout.js.map +1 -0
  131. package/lib/module/utils/urlRewriterRegistry.js +10 -0
  132. package/lib/module/utils/urlRewriterRegistry.js.map +1 -0
  133. package/lib/typescript/src/components/ClipboardTab.d.ts.map +1 -1
  134. package/lib/typescript/src/components/ConsoleLogTab.d.ts.map +1 -1
  135. package/lib/typescript/src/components/DebugPanel.d.ts +9 -0
  136. package/lib/typescript/src/components/DebugPanel.d.ts.map +1 -0
  137. package/lib/typescript/src/components/DebugView.d.ts +19 -0
  138. package/lib/typescript/src/components/DebugView.d.ts.map +1 -0
  139. package/lib/typescript/src/components/EnvironmentTab.d.ts.map +1 -1
  140. package/lib/typescript/src/components/FeatureTabBar.d.ts +13 -0
  141. package/lib/typescript/src/components/FeatureTabBar.d.ts.map +1 -0
  142. package/lib/typescript/src/components/FloatIcon.d.ts +12 -0
  143. package/lib/typescript/src/components/FloatIcon.d.ts.map +1 -0
  144. package/lib/typescript/src/components/FloatPanelView.d.ts +4 -59
  145. package/lib/typescript/src/components/FloatPanelView.d.ts.map +1 -1
  146. package/lib/typescript/src/components/NetworkLogTab.d.ts.map +1 -1
  147. package/lib/typescript/src/components/ThirdPartyLibsTab.d.ts.map +1 -1
  148. package/lib/typescript/src/components/TrackLogTab.d.ts.map +1 -1
  149. package/lib/typescript/src/components/ZustandLogTab.d.ts.map +1 -1
  150. package/lib/typescript/src/components/shared/LogListScreen.d.ts +21 -0
  151. package/lib/typescript/src/components/shared/LogListScreen.d.ts.map +1 -0
  152. package/lib/typescript/src/core/DebugToolkit.d.ts +11 -18
  153. package/lib/typescript/src/core/DebugToolkit.d.ts.map +1 -1
  154. package/lib/typescript/src/core/DebugToolkitProvider.d.ts +2 -5
  155. package/lib/typescript/src/core/DebugToolkitProvider.d.ts.map +1 -1
  156. package/lib/typescript/src/features/ClipboardFeature.d.ts +4 -0
  157. package/lib/typescript/src/features/ClipboardFeature.d.ts.map +1 -1
  158. package/lib/typescript/src/features/ConsoleLogFeature.d.ts +2 -0
  159. package/lib/typescript/src/features/ConsoleLogFeature.d.ts.map +1 -1
  160. package/lib/typescript/src/features/EnvironmentFeature.d.ts.map +1 -1
  161. package/lib/typescript/src/features/NavigationLogFeature.d.ts +2 -0
  162. package/lib/typescript/src/features/NavigationLogFeature.d.ts.map +1 -1
  163. package/lib/typescript/src/features/NetworkFeature.d.ts +7 -20
  164. package/lib/typescript/src/features/NetworkFeature.d.ts.map +1 -1
  165. package/lib/typescript/src/features/TrackFeature.d.ts +2 -0
  166. package/lib/typescript/src/features/TrackFeature.d.ts.map +1 -1
  167. package/lib/typescript/src/features/ZustandLogFeature.d.ts +2 -0
  168. package/lib/typescript/src/features/ZustandLogFeature.d.ts.map +1 -1
  169. package/lib/typescript/src/hooks/useNavigationLogger.d.ts +1 -8
  170. package/lib/typescript/src/hooks/useNavigationLogger.d.ts.map +1 -1
  171. package/lib/typescript/src/index.d.ts +5 -5
  172. package/lib/typescript/src/index.d.ts.map +1 -1
  173. package/lib/typescript/src/initialize.d.ts +3 -22
  174. package/lib/typescript/src/initialize.d.ts.map +1 -1
  175. package/lib/typescript/src/interceptors/networkInterceptor.d.ts +18 -0
  176. package/lib/typescript/src/interceptors/networkInterceptor.d.ts.map +1 -0
  177. package/lib/typescript/src/types/index.d.ts +26 -29
  178. package/lib/typescript/src/types/index.d.ts.map +1 -1
  179. package/lib/typescript/src/utils/colors.d.ts +21 -0
  180. package/lib/typescript/src/utils/colors.d.ts.map +1 -0
  181. package/lib/typescript/src/utils/createChannelFeature.d.ts +18 -0
  182. package/lib/typescript/src/utils/createChannelFeature.d.ts.map +1 -0
  183. package/lib/typescript/src/utils/layout.d.ts +2 -0
  184. package/lib/typescript/src/utils/layout.d.ts.map +1 -0
  185. package/lib/typescript/src/utils/urlRewriterRegistry.d.ts +7 -0
  186. package/lib/typescript/src/utils/urlRewriterRegistry.d.ts.map +1 -0
  187. package/package.json +5 -1
  188. package/src/components/ClipboardTab.tsx +8 -8
  189. package/src/components/ConsoleLogTab.tsx +49 -163
  190. package/src/components/DebugPanel.tsx +215 -0
  191. package/src/components/DebugView.tsx +80 -0
  192. package/src/components/EnvironmentTab.tsx +3 -3
  193. package/src/components/FeatureTabBar.tsx +204 -0
  194. package/src/components/FloatIcon.tsx +171 -0
  195. package/src/components/FloatPanelView.tsx +135 -647
  196. package/src/components/NavigationLogTab.tsx +1 -1
  197. package/src/components/NetworkLogTab.tsx +128 -269
  198. package/src/components/ThirdPartyLibsTab.tsx +3 -3
  199. package/src/components/TrackLogTab.tsx +53 -188
  200. package/src/components/ZustandLogTab.tsx +79 -181
  201. package/src/components/shared/CollapsibleSection.tsx +1 -1
  202. package/src/components/shared/CopyButton.tsx +1 -1
  203. package/src/components/shared/LogListScreen.tsx +164 -0
  204. package/src/core/DebugToolkit.tsx +114 -138
  205. package/src/core/DebugToolkitProvider.tsx +32 -38
  206. package/src/features/ClipboardFeature.ts +6 -2
  207. package/src/features/ConsoleLogFeature.ts +66 -68
  208. package/src/features/EnvironmentFeature.ts +5 -13
  209. package/src/features/NavigationLogFeature.ts +12 -42
  210. package/src/features/NetworkFeature.ts +43 -405
  211. package/src/features/TrackFeature.ts +14 -49
  212. package/src/features/ZustandLogFeature.ts +16 -42
  213. package/src/hooks/useNavigationLogger.ts +1 -6
  214. package/src/index.ts +5 -9
  215. package/src/initialize.ts +28 -120
  216. package/src/interceptors/networkInterceptor.ts +646 -0
  217. package/src/types/index.ts +25 -36
  218. package/src/utils/colors.ts +38 -0
  219. package/src/utils/createChannelFeature.ts +55 -0
  220. package/src/utils/layout.ts +1 -0
  221. package/src/utils/urlRewriterRegistry.ts +10 -0
  222. package/lib/commonjs/utils/constants.js +0 -135
  223. package/lib/commonjs/utils/constants.js.map +0 -1
  224. package/lib/module/utils/constants.js +0 -130
  225. package/lib/module/utils/constants.js.map +0 -1
  226. package/lib/typescript/src/utils/constants.d.ts +0 -96
  227. package/lib/typescript/src/utils/constants.d.ts.map +0 -1
  228. package/src/utils/constants.ts +0 -91
package/README.md CHANGED
@@ -1,20 +1,20 @@
1
1
  # React Native Debug Toolkit
2
2
 
3
+ [中文文档](README.zh-CN.md)
4
+
3
5
  A dev-only floating debug panel for React Native — inspect network, console, state, navigation and more, right on your device.
4
6
 
5
7
  > Zero impact on production builds (`__DEV__` only).
6
8
 
7
9
  ## Features
8
10
 
9
- - **Network** — Inspect fetch / Axios requests & responses, copy as cURL
11
+ - **Network** — Auto-intercepts fetch / XMLHttpRequest, inspect requests & responses, copy as cURL
10
12
  - **Console** — Capture `console.log / info / warn / error`
11
13
  - **Zustand** — Log state transitions via middleware
12
14
  - **Navigation** — Track route changes
13
15
  - **Track** — Record custom analytics events
14
16
  - **Environment** — Switch API hosts on the fly
15
- - **Clipboard** — Inspect clipboard content
16
- - **Third-party** — Launch FLEX / DoraemonKit
17
- - **Export** — Share debug data via system share sheet
17
+ - **Clipboard** — Paste text and copy to computer
18
18
 
19
19
  ## Installation
20
20
 
@@ -31,42 +31,70 @@ npm install @react-native-clipboard/clipboard
31
31
  ## Quick Start
32
32
 
33
33
  ```tsx
34
- import { useEffect } from 'react';
35
- import { initializeDebugToolkit } from 'react-native-debug-toolkit';
34
+ import { DebugView } from 'react-native-debug-toolkit';
36
35
 
37
36
  function App() {
38
- useEffect(() => {
39
- const toolkit = initializeDebugToolkit();
40
- return () => toolkit?.destroy();
41
- }, []);
37
+ return (
38
+ <DebugView>
39
+ <AppContent />
40
+ </DebugView>
41
+ );
42
+ }
43
+ ```
44
+
45
+ That's it. A floating debug button appears in dev mode. Tap to open the panel.
46
+
47
+ Network (fetch and XMLHttpRequest), console, navigation, track, and clipboard features are enabled by default. In React Native and Expo, Axios is covered through the XMLHttpRequest layer, so no Axios setup is required.
48
+
49
+ ### With Navigation Tracking
50
+
51
+ ```tsx
52
+ import { useRef } from 'react';
53
+ import { DebugView } from 'react-native-debug-toolkit';
54
+ import { NavigationContainer } from '@react-navigation/native';
42
55
 
43
- return <AppContent />;
56
+ function App() {
57
+ const navRef = useRef(null);
58
+ return (
59
+ <DebugView navigationRef={navRef}>
60
+ <NavigationContainer ref={navRef}>
61
+ <AppContent />
62
+ </NavigationContainer>
63
+ </DebugView>
64
+ );
44
65
  }
45
66
  ```
46
67
 
47
- That's it. All features are enabled by default.
68
+ ### With Environment Switching
48
69
 
49
- ## Configuration
70
+ ```tsx
71
+ <DebugView
72
+ environments={[
73
+ { id: 'dev', label: 'Dev', host: 'dev-api.example.com', color: '#34C759' },
74
+ { id: 'prod', label: 'Prod', host: 'api.example.com', color: '#FF3B30' },
75
+ ]}
76
+ >
77
+ <AppContent />
78
+ </DebugView>
79
+ ```
50
80
 
51
- Pass a config object to customize features:
81
+ ### Disable Specific Features
52
82
 
53
83
  ```tsx
54
- initializeDebugToolkit({
55
- features: {
56
- network: { maxLogs: 100, blacklist: ['/auth'] },
57
- console: true,
58
- zustand: true,
59
- track: true,
60
- environment: [
61
- { id: 'dev', label: 'Dev', host: 'dev-api.example.com', color: '#34C759' },
62
- { id: 'prod', label: 'Prod', host: 'api.example.com', color: '#FF3B30' },
63
- ],
64
- },
65
- enabled: true, // force enable (default: __DEV__)
66
- });
84
+ <DebugView features={{ clipboard: false, zustand: false }}>
85
+ <AppContent />
86
+ </DebugView>
67
87
  ```
68
88
 
69
- Set any feature to `false` to disable it.
89
+ ## `<DebugView>` Props
90
+
91
+ | Prop | Type | Default | Description |
92
+ |------|------|---------|-------------|
93
+ | `children` | `ReactNode` | — | App content |
94
+ | `features` | `Partial<FeatureConfigs>` | all enabled | Enable/disable features |
95
+ | `navigationRef` | `RefObject` | — | Navigation container ref |
96
+ | `environments` | `EnvironmentConfig[]` | — | Environment configs |
97
+ | `enabled` | `boolean` | `__DEV__` | Force enable/disable |
70
98
 
71
99
  ### Per-feature options
72
100
 
@@ -78,25 +106,12 @@ Set any feature to `false` to disable it.
78
106
  | `navigation` | `maxLogs` |
79
107
  | `track` | `maxLogs` |
80
108
  | `environment` | `EnvironmentConfig[]` |
81
- | `thirdPartyLibs` | — |
82
109
  | `clipboard` | — |
83
110
 
84
111
  All `maxLogs` default to **200**.
85
112
 
86
113
  ## Usage Examples
87
114
 
88
- ### Axios interceptor
89
-
90
- ```tsx
91
- import { createNetworkFeature } from 'react-native-debug-toolkit';
92
- import axios from 'axios';
93
-
94
- const network = createNetworkFeature({ maxLogs: 100 });
95
- network.setupAxiosInterceptors(axios);
96
-
97
- initializeDebugToolkit({ features: { network, console: true } });
98
- ```
99
-
100
115
  ### Zustand middleware
101
116
 
102
117
  ```tsx
@@ -110,16 +125,6 @@ const useStore = create(
110
125
  );
111
126
  ```
112
127
 
113
- ### Navigation logging
114
-
115
- ```tsx
116
- import { useNavigationLogger } from 'react-native-debug-toolkit';
117
-
118
- const ref = useRef(null);
119
- useNavigationLogger(ref);
120
- // pass ref to <NavigationContainer ref={ref}>
121
- ```
122
-
123
128
  ### Custom events
124
129
 
125
130
  ```tsx
@@ -128,16 +133,6 @@ import { addTrackLog } from 'react-native-debug-toolkit';
128
133
  addTrackLog({ eventName: 'button_click', buttonId: 'submit' });
129
134
  ```
130
135
 
131
- ### Export debug data
132
-
133
- Tap **Export** in the panel header, or call programmatically:
134
-
135
- ```tsx
136
- import { exportDebugData } from 'react-native-debug-toolkit';
137
-
138
- await exportDebugData(data, 'network');
139
- ```
140
-
141
136
  ### Copy to computer
142
137
 
143
138
  ```tsx
@@ -146,19 +141,24 @@ import { copyToComputer } from 'react-native-debug-toolkit';
146
141
  await copyToComputer(jsonString);
147
142
  ```
148
143
 
149
- ## API
144
+ ## Advanced: Imperative API
145
+
146
+ For programmatic control outside React components:
150
147
 
151
- ### `initializeDebugToolkit(config?)`
148
+ ```tsx
149
+ import { initializeDebugToolkit } from 'react-native-debug-toolkit';
150
+
151
+ const toolkit = initializeDebugToolkit({
152
+ features: { network: { maxLogs: 100 }, console: true },
153
+ enabled: true,
154
+ });
152
155
 
153
- ```ts
154
- initializeDebugToolkit(config?: {
155
- features?: FeatureConfigs;
156
- enabled?: boolean;
157
- doraemonProductId?: string;
158
- }): DebugToolkitAPI | null;
156
+ toolkit?.showPanel();
157
+ toolkit?.clearAll();
158
+ toolkit?.destroy();
159
159
  ```
160
160
 
161
- ### `DebugToolkitAPI`
161
+ ### `DebugToolkit` methods
162
162
 
163
163
  | Method | Description |
164
164
  |--------|-------------|
@@ -184,7 +184,8 @@ const myFeature: DebugFeature<MyData> = {
184
184
  renderContent: MyFeatureTab,
185
185
  };
186
186
 
187
- initializeDebugToolkit({ features: { myFeature } });
187
+ const toolkit = initializeDebugToolkit();
188
+ toolkit?.addFeature(myFeature);
188
189
  ```
189
190
 
190
191
  ### Utilities
@@ -192,7 +193,6 @@ initializeDebugToolkit({ features: { myFeature } });
192
193
  | Export | Description |
193
194
  |--------|-------------|
194
195
  | `safeStringify(value, space?)` | JSON stringify with circular-ref protection |
195
- | `exportDebugData(data, name)` | Share via system sheet |
196
196
  | `copyToComputer(content, options?)` | Copy content to computer |
197
197
  | `logToComputer(...args)` | Log to computer console |
198
198
 
@@ -0,0 +1,209 @@
1
+ # React Native Debug Toolkit
2
+
3
+ [English](README.md)
4
+
5
+ 一个仅用于开发的 React Native 浮动调试面板 — 在设备上直接查看网络请求、控制台日志、状态变化、导航事件等。
6
+
7
+ > 生产环境零影响(仅在 `__DEV__` 模式下运行)。
8
+
9
+ ## 功能
10
+
11
+ - **Network** — 自动拦截 fetch / XMLHttpRequest,查看请求与响应,复制为 cURL
12
+ - **Console** — 捕获 `console.log / info / warn / error`
13
+ - **Zustand** — 通过中间件记录状态变化
14
+ - **Navigation** — 追踪路由切换
15
+ - **Track** — 记录自定义埋点事件
16
+ - **Environment** — 运行时切换 API 环境
17
+ - **Clipboard** — 粘贴文本并复制到电脑
18
+
19
+ ## 安装
20
+
21
+ ```bash
22
+ npm install react-native-debug-toolkit
23
+ ```
24
+
25
+ 可选 — 剪贴板复制支持:
26
+
27
+ ```bash
28
+ npm install @react-native-clipboard/clipboard
29
+ ```
30
+
31
+ ## 快速开始
32
+
33
+ ```tsx
34
+ import { DebugView } from 'react-native-debug-toolkit';
35
+
36
+ function App() {
37
+ return (
38
+ <DebugView>
39
+ <AppContent />
40
+ </DebugView>
41
+ );
42
+ }
43
+ ```
44
+
45
+ 开发模式下会出现浮动调试按钮,点击即可打开面板。
46
+
47
+ 网络(fetch 和 XMLHttpRequest)、控制台、导航、埋点和剪贴板默认启用。在 React Native 和 Expo 中,Axios 会通过 XMLHttpRequest 层发起请求,因此无需额外配置 Axios。
48
+
49
+ ### 导航追踪
50
+
51
+ ```tsx
52
+ import { useRef } from 'react';
53
+ import { DebugView } from 'react-native-debug-toolkit';
54
+ import { NavigationContainer } from '@react-navigation/native';
55
+
56
+ function App() {
57
+ const navRef = useRef(null);
58
+ return (
59
+ <DebugView navigationRef={navRef}>
60
+ <NavigationContainer ref={navRef}>
61
+ <AppContent />
62
+ </NavigationContainer>
63
+ </DebugView>
64
+ );
65
+ }
66
+ ```
67
+
68
+ ### 环境切换
69
+
70
+ ```tsx
71
+ <DebugView
72
+ environments={[
73
+ { id: 'dev', label: 'Dev', host: 'dev-api.example.com', color: '#34C759' },
74
+ { id: 'prod', label: 'Prod', host: 'api.example.com', color: '#FF3B30' },
75
+ ]}
76
+ >
77
+ <AppContent />
78
+ </DebugView>
79
+ ```
80
+
81
+ ### 禁用特定功能
82
+
83
+ ```tsx
84
+ <DebugView features={{ clipboard: false, zustand: false }}>
85
+ <AppContent />
86
+ </DebugView>
87
+ ```
88
+
89
+ ## `<DebugView>` 属性
90
+
91
+ | 属性 | 类型 | 默认值 | 说明 |
92
+ |------|------|--------|------|
93
+ | `children` | `ReactNode` | — | 应用内容 |
94
+ | `features` | `Partial<FeatureConfigs>` | 全部启用 | 启用/禁用功能 |
95
+ | `navigationRef` | `RefObject` | — | 导航容器 ref |
96
+ | `environments` | `EnvironmentConfig[]` | — | 环境配置 |
97
+ | `enabled` | `boolean` | `__DEV__` | 强制启用/禁用 |
98
+
99
+ ### 功能配置项
100
+
101
+ | 功能 | 配置项 |
102
+ |------|--------|
103
+ | `network` | `maxLogs`, `blacklist` |
104
+ | `console` | `maxLogs` |
105
+ | `zustand` | `maxLogs` |
106
+ | `navigation` | `maxLogs` |
107
+ | `track` | `maxLogs` |
108
+ | `environment` | `EnvironmentConfig[]` |
109
+ | `clipboard` | — |
110
+
111
+ 所有 `maxLogs` 默认值为 **200**。
112
+
113
+ ## 使用示例
114
+
115
+ ### Zustand 中间件
116
+
117
+ ```tsx
118
+ import { zustandLogMiddleware } from 'react-native-debug-toolkit';
119
+
120
+ const useStore = create(
121
+ zustandLogMiddleware((set) => ({
122
+ count: 0,
123
+ increment: () => set((s) => ({ count: s.count + 1 }), false, 'increment'),
124
+ }))
125
+ );
126
+ ```
127
+
128
+ ### 自定义事件
129
+
130
+ ```tsx
131
+ import { addTrackLog } from 'react-native-debug-toolkit';
132
+
133
+ addTrackLog({ eventName: 'button_click', buttonId: 'submit' });
134
+ ```
135
+
136
+ ### 复制到电脑
137
+
138
+ ```tsx
139
+ import { copyToComputer } from 'react-native-debug-toolkit';
140
+
141
+ await copyToComputer(jsonString);
142
+ ```
143
+
144
+ ## 高级:命令式 API
145
+
146
+ 用于 React 组件外的编程控制:
147
+
148
+ ```tsx
149
+ import { initializeDebugToolkit } from 'react-native-debug-toolkit';
150
+
151
+ const toolkit = initializeDebugToolkit({
152
+ features: { network: { maxLogs: 100 }, console: true },
153
+ enabled: true,
154
+ });
155
+
156
+ toolkit?.showPanel();
157
+ toolkit?.clearAll();
158
+ toolkit?.destroy();
159
+ ```
160
+
161
+ ### `DebugToolkit` 方法
162
+
163
+ | 方法 | 说明 |
164
+ |------|------|
165
+ | `showPanel()` / `hidePanel()` | 切换面板显示 |
166
+ | `clearAll()` | 清除所有数据 |
167
+ | `addFeature(f)` / `removeFeature(name)` | 运行时管理功能 |
168
+ | `destroy()` | 完全销毁 |
169
+ | `features` | 当前功能列表(只读) |
170
+
171
+ ### 自定义功能
172
+
173
+ ```tsx
174
+ import type { DebugFeature } from 'react-native-debug-toolkit';
175
+
176
+ const myFeature: DebugFeature<MyData> = {
177
+ name: 'myFeature',
178
+ label: '我的功能',
179
+ setup: () => { /* 开始捕获 */ },
180
+ getData: () => myDataArray,
181
+ cleanup: () => { /* 停止捕获 */ },
182
+ clear: () => { /* 重置数据 */ },
183
+ subscribe: (cb) => { emitter.on('change', cb); return () => emitter.off('change', cb); },
184
+ renderContent: MyFeatureTab,
185
+ };
186
+
187
+ const toolkit = initializeDebugToolkit();
188
+ toolkit?.addFeature(myFeature);
189
+ ```
190
+
191
+ ### 工具函数
192
+
193
+ | 导出 | 说明 |
194
+ |------|------|
195
+ | `safeStringify(value, space?)` | JSON 序列化,自动处理循环引用 |
196
+ | `copyToComputer(content, options?)` | 复制内容到电脑 |
197
+ | `logToComputer(...args)` | 输出到电脑控制台 |
198
+
199
+ ## 对等依赖
200
+
201
+ | 包 | 版本 | 必需 |
202
+ |----|------|------|
203
+ | react | >= 18.0.0 | 是 |
204
+ | react-native | >= 0.72.0 | 是 |
205
+ | @react-native-clipboard/clipboard | >= 1.0.0 | 否 |
206
+
207
+ ## 许可证
208
+
209
+ MIT
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ClipboardTab = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
- var _constants = require("../utils/constants");
9
+ var _colors = require("../utils/colors");
10
10
  var _copyToComputer = require("../utils/copyToComputer");
11
11
  var _jsxRuntime = require("react/jsx-runtime");
12
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
- const ClipboardTab = () => {
13
+ const ClipboardTab = exports.ClipboardTab = /*#__PURE__*/_react.default.memo(() => {
14
14
  const [text, setText] = (0, _react.useState)('');
15
15
  const [feedback, setFeedback] = (0, _react.useState)(null);
16
16
  const handleCopy = (0, _react.useCallback)(() => {
@@ -32,7 +32,7 @@ const ClipboardTab = () => {
32
32
  value: text,
33
33
  onChangeText: setText,
34
34
  placeholder: "Paste or type text here...",
35
- placeholderTextColor: _constants.Colors.textLight,
35
+ placeholderTextColor: _colors.Colors.textLight,
36
36
  multiline: true,
37
37
  textAlignVertical: "top"
38
38
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
@@ -51,41 +51,40 @@ const ClipboardTab = () => {
51
51
  })
52
52
  })]
53
53
  });
54
- };
55
- exports.ClipboardTab = ClipboardTab;
54
+ });
56
55
  const s = _reactNative.StyleSheet.create({
57
56
  container: {
58
57
  flex: 1,
59
- backgroundColor: _constants.Colors.background,
60
- padding: _constants.Spacing.md
58
+ backgroundColor: _colors.Colors.background,
59
+ padding: 12
61
60
  },
62
61
  input: {
63
62
  flex: 1,
64
- backgroundColor: _constants.Colors.surface,
65
- borderRadius: _constants.Radius.md,
66
- padding: _constants.Spacing.md,
63
+ backgroundColor: _colors.Colors.surface,
64
+ borderRadius: 12,
65
+ padding: 12,
67
66
  fontSize: 14,
68
- color: _constants.Colors.text,
67
+ color: _colors.Colors.text,
69
68
  lineHeight: 20
70
69
  },
71
70
  footer: {
72
- paddingTop: _constants.Spacing.sm,
71
+ paddingTop: 8,
73
72
  minHeight: 36,
74
73
  alignItems: 'flex-end'
75
74
  },
76
75
  hint: {
77
76
  fontSize: 12,
78
- color: _constants.Colors.textLight
77
+ color: _colors.Colors.textLight
79
78
  },
80
79
  copyBtn: {
81
- backgroundColor: _constants.Colors.background,
80
+ backgroundColor: _colors.Colors.background,
82
81
  paddingHorizontal: 16,
83
82
  paddingVertical: 6,
84
- borderRadius: _constants.Radius.sm
83
+ borderRadius: 8
85
84
  },
86
85
  copyBtnText: {
87
86
  fontSize: 13,
88
- color: _constants.Colors.primary,
87
+ color: _colors.Colors.primary,
89
88
  fontWeight: '600'
90
89
  }
91
90
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_constants","_copyToComputer","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ClipboardTab","text","setText","useState","feedback","setFeedback","handleCopy","useCallback","result","copyToComputer","label","method","setTimeout","jsxs","View","style","s","container","children","jsx","TextInput","input","value","onChangeText","placeholder","placeholderTextColor","Colors","textLight","multiline","textAlignVertical","footer","TouchableOpacity","copyBtn","onPress","activeOpacity","Text","copyBtnText","hint","exports","StyleSheet","create","flex","backgroundColor","background","padding","Spacing","md","surface","borderRadius","Radius","fontSize","color","lineHeight","paddingTop","sm","minHeight","alignItems","paddingHorizontal","paddingVertical","primary","fontWeight"],"sourceRoot":"../../../src","sources":["components/ClipboardTab.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colors","_copyToComputer","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ClipboardTab","exports","React","memo","text","setText","useState","feedback","setFeedback","handleCopy","useCallback","result","copyToComputer","label","method","setTimeout","jsxs","View","style","s","container","children","jsx","TextInput","input","value","onChangeText","placeholder","placeholderTextColor","Colors","textLight","multiline","textAlignVertical","footer","TouchableOpacity","copyBtn","onPress","activeOpacity","Text","copyBtnText","hint","StyleSheet","create","flex","backgroundColor","background","padding","surface","borderRadius","fontSize","color","lineHeight","paddingTop","minHeight","alignItems","paddingHorizontal","paddingVertical","primary","fontWeight"],"sourceRoot":"../../../src","sources":["components/ClipboardTab.tsx"],"mappings":"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","ignoreList":[]}