execbro 1.11.0 → 2.0.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 (250) hide show
  1. package/README.md +4 -4
  2. package/build/__tests__/unit/appContext.test.d.ts +2 -0
  3. package/build/__tests__/unit/appContext.test.d.ts.map +1 -0
  4. package/build/__tests__/unit/appContext.test.js +70 -0
  5. package/build/__tests__/unit/appContext.test.js.map +1 -0
  6. package/build/__tests__/unit/appRequest.test.d.ts +2 -0
  7. package/build/__tests__/unit/appRequest.test.d.ts.map +1 -0
  8. package/build/__tests__/unit/appRequest.test.js +179 -0
  9. package/build/__tests__/unit/appRequest.test.js.map +1 -0
  10. package/build/__tests__/unit/contextWiring.test.d.ts +2 -0
  11. package/build/__tests__/unit/contextWiring.test.d.ts.map +1 -0
  12. package/build/__tests__/unit/contextWiring.test.js +28 -0
  13. package/build/__tests__/unit/contextWiring.test.js.map +1 -0
  14. package/build/__tests__/unit/epochRender.test.d.ts +2 -0
  15. package/build/__tests__/unit/epochRender.test.d.ts.map +1 -0
  16. package/build/__tests__/unit/epochRender.test.js +60 -0
  17. package/build/__tests__/unit/epochRender.test.js.map +1 -0
  18. package/build/__tests__/unit/executeBudget.test.d.ts +2 -0
  19. package/build/__tests__/unit/executeBudget.test.d.ts.map +1 -0
  20. package/build/__tests__/unit/executeBudget.test.js +27 -0
  21. package/build/__tests__/unit/executeBudget.test.js.map +1 -0
  22. package/build/__tests__/unit/executor.test.js +48 -6
  23. package/build/__tests__/unit/executor.test.js.map +1 -1
  24. package/build/__tests__/unit/getLogsEmptyContract.test.js +4 -3
  25. package/build/__tests__/unit/getLogsEmptyContract.test.js.map +1 -1
  26. package/build/__tests__/unit/getLogsNativeSource.test.js +7 -8
  27. package/build/__tests__/unit/getLogsNativeSource.test.js.map +1 -1
  28. package/build/__tests__/unit/inspectorHarvest.test.js +1 -21
  29. package/build/__tests__/unit/inspectorHarvest.test.js.map +1 -1
  30. package/build/__tests__/unit/inspectorSource.test.js +1 -38
  31. package/build/__tests__/unit/inspectorSource.test.js.map +1 -1
  32. package/build/__tests__/unit/jsLogEvents.test.js +1 -0
  33. package/build/__tests__/unit/jsLogEvents.test.js.map +1 -1
  34. package/build/__tests__/unit/logBufferEpoch.test.d.ts +2 -0
  35. package/build/__tests__/unit/logBufferEpoch.test.d.ts.map +1 -0
  36. package/build/__tests__/unit/logBufferEpoch.test.js +63 -0
  37. package/build/__tests__/unit/logBufferEpoch.test.js.map +1 -0
  38. package/build/__tests__/unit/metro.test.js +18 -1
  39. package/build/__tests__/unit/metro.test.js.map +1 -1
  40. package/build/__tests__/unit/moduleRegistry.test.d.ts +2 -0
  41. package/build/__tests__/unit/moduleRegistry.test.d.ts.map +1 -0
  42. package/build/__tests__/unit/moduleRegistry.test.js +62 -0
  43. package/build/__tests__/unit/moduleRegistry.test.js.map +1 -0
  44. package/build/__tests__/unit/navigateVerify.test.d.ts +2 -0
  45. package/build/__tests__/unit/navigateVerify.test.d.ts.map +1 -0
  46. package/build/__tests__/unit/navigateVerify.test.js +30 -0
  47. package/build/__tests__/unit/navigateVerify.test.js.map +1 -0
  48. package/build/__tests__/unit/navigation.test.d.ts +2 -0
  49. package/build/__tests__/unit/navigation.test.d.ts.map +1 -0
  50. package/build/__tests__/unit/navigation.test.js +254 -0
  51. package/build/__tests__/unit/navigation.test.js.map +1 -0
  52. package/build/__tests__/unit/network.test.js +1 -0
  53. package/build/__tests__/unit/network.test.js.map +1 -1
  54. package/build/__tests__/unit/networkBufferEpoch.test.d.ts +2 -0
  55. package/build/__tests__/unit/networkBufferEpoch.test.d.ts.map +1 -0
  56. package/build/__tests__/unit/networkBufferEpoch.test.js +52 -0
  57. package/build/__tests__/unit/networkBufferEpoch.test.js.map +1 -0
  58. package/build/__tests__/unit/networkInterceptor.test.js +7 -7
  59. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -1
  60. package/build/__tests__/unit/promiseHandles.test.d.ts +2 -0
  61. package/build/__tests__/unit/promiseHandles.test.d.ts.map +1 -0
  62. package/build/__tests__/unit/promiseHandles.test.js +61 -0
  63. package/build/__tests__/unit/promiseHandles.test.js.map +1 -0
  64. package/build/__tests__/unit/resolveBufferOffline.test.d.ts +2 -0
  65. package/build/__tests__/unit/resolveBufferOffline.test.d.ts.map +1 -0
  66. package/build/__tests__/unit/resolveBufferOffline.test.js +25 -0
  67. package/build/__tests__/unit/resolveBufferOffline.test.js.map +1 -0
  68. package/build/__tests__/unit/sdkMirrorPoller.test.d.ts +2 -0
  69. package/build/__tests__/unit/sdkMirrorPoller.test.d.ts.map +1 -0
  70. package/build/__tests__/unit/sdkMirrorPoller.test.js +118 -0
  71. package/build/__tests__/unit/sdkMirrorPoller.test.js.map +1 -0
  72. package/build/__tests__/unit/sessionEpoch.test.d.ts +2 -0
  73. package/build/__tests__/unit/sessionEpoch.test.d.ts.map +1 -0
  74. package/build/__tests__/unit/sessionEpoch.test.js +41 -0
  75. package/build/__tests__/unit/sessionEpoch.test.js.map +1 -0
  76. package/build/__tests__/unit/truncate.test.d.ts +2 -0
  77. package/build/__tests__/unit/truncate.test.d.ts.map +1 -0
  78. package/build/__tests__/unit/truncate.test.js +58 -0
  79. package/build/__tests__/unit/truncate.test.js.map +1 -0
  80. package/build/core/appContext.d.ts +53 -0
  81. package/build/core/appContext.d.ts.map +1 -0
  82. package/build/core/appContext.js +172 -0
  83. package/build/core/appContext.js.map +1 -0
  84. package/build/core/appRequest.d.ts +21 -0
  85. package/build/core/appRequest.d.ts.map +1 -0
  86. package/build/core/appRequest.js +95 -0
  87. package/build/core/appRequest.js.map +1 -0
  88. package/build/core/bufferConfig.d.ts +5 -0
  89. package/build/core/bufferConfig.d.ts.map +1 -0
  90. package/build/core/bufferConfig.js +20 -0
  91. package/build/core/bufferConfig.js.map +1 -0
  92. package/build/core/connection.d.ts.map +1 -1
  93. package/build/core/connection.js +29 -9
  94. package/build/core/connection.js.map +1 -1
  95. package/build/core/debugGlobals.d.ts.map +1 -1
  96. package/build/core/debugGlobals.js +13 -0
  97. package/build/core/debugGlobals.js.map +1 -1
  98. package/build/core/epochRender.d.ts +19 -0
  99. package/build/core/epochRender.d.ts.map +1 -0
  100. package/build/core/epochRender.js +38 -0
  101. package/build/core/epochRender.js.map +1 -0
  102. package/build/core/guides.d.ts.map +1 -1
  103. package/build/core/guides.js +36 -91
  104. package/build/core/guides.js.map +1 -1
  105. package/build/core/index.d.ts +2 -3
  106. package/build/core/index.d.ts.map +1 -1
  107. package/build/core/index.js +4 -4
  108. package/build/core/index.js.map +1 -1
  109. package/build/core/inspector.d.ts +0 -39
  110. package/build/core/inspector.d.ts.map +1 -1
  111. package/build/core/inspector.js +1 -358
  112. package/build/core/inspector.js.map +1 -1
  113. package/build/core/ios.js +2 -2
  114. package/build/core/ios.js.map +1 -1
  115. package/build/core/jsExecute.d.ts +15 -0
  116. package/build/core/jsExecute.d.ts.map +1 -1
  117. package/build/core/jsExecute.js +136 -29
  118. package/build/core/jsExecute.js.map +1 -1
  119. package/build/core/logs.d.ts +12 -3
  120. package/build/core/logs.d.ts.map +1 -1
  121. package/build/core/logs.js +28 -5
  122. package/build/core/logs.js.map +1 -1
  123. package/build/core/metro.d.ts +2 -0
  124. package/build/core/metro.d.ts.map +1 -1
  125. package/build/core/metro.js +16 -8
  126. package/build/core/metro.js.map +1 -1
  127. package/build/core/moduleRegistry.d.ts +19 -0
  128. package/build/core/moduleRegistry.d.ts.map +1 -0
  129. package/build/core/moduleRegistry.js +67 -0
  130. package/build/core/moduleRegistry.js.map +1 -0
  131. package/build/core/nativeOnlyHints.d.ts.map +1 -1
  132. package/build/core/nativeOnlyHints.js +0 -2
  133. package/build/core/nativeOnlyHints.js.map +1 -1
  134. package/build/core/navigate.d.ts +46 -0
  135. package/build/core/navigate.d.ts.map +1 -0
  136. package/build/core/navigate.js +119 -0
  137. package/build/core/navigate.js.map +1 -0
  138. package/build/core/navigation.d.ts +66 -0
  139. package/build/core/navigation.d.ts.map +1 -0
  140. package/build/core/navigation.js +269 -0
  141. package/build/core/navigation.js.map +1 -0
  142. package/build/core/network.d.ts +12 -2
  143. package/build/core/network.d.ts.map +1 -1
  144. package/build/core/network.js +52 -12
  145. package/build/core/network.js.map +1 -1
  146. package/build/core/networkInterceptor.d.ts +1 -1
  147. package/build/core/networkInterceptor.d.ts.map +1 -1
  148. package/build/core/networkInterceptor.js +3 -2
  149. package/build/core/networkInterceptor.js.map +1 -1
  150. package/build/core/promiseHandles.d.ts +19 -0
  151. package/build/core/promiseHandles.d.ts.map +1 -0
  152. package/build/core/promiseHandles.js +58 -0
  153. package/build/core/promiseHandles.js.map +1 -0
  154. package/build/core/register.d.ts.map +1 -1
  155. package/build/core/register.js +1 -4
  156. package/build/core/register.js.map +1 -1
  157. package/build/core/sdkMirrorPoller.d.ts +31 -0
  158. package/build/core/sdkMirrorPoller.d.ts.map +1 -0
  159. package/build/core/sdkMirrorPoller.js +210 -0
  160. package/build/core/sdkMirrorPoller.js.map +1 -0
  161. package/build/core/state.d.ts +14 -0
  162. package/build/core/state.d.ts.map +1 -1
  163. package/build/core/state.js +48 -2
  164. package/build/core/state.js.map +1 -1
  165. package/build/core/toolHelpers.d.ts.map +1 -1
  166. package/build/core/toolHelpers.js +42 -10
  167. package/build/core/toolHelpers.js.map +1 -1
  168. package/build/core/truncate.d.ts +42 -0
  169. package/build/core/truncate.d.ts.map +1 -0
  170. package/build/core/truncate.js +169 -0
  171. package/build/core/truncate.js.map +1 -0
  172. package/build/core/types.d.ts +3 -0
  173. package/build/core/types.d.ts.map +1 -1
  174. package/build/index.d.ts.map +1 -1
  175. package/build/index.js +4 -2
  176. package/build/index.js.map +1 -1
  177. package/build/tools/_deviceArg.d.ts +17 -1
  178. package/build/tools/_deviceArg.d.ts.map +1 -1
  179. package/build/tools/_deviceArg.js +17 -1
  180. package/build/tools/_deviceArg.js.map +1 -1
  181. package/build/tools/bundleTools.d.ts.map +1 -1
  182. package/build/tools/bundleTools.js +20 -33
  183. package/build/tools/bundleTools.js.map +1 -1
  184. package/build/tools/componentTools.d.ts.map +1 -1
  185. package/build/tools/componentTools.js +41 -219
  186. package/build/tools/componentTools.js.map +1 -1
  187. package/build/tools/connectionTools.d.ts.map +1 -1
  188. package/build/tools/connectionTools.js +17 -22
  189. package/build/tools/connectionTools.js.map +1 -1
  190. package/build/tools/deviceTools.d.ts.map +1 -1
  191. package/build/tools/deviceTools.js +13 -167
  192. package/build/tools/deviceTools.js.map +1 -1
  193. package/build/tools/executionTools.d.ts.map +1 -1
  194. package/build/tools/executionTools.js +63 -18
  195. package/build/tools/executionTools.js.map +1 -1
  196. package/build/tools/interactionTools.d.ts.map +1 -1
  197. package/build/tools/interactionTools.js +13 -45
  198. package/build/tools/interactionTools.js.map +1 -1
  199. package/build/tools/logTools.d.ts.map +1 -1
  200. package/build/tools/logTools.js +61 -80
  201. package/build/tools/logTools.js.map +1 -1
  202. package/build/tools/metaTools.js +1 -1
  203. package/build/tools/metaTools.js.map +1 -1
  204. package/build/tools/navigationTools.d.ts +3 -0
  205. package/build/tools/navigationTools.d.ts.map +1 -0
  206. package/build/tools/navigationTools.js +60 -0
  207. package/build/tools/navigationTools.js.map +1 -0
  208. package/build/tools/networkTools.d.ts.map +1 -1
  209. package/build/tools/networkTools.js +44 -202
  210. package/build/tools/networkTools.js.map +1 -1
  211. package/build/tools/reduxTools.d.ts.map +1 -1
  212. package/build/tools/reduxTools.js +3 -2
  213. package/build/tools/reduxTools.js.map +1 -1
  214. package/build/tools/requestTools.d.ts +3 -0
  215. package/build/tools/requestTools.d.ts.map +1 -0
  216. package/build/tools/requestTools.js +79 -0
  217. package/build/tools/requestTools.js.map +1 -0
  218. package/build/tools/screenshotTools.d.ts.map +1 -1
  219. package/build/tools/screenshotTools.js +9 -13
  220. package/build/tools/screenshotTools.js.map +1 -1
  221. package/package.json +2 -1
  222. package/tools.json +22 -78
  223. package/build/__tests__/unit/flowpoints.test.d.ts +0 -2
  224. package/build/__tests__/unit/flowpoints.test.d.ts.map +0 -1
  225. package/build/__tests__/unit/flowpoints.test.js +0 -126
  226. package/build/__tests__/unit/flowpoints.test.js.map +0 -1
  227. package/build/__tests__/unit/flowpointsQuery.test.d.ts +0 -2
  228. package/build/__tests__/unit/flowpointsQuery.test.d.ts.map +0 -1
  229. package/build/__tests__/unit/flowpointsQuery.test.js +0 -91
  230. package/build/__tests__/unit/flowpointsQuery.test.js.map +0 -1
  231. package/build/__tests__/unit/selectionPoller.test.d.ts +0 -2
  232. package/build/__tests__/unit/selectionPoller.test.d.ts.map +0 -1
  233. package/build/__tests__/unit/selectionPoller.test.js +0 -109
  234. package/build/__tests__/unit/selectionPoller.test.js.map +0 -1
  235. package/build/__tests__/unit/verifyFlow.test.d.ts +0 -2
  236. package/build/__tests__/unit/verifyFlow.test.d.ts.map +0 -1
  237. package/build/__tests__/unit/verifyFlow.test.js +0 -45
  238. package/build/__tests__/unit/verifyFlow.test.js.map +0 -1
  239. package/build/core/selectionPoller.d.ts +0 -13
  240. package/build/core/selectionPoller.d.ts.map +0 -1
  241. package/build/core/selectionPoller.js +0 -102
  242. package/build/core/selectionPoller.js.map +0 -1
  243. package/build/pro/flowpointTools.d.ts +0 -4
  244. package/build/pro/flowpointTools.d.ts.map +0 -1
  245. package/build/pro/flowpointTools.js +0 -266
  246. package/build/pro/flowpointTools.js.map +0 -1
  247. package/build/pro/flowpoints.d.ts +0 -86
  248. package/build/pro/flowpoints.d.ts.map +0 -1
  249. package/build/pro/flowpoints.js +0 -283
  250. package/build/pro/flowpoints.js.map +0 -1
