react-native-debug-toolkit 3.3.4 → 3.5.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 (258) hide show
  1. package/README.md +48 -46
  2. package/README.zh-CN.md +48 -46
  3. package/android/src/main/java/com/reactnativedebugtoolkit/DebugToolkitDevConnectModule.java +0 -187
  4. package/bin/debug-toolkit.js +0 -16
  5. package/ios/DebugToolkitDevConnect.h +0 -12
  6. package/ios/DebugToolkitDevConnect.mm +0 -321
  7. package/lib/commonjs/constants/logLevels.js +19 -0
  8. package/lib/commonjs/constants/logLevels.js.map +1 -0
  9. package/lib/commonjs/core/initialize.js +36 -18
  10. package/lib/commonjs/core/initialize.js.map +1 -1
  11. package/lib/commonjs/features/console/ConsoleLogTab.js +4 -15
  12. package/lib/commonjs/features/console/ConsoleLogTab.js.map +1 -1
  13. package/lib/commonjs/features/console/index.js +15 -8
  14. package/lib/commonjs/features/console/index.js.map +1 -1
  15. package/lib/commonjs/features/devConnect/DevConnectTab.js +18 -470
  16. package/lib/commonjs/features/devConnect/DevConnectTab.js.map +1 -1
  17. package/lib/commonjs/features/devConnect/devConnectPreferences.js +0 -12
  18. package/lib/commonjs/features/devConnect/devConnectPreferences.js.map +1 -1
  19. package/lib/commonjs/features/devConnect/devConnectUtils.js +2 -57
  20. package/lib/commonjs/features/devConnect/devConnectUtils.js.map +1 -1
  21. package/lib/commonjs/features/devConnect/index.js +1 -23
  22. package/lib/commonjs/features/devConnect/index.js.map +1 -1
  23. package/lib/commonjs/features/devConnect/nativeDevConnect.js +1 -103
  24. package/lib/commonjs/features/devConnect/nativeDevConnect.js.map +1 -1
  25. package/lib/commonjs/features/network/NetworkLogTab.js +91 -93
  26. package/lib/commonjs/features/network/NetworkLogTab.js.map +1 -1
  27. package/lib/commonjs/features/network/index.js +7 -4
  28. package/lib/commonjs/features/network/index.js.map +1 -1
  29. package/lib/commonjs/features/sessionHistory/SessionHistoryTab.js +1044 -0
  30. package/lib/commonjs/features/sessionHistory/SessionHistoryTab.js.map +1 -0
  31. package/lib/commonjs/features/sessionHistory/index.js +103 -0
  32. package/lib/commonjs/features/sessionHistory/index.js.map +1 -0
  33. package/lib/commonjs/features/track/index.js +4 -3
  34. package/lib/commonjs/features/track/index.js.map +1 -1
  35. package/lib/commonjs/index.js +27 -0
  36. package/lib/commonjs/index.js.map +1 -1
  37. package/lib/commonjs/ui/DebugView.js +3 -0
  38. package/lib/commonjs/ui/DebugView.js.map +1 -1
  39. package/lib/commonjs/ui/panel/DebugPanel.js +67 -34
  40. package/lib/commonjs/ui/panel/DebugPanel.js.map +1 -1
  41. package/lib/commonjs/ui/panel/FeatureIntroCard.js +131 -0
  42. package/lib/commonjs/ui/panel/FeatureIntroCard.js.map +1 -0
  43. package/lib/commonjs/ui/panel/FeatureRail.js +163 -0
  44. package/lib/commonjs/ui/panel/FeatureRail.js.map +1 -0
  45. package/lib/commonjs/ui/panel/FloatPanelView.js +169 -32
  46. package/lib/commonjs/ui/panel/FloatPanelView.js.map +1 -1
  47. package/lib/commonjs/ui/panel/buildFeatureSummary.js +207 -0
  48. package/lib/commonjs/ui/panel/buildFeatureSummary.js.map +1 -0
  49. package/lib/commonjs/ui/panel/filterFeatureSnapshot.js +43 -0
  50. package/lib/commonjs/ui/panel/filterFeatureSnapshot.js.map +1 -0
  51. package/lib/commonjs/ui/panel/tabPersistence.js +17 -0
  52. package/lib/commonjs/ui/panel/tabPersistence.js.map +1 -0
  53. package/lib/commonjs/ui/theme/colors.js +6 -0
  54. package/lib/commonjs/ui/theme/colors.js.map +1 -1
  55. package/lib/commonjs/utils/DaemonClient.js +30 -8
  56. package/lib/commonjs/utils/DaemonClient.js.map +1 -1
  57. package/lib/commonjs/utils/SessionManager.js +132 -0
  58. package/lib/commonjs/utils/SessionManager.js.map +1 -0
  59. package/lib/commonjs/utils/StorageAdapter.js +104 -0
  60. package/lib/commonjs/utils/StorageAdapter.js.map +1 -0
  61. package/lib/commonjs/utils/createChannelFeature.js +22 -5
  62. package/lib/commonjs/utils/createChannelFeature.js.map +1 -1
  63. package/lib/commonjs/utils/createDebugTab.js +21 -0
  64. package/lib/commonjs/utils/createDebugTab.js.map +1 -0
  65. package/lib/commonjs/utils/createPersistedObservableStore.js +14 -8
  66. package/lib/commonjs/utils/createPersistedObservableStore.js.map +1 -1
  67. package/lib/commonjs/utils/debugPreferences.js +28 -6
  68. package/lib/commonjs/utils/debugPreferences.js.map +1 -1
  69. package/lib/commonjs/utils/deviceReport.js +5 -1
  70. package/lib/commonjs/utils/deviceReport.js.map +1 -1
  71. package/lib/commonjs/utils/logRuntime.js +32 -0
  72. package/lib/commonjs/utils/logRuntime.js.map +1 -0
  73. package/lib/module/constants/logLevels.js +15 -0
  74. package/lib/module/constants/logLevels.js.map +1 -0
  75. package/lib/module/core/initialize.js +36 -18
  76. package/lib/module/core/initialize.js.map +1 -1
  77. package/lib/module/features/console/ConsoleLogTab.js +1 -12
  78. package/lib/module/features/console/ConsoleLogTab.js.map +1 -1
  79. package/lib/module/features/console/index.js +15 -8
  80. package/lib/module/features/console/index.js.map +1 -1
  81. package/lib/module/features/devConnect/DevConnectTab.js +21 -473
  82. package/lib/module/features/devConnect/DevConnectTab.js.map +1 -1
  83. package/lib/module/features/devConnect/devConnectPreferences.js +1 -12
  84. package/lib/module/features/devConnect/devConnectPreferences.js.map +1 -1
  85. package/lib/module/features/devConnect/devConnectUtils.js +1 -53
  86. package/lib/module/features/devConnect/devConnectUtils.js.map +1 -1
  87. package/lib/module/features/devConnect/index.js +5 -9
  88. package/lib/module/features/devConnect/index.js.map +1 -1
  89. package/lib/module/features/devConnect/nativeDevConnect.js +1 -100
  90. package/lib/module/features/devConnect/nativeDevConnect.js.map +1 -1
  91. package/lib/module/features/network/NetworkLogTab.js +91 -93
  92. package/lib/module/features/network/NetworkLogTab.js.map +1 -1
  93. package/lib/module/features/network/index.js +7 -4
  94. package/lib/module/features/network/index.js.map +1 -1
  95. package/lib/module/features/sessionHistory/SessionHistoryTab.js +1039 -0
  96. package/lib/module/features/sessionHistory/SessionHistoryTab.js.map +1 -0
  97. package/lib/module/features/sessionHistory/index.js +99 -0
  98. package/lib/module/features/sessionHistory/index.js.map +1 -0
  99. package/lib/module/features/track/index.js +4 -3
  100. package/lib/module/features/track/index.js.map +1 -1
  101. package/lib/module/index.js +4 -0
  102. package/lib/module/index.js.map +1 -1
  103. package/lib/module/ui/DebugView.js +3 -0
  104. package/lib/module/ui/DebugView.js.map +1 -1
  105. package/lib/module/ui/panel/DebugPanel.js +67 -34
  106. package/lib/module/ui/panel/DebugPanel.js.map +1 -1
  107. package/lib/module/ui/panel/FeatureIntroCard.js +126 -0
  108. package/lib/module/ui/panel/FeatureIntroCard.js.map +1 -0
  109. package/lib/module/ui/panel/FeatureRail.js +158 -0
  110. package/lib/module/ui/panel/FeatureRail.js.map +1 -0
  111. package/lib/module/ui/panel/FloatPanelView.js +170 -33
  112. package/lib/module/ui/panel/FloatPanelView.js.map +1 -1
  113. package/lib/module/ui/panel/buildFeatureSummary.js +203 -0
  114. package/lib/module/ui/panel/buildFeatureSummary.js.map +1 -0
  115. package/lib/module/ui/panel/filterFeatureSnapshot.js +39 -0
  116. package/lib/module/ui/panel/filterFeatureSnapshot.js.map +1 -0
  117. package/lib/module/ui/panel/tabPersistence.js +13 -0
  118. package/lib/module/ui/panel/tabPersistence.js.map +1 -0
  119. package/lib/module/ui/theme/colors.js +6 -0
  120. package/lib/module/ui/theme/colors.js.map +1 -1
  121. package/lib/module/utils/DaemonClient.js +30 -8
  122. package/lib/module/utils/DaemonClient.js.map +1 -1
  123. package/lib/module/utils/SessionManager.js +127 -0
  124. package/lib/module/utils/SessionManager.js.map +1 -0
  125. package/lib/module/utils/StorageAdapter.js +96 -0
  126. package/lib/module/utils/StorageAdapter.js.map +1 -0
  127. package/lib/module/utils/createChannelFeature.js +22 -5
  128. package/lib/module/utils/createChannelFeature.js.map +1 -1
  129. package/lib/module/utils/createDebugTab.js +17 -0
  130. package/lib/module/utils/createDebugTab.js.map +1 -0
  131. package/lib/module/utils/createPersistedObservableStore.js +14 -8
  132. package/lib/module/utils/createPersistedObservableStore.js.map +1 -1
  133. package/lib/module/utils/debugPreferences.js +27 -6
  134. package/lib/module/utils/debugPreferences.js.map +1 -1
  135. package/lib/module/utils/deviceReport.js +4 -1
  136. package/lib/module/utils/deviceReport.js.map +1 -1
  137. package/lib/module/utils/logRuntime.js +26 -0
  138. package/lib/module/utils/logRuntime.js.map +1 -0
  139. package/lib/typescript/src/constants/logLevels.d.ts +3 -0
  140. package/lib/typescript/src/constants/logLevels.d.ts.map +1 -0
  141. package/lib/typescript/src/core/initialize.d.ts +6 -0
  142. package/lib/typescript/src/core/initialize.d.ts.map +1 -1
  143. package/lib/typescript/src/features/console/ConsoleLogTab.d.ts.map +1 -1
  144. package/lib/typescript/src/features/console/index.d.ts +2 -1
  145. package/lib/typescript/src/features/console/index.d.ts.map +1 -1
  146. package/lib/typescript/src/features/devConnect/DevConnectTab.d.ts.map +1 -1
  147. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts +0 -2
  148. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts.map +1 -1
  149. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts +0 -20
  150. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts.map +1 -1
  151. package/lib/typescript/src/features/devConnect/index.d.ts +2 -2
  152. package/lib/typescript/src/features/devConnect/index.d.ts.map +1 -1
  153. package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts +0 -25
  154. package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts.map +1 -1
  155. package/lib/typescript/src/features/devConnect/types.d.ts +1 -3
  156. package/lib/typescript/src/features/devConnect/types.d.ts.map +1 -1
  157. package/lib/typescript/src/features/network/NetworkLogTab.d.ts.map +1 -1
  158. package/lib/typescript/src/features/network/index.d.ts +2 -1
  159. package/lib/typescript/src/features/network/index.d.ts.map +1 -1
  160. package/lib/typescript/src/features/sessionHistory/SessionHistoryTab.d.ts +20 -0
  161. package/lib/typescript/src/features/sessionHistory/SessionHistoryTab.d.ts.map +1 -0
  162. package/lib/typescript/src/features/sessionHistory/index.d.ts +4 -0
  163. package/lib/typescript/src/features/sessionHistory/index.d.ts.map +1 -0
  164. package/lib/typescript/src/features/track/index.d.ts +2 -1
  165. package/lib/typescript/src/features/track/index.d.ts.map +1 -1
  166. package/lib/typescript/src/index.d.ts +6 -0
  167. package/lib/typescript/src/index.d.ts.map +1 -1
  168. package/lib/typescript/src/types/feature.d.ts +1 -1
  169. package/lib/typescript/src/types/feature.d.ts.map +1 -1
  170. package/lib/typescript/src/types/index.d.ts +2 -0
  171. package/lib/typescript/src/types/index.d.ts.map +1 -1
  172. package/lib/typescript/src/ui/DebugView.d.ts +4 -2
  173. package/lib/typescript/src/ui/DebugView.d.ts.map +1 -1
  174. package/lib/typescript/src/ui/panel/DebugPanel.d.ts +3 -1
  175. package/lib/typescript/src/ui/panel/DebugPanel.d.ts.map +1 -1
  176. package/lib/typescript/src/ui/panel/FeatureIntroCard.d.ts +11 -0
  177. package/lib/typescript/src/ui/panel/FeatureIntroCard.d.ts.map +1 -0
  178. package/lib/typescript/src/ui/panel/FeatureRail.d.ts +16 -0
  179. package/lib/typescript/src/ui/panel/FeatureRail.d.ts.map +1 -0
  180. package/lib/typescript/src/ui/panel/FloatPanelView.d.ts.map +1 -1
  181. package/lib/typescript/src/ui/panel/buildFeatureSummary.d.ts +13 -0
  182. package/lib/typescript/src/ui/panel/buildFeatureSummary.d.ts.map +1 -0
  183. package/lib/typescript/src/ui/panel/filterFeatureSnapshot.d.ts +3 -0
  184. package/lib/typescript/src/ui/panel/filterFeatureSnapshot.d.ts.map +1 -0
  185. package/lib/typescript/src/ui/panel/tabPersistence.d.ts +3 -0
  186. package/lib/typescript/src/ui/panel/tabPersistence.d.ts.map +1 -0
  187. package/lib/typescript/src/ui/theme/colors.d.ts +5 -0
  188. package/lib/typescript/src/ui/theme/colors.d.ts.map +1 -1
  189. package/lib/typescript/src/utils/DaemonClient.d.ts +7 -1
  190. package/lib/typescript/src/utils/DaemonClient.d.ts.map +1 -1
  191. package/lib/typescript/src/utils/SessionManager.d.ts +30 -0
  192. package/lib/typescript/src/utils/SessionManager.d.ts.map +1 -0
  193. package/lib/typescript/src/utils/StorageAdapter.d.ts +38 -0
  194. package/lib/typescript/src/utils/StorageAdapter.d.ts.map +1 -0
  195. package/lib/typescript/src/utils/createChannelFeature.d.ts +2 -0
  196. package/lib/typescript/src/utils/createChannelFeature.d.ts.map +1 -1
  197. package/lib/typescript/src/utils/createDebugTab.d.ts +18 -0
  198. package/lib/typescript/src/utils/createDebugTab.d.ts.map +1 -0
  199. package/lib/typescript/src/utils/createPersistedObservableStore.d.ts +4 -1
  200. package/lib/typescript/src/utils/createPersistedObservableStore.d.ts.map +1 -1
  201. package/lib/typescript/src/utils/debugPreferences.d.ts +1 -4
  202. package/lib/typescript/src/utils/debugPreferences.d.ts.map +1 -1
  203. package/lib/typescript/src/utils/deviceReport.d.ts +1 -0
  204. package/lib/typescript/src/utils/deviceReport.d.ts.map +1 -1
  205. package/lib/typescript/src/utils/logRuntime.d.ts +13 -0
  206. package/lib/typescript/src/utils/logRuntime.d.ts.map +1 -0
  207. package/package.json +10 -6
  208. package/src/constants/logLevels.ts +13 -0
  209. package/src/core/initialize.ts +61 -21
  210. package/src/features/console/ConsoleLogTab.tsx +1 -14
  211. package/src/features/console/index.ts +18 -8
  212. package/src/features/devConnect/DevConnectTab.tsx +17 -381
  213. package/src/features/devConnect/devConnectPreferences.ts +0 -15
  214. package/src/features/devConnect/devConnectUtils.ts +1 -81
  215. package/src/features/devConnect/index.ts +2 -9
  216. package/src/features/devConnect/nativeDevConnect.ts +1 -136
  217. package/src/features/devConnect/types.ts +1 -3
  218. package/src/features/network/NetworkLogTab.tsx +61 -71
  219. package/src/features/network/index.ts +12 -3
  220. package/src/features/sessionHistory/SessionHistoryTab.tsx +691 -0
  221. package/src/features/sessionHistory/index.ts +102 -0
  222. package/src/features/track/index.ts +10 -3
  223. package/src/index.ts +13 -0
  224. package/src/types/feature.ts +2 -1
  225. package/src/types/index.ts +10 -0
  226. package/src/ui/DebugView.tsx +6 -1
  227. package/src/ui/panel/DebugPanel.tsx +60 -30
  228. package/src/ui/panel/FeatureIntroCard.tsx +127 -0
  229. package/src/ui/panel/FeatureRail.tsx +165 -0
  230. package/src/ui/panel/FloatPanelView.tsx +176 -25
  231. package/src/ui/panel/buildFeatureSummary.ts +288 -0
  232. package/src/ui/panel/filterFeatureSnapshot.ts +51 -0
  233. package/src/ui/panel/tabPersistence.ts +22 -0
  234. package/src/ui/theme/colors.ts +7 -0
  235. package/src/utils/DaemonClient.ts +33 -5
  236. package/src/utils/SessionManager.ts +174 -0
  237. package/src/utils/StorageAdapter.ts +135 -0
  238. package/src/utils/createChannelFeature.ts +28 -6
  239. package/src/utils/createDebugTab.ts +32 -0
  240. package/src/utils/createPersistedObservableStore.ts +18 -10
  241. package/src/utils/debugPreferences.ts +38 -8
  242. package/src/utils/deviceReport.ts +5 -1
  243. package/src/utils/logRuntime.ts +39 -0
  244. package/app.plugin.js +0 -51
  245. package/dev-client.js +0 -3
  246. package/lib/commonjs/ui/panel/FeatureTabBar.js +0 -182
  247. package/lib/commonjs/ui/panel/FeatureTabBar.js.map +0 -1
  248. package/lib/module/ui/panel/FeatureTabBar.js +0 -177
  249. package/lib/module/ui/panel/FeatureTabBar.js.map +0 -1
  250. package/lib/typescript/src/ui/panel/FeatureTabBar.d.ts +0 -13
  251. package/lib/typescript/src/ui/panel/FeatureTabBar.d.ts.map +0 -1
  252. package/scripts/bundle/android.js +0 -101
  253. package/scripts/bundle/cli.js +0 -57
  254. package/scripts/bundle/doctor.js +0 -38
  255. package/scripts/bundle/ios.js +0 -179
  256. package/scripts/bundle/setup.js +0 -39
  257. package/scripts/debug-bundle.gradle +0 -147
  258. package/src/ui/panel/FeatureTabBar.tsx +0 -204
