react-native-ai-debugger 1.8.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/build/core/appDetection.d.ts +7 -0
  2. package/build/core/appDetection.d.ts.map +1 -1
  3. package/build/core/appDetection.js +38 -17
  4. package/build/core/appDetection.js.map +1 -1
  5. package/build/core/componentSearch.d.ts +38 -0
  6. package/build/core/componentSearch.d.ts.map +1 -0
  7. package/build/core/componentSearch.js +419 -0
  8. package/build/core/componentSearch.js.map +1 -0
  9. package/build/core/componentTree.d.ts +12 -0
  10. package/build/core/componentTree.d.ts.map +1 -0
  11. package/build/core/componentTree.js +275 -0
  12. package/build/core/componentTree.js.map +1 -0
  13. package/build/core/connection.d.ts +1 -0
  14. package/build/core/connection.d.ts.map +1 -1
  15. package/build/core/connection.js +97 -88
  16. package/build/core/connection.js.map +1 -1
  17. package/build/core/debugGlobals.d.ts +5 -0
  18. package/build/core/debugGlobals.d.ts.map +1 -0
  19. package/build/core/debugGlobals.js +300 -0
  20. package/build/core/debugGlobals.js.map +1 -0
  21. package/build/core/executor.d.ts +7 -206
  22. package/build/core/executor.d.ts.map +1 -1
  23. package/build/core/executor.js +10 -4333
  24. package/build/core/executor.js.map +1 -1
  25. package/build/core/index.d.ts +3 -2
  26. package/build/core/index.d.ts.map +1 -1
  27. package/build/core/index.js +3 -2
  28. package/build/core/index.js.map +1 -1
  29. package/build/core/inspector.d.ts +50 -0
  30. package/build/core/inspector.d.ts.map +1 -0
  31. package/build/core/inspector.js +604 -0
  32. package/build/core/inspector.js.map +1 -0
  33. package/build/core/jsExecute.d.ts +27 -0
  34. package/build/core/jsExecute.d.ts.map +1 -0
  35. package/build/core/jsExecute.js +453 -0
  36. package/build/core/jsExecute.js.map +1 -0
  37. package/build/core/pressables.d.ts +44 -0
  38. package/build/core/pressables.d.ts.map +1 -0
  39. package/build/core/pressables.js +1480 -0
  40. package/build/core/pressables.js.map +1 -0
  41. package/build/core/register.d.ts +8 -0
  42. package/build/core/register.d.ts.map +1 -0
  43. package/build/core/register.js +216 -0
  44. package/build/core/register.js.map +1 -0
  45. package/build/core/screenLayout.d.ts +52 -0
  46. package/build/core/screenLayout.d.ts.map +1 -0
  47. package/build/core/screenLayout.js +828 -0
  48. package/build/core/screenLayout.js.map +1 -0
  49. package/build/core/toolHelpers.d.ts +24 -0
  50. package/build/core/toolHelpers.d.ts.map +1 -0
  51. package/build/core/toolHelpers.js +118 -0
  52. package/build/core/toolHelpers.js.map +1 -0
  53. package/build/core/types.d.ts +11 -6
  54. package/build/core/types.d.ts.map +1 -1
  55. package/build/index.d.ts +2 -4
  56. package/build/index.d.ts.map +1 -1
  57. package/build/index.js +37 -4440
  58. package/build/index.js.map +1 -1
  59. package/build/tools/accountTools.d.ts +2 -0
  60. package/build/tools/accountTools.d.ts.map +1 -1
  61. package/build/tools/accountTools.js +5 -0
  62. package/build/tools/accountTools.js.map +1 -1
  63. package/build/tools/bundleTools.d.ts +3 -0
  64. package/build/tools/bundleTools.d.ts.map +1 -0
  65. package/build/tools/bundleTools.js +368 -0
  66. package/build/tools/bundleTools.js.map +1 -0
  67. package/build/tools/componentTools.d.ts +3 -0
  68. package/build/tools/componentTools.d.ts.map +1 -0
  69. package/build/tools/componentTools.js +639 -0
  70. package/build/tools/componentTools.js.map +1 -0
  71. package/build/tools/connectionTools.d.ts +3 -0
  72. package/build/tools/connectionTools.d.ts.map +1 -0
  73. package/build/tools/connectionTools.js +564 -0
  74. package/build/tools/connectionTools.js.map +1 -0
  75. package/build/tools/deviceTools.d.ts +3 -0
  76. package/build/tools/deviceTools.d.ts.map +1 -0
  77. package/build/tools/deviceTools.js +296 -0
  78. package/build/tools/deviceTools.js.map +1 -0
  79. package/build/tools/executionTools.d.ts +3 -0
  80. package/build/tools/executionTools.d.ts.map +1 -0
  81. package/build/tools/executionTools.js +173 -0
  82. package/build/tools/executionTools.js.map +1 -0
  83. package/build/tools/interactionTools.d.ts +3 -0
  84. package/build/tools/interactionTools.d.ts.map +1 -0
  85. package/build/tools/interactionTools.js +414 -0
  86. package/build/tools/interactionTools.js.map +1 -0
  87. package/build/tools/logTools.d.ts +3 -0
  88. package/build/tools/logTools.d.ts.map +1 -0
  89. package/build/tools/logTools.js +371 -0
  90. package/build/tools/logTools.js.map +1 -0
  91. package/build/tools/metaTools.d.ts +7 -0
  92. package/build/tools/metaTools.d.ts.map +1 -0
  93. package/build/tools/metaTools.js +205 -0
  94. package/build/tools/metaTools.js.map +1 -0
  95. package/build/tools/networkTools.d.ts +3 -0
  96. package/build/tools/networkTools.d.ts.map +1 -0
  97. package/build/tools/networkTools.js +478 -0
  98. package/build/tools/networkTools.js.map +1 -0
  99. package/build/tools/reduxTools.d.ts +3 -0
  100. package/build/tools/reduxTools.d.ts.map +1 -0
  101. package/build/tools/reduxTools.js +83 -0
  102. package/build/tools/reduxTools.js.map +1 -0
  103. package/build/tools/screenshotTools.d.ts +3 -0
  104. package/build/tools/screenshotTools.d.ts.map +1 -0
  105. package/build/tools/screenshotTools.js +606 -0
  106. package/build/tools/screenshotTools.js.map +1 -0
  107. package/package.json +1 -1