@@ -4,15 +4,24 @@ export declare function __resetLogSeq(): void;
4
4
  export declare class LogBuffer {
5
5
  private logs;
6
6
  private maxSize;
7
- constructor(maxSize?: number);
8
- add(entry: Omit<LogEntry, "seq"> & {
7
+ private deviceName?;
8
+ private dropped;
9
+ /**
10
+ * @param deviceName When set, add() stamps this device's current epoch.
11
+ * Omit for merged read buffers so copied entries keep their own epoch.
12
+ */
13
+ constructor(maxSize?: number, deviceName?: string);
14
+ add(entry: Omit<LogEntry, "seq" | "epoch"> & {
9
15
  seq?: number;
16
+ epoch?: number;
10
17
  }): void;
11
- get(count?: number, level?: string, startFromText?: string): LogEntry[];
18
+ get(count?: number, level?: string, startFromText?: string, epoch?: number): LogEntry[];
12
19
  search(text: string, maxResults?: number): LogEntry[];
13
20
  clear(): number;
14
21
  removeByText(text: string): number;
15
22
  get size(): number;
23
+ /** Entries evicted by the capacity cap since the last clear(). */
24
+ get droppedCount(): number;
16
25
  getAll(): LogEntry[];
17
26
  }
18
27
  export declare function mapConsoleType(type: string): LogEntry["level"];
@@ -1 +1 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKhD,2EAA2E;AAC3E,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAGD,qBAAa,SAAS;IAClB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAa;IAIlC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQ1D,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IA4BvE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAUrD,KAAK,IAAI,MAAM;IAMf,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMlC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,QAAQ,EAAE;CAGvB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAc9D;AAGD,MAAM,WAAW,iBAAiB;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,wBAAgB,UAAU,CACtB,IAAI,EAAE,QAAQ,EAAE,EAChB,OAAO,GAAE,iBAAsB,GAChC,MAAM,CAqBR;AAGD,wBAAgB,OAAO,CACnB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;IACL,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAChB,GACP;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQxD;AAGD,wBAAgB,UAAU,CACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAChB,GACP;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQxD;AAGD,wBAAgB,aAAa,CACzB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACxB,GACP,MAAM,CAoCR"}
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMhD,2EAA2E;AAC3E,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAGD,qBAAa,SAAS;IAClB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAK;IAEpB;;;OAGG;gBACS,OAAO,GAAE,MAAa,EAAE,UAAU,CAAC,EAAE,MAAM;IAKvD,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAapF,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAkCvF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAUrD,KAAK,IAAI,MAAM;IAOf,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMlC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,kEAAkE;IAClE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,MAAM,IAAI,QAAQ,EAAE;CAGvB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAc9D;AAGD,MAAM,WAAW,iBAAiB;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,wBAAgB,UAAU,CACtB,IAAI,EAAE,QAAQ,EAAE,EAChB,OAAO,GAAE,iBAAsB,GAChC,MAAM,CAqBR;AAGD,wBAAgB,OAAO,CACnB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;IACL,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAChB,GACP;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQxD;AAGD,wBAAgB,UAAU,CACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAChB,GACP;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQxD;AAGD,wBAAgB,aAAa,CACzB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACxB,GACP,MAAM,CAoCR"}
@@ -1,3 +1,4 @@
1
+ import { getEpoch } from "./state.js";
1
2
  // Process-global so ids never collide across per-device buffers.
2
3
  let nextSeq = 1;
3
4
  /** Test-only: reset the sequence so assertions are not order-dependent. */
@@ -8,18 +9,33 @@ export function __resetLogSeq() {
8
9
  export class LogBuffer {
9
10
  logs = [];
10
11
  maxSize;
11
- constructor(maxSize = 1000) {
12
+ deviceName;
13
+ dropped = 0;
14
+ /**
15
+ * @param deviceName When set, add() stamps this device's current epoch.
16
+ * Omit for merged read buffers so copied entries keep their own epoch.
17
+ */
18
+ constructor(maxSize = 1000, deviceName) {
12
19
  this.maxSize = maxSize;
20
+ this.deviceName = deviceName;
13
21
  }
14
22
  add(entry) {
15
- const stamped = { ...entry, seq: entry.seq ?? nextSeq++ };
23
+ const stamped = {
24
+ ...entry,
25
+ seq: entry.seq ?? nextSeq++,
26
+ epoch: entry.epoch ?? (this.deviceName ? getEpoch(this.deviceName) : 1),
27
+ };
16
28
  this.logs.push(stamped);
17
29
  if (this.logs.length > this.maxSize) {
18
30
  this.logs.shift();
31
+ this.dropped++;
19
32
  }
20
33
  }
21
- get(count, level, startFromText) {
34
+ get(count, level, startFromText, epoch) {
22
35
  let filtered = this.logs;
36
+ if (epoch != null) {
37
+ filtered = filtered.filter((log) => log.epoch === epoch);
38
+ }
23
39
  // If startFromText is provided, find the LAST matching line and start from there
24
40
  if (startFromText) {
25
41
  let startIndex = -1;
@@ -36,21 +52,24 @@ export class LogBuffer {
36
52
  if (level && level !== "all") {
37
53
  filtered = filtered.filter((log) => log.level === level);
38
54
  }
55
+ // Newest N. Was slice(0, count) — that returned the OLDEST entries and
56
+ // made a restarted app look like it had produced nothing new.
39
57
  if (count && count > 0) {
40
- filtered = filtered.slice(0, count);
58
+ filtered = filtered.slice(-count);
41
59
  }
42
60
  return filtered;
43
61
  }
44
62
  search(text, maxResults) {
45
63
  const results = this.logs.filter((log) => log.message.toLowerCase().includes(text.toLowerCase()));
46
64
  if (maxResults && maxResults > 0) {
47
- return results.slice(0, maxResults);
65
+ return results.slice(-maxResults);
48
66
  }
49
67
  return results;
50
68
  }
51
69
  clear() {
52
70
  const count = this.logs.length;
53
71
  this.logs = [];
72
+ this.dropped = 0;
54
73
  return count;
55
74
  }
56
75
  removeByText(text) {
@@ -61,6 +80,10 @@ export class LogBuffer {
61
80
  get size() {
62
81
  return this.logs.length;
63
82
  }
83
+ /** Entries evicted by the capacity cap since the last clear(). */
84
+ get droppedCount() {
85
+ return this.dropped;
86
+ }
64
87
  getAll() {
65
88
  return [...this.logs];
66
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import { DeviceInfo } from "./types.js";
2
+ export declare const DEFAULT_START_PORT = 8081;
3
+ export declare const DEFAULT_END_PORT = 8090;
2
4
  export declare const COMMON_PORTS: number[];
3
5
  export declare function isPortOpen(port: number, host?: string): Promise<boolean>;
4
6
  export declare function scanMetroPorts(startPort?: number, endPort?: number): Promise<number[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"metro.d.ts","sourceRoot":"","sources":["../../src/core/metro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,eAAO,MAAM,YAAY,UAAoC,CAAC;AAG9D,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB3F;AAGD,wBAAsB,cAAc,CAChC,SAAS,GAAE,MAAa,EACxB,OAAO,GAAE,MAAc,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAWtE;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,IAAI,CAmBzE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAmB3E;AAGD,wBAAsB,oBAAoB,CACtC,SAAS,GAAE,MAAa,EACxB,OAAO,GAAE,MAAc,GACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAYpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACjC,kBAAkB,EAAE,MAAM,EAC1B,SAAS,GAAE,MAAa,EACxB,OAAO,GAAE,MAAc,GACxB,OAAO,CAAC,UAAU,CAAC,CAcrB"}
1
+ {"version":3,"file":"metro.d.ts","sourceRoot":"","sources":["../../src/core/metro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASxC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,YAAY,UAGxB,CAAC;AAGF,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAsB3F;AAGD,wBAAsB,cAAc,CAChC,SAAS,GAAE,MAA2B,EACtC,OAAO,GAAE,MAAyB,GACnC,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAWtE;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,IAAI,CAmBzE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAmB3E;AAGD,wBAAsB,oBAAoB,CACtC,SAAS,GAAE,MAA2B,EACtC,OAAO,GAAE,MAAyB,GACnC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAYpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iFAAiF;IACjF,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACjC,kBAAkB,EAAE,MAAM,EAC1B,SAAS,GAAE,MAA2B,EACtC,OAAO,GAAE,MAAyB,GACnC,OAAO,CAAC,UAAU,CAAC,CAcrB"}
@@ -1,6 +1,14 @@
1
1
  import * as net from "net";
2
- // Common Metro ports
3
- export const COMMON_PORTS = [8081, 8082, 19000, 19001, 19002];
2
+ // Default Metro scan range: ten contiguous ports from 8081.
3
+ //
4
+ // The previous list was [8081, 8082, 19000, 19001, 19002] — a gap that made a
5
+ // third Metro instance on 8083 invisible to a default scan while the scan still
6
+ // reported success. Running three or more apps side by side is ordinary now, and
7
+ // Metro allocates upward from 8081, so contiguity matters more than the Expo
8
+ // 19xxx ports, which modern Expo no longer uses for the bundler.
9
+ export const DEFAULT_START_PORT = 8081;
10
+ export const DEFAULT_END_PORT = 8090;
11
+ export const COMMON_PORTS = Array.from({ length: DEFAULT_END_PORT - DEFAULT_START_PORT + 1 }, (_, i) => DEFAULT_START_PORT + i);
4
12
  // Check if a port is open
5
13
  export async function isPortOpen(port, host = "localhost") {
6
14
  return new Promise((resolve) => {
@@ -22,10 +30,10 @@ export async function isPortOpen(port, host = "localhost") {
22
30
  });
23
31
  }
24
32
  // Scan for running Metro servers
25
- export async function scanMetroPorts(startPort = 8081, endPort = 19002) {
26
- const portsToCheck = startPort === 8081 && endPort === 19002
27
- ? COMMON_PORTS
28
- : Array.from({ length: endPort - startPort + 1 }, (_, i) => startPort + i);
33
+ export async function scanMetroPorts(startPort = DEFAULT_START_PORT, endPort = DEFAULT_END_PORT) {
34
+ // The default range is contiguous, so there is no longer a special case —
35
+ // generating the range always yields the same ports the default would.
36
+ const portsToCheck = Array.from({ length: endPort - startPort + 1 }, (_, i) => startPort + i);
29
37
  const openPorts = [];
30
38
  for (const port of portsToCheck) {
31
39
  if (await isPortOpen(port)) {
@@ -93,7 +101,7 @@ export function filterDebuggableDevices(devices) {
93
101
  return result;
94
102
  }
95
103
  // Scan for Metro and return all devices grouped by port
96
- export async function discoverMetroDevices(startPort = 8081, endPort = 19002) {
104
+ export async function discoverMetroDevices(startPort = DEFAULT_START_PORT, endPort = DEFAULT_END_PORT) {
97
105
  const openPorts = await scanMetroPorts(startPort, endPort);
98
106
  const result = new Map();
99
107
  for (const port of openPorts) {
@@ -108,7 +116,7 @@ export async function discoverMetroDevices(startPort = 8081, endPort = 19002) {
108
116
  * Check if Metro is running but no devices/apps are connected
109
117
  * This state indicates a possible bundle error preventing the app from loading
110
118
  */
111
- export async function checkMetroState(connectedAppsCount, startPort = 8081, endPort = 19002) {
119
+ export async function checkMetroState(connectedAppsCount, startPort = DEFAULT_START_PORT, endPort = DEFAULT_END_PORT) {
112
120
  const openPorts = await scanMetroPorts(startPort, endPort);
113
121
  const metroRunning = openPorts.length > 0;
114
122
  const hasConnectedApps = connectedAppsCount > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"metro.js","sourceRoot":"","sources":["../../src/core/metro.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metro.js","sourceRoot":"","sources":["../../src/core/metro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Injected source for a working `require` inside Runtime.evaluate.
3
+ *
4
+ * Hermes has no `require` in the evaluate context, which is the second-largest
5
+ * production failure class (236 events: 218 "require() is not available" plus
6
+ * 18 "Property 'require' doesn't exist"). Agents reach for it to get `gql`,
7
+ * `AsyncStorage`, `NativeModules`, app modules and library internals — none of
8
+ * which are reachable any other way.
9
+ *
10
+ * Metro's dev registry does expose every loaded module keyed by numeric id,
11
+ * with a `verboseName` path when the bundle is unminified. Verified live:
12
+ * 4,398 named modules on astro-app and 4,116 on Boardwise, where
13
+ * `node_modules/expo-router/build/imperative-api.js` resolved to id 1017 and
14
+ * `__r(1017)` returned working exports.
15
+ *
16
+ * ES5 only — this string is compiled by Hermes, not by tsc.
17
+ */
18
+ export declare function buildRequireSource(): string;
19
+ //# sourceMappingURL=moduleRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleRegistry.d.ts","sourceRoot":"","sources":["../../src/core/moduleRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAgD3C"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Injected source for a working `require` inside Runtime.evaluate.
3
+ *
4
+ * Hermes has no `require` in the evaluate context, which is the second-largest
5
+ * production failure class (236 events: 218 "require() is not available" plus
6
+ * 18 "Property 'require' doesn't exist"). Agents reach for it to get `gql`,
7
+ * `AsyncStorage`, `NativeModules`, app modules and library internals — none of
8
+ * which are reachable any other way.
9
+ *
10
+ * Metro's dev registry does expose every loaded module keyed by numeric id,
11
+ * with a `verboseName` path when the bundle is unminified. Verified live:
12
+ * 4,398 named modules on astro-app and 4,116 on Boardwise, where
13
+ * `node_modules/expo-router/build/imperative-api.js` resolved to id 1017 and
14
+ * `__r(1017)` returned working exports.
15
+ *
16
+ * ES5 only — this string is compiled by Hermes, not by tsc.
17
+ */
18
+ export function buildRequireSource() {
19
+ return `
20
+ var __eb_require = (function () {
21
+ var cache = null;
22
+ function index() {
23
+ if (cache) return cache;
24
+ var r = globalThis.__r;
25
+ if (!r || typeof r.getModules !== 'function') return null;
26
+ var entries = [];
27
+ try {
28
+ r.getModules().forEach(function (mod, id) {
29
+ if (mod && mod.verboseName) entries.push({ id: id, name: mod.verboseName });
30
+ });
31
+ } catch (e) {
32
+ return null;
33
+ }
34
+ cache = entries;
35
+ return cache;
36
+ }
37
+ return function (name) {
38
+ var entries = index();
39
+ if (!entries) {
40
+ return { __eb_error: 'Metro module registry is unavailable (globalThis.__r missing or has no getModules). Only pre-existing globals are reachable.' };
41
+ }
42
+ if (entries.length === 0) {
43
+ return { __eb_error: 'Metro module registry exposed no module names (verboseName absent, likely a minified bundle). Only pre-existing globals are reachable.' };
44
+ }
45
+ var needle = String(name);
46
+ var exact = [];
47
+ var partial = [];
48
+ for (var i = 0; i < entries.length; i++) {
49
+ var n = entries[i].name;
50
+ if (n === needle) exact.push(entries[i]);
51
+ else if (n.indexOf(needle) !== -1) partial.push(entries[i]);
52
+ }
53
+ var hits = exact.length ? exact : partial;
54
+ if (hits.length === 0) {
55
+ return { __eb_error: 'require: no module matching "' + needle + '". Try a longer path fragment; ' + entries.length + ' modules are loaded.' };
56
+ }
57
+ hits.sort(function (a, b) { return a.name.length - b.name.length; });
58
+ try {
59
+ return globalThis.__r(hits[0].id);
60
+ } catch (e) {
61
+ return { __eb_error: 'require: module "' + hits[0].name + '" failed to evaluate: ' + String(e && e.message ? e.message : e) };
62
+ }
63
+ };
64
+ })();
65
+ `.trim();
66
+ }
67
+ //# sourceMappingURL=moduleRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moduleRegistry.js","sourceRoot":"","sources":["../../src/core/moduleRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CV,CAAC,IAAI,EAAE,CAAC;AACT,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nativeOnlyHints.d.ts","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAQ7E;AAgBD,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACtC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAoB5F;AAID,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhF"}
1
+ {"version":3,"file":"nativeOnlyHints.d.ts","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,MAAM,MAAM,wBAAwB,GAAG;IACnC,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAQ7E;AAcD,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,wBAAwB,CAAC;CACtC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,MAAM,CAoB5F;AAID,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhF"}
@@ -21,10 +21,8 @@ const NATIVE_FALLBACKS = {
21
21
  clear_logs: [],
22
22
  get_network_requests: [],
23
23
  search_network: [],
24
- get_network_stats: [],
25
24
  get_request_details: [],
26
25
  get_screen_layout: [],
27
- get_inspector_selection: [],
28
26
  };
29
27
  export function buildMetroMissingHint({ toolName, devices }) {
30
28
  const fallbacks = NATIVE_FALLBACKS[toolName] ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"nativeOnlyHints.js","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,UAAU,QAAQ;IACpB,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;AAClC,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACrC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,8BAA8B,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAClD,uBAAuB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;IACtB,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,4DAA4D;AAC5D,8DAA8D;AAC9D,MAAM,gBAAgB,GAA6B;IAC/C,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;IACd,oBAAoB,EAAE,EAAE;IACxB,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,mBAAmB,EAAE,EAAE;IACvB,iBAAiB,EAAE,EAAE;IACrB,uBAAuB,EAAE,EAAE;CAC9B,CAAC;AAOF,MAAM,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAA2B;IAChF,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAExG,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG;YAAE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC,OAAO;YAAE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,uGAAuG,CAAC,CAAC;IAC7J,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAC5G,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,6CAA6C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IACzG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,qFAAqF;AACrF,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAgB;IAC3D,IAAI,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,OAAO,MAAM,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"nativeOnlyHints.js","sourceRoot":"","sources":["../../src/core/nativeOnlyHints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,8BAA8B,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,UAAU,QAAQ;IACpB,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;AAClC,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACrC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,8BAA8B,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAClD,uBAAuB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;IACtB,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,4DAA4D;AAC5D,8DAA8D;AAC9D,MAAM,gBAAgB,GAA6B;IAC/C,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;IACd,oBAAoB,EAAE,EAAE;IACxB,cAAc,EAAE,EAAE;IAClB,mBAAmB,EAAE,EAAE;IACvB,iBAAiB,EAAE,EAAE;CACxB,CAAC;AAOF,MAAM,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAA2B;IAChF,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAExG,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;QACf,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG;YAAE,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrD,IAAI,OAAO,CAAC,OAAO;YAAE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,uGAAuG,CAAC,CAAC;IAC7J,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAC5G,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,6CAA6C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IACzG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,qFAAqF;AACrF,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAgB;IAC3D,IAAI,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5C,OAAO,MAAM,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { type NavAction } from "./navigation.js";
2
+ /**
3
+ * Poll schedule for confirming a navigation.
4
+ *
5
+ * Same-evaluation reads are unreliable in a way that varies BY APP: astro-app
6
+ * read stale (reporting no change for a navigation that succeeded), gifted read
7
+ * fresh. Both React Navigation, both measured 2026-07-31. Since the behaviour
8
+ * cannot be predicted, verification is always a separate, delayed read — an app
9
+ * that happens to read fresh simply settles on the first poll and costs one
10
+ * round trip rather than four.
11
+ */
12
+ export declare const POLL_DELAYS_MS: number[];
13
+ export interface NavigationOutcome {
14
+ changed: boolean;
15
+ indeterminate: boolean;
16
+ }
17
+ /**
18
+ * `changed: false` and `indeterminate` mean different things and must not be
19
+ * collapsed: the first says a guard bounced us or the destination was already
20
+ * current; the second says we never obtained a settled reading at all.
21
+ */
22
+ export declare function classifyNavigationOutcome(before: string | null, after: string | null, settled: boolean): NavigationOutcome;
23
+ export interface PerformNavigationOptions {
24
+ action: NavAction;
25
+ to?: string;
26
+ params?: Record<string, unknown>;
27
+ device?: string;
28
+ includeRouteTable?: boolean;
29
+ }
30
+ export interface NavigationResult {
31
+ success: boolean;
32
+ kind: string | null;
33
+ action: string;
34
+ to: string | null;
35
+ route: {
36
+ before: string | null;
37
+ after: string | null;
38
+ };
39
+ changed: boolean;
40
+ indeterminate: boolean;
41
+ stack?: string[];
42
+ routeTable?: string[];
43
+ error?: string;
44
+ }
45
+ export declare function performNavigation(opts: PerformNavigationOptions): Promise<NavigationResult>;
46
+ //# sourceMappingURL=navigate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.d.ts","sourceRoot":"","sources":["../../src/core/navigate.ts"],"names":[],"mappings":"AACA,OAAO,EAKH,KAAK,SAAS,EACjB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,UAAuB,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,OAAO,GACjB,iBAAiB,CAGnB;AAED,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,SAAS,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAiCD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmEjG"}
@@ -0,0 +1,119 @@
1
+ import { executeInApp } from "./jsExecute.js";
2
+ import { buildNavHandlesSource, buildRouteTableSource, buildNearestRoutesSource, buildNavigateSource } from "./navigation.js";
3
+ /**
4
+ * Poll schedule for confirming a navigation.
5
+ *
6
+ * Same-evaluation reads are unreliable in a way that varies BY APP: astro-app
7
+ * read stale (reporting no change for a navigation that succeeded), gifted read
8
+ * fresh. Both React Navigation, both measured 2026-07-31. Since the behaviour
9
+ * cannot be predicted, verification is always a separate, delayed read — an app
10
+ * that happens to read fresh simply settles on the first poll and costs one
11
+ * round trip rather than four.
12
+ */
13
+ export const POLL_DELAYS_MS = [150, 350, 600, 900];
14
+ /**
15
+ * `changed: false` and `indeterminate` mean different things and must not be
16
+ * collapsed: the first says a guard bounced us or the destination was already
17
+ * current; the second says we never obtained a settled reading at all.
18
+ */
19
+ export function classifyNavigationOutcome(before, after, settled) {
20
+ if (!settled)
21
+ return { changed: false, indeterminate: true };
22
+ return { changed: before !== after, indeterminate: false };
23
+ }
24
+ function preamble() {
25
+ return `${buildNavHandlesSource()}\n${buildRouteTableSource()}\n${buildNearestRoutesSource()}`;
26
+ }
27
+ /**
28
+ * Read the settled position: current route, the active stack path, and the
29
+ * route table (so a caller asking for it does not pay a second round trip).
30
+ */
31
+ function readStateExpression() {
32
+ return `(function(){ ${preamble()}
33
+ var t = __eb_routeTable();
34
+ var reader = __eb_nav && __eb_nav.stateReader;
35
+ var stack = [];
36
+ if (reader && typeof reader.getRootState === 'function') {
37
+ try {
38
+ var s = reader.getRootState();
39
+ var guard = 0;
40
+ while (s && s.routes && guard < 8) {
41
+ var i = (typeof s.index === 'number') ? s.index : s.routes.length - 1;
42
+ var r = s.routes[i];
43
+ if (!r) break;
44
+ stack.push(r.name);
45
+ s = r.state;
46
+ guard++;
47
+ }
48
+ } catch (e) { /* leave the stack partial rather than failing the read */ }
49
+ }
50
+ return JSON.stringify({ current: t.current, stack: stack, all: t.all });
51
+ })()`;
52
+ }
53
+ export async function performNavigation(opts) {
54
+ const { action, to = null, params, device, includeRouteTable } = opts;
55
+ const perform = `(function(){ ${preamble()}
56
+ return JSON.stringify(${buildNavigateSource(action, to, params ?? null)});
57
+ })()`;
58
+ const performed = await executeInApp(perform, false, { originatingToolName: "navigate" }, device);
59
+ if (!performed.success) {
60
+ return {
61
+ success: false, kind: null, action, to,
62
+ route: { before: null, after: null }, changed: false, indeterminate: false,
63
+ error: performed.error
64
+ };
65
+ }
66
+ let head;
67
+ try {
68
+ head = JSON.parse(String(performed.result));
69
+ }
70
+ catch {
71
+ return {
72
+ success: false, kind: null, action, to,
73
+ route: { before: null, after: null }, changed: false, indeterminate: false,
74
+ error: `Unparseable navigation result: ${String(performed.result).slice(0, 200)}`
75
+ };
76
+ }
77
+ const before = head.before ?? null;
78
+ if (!head.ok) {
79
+ return {
80
+ success: false, kind: head.kind, action, to,
81
+ route: { before, after: before }, changed: false, indeterminate: false,
82
+ error: head.error
83
+ };
84
+ }
85
+ // Settle-poll. Exit as soon as the route moves, so an app whose state reads
86
+ // fresh pays one round trip instead of four.
87
+ let after = before;
88
+ let stack = [];
89
+ let all = [];
90
+ let settled = false;
91
+ for (const delay of POLL_DELAYS_MS) {
92
+ await new Promise((r) => setTimeout(r, delay));
93
+ const read = await executeInApp(readStateExpression(), false, { originatingToolName: "navigate" }, device);
94
+ if (!read.success)
95
+ continue;
96
+ try {
97
+ const parsed = JSON.parse(String(read.result));
98
+ after = parsed.current;
99
+ stack = parsed.stack;
100
+ all = parsed.all;
101
+ settled = true;
102
+ if (after !== before)
103
+ break;
104
+ }
105
+ catch {
106
+ // Try the next poll rather than failing the whole navigation.
107
+ }
108
+ }
109
+ const outcome = classifyNavigationOutcome(before, after, settled);
110
+ return {
111
+ success: true, kind: head.kind, action, to,
112
+ route: { before, after },
113
+ changed: outcome.changed,
114
+ indeterminate: outcome.indeterminate,
115
+ stack,
116
+ routeTable: includeRouteTable ? all : undefined
117
+ };
118
+ }
119
+ //# sourceMappingURL=navigate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/core/navigate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EAEtB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAOnD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACrC,MAAqB,EACrB,KAAoB,EACpB,OAAgB;IAEhB,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC;AAuBD,SAAS,QAAQ;IACb,OAAO,GAAG,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,KAAK,wBAAwB,EAAE,EAAE,CAAC;AACnG,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB;IACxB,OAAO,gBAAgB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;KAmBhC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA8B;IAClE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IAEtE,MAAM,OAAO,GAAG,gBAAgB,QAAQ,EAAE;4BAClB,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC;KACtE,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;IAClG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO;YACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK;YAC1E,KAAK,EAAE,SAAS,CAAC,KAAK;SACzB,CAAC;IACN,CAAC;IAED,IAAI,IAAkF,CAAC;IACvF,IAAI,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;YACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;YACtC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK;YAC1E,KAAK,EAAE,kCAAkC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACpF,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACX,OAAO;YACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC3C,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK;YACtE,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC;IACN,CAAC;IAED,4EAA4E;IAC5E,6CAA6C;IAC7C,IAAI,KAAK,GAAkB,MAAM,CAAC;IAClC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAAa,EAAE,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QAC3G,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS;QAC5B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAA+D,CAAC;YAC7G,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;YACvB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACrB,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,KAAK,KAAK,MAAM;gBAAE,MAAM;QAChC,CAAC;QAAC,MAAM,CAAC;YACL,8DAA8D;QAClE,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,KAAK;QACL,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;KAClD,CAAC;AACN,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Injected source resolving BOTH navigation handles.
3
+ *
4
+ * Neither library provides both capabilities (measured 2026-07-31 across three
5
+ * apps):
6
+ * - Expo Router's `router` navigates by path but has no getRootState, so it
7
+ * cannot say where the app currently is.
8
+ * - A React Navigation root ref reads state but has no push/replace (those
9
+ * are stack-scoped), and silently no-ops on Expo Router's path
10
+ * destinations — throwing nothing and warning only to LogBox.
11
+ *
12
+ * So `navigator` performs movement and `stateReader` reports position. On an
13
+ * Expo Router app they are different objects.
14
+ *
15
+ * Resolution follows the order in appContext.ts: the Metro module registry
16
+ * outranks app-exposed globals, because Boardwise's `__EXPO_ROUTER__` turned
17
+ * out to be a hand-built wrapper rather than the library's router.
18
+ *
19
+ * The __EB_TEST_* hooks let the resolver be exercised without a fiber tree.
20
+ * They are read only when present and cost nothing in production.
21
+ *
22
+ * ES5 only — Hermes compiles this string.
23
+ */
24
+ export declare function buildNavHandlesSource(): string;
25
+ /**
26
+ * Injected source extracting the app's route table.
27
+ *
28
+ * React Navigation state carries `routeNames` per navigator — every registered
29
+ * route at that level, not merely the mounted ones — so the whole table is
30
+ * reachable without app cooperation. Boardwise's debug/navigation-debugger.tsx
31
+ * hand-computes this today; this replaces it.
32
+ *
33
+ * Measured tables: gifted 41 routes across 3 levels, Boardwise 25 across 3,
34
+ * astro 5 across 2.
35
+ *
36
+ * Requires __eb_nav. ES5 only.
37
+ */
38
+ export declare function buildRouteTableSource(): string;
39
+ /**
40
+ * Injected scorer for route-name suggestions.
41
+ *
42
+ * gifted registers 41 routes with names like CheckoutVerification and
43
+ * AssociatedAccountVerification, so listing them all in an error is noise
44
+ * exactly where the reader is already confused. Rank by closeness, show a few.
45
+ *
46
+ * Levenshtein is affordable here — route tables are tens of entries, not
47
+ * thousands — and it catches the dropped-letter and transposition typos that
48
+ * substring matching misses ("CheckoutVerfication").
49
+ *
50
+ * ES5 only.
51
+ */
52
+ export declare function buildNearestRoutesSource(): string;
53
+ export type NavAction = "navigate" | "push" | "replace" | "back" | "reset";
54
+ /**
55
+ * Injected source that validates, then performs, one navigation.
56
+ *
57
+ * Validation matters because the failure mode is silent: a path sent to a
58
+ * React Navigation ref throws nothing, changes nothing, and reports only to
59
+ * LogBox. Validating against the real route table converts that into an error
60
+ * before dispatch. Expo Router destinations are paths, which never appear in
61
+ * routeNames, so validation applies to React Navigation only.
62
+ *
63
+ * ES5 only.
64
+ */
65
+ export declare function buildNavigateSource(action: string, to: string | null, params: Record<string, unknown> | null): string;
66
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/core/navigation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAoE9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAgC9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAwCjD;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3E;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACvC,MAAM,CAgER"}