@@ -1,70 +1,34 @@
1
1
  "use strict";
2
2
 
3
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
4
4
  import { KeyboardAvoidingView, Platform, ScrollView, StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native';
5
5
  import { Colors } from '../../ui/theme/colors';
6
6
  import { buildDeviceDaemonEndpoint, daemonClient, getDefaultDaemonEndpoint, normalizeDaemonSettings } from '../../utils/DaemonClient';
7
- import { DEFAULT_DAEMON_PORT, DEFAULT_METRO_PORT, buildDaemonDeviceHost, buildMetroTarget, buildMetroUrls, normalizeComputerHost, normalizePort, parseComputerTarget } from './devConnectUtils';
8
- import { saveComputerHost, saveComputerTarget, saveDaemonPort, saveMetroPort } from './devConnectPreferences';
9
- import { applyMetroBundle, getNativeDiagnostics, resetMetroBundle } from './nativeDevConnect';
7
+ import { DEFAULT_DAEMON_PORT, buildDaemonDeviceHost, normalizeComputerHost, normalizePort, parseComputerTarget } from './devConnectUtils';
8
+ import { saveComputerHost, saveComputerTarget, saveDaemonPort } from './devConnectPreferences';
10
9
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
11
10
  const CONNECTION_TIMEOUT_MS = 2000;
12
- function getSimulatorMetroHost() {
11
+ function getSimulatorHost() {
13
12
  return Platform.OS === 'android' ? '10.0.2.2' : 'localhost';
14
13
  }
15
- function describeMetroFailure(result) {
16
- if (result.reason === 'native_unavailable') {
17
- return 'Native DevConnect not installed. Rebuild app after installing native module.';
18
- }
19
- if (result.reason === 'metro_unreachable') {
20
- return result.error ? `Metro not reachable: ${result.error}` : 'Metro not reachable. Start Metro on that port.';
21
- }
22
- if (result.reason === 'fetch_unavailable') {
23
- return 'Cannot check Metro because fetch is unavailable.';
24
- }
25
- if (result.reason === 'invalid_target') {
26
- return 'Enter a valid computer IP and Metro port.';
27
- }
28
- return result.error ? `Metro switch failed: ${result.error}` : 'Metro switch failed.';
29
- }
30
14
  export function DevConnectTab({
31
15
  snapshot,
32
16
  feature
33
17
  }) {
34
18
  const inputRef = useRef(null);
35
19
  const [computerHost, setComputerHost] = useState(snapshot.computerHost);
36
- const [metroPort, setMetroPort] = useState(snapshot.metroPort);
37
20
  const [daemonPort, setDaemonPort] = useState(snapshot.daemonPort);
38
21
  const [streaming, setStreaming] = useState(snapshot.streaming);
39
22
  const [syncState, setSyncState] = useState(snapshot.streaming ? 'running' : 'idle');
40
23
  const [message, setMessage] = useState(null);
41
24
  const [sending, setSending] = useState(false);
42
- const [metroBusy, setMetroBusy] = useState(false);
43
- const [diagData, setDiagData] = useState(null);
44
- const [diagOpen, setDiagOpen] = useState(false);
45
25
  const isSim = snapshot.isSimulator;
46
26
  const updateFeatureSettings = useCallback(patch => {
47
27
  feature.updateSettings?.(patch);
48
28
  }, [feature]);
49
- useEffect(() => {
50
- getNativeDiagnostics().then(result => {
51
- if (result) {
52
- setDiagData(result);
53
- console.info(`[DevConnect] debugBuild=${result.isDebugBuild} appDelegate=${result.appDelegateClass} persistedHost=${result.persistedMetroHost ?? 'none'}`);
54
- }
55
- }).catch(() => {});
56
- }, []);
57
- const refreshDiag = useCallback(() => {
58
- getNativeDiagnostics().then(result => {
59
- if (result) setDiagData(result);
60
- }).catch(() => {});
61
- }, []);
62
29
  useEffect(() => {
63
30
  setComputerHost(snapshot.computerHost);
64
31
  }, [snapshot.computerHost]);
65
- useEffect(() => {
66
- setMetroPort(snapshot.metroPort);
67
- }, [snapshot.metroPort]);
68
32
  useEffect(() => {
69
33
  setDaemonPort(snapshot.daemonPort);
70
34
  }, [snapshot.daemonPort]);
@@ -72,19 +36,14 @@ export function DevConnectTab({
72
36
  setStreaming(snapshot.streaming);
73
37
  setSyncState(snapshot.streaming ? 'running' : 'idle');
74
38
  }, [snapshot.streaming]);
75
- const metroHost = isSim ? getSimulatorMetroHost() : computerHost;
76
- const metroTarget = useMemo(() => buildMetroTarget(metroHost, metroPort), [metroHost, metroPort]);
77
- const metroUrls = useMemo(() => buildMetroUrls(metroHost, metroPort), [metroHost, metroPort]);
78
39
  const handleHostChange = useCallback(value => {
79
40
  setComputerHost(value);
80
41
  const target = parseComputerTarget(value);
81
42
  if (target) {
82
- setMetroPort(target.metroPort);
83
43
  saveComputerTarget(value).then(savedTarget => {
84
44
  if (savedTarget) {
85
45
  updateFeatureSettings({
86
- computerHost: savedTarget.computerHost,
87
- metroPort: savedTarget.metroPort
46
+ computerHost: savedTarget.computerHost
88
47
  });
89
48
  }
90
49
  }).catch(() => {});
@@ -92,16 +51,6 @@ export function DevConnectTab({
92
51
  setSyncState(prev => prev === 'failed' ? 'idle' : prev);
93
52
  setMessage(null);
94
53
  }, [updateFeatureSettings]);
95
- const handleMetroPortChange = useCallback(value => {
96
- setMetroPort(value);
97
- const normalized = normalizePort(value);
98
- if (normalized) {
99
- saveMetroPort(normalized).then(() => updateFeatureSettings({
100
- metroPort: normalized
101
- })).catch(() => {});
102
- }
103
- setMessage(null);
104
- }, [updateFeatureSettings]);
105
54
  const handleDaemonPortChange = useCallback(value => {
106
55
  setDaemonPort(value);
107
56
  const normalized = normalizePort(value);
@@ -133,35 +82,10 @@ export function DevConnectTab({
133
82
  writes.push(saveComputerHost(normalizedHost));
134
83
  setComputerHost(normalizedHost);
135
84
  }
136
- const normalizedMetroPort = normalizePort(metroPort);
137
- if (normalizedMetroPort) {
138
- patch.metroPort = normalizedMetroPort;
139
- writes.push(saveMetroPort(normalizedMetroPort));
140
- setMetroPort(normalizedMetroPort);
141
- }
142
- await Promise.all(writes);
143
- updateFeatureSettings(patch);
144
- return true;
145
- }, [computerHost, daemonPort, isSim, metroPort, updateFeatureSettings]);
146
- const persistMetroSettings = useCallback(async () => {
147
- if (!metroTarget) {
148
- setMessage('Enter a valid computer IP and Metro port.');
149
- return false;
150
- }
151
- const patch = {
152
- metroPort: metroTarget.port
153
- };
154
- const writes = [saveMetroPort(metroTarget.port)];
155
- setMetroPort(metroTarget.port);
156
- if (!isSim) {
157
- patch.computerHost = metroTarget.host;
158
- writes.push(saveComputerTarget(metroTarget.hostPort));
159
- setComputerHost(metroTarget.host);
160
- }
161
85
  await Promise.all(writes);
162
86
  updateFeatureSettings(patch);
163
87
  return true;
164
- }, [isSim, metroTarget, updateFeatureSettings]);
88
+ }, [computerHost, daemonPort, isSim, updateFeatureSettings]);
165
89
  const validateSettings = useCallback(() => {
166
90
  if (!isSim && !normalizeComputerHost(computerHost)) {
167
91
  setMessage('Enter your computer IP first.');
@@ -276,58 +200,7 @@ export function DevConnectTab({
276
200
  setSending(false);
277
201
  }
278
202
  }, [configureDaemon, persistConnectionSettings, validateSettings]);
279
- const applyRemoteBundle = useCallback(async () => {
280
- if (!metroTarget) {
281
- setMessage('Enter a valid computer IP and Metro port.');
282
- return;
283
- }
284
- if (!snapshot.nativeMetroAvailable) {
285
- setMessage(describeMetroFailure({
286
- reason: 'native_unavailable'
287
- }));
288
- return;
289
- }
290
- setMetroBusy(true);
291
- setMessage('Checking Metro...');
292
- try {
293
- if (!(await persistMetroSettings())) {
294
- return;
295
- }
296
- const result = await applyMetroBundle(metroTarget.host, metroTarget.port);
297
- if (result.ok) {
298
- setMessage(`Using Metro at ${result.hostPort}. Reloading...`);
299
- } else {
300
- setMessage(describeMetroFailure(result));
301
- }
302
- } finally {
303
- setMetroBusy(false);
304
- }
305
- }, [metroTarget, persistMetroSettings, snapshot.nativeMetroAvailable]);
306
- const resetRemoteBundle = useCallback(async () => {
307
- if (!snapshot.nativeMetroAvailable) {
308
- setMessage(describeMetroFailure({
309
- reason: 'native_unavailable'
310
- }));
311
- return;
312
- }
313
- setMetroBusy(true);
314
- try {
315
- const result = await resetMetroBundle();
316
- if (result.ok) {
317
- setMessage('Metro host reset. Reloading...');
318
- } else {
319
- setMessage(describeMetroFailure(result));
320
- }
321
- } finally {
322
- setMetroBusy(false);
323
- }
324
- }, [snapshot.nativeMetroAvailable]);
325
-
326
- // Metro host switching only works in Debug builds. diagData is iOS-populated; when we know
327
- // it's a Release build, disable the controls (Android reports null → stays enabled).
328
- const metroReleaseBlocked = diagData ? !diagData.isDebugBuild : false;
329
203
  const canConnect = isSim || Boolean(normalizeComputerHost(computerHost)) && Boolean(normalizePort(daemonPort));
330
- const canUseMetro = Boolean(metroTarget) && snapshot.nativeMetroAvailable && !metroBusy && !metroReleaseBlocked;
331
204
  const busy = sending || syncState === 'checking';
332
205
  const subnetPrefix = snapshot.subnetPrefix;
333
206
  const ipPlaceholder = subnetPrefix ? `${subnetPrefix}...` : '192.168.1.10';
@@ -342,7 +215,7 @@ export function DevConnectTab({
342
215
  style: styles.badge,
343
216
  children: /*#__PURE__*/_jsxs(Text, {
344
217
  style: styles.badgeText,
345
- children: ["Simulator/emulator - using ", getSimulatorMetroHost()]
218
+ children: ["Simulator/emulator - using ", getSimulatorHost()]
346
219
  })
347
220
  }) : /*#__PURE__*/_jsxs(View, {
348
221
  style: styles.section,
@@ -381,42 +254,20 @@ export function DevConnectTab({
381
254
  style: styles.section,
382
255
  children: [/*#__PURE__*/_jsx(Text, {
383
256
  style: styles.label,
384
- children: "Ports"
385
- }), /*#__PURE__*/_jsxs(View, {
386
- style: styles.portRow,
387
- children: [/*#__PURE__*/_jsxs(View, {
388
- style: styles.portField,
389
- children: [/*#__PURE__*/_jsx(Text, {
390
- style: styles.portLabel,
391
- children: "Metro"
392
- }), /*#__PURE__*/_jsx(TextInput, {
393
- style: styles.portInput,
394
- value: metroPort,
395
- onChangeText: handleMetroPortChange,
396
- placeholder: DEFAULT_METRO_PORT,
397
- placeholderTextColor: Colors.textLight,
398
- autoCapitalize: "none",
399
- autoCorrect: false,
400
- keyboardType: "number-pad",
401
- returnKeyType: "done"
402
- })]
403
- }), /*#__PURE__*/_jsxs(View, {
404
- style: styles.portField,
405
- children: [/*#__PURE__*/_jsx(Text, {
406
- style: styles.portLabel,
407
- children: "Logs"
408
- }), /*#__PURE__*/_jsx(TextInput, {
409
- style: styles.portInput,
410
- value: daemonPort,
411
- onChangeText: handleDaemonPortChange,
412
- placeholder: DEFAULT_DAEMON_PORT,
413
- placeholderTextColor: Colors.textLight,
414
- autoCapitalize: "none",
415
- autoCorrect: false,
416
- keyboardType: "number-pad",
417
- returnKeyType: "done"
418
- })]
419
- })]
257
+ children: "Desktop Logs Port"
258
+ }), /*#__PURE__*/_jsx(View, {
259
+ style: styles.inputRow,
260
+ children: /*#__PURE__*/_jsx(TextInput, {
261
+ style: styles.input,
262
+ value: daemonPort,
263
+ onChangeText: handleDaemonPortChange,
264
+ placeholder: DEFAULT_DAEMON_PORT,
265
+ placeholderTextColor: Colors.textLight,
266
+ autoCapitalize: "none",
267
+ autoCorrect: false,
268
+ keyboardType: "number-pad",
269
+ returnKeyType: "done"
270
+ })
420
271
  })]
421
272
  }), /*#__PURE__*/_jsxs(View, {
422
273
  style: styles.actions,
@@ -442,153 +293,6 @@ export function DevConnectTab({
442
293
  }), message ? /*#__PURE__*/_jsx(Text, {
443
294
  style: styles.message,
444
295
  children: message
445
- }) : null, /*#__PURE__*/_jsxs(View, {
446
- style: styles.section,
447
- children: [/*#__PURE__*/_jsxs(View, {
448
- style: styles.sectionTitleRow,
449
- children: [/*#__PURE__*/_jsx(Text, {
450
- style: styles.sectionTitle,
451
- children: "Remote JS Bundle"
452
- }), diagData ? /*#__PURE__*/_jsxs(View, {
453
- style: styles.swizzleBadge,
454
- children: [/*#__PURE__*/_jsx(View, {
455
- style: [styles.swizzleDot, diagData.isDebugBuild ? styles.dotGreen : styles.dotRed]
456
- }), /*#__PURE__*/_jsx(Text, {
457
- style: styles.swizzleBadgeText,
458
- children: diagData.isDebugBuild ? 'debug build' : 'release: disabled'
459
- })]
460
- }) : null]
461
- }), /*#__PURE__*/_jsx(Text, {
462
- style: styles.sectionDesc,
463
- children: "Starts from the embedded bundle. After you apply a computer IP, hot-reloads from that Metro. Debug builds only \u2014 use Reset to go back to the embedded bundle."
464
- }), !metroUrls ? /*#__PURE__*/_jsx(View, {
465
- style: styles.stepCard,
466
- children: /*#__PURE__*/_jsx(Text, {
467
- style: styles.stepHint,
468
- children: "Enter your computer IP and Metro port to get started."
469
- })
470
- }) : /*#__PURE__*/_jsxs(View, {
471
- style: styles.stepCard,
472
- children: [/*#__PURE__*/_jsxs(View, {
473
- style: styles.urlRow,
474
- children: [/*#__PURE__*/_jsx(Text, {
475
- style: styles.urlLabel,
476
- children: "HTTP"
477
- }), /*#__PURE__*/_jsx(Text, {
478
- style: styles.urlText,
479
- numberOfLines: 1,
480
- children: metroUrls.httpUrl
481
- })]
482
- }), /*#__PURE__*/_jsxs(View, {
483
- style: styles.urlRow,
484
- children: [/*#__PURE__*/_jsx(Text, {
485
- style: styles.urlLabel,
486
- children: "Expo"
487
- }), /*#__PURE__*/_jsx(Text, {
488
- style: styles.urlText,
489
- numberOfLines: 1,
490
- children: metroUrls.expUrl
491
- })]
492
- })]
493
- }), /*#__PURE__*/_jsxs(View, {
494
- style: styles.actions,
495
- children: [/*#__PURE__*/_jsx(TouchableOpacity, {
496
- style: [styles.primaryButton, !canUseMetro && styles.buttonDisabled],
497
- onPress: applyRemoteBundle,
498
- disabled: !canUseMetro,
499
- activeOpacity: 0.75,
500
- children: /*#__PURE__*/_jsx(Text, {
501
- style: styles.primaryButtonText,
502
- children: metroBusy ? 'Checking...' : 'Use Metro Bundle'
503
- })
504
- }), /*#__PURE__*/_jsx(TouchableOpacity, {
505
- style: [styles.secondaryButton, (!snapshot.nativeMetroAvailable || metroBusy) && styles.buttonDisabled],
506
- onPress: resetRemoteBundle,
507
- disabled: !snapshot.nativeMetroAvailable || metroBusy,
508
- activeOpacity: 0.75,
509
- children: /*#__PURE__*/_jsx(Text, {
510
- style: styles.secondaryButtonText,
511
- children: "Reset"
512
- })
513
- })]
514
- }), !snapshot.nativeMetroAvailable ? /*#__PURE__*/_jsx(Text, {
515
- style: styles.hint,
516
- children: "Native DevConnect requires pod install / Gradle sync and app rebuild."
517
- }) : null, metroReleaseBlocked ? /*#__PURE__*/_jsx(Text, {
518
- style: styles.diagWarning,
519
- children: "\u26A0 This is a Release build. Metro host switching is disabled \u2014 RN loads the embedded bundle and strips the packager machinery in Release. Run a Debug build to switch hosts."
520
- }) : null]
521
- }), snapshot.nativeMetroAvailable && diagData ? /*#__PURE__*/_jsxs(View, {
522
- style: styles.section,
523
- children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
524
- style: styles.diagHeader,
525
- onPress: () => {
526
- setDiagOpen(v => !v);
527
- refreshDiag();
528
- },
529
- activeOpacity: 0.7,
530
- children: [/*#__PURE__*/_jsx(Text, {
531
- style: styles.sectionTitle,
532
- children: "iOS Bundle Status"
533
- }), /*#__PURE__*/_jsx(Text, {
534
- style: styles.diagChevron,
535
- children: diagOpen ? '▲' : '▼'
536
- })]
537
- }), diagOpen ? /*#__PURE__*/_jsxs(View, {
538
- style: styles.diagCard,
539
- children: [/*#__PURE__*/_jsxs(View, {
540
- style: styles.diagRow,
541
- children: [/*#__PURE__*/_jsx(Text, {
542
- style: styles.diagKey,
543
- children: "AppDelegate"
544
- }), /*#__PURE__*/_jsx(Text, {
545
- style: styles.diagVal,
546
- children: diagData.appDelegateClass
547
- })]
548
- }), /*#__PURE__*/_jsxs(View, {
549
- style: styles.diagRow,
550
- children: [/*#__PURE__*/_jsx(Text, {
551
- style: styles.diagKey,
552
- children: "packagerHost"
553
- }), /*#__PURE__*/_jsx(Text, {
554
- style: styles.diagVal,
555
- children: diagData.persistedMetroHost ?? '—'
556
- })]
557
- }), /*#__PURE__*/_jsxs(View, {
558
- style: styles.diagRow,
559
- children: [/*#__PURE__*/_jsx(Text, {
560
- style: styles.diagKey,
561
- children: "embedded"
562
- }), /*#__PURE__*/_jsx(Text, {
563
- style: [styles.diagVal, diagData.hasEmbeddedBundle ? styles.diagGood : styles.diagWarn],
564
- children: diagData.hasEmbeddedBundle ? 'main.jsbundle' : 'missing'
565
- })]
566
- }), /*#__PURE__*/_jsxs(View, {
567
- style: styles.diagRow,
568
- children: [/*#__PURE__*/_jsx(Text, {
569
- style: styles.diagKey,
570
- children: "build"
571
- }), /*#__PURE__*/_jsx(Text, {
572
- style: [styles.diagVal, diagData.isDebugBuild ? styles.diagGood : styles.diagWarn],
573
- children: diagData.isDebugBuild ? 'Debug' : 'Release'
574
- })]
575
- }), /*#__PURE__*/_jsxs(View, {
576
- style: styles.diagRow,
577
- children: [/*#__PURE__*/_jsx(Text, {
578
- style: styles.diagKey,
579
- children: "embedded-first"
580
- }), /*#__PURE__*/_jsx(Text, {
581
- style: [styles.diagVal, diagData.embeddedFirstHookInstalled ? styles.diagGood : styles.diagWarn],
582
- children: diagData.embeddedFirstHookInstalled ? 'active' : 'inactive'
583
- })]
584
- }), !diagData.embeddedFirstHookInstalled ? /*#__PURE__*/_jsxs(Text, {
585
- style: styles.diagWarning,
586
- children: ["\u26A0 Embedded-first hook not active (bundleRoot=", diagData.bundleRootHookInstalled ? 'Y' : 'N', "). Rebuild after pod install. Without it, Debug may still try Metro on launch."]
587
- }) : diagData.hasEmbeddedBundle === false ? /*#__PURE__*/_jsx(Text, {
588
- style: styles.diagWarning,
589
- children: "\u26A0 main.jsbundle is missing from the app package. Build with an embedded bundle (e.g. export/bundle) or cold start cannot use offline JS."
590
- }) : null]
591
- }) : null]
592
296
  }) : null]
593
297
  })
594
298
  });
@@ -619,18 +323,6 @@ const styles = StyleSheet.create({
619
323
  section: {
620
324
  marginBottom: 14
621
325
  },
622
- sectionTitle: {
623
- fontSize: 14,
624
- fontWeight: '600',
625
- color: Colors.text,
626
- marginBottom: 4
627
- },
628
- sectionDesc: {
629
- fontSize: 12,
630
- color: Colors.textSecondary,
631
- marginBottom: 10,
632
- lineHeight: 17
633
- },
634
326
  label: {
635
327
  fontSize: 13,
636
328
  fontWeight: '500',
@@ -661,29 +353,6 @@ const styles = StyleSheet.create({
661
353
  color: Colors.text,
662
354
  fontFamily: 'Courier'
663
355
  },
664
- portRow: {
665
- flexDirection: 'row',
666
- gap: 10
667
- },
668
- portField: {
669
- flex: 1
670
- },
671
- portLabel: {
672
- fontSize: 11,
673
- color: Colors.textSecondary,
674
- marginBottom: 4
675
- },
676
- portInput: {
677
- backgroundColor: Colors.surface,
678
- borderWidth: 1,
679
- borderColor: Colors.border,
680
- borderRadius: 8,
681
- paddingHorizontal: 12,
682
- paddingVertical: 9,
683
- fontSize: 13,
684
- color: Colors.text,
685
- fontFamily: 'Courier'
686
- },
687
356
  actions: {
688
357
  flexDirection: 'row',
689
358
  gap: 10,
@@ -726,127 +395,6 @@ const styles = StyleSheet.create({
726
395
  lineHeight: 17,
727
396
  color: Colors.textSecondary,
728
397
  marginBottom: 12
729
- },
730
- hint: {
731
- fontSize: 12,
732
- color: Colors.textLight,
733
- lineHeight: 17
734
- },
735
- stepCard: {
736
- backgroundColor: Colors.surface,
737
- borderWidth: 1,
738
- borderColor: Colors.border,
739
- borderRadius: 10,
740
- padding: 12,
741
- marginBottom: 8
742
- },
743
- stepHint: {
744
- fontSize: 12,
745
- color: Colors.textSecondary,
746
- lineHeight: 17
747
- },
748
- urlLabel: {
749
- minWidth: 40,
750
- fontSize: 10,
751
- fontWeight: '600',
752
- color: Colors.primary,
753
- backgroundColor: `${Colors.primary}15`,
754
- paddingHorizontal: 6,
755
- paddingVertical: 2,
756
- borderRadius: 4,
757
- marginRight: 8,
758
- textAlign: 'center'
759
- },
760
- urlRow: {
761
- flexDirection: 'row',
762
- alignItems: 'center',
763
- borderBottomWidth: StyleSheet.hairlineWidth,
764
- borderBottomColor: Colors.border,
765
- paddingVertical: 7
766
- },
767
- urlText: {
768
- flex: 1,
769
- fontSize: 13,
770
- fontFamily: 'Courier',
771
- color: Colors.text
772
- },
773
- sectionTitleRow: {
774
- flexDirection: 'row',
775
- alignItems: 'center',
776
- justifyContent: 'space-between',
777
- marginBottom: 4
778
- },
779
- swizzleBadge: {
780
- flexDirection: 'row',
781
- alignItems: 'center',
782
- gap: 4,
783
- paddingHorizontal: 7,
784
- paddingVertical: 3,
785
- borderRadius: 10,
786
- backgroundColor: Colors.surface,
787
- borderWidth: 1,
788
- borderColor: Colors.border
789
- },
790
- swizzleDot: {
791
- width: 6,
792
- height: 6,
793
- borderRadius: 3
794
- },
795
- dotGreen: {
796
- backgroundColor: '#34C759'
797
- },
798
- dotRed: {
799
- backgroundColor: '#FF3B30'
800
- },
801
- swizzleBadgeText: {
802
- fontSize: 11,
803
- color: Colors.textSecondary,
804
- fontFamily: 'Courier'
805
- },
806
- diagHeader: {
807
- flexDirection: 'row',
808
- alignItems: 'center',
809
- justifyContent: 'space-between',
810
- marginBottom: 6
811
- },
812
- diagChevron: {
813
- fontSize: 12,
814
- color: Colors.textSecondary
815
- },
816
- diagCard: {
817
- backgroundColor: Colors.surface,
818
- borderWidth: 1,
819
- borderColor: Colors.border,
820
- borderRadius: 10,
821
- padding: 10
822
- },
823
- diagRow: {
824
- flexDirection: 'row',
825
- justifyContent: 'space-between',
826
- paddingVertical: 4
827
- },
828
- diagKey: {
829
- fontSize: 12,
830
- color: Colors.textSecondary,
831
- fontFamily: 'Courier'
832
- },
833
- diagVal: {
834
- fontSize: 12,
835
- color: Colors.text,
836
- fontFamily: 'Courier',
837
- fontWeight: '600'
838
- },
839
- diagGood: {
840
- color: '#34C759'
841
- },
842
- diagWarn: {
843
- color: '#FF9500'
844
- },
845
- diagWarning: {
846
- marginTop: 10,
847
- fontSize: 11,
848
- color: '#FF9500',
849
- lineHeight: 16
850
398
  }
851
399
  });
852
400
  //# sourceMappingURL=DevConnectTab.js.map