execbro 2.1.1 → 2.2.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 (98) hide show
  1. package/README.md +1 -1
  2. package/build/__tests__/integration/text-input.test.d.ts +2 -0
  3. package/build/__tests__/integration/text-input.test.d.ts.map +1 -0
  4. package/build/__tests__/integration/text-input.test.js +181 -0
  5. package/build/__tests__/integration/text-input.test.js.map +1 -0
  6. package/build/__tests__/unit/focusedInputTools.test.js +19 -6
  7. package/build/__tests__/unit/focusedInputTools.test.js.map +1 -1
  8. package/build/__tests__/unit/inputTarget.test.d.ts +2 -0
  9. package/build/__tests__/unit/inputTarget.test.d.ts.map +1 -0
  10. package/build/__tests__/unit/inputTarget.test.js +144 -0
  11. package/build/__tests__/unit/inputTarget.test.js.map +1 -0
  12. package/build/__tests__/unit/inputTargetTools.test.d.ts +2 -0
  13. package/build/__tests__/unit/inputTargetTools.test.d.ts.map +1 -0
  14. package/build/__tests__/unit/inputTargetTools.test.js +46 -0
  15. package/build/__tests__/unit/inputTargetTools.test.js.map +1 -0
  16. package/build/__tests__/unit/inputTextTool.test.d.ts +2 -0
  17. package/build/__tests__/unit/inputTextTool.test.d.ts.map +1 -0
  18. package/build/__tests__/unit/inputTextTool.test.js +120 -0
  19. package/build/__tests__/unit/inputTextTool.test.js.map +1 -0
  20. package/build/__tests__/unit/keyboardMetrics.test.d.ts +2 -0
  21. package/build/__tests__/unit/keyboardMetrics.test.d.ts.map +1 -0
  22. package/build/__tests__/unit/keyboardMetrics.test.js +58 -0
  23. package/build/__tests__/unit/keyboardMetrics.test.js.map +1 -0
  24. package/build/__tests__/unit/keyboardRaise.test.d.ts +2 -0
  25. package/build/__tests__/unit/keyboardRaise.test.d.ts.map +1 -0
  26. package/build/__tests__/unit/keyboardRaise.test.js +74 -0
  27. package/build/__tests__/unit/keyboardRaise.test.js.map +1 -0
  28. package/build/__tests__/unit/nativeInputValue.test.d.ts +2 -0
  29. package/build/__tests__/unit/nativeInputValue.test.d.ts.map +1 -0
  30. package/build/__tests__/unit/nativeInputValue.test.js +67 -0
  31. package/build/__tests__/unit/nativeInputValue.test.js.map +1 -0
  32. package/build/__tests__/unit/screenStateInputValue.test.d.ts +2 -0
  33. package/build/__tests__/unit/screenStateInputValue.test.d.ts.map +1 -0
  34. package/build/__tests__/unit/screenStateInputValue.test.js +49 -0
  35. package/build/__tests__/unit/screenStateInputValue.test.js.map +1 -0
  36. package/build/__tests__/unit/screenStateKeyboard.test.d.ts +2 -0
  37. package/build/__tests__/unit/screenStateKeyboard.test.d.ts.map +1 -0
  38. package/build/__tests__/unit/screenStateKeyboard.test.js +99 -0
  39. package/build/__tests__/unit/screenStateKeyboard.test.js.map +1 -0
  40. package/build/__tests__/unit/textEntry.test.d.ts +2 -0
  41. package/build/__tests__/unit/textEntry.test.d.ts.map +1 -0
  42. package/build/__tests__/unit/textEntry.test.js +291 -0
  43. package/build/__tests__/unit/textEntry.test.js.map +1 -0
  44. package/build/core/focusedInputTools.d.ts.map +1 -1
  45. package/build/core/focusedInputTools.js +13 -35
  46. package/build/core/focusedInputTools.js.map +1 -1
  47. package/build/core/injectedFilters.d.ts +23 -0
  48. package/build/core/injectedFilters.d.ts.map +1 -0
  49. package/build/core/injectedFilters.js +23 -0
  50. package/build/core/injectedFilters.js.map +1 -0
  51. package/build/core/inputTarget.d.ts +85 -0
  52. package/build/core/inputTarget.d.ts.map +1 -0
  53. package/build/core/inputTarget.js +364 -0
  54. package/build/core/inputTarget.js.map +1 -0
  55. package/build/core/inputTargetTools.d.ts +12 -0
  56. package/build/core/inputTargetTools.d.ts.map +1 -0
  57. package/build/core/inputTargetTools.js +26 -0
  58. package/build/core/inputTargetTools.js.map +1 -0
  59. package/build/core/ios.d.ts.map +1 -1
  60. package/build/core/ios.js +7 -1
  61. package/build/core/ios.js.map +1 -1
  62. package/build/core/keyboardMetrics.d.ts +11 -0
  63. package/build/core/keyboardMetrics.d.ts.map +1 -0
  64. package/build/core/keyboardMetrics.js +40 -0
  65. package/build/core/keyboardMetrics.js.map +1 -0
  66. package/build/core/keyboardRaise.d.ts +22 -0
  67. package/build/core/keyboardRaise.d.ts.map +1 -0
  68. package/build/core/keyboardRaise.js +74 -0
  69. package/build/core/keyboardRaise.js.map +1 -0
  70. package/build/core/nativeInputValue.d.ts +48 -0
  71. package/build/core/nativeInputValue.d.ts.map +1 -0
  72. package/build/core/nativeInputValue.js +113 -0
  73. package/build/core/nativeInputValue.js.map +1 -0
  74. package/build/core/screenState.d.ts +39 -0
  75. package/build/core/screenState.d.ts.map +1 -1
  76. package/build/core/screenState.js +93 -8
  77. package/build/core/screenState.js.map +1 -1
  78. package/build/core/textEntry.d.ts +75 -0
  79. package/build/core/textEntry.d.ts.map +1 -0
  80. package/build/core/textEntry.js +252 -0
  81. package/build/core/textEntry.js.map +1 -0
  82. package/build/tools/componentTools.d.ts.map +1 -1
  83. package/build/tools/componentTools.js +9 -2
  84. package/build/tools/componentTools.js.map +1 -1
  85. package/build/tools/interactionTools.d.ts +13 -0
  86. package/build/tools/interactionTools.d.ts.map +1 -1
  87. package/build/tools/interactionTools.js +112 -2
  88. package/build/tools/interactionTools.js.map +1 -1
  89. package/package.json +2 -2
  90. package/tools.json +11 -1
  91. package/build/__tests__/unit/focusedInput.test.d.ts +0 -2
  92. package/build/__tests__/unit/focusedInput.test.d.ts.map +0 -1
  93. package/build/__tests__/unit/focusedInput.test.js +0 -58
  94. package/build/__tests__/unit/focusedInput.test.js.map +0 -1
  95. package/build/core/focusedInput.d.ts +0 -27
  96. package/build/core/focusedInput.d.ts.map +0 -1
  97. package/build/core/focusedInput.js +0 -110
  98. package/build/core/focusedInput.js.map +0 -1