@@ -10,4 +10,11 @@ import type { ConnectedApp } from "./types.js";
10
10
  * result when it succeeds.
11
11
  */
12
12
  export declare function scheduleAppDetection(app: ConnectedApp): void;
13
+ /**
14
+ * Await an in-flight scheduleAppDetection probe, racing it against `timeoutMs`.
15
+ * Resolves when the probe finishes OR the timeout elapses — never throws and
16
+ * never blocks longer than `timeoutMs`. No-op when no probe is pending or the
17
+ * stored result is already a probe success.
18
+ */
19
+ export declare function awaitAppDetection(app: ConnectedApp, timeoutMs: number): Promise<void>;
13
20
  //# sourceMappingURL=appDetection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appDetection.d.ts","sourceRoot":"","sources":["../../src/core/appDetection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,YAAY,CAAC;AA2EnE;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAgC5D"}
1
+ {"version":3,"file":"appDetection.d.ts","sourceRoot":"","sources":["../../src/core/appDetection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,YAAY,CAAC;AA2EnE;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAoC5D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrF"}
@@ -81,25 +81,46 @@ export function scheduleAppDetection(app) {
81
81
  app.appDetection = presumptive;
82
82
  trackAppDetection(presumptive);
83
83
  }
84
- setTimeout(async () => {
85
- try {
86
- const result = await detectApp(app.ws);
87
- if (result) {
88
- const parsed = parseDetectionResult(result, app.platform);
89
- if (parsed) {
90
- parsed.detectionSource = "probe";
91
- app.appDetection = parsed;
92
- trackAppDetection(parsed);
93
- const versionStr = parsed.reactNativeVersion !== "unknown"
94
- ? `RN ${parsed.reactNativeVersion}, ` : "";
95
- console.error(`[execbro] App detected: ${versionStr}${parsed.architecture} arch, ${parsed.jsEngine}, ${parsed.appPlatform} ${parsed.osVersion}`);
84
+ app.appDetectionPromise = new Promise((resolve) => {
85
+ setTimeout(async () => {
86
+ try {
87
+ const result = await detectApp(app.ws);
88
+ if (result) {
89
+ const parsed = parseDetectionResult(result, app.platform);
90
+ if (parsed) {
91
+ parsed.detectionSource = "probe";
92
+ app.appDetection = parsed;
93
+ trackAppDetection(parsed);
94
+ const versionStr = parsed.reactNativeVersion !== "unknown"
95
+ ? `RN ${parsed.reactNativeVersion}, ` : "";
96
+ console.error(`[execbro] App detected: ${versionStr}${parsed.architecture} arch, ${parsed.jsEngine}, ${parsed.appPlatform} ${parsed.osVersion}`);
97
+ }
96
98
  }
97
99
  }
98
- }
99
- catch (e) {
100
- console.error(`[execbro] App detection failed: ${e}`);
101
- }
102
- }, DETECTION_DELAY_MS);
100
+ catch (e) {
101
+ console.error(`[execbro] App detection failed: ${e}`);
102
+ }
103
+ finally {
104
+ resolve();
105
+ }
106
+ }, DETECTION_DELAY_MS);
107
+ });
108
+ }
109
+ /**
110
+ * Await an in-flight scheduleAppDetection probe, racing it against `timeoutMs`.
111
+ * Resolves when the probe finishes OR the timeout elapses — never throws and
112
+ * never blocks longer than `timeoutMs`. No-op when no probe is pending or the
113
+ * stored result is already a probe success.
114
+ */
115
+ export function awaitAppDetection(app, timeoutMs) {
116
+ if (!app.appDetectionPromise)
117
+ return Promise.resolve();
118
+ if (app.appDetection?.detectionSource === "probe")
119
+ return Promise.resolve();
120
+ return Promise.race([
121
+ app.appDetectionPromise,
122
+ new Promise((resolve) => setTimeout(resolve, timeoutMs)),
123
+ ]);
103
124
  }
104
125
  function detectApp(ws) {
105
126
  return new Promise((resolve) => {
@@ -1 +1 @@
1
- {"version":3,"file":"appDetection.js","sourceRoot":"","sources":["../../src/core/appDetection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appDetection.js","sourceRoot":"","sources":["../../src/core/appDetection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ExecutionResult } from "./types.js";
2
+ /**
3
+ * Get the React component tree from the running app.
4
+ * This traverses the fiber tree to extract component hierarchy with names.
5
+ */
6
+ /**
7
+ * Get layout data for visible components on the current screen.
8
+ * Uses measureInWindow to get actual screen positions and filters
9
+ * to only components within the viewport.
10
+ *
11
+ * Two-step approach (same as inspectAtPoint):
12
+ * Step 1: Walk fiber tree, dispatch measureInWindow on host components
13
+ * Step 2: After 300ms, read measurements, filter by viewport, build results
14
+ */
15
+ /**
16
+ * Inspect a specific component by name, returning its props, state, and layout.
17
+ */
18
+ export declare function inspectComponent(componentName: string, options?: {
19
+ index?: number;
20
+ includeState?: boolean;
21
+ includeChildren?: boolean;
22
+ childrenDepth?: number;
23
+ shortPath?: boolean;
24
+ simplifyHooks?: boolean;
25
+ device?: string;
26
+ }): Promise<ExecutionResult>;
27
+ /**
28
+ * Find all components matching a name pattern and return summary info.
29
+ */
30
+ export declare function findComponents(pattern: string, options?: {
31
+ maxResults?: number;
32
+ includeLayout?: boolean;
33
+ shortPath?: boolean;
34
+ summary?: boolean;
35
+ format?: "json" | "tonl";
36
+ device?: string;
37
+ }): Promise<ExecutionResult>;
38
+ //# sourceMappingURL=componentSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentSearch.d.ts","sourceRoot":"","sources":["../../src/core/componentSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA+BlD;;;GAGG;AAEH;;;;;;;;GAQG;AAIH;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACd,GACP,OAAO,CAAC,eAAe,CAAC,CAiP1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACd,GACP,OAAO,CAAC,eAAe,CAAC,CA0J1B"}
@@ -0,0 +1,419 @@
1
+ import { executeInApp } from "./jsExecute.js";
2
+ import { formatSummaryToTonl } from "./screenLayout.js";
3
+ function formatFoundComponentsToTonl(components) {
4
+ const lines = ["#found{component,path,depth,key,layout}"];
5
+ for (const c of components) {
6
+ const layout = c.layout
7
+ ? Object.entries(c.layout)
8
+ .map(([k, v]) => `${k}:${v}`)
9
+ .join(";")
10
+ : "";
11
+ lines.push(`${c.component}|${c.path}|${c.depth}|${c.key || ""}|${layout}`);
12
+ }
13
+ return lines.join("\n");
14
+ }
15
+ /**
16
+ * Get the React component tree from the running app.
17
+ * This traverses the fiber tree to extract component hierarchy with names.
18
+ */
19
+ /**
20
+ * Get layout data for visible components on the current screen.
21
+ * Uses measureInWindow to get actual screen positions and filters
22
+ * to only components within the viewport.
23
+ *
24
+ * Two-step approach (same as inspectAtPoint):
25
+ * Step 1: Walk fiber tree, dispatch measureInWindow on host components
26
+ * Step 2: After 300ms, read measurements, filter by viewport, build results
27
+ */
28
+ /**
29
+ * Inspect a specific component by name, returning its props, state, and layout.
30
+ */
31
+ export async function inspectComponent(componentName, options = {}) {
32
+ const { index = 0, includeState = true, includeChildren = false, childrenDepth = 1, shortPath = true, simplifyHooks = true, device } = options;
33
+ const escapedName = componentName.replace(/'/g, "\\'");
34
+ const expression = `
35
+ (function() {
36
+ const hook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
37
+ if (!hook) return { error: 'React DevTools hook not found.' };
38
+
39
+ let roots = [];
40
+ if (hook.getFiberRoots) {
41
+ roots = [...(hook.getFiberRoots(1) || [])];
42
+ }
43
+ if (roots.length === 0 && hook.renderers) {
44
+ for (const [id] of hook.renderers) {
45
+ const r = hook.getFiberRoots ? [...(hook.getFiberRoots(id) || [])] : [];
46
+ if (r.length > 0) { roots = r; break; }
47
+ }
48
+ }
49
+ if (roots.length === 0) return { error: 'No fiber roots found.' };
50
+
51
+ const targetName = '${escapedName}';
52
+ const targetIndex = ${index};
53
+ const includeState = ${includeState};
54
+ const includeChildren = ${includeChildren};
55
+ const childrenDepth = ${childrenDepth};
56
+ const shortPath = ${shortPath};
57
+ const simplifyHooks = ${simplifyHooks};
58
+ const pathSegments = 3;
59
+
60
+ function getComponentName(fiber) {
61
+ if (!fiber || !fiber.type) return null;
62
+ if (typeof fiber.type === 'string') return fiber.type;
63
+ return fiber.type.displayName || fiber.type.name || null;
64
+ }
65
+
66
+ function formatPath(pathArray) {
67
+ if (!shortPath || pathArray.length <= pathSegments) {
68
+ return pathArray.join(' > ');
69
+ }
70
+ return '... > ' + pathArray.slice(-pathSegments).join(' > ');
71
+ }
72
+
73
+ function extractStyles(style) {
74
+ try {
75
+ if (!style) return null;
76
+ const merged = Array.isArray(style)
77
+ ? Object.assign({}, ...style.filter(Boolean).map(s => {
78
+ try { return typeof s === 'object' ? s : {}; }
79
+ catch { return {}; }
80
+ }))
81
+ : (typeof style === 'object' ? style : {});
82
+ return Object.keys(merged).length > 0 ? merged : null;
83
+ } catch { return { _note: '[Contains animated styles]' }; }
84
+ }
85
+
86
+ function serializeValue(val, depth = 0) {
87
+ if (depth > 3) return '[Max depth]';
88
+ if (val === null) return null;
89
+ if (val === undefined) return undefined;
90
+ if (typeof val === 'function') return '[Function]';
91
+ if (typeof val !== 'object') return val;
92
+ if (Array.isArray(val)) {
93
+ if (val.length > 10) return '[Array(' + val.length + ')]';
94
+ return val.map(v => serializeValue(v, depth + 1));
95
+ }
96
+ // Object
97
+ const keys = Object.keys(val);
98
+ if (keys.length > 20) return '[Object(' + keys.length + ' keys)]';
99
+ const result = {};
100
+ for (const k of keys) {
101
+ try {
102
+ result[k] = serializeValue(val[k], depth + 1);
103
+ } catch {
104
+ result[k] = '[Animated Value]';
105
+ }
106
+ }
107
+ return result;
108
+ }
109
+
110
+ function getChildTree(fiber, depth) {
111
+ if (!fiber || depth <= 0) return null;
112
+ const children = [];
113
+ let child = fiber?.child;
114
+ while (child && children.length < 30) {
115
+ const name = getComponentName(child);
116
+ if (name) {
117
+ if (depth === 1) {
118
+ // Just names for depth 1
119
+ children.push(name);
120
+ } else {
121
+ // Tree structure for depth > 1
122
+ const nestedChildren = getChildTree(child, depth - 1);
123
+ children.push(nestedChildren ? { component: name, children: nestedChildren } : name);
124
+ }
125
+ }
126
+ child = child.sibling;
127
+ }
128
+ return children.length > 0 ? children : null;
129
+ }
130
+
131
+ const matches = [];
132
+
133
+ function findComponent(fiber, path) {
134
+ if (!fiber) return;
135
+
136
+ const name = getComponentName(fiber);
137
+ if (name === targetName) {
138
+ matches.push({ fiber, path: [...path, name] });
139
+ }
140
+
141
+ let child = fiber.child;
142
+ while (child) {
143
+ const childName = getComponentName(child);
144
+ findComponent(child, childName ? [...path, childName] : path);
145
+ child = child.sibling;
146
+ }
147
+ }
148
+
149
+ findComponent(roots[0].current, []);
150
+
151
+ if (matches.length === 0) {
152
+ return { error: 'Component "' + targetName + '" not found in the component tree.' };
153
+ }
154
+
155
+ if (targetIndex >= matches.length) {
156
+ return { error: 'Component "' + targetName + '" found ' + matches.length + ' times, but index ' + targetIndex + ' requested.' };
157
+ }
158
+
159
+ const { fiber, path } = matches[targetIndex];
160
+
161
+ const result = {
162
+ component: targetName,
163
+ path: formatPath(path),
164
+ instancesFound: matches.length,
165
+ instanceIndex: targetIndex
166
+ };
167
+
168
+ // Props (excluding children)
169
+ if (fiber.memoizedProps) {
170
+ const props = {};
171
+ for (const key of Object.keys(fiber.memoizedProps)) {
172
+ if (key === 'children') continue;
173
+ try {
174
+ props[key] = serializeValue(fiber.memoizedProps[key]);
175
+ } catch {
176
+ props[key] = '[Animated Value]';
177
+ }
178
+ }
179
+ result.props = props;
180
+ }
181
+
182
+ // Style separately for clarity
183
+ try {
184
+ if (fiber.memoizedProps?.style) {
185
+ result.style = extractStyles(fiber.memoizedProps.style);
186
+ }
187
+ } catch {
188
+ result.style = { _note: '[Contains animated styles]' };
189
+ }
190
+
191
+ // State (for hooks, this is a linked list)
192
+ if (includeState && fiber.memoizedState) {
193
+ // Simplified hook value serialization
194
+ function serializeHookValue(val, depth = 0) {
195
+ try {
196
+ if (depth > 2) return '[...]';
197
+ if (val === null || val === undefined) return val;
198
+ if (typeof val === 'function') return '[Function]';
199
+ if (typeof val !== 'object') return val;
200
+ // Skip React internal structures (effects, refs with destroy/create)
201
+ if (val.create && val.destroy !== undefined) return '[Effect]';
202
+ if (val.inst && val.deps) return '[Effect]';
203
+ if (val.current !== undefined && Object.keys(val).length === 1) {
204
+ // Ref object - just show current value
205
+ return { current: serializeHookValue(val.current, depth + 1) };
206
+ }
207
+ if (Array.isArray(val)) {
208
+ if (val.length > 5) return '[Array(' + val.length + ')]';
209
+ return val.slice(0, 5).map(v => serializeHookValue(v, depth + 1));
210
+ }
211
+ const keys = Object.keys(val);
212
+ if (keys.length > 10) return '[Object(' + keys.length + ' keys)]';
213
+ const result = {};
214
+ for (const k of keys.slice(0, 10)) {
215
+ try {
216
+ result[k] = serializeHookValue(val[k], depth + 1);
217
+ } catch {
218
+ result[k] = '[Animated Value]';
219
+ }
220
+ }
221
+ return result;
222
+ } catch { return '[Animated Value]'; }
223
+ }
224
+
225
+ // For function components with hooks
226
+ const states = [];
227
+ let state = fiber.memoizedState;
228
+ let hookIndex = 0;
229
+ while (state && hookIndex < 20) {
230
+ if (state.memoizedState !== undefined) {
231
+ const hookVal = simplifyHooks
232
+ ? serializeHookValue(state.memoizedState)
233
+ : serializeValue(state.memoizedState);
234
+ // Skip effect hooks in simplified mode
235
+ if (!simplifyHooks || (hookVal !== '[Effect]' && hookVal !== undefined)) {
236
+ states.push({
237
+ hookIndex,
238
+ value: hookVal
239
+ });
240
+ }
241
+ }
242
+ state = state.next;
243
+ hookIndex++;
244
+ }
245
+ if (states.length > 0) result.hooks = states;
246
+
247
+ // For class components, memoizedState is the state object directly
248
+ if (states.length === 0 && typeof fiber.memoizedState === 'object') {
249
+ result.state = serializeValue(fiber.memoizedState);
250
+ }
251
+ }
252
+
253
+ // Children tree (depth controlled by childrenDepth)
254
+ if (includeChildren) {
255
+ result.children = getChildTree(fiber, childrenDepth);
256
+ }
257
+
258
+ return result;
259
+ })()
260
+ `;
261
+ return executeInApp(expression, false, {}, device);
262
+ }
263
+ /**
264
+ * Find all components matching a name pattern and return summary info.
265
+ */
266
+ export async function findComponents(pattern, options = {}) {
267
+ const { maxResults = 20, includeLayout = false, shortPath = true, summary = false, format = "tonl", device } = options;
268
+ const escapedPattern = pattern.replace(/'/g, "\\'").replace(/\\/g, "\\\\");
269
+ const expression = `
270
+ (function() {
271
+ const hook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
272
+ if (!hook) return { error: 'React DevTools hook not found.' };
273
+
274
+ let roots = [];
275
+ if (hook.getFiberRoots) {
276
+ roots = [...(hook.getFiberRoots(1) || [])];
277
+ }
278
+ if (roots.length === 0 && hook.renderers) {
279
+ for (const [id] of hook.renderers) {
280
+ const r = hook.getFiberRoots ? [...(hook.getFiberRoots(id) || [])] : [];
281
+ if (r.length > 0) { roots = r; break; }
282
+ }
283
+ }
284
+ if (roots.length === 0) return { error: 'No fiber roots found.' };
285
+
286
+ const pattern = '${escapedPattern}';
287
+ const regex = new RegExp(pattern, 'i');
288
+ const maxResults = ${maxResults};
289
+ const includeLayout = ${includeLayout};
290
+ const shortPath = ${shortPath};
291
+ const summaryMode = ${summary};
292
+ const pathSegments = 3;
293
+
294
+ function getComponentName(fiber) {
295
+ if (!fiber || !fiber.type) return null;
296
+ if (typeof fiber.type === 'string') return fiber.type;
297
+ return fiber.type.displayName || fiber.type.name || null;
298
+ }
299
+
300
+ function formatPath(pathArray) {
301
+ if (!shortPath || pathArray.length <= pathSegments) {
302
+ return pathArray.join(' > ');
303
+ }
304
+ return '... > ' + pathArray.slice(-pathSegments).join(' > ');
305
+ }
306
+
307
+ function extractLayoutStyles(style) {
308
+ try {
309
+ if (!style) return null;
310
+ const merged = Array.isArray(style)
311
+ ? Object.assign({}, ...style.filter(Boolean).map(s => {
312
+ try { return typeof s === 'object' ? s : {}; }
313
+ catch { return {}; }
314
+ }))
315
+ : (typeof style === 'object' ? style : {});
316
+
317
+ const layout = {};
318
+ const keys = ['padding', 'paddingTop', 'paddingBottom', 'paddingLeft', 'paddingRight',
319
+ 'paddingHorizontal', 'paddingVertical', 'margin', 'marginTop', 'marginBottom',
320
+ 'marginLeft', 'marginRight', 'marginHorizontal', 'marginVertical',
321
+ 'width', 'height', 'flex', 'flexDirection', 'justifyContent', 'alignItems'];
322
+ for (const k of keys) {
323
+ if (merged[k] !== undefined) layout[k] = merged[k];
324
+ }
325
+ return Object.keys(layout).length > 0 ? layout : null;
326
+ } catch { return null; }
327
+ }
328
+
329
+ const results = [];
330
+
331
+ function search(fiber, path, depth) {
332
+ if (!fiber || results.length >= maxResults) return;
333
+
334
+ try {
335
+ var name = getComponentName(fiber);
336
+ if (name && regex.test(name)) {
337
+ var entry = {
338
+ component: name,
339
+ path: formatPath(path),
340
+ depth
341
+ };
342
+
343
+ if (fiber.memoizedProps && fiber.memoizedProps.testID) entry.testID = fiber.memoizedProps.testID;
344
+ if (fiber.key) entry.key = fiber.key;
345
+
346
+ if (includeLayout && fiber.memoizedProps && fiber.memoizedProps.style) {
347
+ try {
348
+ var layout = extractLayoutStyles(fiber.memoizedProps.style);
349
+ if (layout) entry.layout = layout;
350
+ } catch(e) {}
351
+ }
352
+
353
+ results.push(entry);
354
+ }
355
+
356
+ var child = fiber.child;
357
+ while (child && results.length < maxResults) {
358
+ var childName = getComponentName(child);
359
+ search(child, childName ? path.concat([childName]) : path, depth + 1);
360
+ child = child.sibling;
361
+ }
362
+ } catch(e) {
363
+ try {
364
+ var child = fiber.child;
365
+ while (child && results.length < maxResults) {
366
+ search(child, path, depth + 1);
367
+ child = child.sibling;
368
+ }
369
+ } catch(e2) {}
370
+ }
371
+ }
372
+
373
+ search(roots[0].current, [], 0);
374
+
375
+ if (summaryMode) {
376
+ const counts = {};
377
+ for (const r of results) {
378
+ counts[r.component] = (counts[r.component] || 0) + 1;
379
+ }
380
+ const sorted = Object.entries(counts)
381
+ .sort((a, b) => b[1] - a[1])
382
+ .map(([name, count]) => ({ component: name, count }));
383
+ return {
384
+ pattern,
385
+ totalMatches: results.length,
386
+ uniqueComponents: sorted.length,
387
+ components: sorted
388
+ };
389
+ }
390
+
391
+ return {
392
+ pattern,
393
+ found: results.length,
394
+ components: results
395
+ };
396
+ })()
397
+ `;
398
+ const result = await executeInApp(expression, false, {}, device);
399
+ if (format === "tonl" && result.success && result.result) {
400
+ try {
401
+ const parsed = JSON.parse(result.result);
402
+ if (parsed.components) {
403
+ if (parsed.totalMatches !== undefined) {
404
+ const tonl = formatSummaryToTonl(parsed.components, parsed.totalMatches);
405
+ return { success: true, result: `pattern: ${parsed.pattern}\n${tonl}` };
406
+ }
407
+ else {
408
+ const tonl = formatFoundComponentsToTonl(parsed.components);
409
+ return { success: true, result: `pattern: ${parsed.pattern}\nfound: ${parsed.found}\n${tonl}` };
410
+ }
411
+ }
412
+ }
413
+ catch {
414
+ // If parsing fails, return original result
415
+ }
416
+ }
417
+ return result;
418
+ }
419
+ //# sourceMappingURL=componentSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentSearch.js","sourceRoot":"","sources":["../../src/core/componentSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ExecutionResult } from "./types.js";
2
+ export declare function getComponentTree(options?: {
3
+ maxDepth?: number;
4
+ includeProps?: boolean;
5
+ includeStyles?: boolean;
6
+ hideInternals?: boolean;
7
+ format?: "json" | "tonl";
8
+ structureOnly?: boolean;
9
+ focusedOnly?: boolean;
10
+ device?: string;
11
+ }): Promise<ExecutionResult>;
12
+ //# sourceMappingURL=componentTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"componentTree.d.ts","sourceRoot":"","sources":["../../src/core/componentTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA4DlD,wBAAsB,gBAAgB,CAClC,OAAO,GAAE;IACL,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACd,GACP,OAAO,CAAC,eAAe,CAAC,CAuP1B"}