@@ -0,0 +1,364 @@
1
+ /**
2
+ * The single fiber resolver for text inputs.
3
+ *
4
+ * Replaces the three copy-pasted walkers that lived in focusedInput.ts and
5
+ * fixes both of their blind spots — each of which made the tools report
6
+ * "no focused TextInput" while a field WAS focused:
7
+ *
8
+ * 1. They took roots[0] and stopped, hiding inputs mounted under a second
9
+ * fiber root (modal and portal roots).
10
+ * 2. They read stateNode.canonical.publicInstance unconditionally, which is
11
+ * Fabric-only. Paper exposes the instance as stateNode itself.
12
+ *
13
+ * The emitted source is compiled by Hermes, not tsc: no async/await, and no
14
+ * require() beyond the injected __eb_require. Non-ASCII in embedded literals is
15
+ * escaped server-side by executeInApp, so values go in via JSON.stringify.
16
+ */
17
+ import { RN_PRIMITIVES_SRC, GENERIC_COMPONENT_SRC } from "./injectedFilters.js";
18
+ const HOST_INPUT_TYPES = `["RCTSinglelineTextInputView","RCTMultilineTextInputView","AndroidTextInput"]`;
19
+ const NO_FOCUS_REASON = "no focused TextInput. Pass testID (or component) so this tool can focus a field itself, " +
20
+ "or tap the field first. A tap reporting success does not guarantee React focus.";
21
+ /** Collects every root, defines the shape-tolerant helpers, resolves __eb_host. */
22
+ function prelude(query) {
23
+ const wantTestID = query?.testID != null ? JSON.stringify(query.testID) : "null";
24
+ const wantComponent = query?.component != null ? JSON.stringify(query.component) : "null";
25
+ const wantText = query?.textMatch != null ? JSON.stringify(query.textMatch) : "null";
26
+ return `
27
+ var hook = global.__REACT_DEVTOOLS_GLOBAL_HOOK__;
28
+ if (!hook) return { found: false, reason: "no devtools hook" };
29
+
30
+ var allRoots = [];
31
+ var rendererIds = Array.from(hook.renderers.keys());
32
+ for (var ri = 0; ri < rendererIds.length; ri++) {
33
+ var rs = Array.from(hook.getFiberRoots(rendererIds[ri]) || []);
34
+ for (var rj = 0; rj < rs.length; rj++) allRoots.push(rs[rj]);
35
+ }
36
+ if (allRoots.length === 0) return { found: false, reason: "no fiber roots" };
37
+
38
+ var HOSTS = ${HOST_INPUT_TYPES};
39
+ var wantTestID = ${wantTestID};
40
+ var wantComponent = ${wantComponent};
41
+ var wantText = ${wantText};
42
+
43
+ function __eb_name(t) { return typeof t === "string" ? t : (t && (t.displayName || t.name)) || null; }
44
+
45
+ function __eb_pub(f) {
46
+ var sn = f && f.stateNode;
47
+ if (!sn) return null;
48
+ if (sn.canonical && sn.canonical.publicInstance) return sn.canonical.publicInstance;
49
+ if (sn.canonical) return sn.canonical;
50
+ return sn;
51
+ }
52
+
53
+ var RN_PRIMITIVES = ${RN_PRIMITIVES_SRC};
54
+ var GENERIC_COMPONENT = ${GENERIC_COMPONENT_SRC};
55
+
56
+ // The fiber whose onChangeText we call and whose value we read: the INNERMOST
57
+ // composite carrying it. Host fibers are skipped — props are spread down to
58
+ // them, so the host's onChangeText is the same function reached one level up,
59
+ // but only the composite is a documented RN contract of (text: string).
60
+ function __eb_owner(hostFiber) {
61
+ for (var p = hostFiber; p; p = p.return) {
62
+ if (typeof p.type === "string") continue;
63
+ if (p.memoizedProps && typeof p.memoizedProps.onChangeText === "function") return p;
64
+ }
65
+ return null;
66
+ }
67
+
68
+ // A field's descriptive props. An input with NO onChangeText has no owner
69
+ // composite at all, so reading placeholder/value from the owner alone makes
70
+ // handler-less fields invisible to textMatch and blank in candidate lists.
71
+ function __eb_props(hostFiber) {
72
+ var o = __eb_owner(hostFiber);
73
+ return (o && o.memoizedProps) || hostFiber.memoizedProps || {};
74
+ }
75
+
76
+ // The field wrapper — the OUTERMOST ancestor still carrying onChangeText.
77
+ //
78
+ // A generic capped climb cannot find this. Measured on a real form: the
79
+ // wrapper (FormInput) sits 10 levels above the host behind four plain Views,
80
+ // so a 4-composite budget is spent on Views long before reaching it, and
81
+ // every input resolves to nothing. get_screen_state only names it because it
82
+ // matches that fiber directly. onChangeText is the signal that separates a
83
+ // field's own wrapper from the layout Views around it.
84
+ function __eb_fieldFiber(hostFiber) {
85
+ var best = null;
86
+ var p = hostFiber;
87
+ var d = 0;
88
+ while (p && d < 30) {
89
+ if (typeof p.type !== "string" && p.memoizedProps &&
90
+ typeof p.memoizedProps.onChangeText === "function") {
91
+ var n = __eb_name(p.type);
92
+ if (n && !RN_PRIMITIVES.test(n) && !GENERIC_COMPONENT.test(n)) best = p;
93
+ }
94
+ p = p.return;
95
+ d++;
96
+ }
97
+ return best;
98
+ }
99
+
100
+ // testID at the host or its controlling owner ONLY — never an arbitrary
101
+ // ancestor. Climbing freely picks up a ScrollView's internal nativeID: on a
102
+ // 7-field form every input answered to testID "7", so one target matched
103
+ // them all. nativeID is accepted only as a fallback on those same two fibers.
104
+ function __eb_testIDOf(hostFiber) {
105
+ var owner = __eb_owner(hostFiber);
106
+ var scope = owner && owner !== hostFiber ? [hostFiber, owner] : [hostFiber];
107
+ var s;
108
+ for (s = 0; s < scope.length; s++) {
109
+ var mp = scope[s].memoizedProps;
110
+ if (mp && mp.testID) return mp.testID;
111
+ }
112
+ for (s = 0; s < scope.length; s++) {
113
+ var mp2 = scope[s].memoizedProps;
114
+ if (mp2 && mp2.nativeID) return mp2.nativeID;
115
+ }
116
+ return null;
117
+ }
118
+
119
+ // The authored component name. Prefer the field wrapper; fall back to the
120
+ // capped composite climb get_screen_state uses for inputs that have no
121
+ // wrapper of their own. The filters matter either way — without them every
122
+ // input reports "TextAncestorContext", which names nothing and matches all.
123
+ function __eb_componentFiber(hostFiber) {
124
+ var field = __eb_fieldFiber(hostFiber);
125
+ if (field) return field;
126
+ var an = hostFiber.return;
127
+ var composites = 0;
128
+ var dep = 0;
129
+ while (an && dep < 12 && composites < 4) {
130
+ if (typeof an.type !== "string" && an.type !== null) {
131
+ var n = __eb_name(an.type);
132
+ if (n) {
133
+ composites++;
134
+ if (!RN_PRIMITIVES.test(n) && !GENERIC_COMPONENT.test(n)) return an;
135
+ }
136
+ }
137
+ an = an.return;
138
+ dep++;
139
+ }
140
+ return null;
141
+ }
142
+
143
+ function __eb_componentOf(hostFiber) {
144
+ var cf = __eb_componentFiber(hostFiber);
145
+ return cf ? __eb_name(cf.type) : null;
146
+ }
147
+
148
+ // The field's visible label — the text the wrapper renders beside the input
149
+ // ("First Name"), which is how a human identifies a field and how
150
+ // get_screen_state prints it. Host input subtrees are skipped so a field's
151
+ // own value never becomes its label.
152
+ function __eb_labelOf(hostFiber) {
153
+ var cf = __eb_componentFiber(hostFiber);
154
+ if (!cf) return null;
155
+ var parts = [];
156
+ (function collect(f, d) {
157
+ if (!f || d > 14 || parts.length >= 4) return;
158
+ // Never descend into an input: a field's own value must not become its label.
159
+ if (HOSTS.indexOf(__eb_name(f.type)) !== -1) return;
160
+ var mp = f.memoizedProps;
161
+ if (mp && typeof mp.children === "string" && mp.children.trim().length > 0) {
162
+ // Take the outermost fiber of a text branch and stop. A single label
163
+ // repeats down its Text -> RCTText chain, which otherwise renders as
164
+ // "Title Title Title *".
165
+ parts.push(mp.children.trim());
166
+ if (f.sibling) collect(f.sibling, d);
167
+ return;
168
+ }
169
+ if (f.child) collect(f.child, d + 1);
170
+ if (f.sibling) collect(f.sibling, d);
171
+ })(cf.child, 0);
172
+ return parts.length ? parts.join(" ").slice(0, 80) : null;
173
+ }
174
+
175
+ function __eb_describe(hostFiber, idx) {
176
+ var op = __eb_props(hostFiber);
177
+ return {
178
+ index: idx,
179
+ component: __eb_componentOf(hostFiber),
180
+ label: __eb_labelOf(hostFiber),
181
+ placeholder: op.placeholder != null ? String(op.placeholder) : null,
182
+ value: op.value != null ? String(op.value) : null,
183
+ testID: __eb_testIDOf(hostFiber)
184
+ };
185
+ }
186
+
187
+ var __eb_inputs = [];
188
+ for (var k = 0; k < allRoots.length; k++) {
189
+ (function walk(f, depth) {
190
+ if (!f || depth > 600) return;
191
+ if (HOSTS.indexOf(__eb_name(f.type)) !== -1) __eb_inputs.push(f);
192
+ if (f.child) walk(f.child, depth + 1);
193
+ if (f.sibling) walk(f.sibling, depth);
194
+ })(allRoots[k].current, 0);
195
+ }
196
+ if (__eb_inputs.length === 0) return { found: false, reason: "no TextInput found on screen" };
197
+
198
+ // EVERY match is collected. Taking the first silently is how a form gets the
199
+ // right text written into the wrong field and still verifies clean — the
200
+ // exact class of confident-but-wrong result this tool exists to remove.
201
+ var __eb_matches = [];
202
+ var i;
203
+ if (wantTestID !== null) {
204
+ for (i = 0; i < __eb_inputs.length; i++) {
205
+ if (__eb_testIDOf(__eb_inputs[i]) === wantTestID) __eb_matches.push(__eb_inputs[i]);
206
+ }
207
+ } else if (wantComponent !== null) {
208
+ var wc = String(wantComponent).toLowerCase();
209
+ for (i = 0; i < __eb_inputs.length; i++) {
210
+ var cn = __eb_componentOf(__eb_inputs[i]);
211
+ if (cn && cn.toLowerCase().indexOf(wc) !== -1) __eb_matches.push(__eb_inputs[i]);
212
+ }
213
+ } else if (wantText !== null) {
214
+ var wt = String(wantText).toLowerCase();
215
+ for (i = 0; i < __eb_inputs.length; i++) {
216
+ var mp3 = __eb_props(__eb_inputs[i]);
217
+ var hay = String(
218
+ (mp3.value || "") + " " + (mp3.placeholder || "") + " " +
219
+ (mp3.accessibilityLabel || "") + " " + (__eb_labelOf(__eb_inputs[i]) || "")
220
+ ).toLowerCase();
221
+ if (hay.indexOf(wt) !== -1) __eb_matches.push(__eb_inputs[i]);
222
+ }
223
+ } else {
224
+ for (i = 0; i < __eb_inputs.length; i++) {
225
+ var pf = __eb_pub(__eb_inputs[i]);
226
+ if (pf && pf.isFocused && pf.isFocused()) __eb_matches.push(__eb_inputs[i]);
227
+ }
228
+ }
229
+
230
+ var targeted = (wantTestID !== null || wantComponent !== null || wantText !== null);
231
+
232
+ if (__eb_matches.length === 0) {
233
+ var candidates = [];
234
+ for (var c = 0; c < __eb_inputs.length && candidates.length < 12; c++) {
235
+ candidates.push(__eb_describe(__eb_inputs[c], c));
236
+ }
237
+ return {
238
+ found: false,
239
+ reason: targeted
240
+ ? ("no TextInput matched that target (" + __eb_inputs.length + " input(s) mounted)")
241
+ : ${JSON.stringify(NO_FOCUS_REASON)},
242
+ candidates: candidates,
243
+ totalInputs: __eb_inputs.length
244
+ };
245
+ }
246
+
247
+ var __eb_index = ${typeof query?.index === "number" ? String(query.index) : "null"};
248
+ if (__eb_index !== null) {
249
+ if (__eb_index < 0 || __eb_index >= __eb_matches.length) {
250
+ return {
251
+ found: false,
252
+ reason: "index " + __eb_index + " is out of range — " + __eb_matches.length + " input(s) matched",
253
+ candidates: __eb_matches.map(__eb_describe),
254
+ totalInputs: __eb_inputs.length
255
+ };
256
+ }
257
+ } else if (__eb_matches.length > 1) {
258
+ return {
259
+ found: false,
260
+ ambiguous: true,
261
+ reason: __eb_matches.length + " inputs match this target — pass index to choose one, or target more precisely",
262
+ candidates: __eb_matches.map(__eb_describe),
263
+ totalInputs: __eb_inputs.length
264
+ };
265
+ }
266
+
267
+ var __eb_host = __eb_matches[__eb_index === null ? 0 : __eb_index];
268
+
269
+ var __eb_ownerFiber = __eb_owner(__eb_host);
270
+ var __eb_pubi = __eb_pub(__eb_host);
271
+ // Controlled means the value prop MIRRORS the field's text — the only way to
272
+ // read a field back from JS. RN does not reflect native text into fiber props
273
+ // for uncontrolled inputs (verified on device: the host's text prop stays
274
+ // undefined after typing, though mostRecentEventCount increments; an
275
+ // uncontrolled field
276
+ // cannot be verified this way no matter which write path put the text there.
277
+ var __eb_controlled = !!(__eb_ownerFiber &&
278
+ typeof __eb_ownerFiber.memoizedProps.value === "string");
279
+ var __eb_value = __eb_controlled
280
+ ? String(__eb_ownerFiber.memoizedProps.value) : null;
281
+ var __eb_focused = !!(__eb_pubi && __eb_pubi.isFocused && __eb_pubi.isFocused());
282
+ var __eb_tag = __eb_pubi && __eb_pubi.__nativeTag != null ? __eb_pubi.__nativeTag : null;
283
+ `;
284
+ }
285
+ /** The always-present fields of a found result. */
286
+ const BASE = `
287
+ found: true,
288
+ focused: __eb_focused,
289
+ nativeTag: __eb_tag,
290
+ value: __eb_value,
291
+ testID: __eb_testIDOf(__eb_host),
292
+ controlled: __eb_controlled,
293
+ hasOnChangeText: !!__eb_ownerFiber`;
294
+ export function buildInputExpression(op, query) {
295
+ let action;
296
+ switch (op.kind) {
297
+ case "find":
298
+ case "read":
299
+ action = `
300
+ return { ${BASE}, ok: true };`;
301
+ break;
302
+ case "focus":
303
+ action = `
304
+ if (__eb_pubi && typeof __eb_pubi.focus === "function") {
305
+ __eb_pubi.focus();
306
+ return { ${BASE}, focused: true, ok: true, via: "publicInstance.focus" };
307
+ }
308
+ return { ${BASE}, ok: false, via: "input exposes no focus() method" };`;
309
+ break;
310
+ case "blur":
311
+ action = `
312
+ if (__eb_pubi && typeof __eb_pubi.blur === "function") {
313
+ __eb_pubi.blur();
314
+ return { ${BASE}, focused: false, ok: true, via: "publicInstance.blur" };
315
+ }
316
+ return { ${BASE}, ok: false, via: "input exposes no blur() method" };`;
317
+ break;
318
+ case "setValue":
319
+ action = `
320
+ var next = ${JSON.stringify(op.value)};
321
+ if (__eb_ownerFiber) {
322
+ __eb_ownerFiber.memoizedProps.onChangeText(next);
323
+ return { ${BASE}, value: next, ok: true, via: "onChangeText" };
324
+ }
325
+ return { ${BASE}, ok: false, via: "no onChangeText (uncontrolled input)" };`;
326
+ break;
327
+ case "setNative":
328
+ // Sets the native text, then fires onChangeText if the field has
329
+ // one. Both halves matter: without the first the field shows
330
+ // nothing, without the second the app never receives the text —
331
+ // and a field that displays text the app does not have is the
332
+ // "looks right, isn't" failure this tool exists to remove.
333
+ action = `
334
+ var nv = ${JSON.stringify(op.value)};
335
+ if (!__eb_pubi || typeof __eb_pubi.setNativeProps !== "function") {
336
+ return { ${BASE}, ok: false, via: "input exposes no setNativeProps" };
337
+ }
338
+ __eb_pubi.setNativeProps({ text: nv });
339
+ if (__eb_ownerFiber) {
340
+ __eb_ownerFiber.memoizedProps.onChangeText(nv);
341
+ return { ${BASE}, value: __eb_controlled ? nv : __eb_value, ok: true, via: "setNativeProps+onChangeText" };
342
+ }
343
+ return { ${BASE}, ok: true, via: "setNativeProps" };`;
344
+ break;
345
+ case "clear":
346
+ // Only a controlled field can be cleared through its handler. On an
347
+ // uncontrolled one that handler may be a no-op (or may not drive the
348
+ // text at all), so calling it clears nothing while reporting success.
349
+ action = `
350
+ if (__eb_controlled) {
351
+ __eb_ownerFiber.memoizedProps.onChangeText("");
352
+ return { ${BASE}, value: "", ok: true, via: "onChangeText" };
353
+ }
354
+ if (__eb_pubi && typeof __eb_pubi.clear === "function") {
355
+ __eb_pubi.clear();
356
+ return { ${BASE}, value: null, ok: true, via: "publicInstance.clear" };
357
+ }
358
+ return { ${BASE}, ok: false, via: "input exposes no clear() method" };`;
359
+ break;
360
+ }
361
+ return `(() => {${prelude(query)}${action}
362
+ })()`;
363
+ }
364
+ //# sourceMappingURL=inputTarget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputTarget.js","sourceRoot":"","sources":["../../src/core/inputTarget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAqBH,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AA8ChF,MAAM,gBAAgB,GAAG,+EAA+E,CAAC;AAEzG,MAAM,eAAe,GACjB,0FAA0F;IAC1F,iFAAiF,CAAC;AAEtF,mFAAmF;AACnF,SAAS,OAAO,CAAC,KAA6B;IAC1C,MAAM,UAAU,GAAG,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACjF,MAAM,aAAa,GAAG,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1F,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAErF,OAAO;;;;;;;;;;;;gBAYK,gBAAgB;qBACX,UAAU;wBACP,aAAa;mBAClB,QAAQ;;;;;;;;;;;;wBAYH,iBAAiB;4BACb,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA2LrC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;;;;;;qBAMtB,OAAO,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCnF,CAAC;AACF,CAAC;AAED,mDAAmD;AACnD,MAAM,IAAI,GAAG;;;;;;;uCAO0B,CAAC;AAExC,MAAM,UAAU,oBAAoB,CAAC,EAAW,EAAE,KAAkB;IAChE,IAAI,MAAc,CAAC;IAEnB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACP,MAAM,GAAG;aACR,IAAI,eAAe,CAAC;YACrB,MAAM;QAEV,KAAK,OAAO;YACR,MAAM,GAAG;;;eAGN,IAAI;;aAEN,IAAI,wDAAwD,CAAC;YAC9D,MAAM;QAEV,KAAK,MAAM;YACP,MAAM,GAAG;;;eAGN,IAAI;;aAEN,IAAI,uDAAuD,CAAC;YAC7D,MAAM;QAEV,KAAK,UAAU;YACX,MAAM,GAAG;eACN,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC;;;eAGxB,IAAI;;aAEN,IAAI,6DAA6D,CAAC;YACnE,MAAM;QAEV,KAAK,WAAW;YACZ,iEAAiE;YACjE,6DAA6D;YAC7D,gEAAgE;YAChE,8DAA8D;YAC9D,2DAA2D;YAC3D,MAAM,GAAG;aACR,IAAI,CAAC,SAAS,CAAE,EAA2C,CAAC,KAAK,CAAC;;eAEhE,IAAI;;;;;eAKJ,IAAI;;aAEN,IAAI,sCAAsC,CAAC;YAC5C,MAAM;QAEV,KAAK,OAAO;YACR,oEAAoE;YACpE,qEAAqE;YACrE,sEAAsE;YACtE,MAAM,GAAG;;;eAGN,IAAI;;;;eAIJ,IAAI;;aAEN,IAAI,wDAAwD,CAAC;YAC9D,MAAM;IACd,CAAC;IAED,OAAO,WAAW,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM;KACxC,CAAC;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ExecutionResult } from "./types.js";
2
+ import { type InputOp, type InputQuery, type InputResult } from "./inputTarget.js";
3
+ export type ExecuteFn = (expression: string, device?: string) => Promise<ExecutionResult>;
4
+ /**
5
+ * Runs one resolver operation and normalises every failure — executor error,
6
+ * unparseable output, app-side miss — into { found: false, reason }.
7
+ *
8
+ * Callers get exactly one shape to branch on and never have to catch, which is
9
+ * what lets the orchestration above read as a straight line.
10
+ */
11
+ export declare function runInputOp(op: InputOp, query?: InputQuery, device?: string, execute?: ExecuteFn): Promise<InputResult>;
12
+ //# sourceMappingURL=inputTargetTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputTargetTools.d.ts","sourceRoot":"","sources":["../../src/core/inputTargetTools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAwB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,MAAM,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAK1F;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC5B,EAAE,EAAE,OAAO,EACX,KAAK,CAAC,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,SAA0B,GACpC,OAAO,CAAC,WAAW,CAAC,CAetB"}
@@ -0,0 +1,26 @@
1
+ import { executeInApp } from "./executor.js";
2
+ import { buildInputExpression } from "./inputTarget.js";
3
+ const defaultExecute = (expression, device) => executeInApp(expression, true, { originatingToolName: "input_text" }, device);
4
+ /**
5
+ * Runs one resolver operation and normalises every failure — executor error,
6
+ * unparseable output, app-side miss — into { found: false, reason }.
7
+ *
8
+ * Callers get exactly one shape to branch on and never have to catch, which is
9
+ * what lets the orchestration above read as a straight line.
10
+ */
11
+ export async function runInputOp(op, query, device, execute = defaultExecute) {
12
+ const exec = await execute(buildInputExpression(op, query), device);
13
+ if (!exec.success) {
14
+ return { found: false, reason: exec.error ?? "executor failed" };
15
+ }
16
+ try {
17
+ return JSON.parse(exec.result ?? "");
18
+ }
19
+ catch {
20
+ return {
21
+ found: false,
22
+ reason: `could not parse resolver output: ${String(exec.result).slice(0, 200)}`
23
+ };
24
+ }
25
+ }
26
+ //# sourceMappingURL=inputTargetTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputTargetTools.js","sourceRoot":"","sources":["../../src/core/inputTargetTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAmD,MAAM,kBAAkB,CAAC;AAIzG,MAAM,cAAc,GAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CACrD,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,EAAW,EACX,KAAkB,EAClB,MAAe,EACf,UAAqB,cAAc;IAEnC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAEpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAgB,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,oCAAoC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAClF,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/core/ios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/core/ios.ts"],"names":[],"mappings":"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"}
package/build/core/ios.js CHANGED
@@ -816,7 +816,13 @@ export async function iosInputText(text, udid) {
816
816
  return preflight.error;
817
817
  const { driver, targetUdid } = preflight;
818
818
  if (driver === "axe") {
819
- await runAxe("type", text, "--udid", targetUdid);
819
+ // Submit one HID event per chunk instead of AXe's default 200. Text
820
+ // arriving out of order has been observed on device ("Alice" landing as
821
+ // "Aicel", "CASEB" as "CSEBA" — in both cases the second keystroke last),
822
+ // and a single large submission is the plausible cause. Measured at the
823
+ // same latency as plain `axe type` (1432ms vs 1519ms for 19 chars), so
824
+ // the serialisation is free.
825
+ await runAxe("batch", "--udid", targetUdid, "--type-chunk-size", "1", "--step", `type '${text.replace(/'/g, "'\\''")}'`);
820
826
  }
821
827
  else {
822
828
  const { stderr } = await runIdb("ui", "text", "--udid", targetUdid, text);