react-native-tapline 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -2
  3. package/TaplineNative.podspec +14 -0
  4. package/dist/actions.d.ts +203 -0
  5. package/dist/actions.js +1991 -0
  6. package/dist/actions.js.map +1 -0
  7. package/dist/agent.d.ts +117 -0
  8. package/dist/agent.js +352 -0
  9. package/dist/agent.js.map +1 -0
  10. package/dist/alerts.d.ts +35 -0
  11. package/dist/alerts.js +437 -0
  12. package/dist/alerts.js.map +1 -0
  13. package/dist/awake.d.ts +2 -0
  14. package/dist/awake.js +53 -0
  15. package/dist/awake.js.map +1 -0
  16. package/dist/checks.d.ts +35 -0
  17. package/dist/checks.js +501 -0
  18. package/dist/checks.js.map +1 -0
  19. package/dist/client.d.ts +111 -0
  20. package/dist/client.js +446 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/commands.d.ts +24 -0
  23. package/dist/commands.js +111 -0
  24. package/dist/commands.js.map +1 -0
  25. package/dist/events.d.ts +5 -0
  26. package/dist/events.js +22 -0
  27. package/dist/events.js.map +1 -0
  28. package/dist/feed.d.ts +117 -0
  29. package/dist/feed.js +440 -0
  30. package/dist/feed.js.map +1 -0
  31. package/dist/fiber.d.ts +43 -0
  32. package/dist/fiber.js +100 -0
  33. package/dist/fiber.js.map +1 -0
  34. package/dist/index.d.ts +50 -0
  35. package/dist/index.js +181 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/inspect.d.ts +249 -0
  38. package/dist/inspect.js +1354 -0
  39. package/dist/inspect.js.map +1 -0
  40. package/dist/keyboard.d.ts +10 -0
  41. package/dist/keyboard.js +63 -0
  42. package/dist/keyboard.js.map +1 -0
  43. package/dist/link.d.ts +21 -0
  44. package/dist/link.js +63 -0
  45. package/dist/link.js.map +1 -0
  46. package/dist/live.d.ts +30 -0
  47. package/dist/live.js +279 -0
  48. package/dist/live.js.map +1 -0
  49. package/dist/logs.d.ts +16 -0
  50. package/dist/logs.js +171 -0
  51. package/dist/logs.js.map +1 -0
  52. package/dist/methods.d.ts +3 -0
  53. package/dist/methods.js +49 -0
  54. package/dist/methods.js.map +1 -0
  55. package/dist/native.d.ts +34 -0
  56. package/dist/native.js +63 -0
  57. package/dist/native.js.map +1 -0
  58. package/dist/network.d.ts +27 -0
  59. package/dist/network.js +238 -0
  60. package/dist/network.js.map +1 -0
  61. package/dist/register.d.ts +24 -0
  62. package/dist/register.js +180 -0
  63. package/dist/register.js.map +1 -0
  64. package/dist/settle.d.ts +27 -0
  65. package/dist/settle.js +70 -0
  66. package/dist/settle.js.map +1 -0
  67. package/dist/source.d.ts +60 -0
  68. package/dist/source.js +214 -0
  69. package/dist/source.js.map +1 -0
  70. package/dist/storage.d.ts +10 -0
  71. package/dist/storage.js +45 -0
  72. package/dist/storage.js.map +1 -0
  73. package/dist/touches.d.ts +15 -0
  74. package/dist/touches.js +89 -0
  75. package/dist/touches.js.map +1 -0
  76. package/dist/types.d.ts +168 -0
  77. package/dist/types.js +32 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/wait.d.ts +8 -0
  80. package/dist/wait.js +99 -0
  81. package/dist/wait.js.map +1 -0
  82. package/expo-module.config.json +7 -0
  83. package/ios/TaplineNativeModule.swift +79 -0
  84. package/metro.d.ts +26 -0
  85. package/metro.js +146 -0
  86. package/package.json +100 -4
  87. package/register.d.ts +1 -0
  88. package/register.js +3 -0
package/dist/alerts.js ADDED
@@ -0,0 +1,437 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NATIVE_COVER_ID = void 0;
37
+ exports.installAlertTracking = installAlertTracking;
38
+ exports.uninstallAlertTracking = uninstallAlertTracking;
39
+ exports.isOwnAlert = isOwnAlert;
40
+ exports.nativeAlert = nativeAlert;
41
+ exports.openAlerts = openAlerts;
42
+ exports.TaplineAlertHost = TaplineAlertHost;
43
+ const jsx_runtime_1 = require("react/jsx-runtime");
44
+ // Native alerts (Alert.alert / Alert.prompt) are drawn by the OS: an agent that drives the app
45
+ // through component handlers can neither see nor press them. This module records them and,
46
+ // optionally, replaces them with an in-app stand-in made of ordinary views.
47
+ const react_1 = __importStar(require("react"));
48
+ const react_native_1 = require("react-native");
49
+ const native_1 = require("./native");
50
+ const touches_1 = require("./touches");
51
+ const DEFAULT_OK = 'OK';
52
+ let installed = false;
53
+ let standInMode = false;
54
+ let wrapperRegistered = false;
55
+ let originalAlert = null;
56
+ let originalPrompt = null;
57
+ let nextId = 1;
58
+ /** True while our wrapper is inside the original: iOS `Alert.alert` calls `Alert.prompt`. */
59
+ let delegating = false;
60
+ let queue = [];
61
+ const hosts = [];
62
+ const listeners = new Set();
63
+ let version = 0;
64
+ function notify() {
65
+ version += 1;
66
+ for (const listener of [...listeners])
67
+ listener();
68
+ }
69
+ function subscribe(listener) {
70
+ listeners.add(listener);
71
+ return () => {
72
+ listeners.delete(listener);
73
+ };
74
+ }
75
+ function getVersion() {
76
+ return version;
77
+ }
78
+ function closeAlert(id) {
79
+ ownAlertIds.delete(id);
80
+ const next = queue.filter((entry) => entry.info.id !== id);
81
+ if (next.length === queue.length)
82
+ return;
83
+ queue = next;
84
+ notify();
85
+ }
86
+ function callHandler(handler, args) {
87
+ if (typeof handler !== 'function')
88
+ return undefined;
89
+ return Reflect.apply(handler, undefined, args);
90
+ }
91
+ function styleOf(button) {
92
+ return button.style === 'cancel' || button.style === 'destructive' ? button.style : 'default';
93
+ }
94
+ function describeButtons(buttons) {
95
+ if (!buttons || buttons.length === 0)
96
+ return [{ text: DEFAULT_OK, style: 'default' }];
97
+ return buttons.map((button) => ({ text: String(button.text ?? ''), style: styleOf(button) }));
98
+ }
99
+ /** The app's handlers for a plain alert or a prompt's buttons / callback. */
100
+ function handlersFor(buttons) {
101
+ if (typeof buttons === 'function')
102
+ return [buttons];
103
+ if (!buttons || buttons.length === 0)
104
+ return [undefined];
105
+ return buttons.map((button) => button.onPress);
106
+ }
107
+ function record(kind, title, message, buttons, standIn) {
108
+ const list = typeof buttons === 'function' || !buttons ? undefined : buttons;
109
+ const entry = {
110
+ info: {
111
+ id: nextId++,
112
+ kind,
113
+ title: title == null ? '' : String(title),
114
+ message: message == null || message === '' ? null : String(message),
115
+ buttons: describeButtons(list),
116
+ at: Date.now(),
117
+ standIn,
118
+ },
119
+ handlers: handlersFor(buttons),
120
+ };
121
+ queue = [...queue, entry];
122
+ notify();
123
+ return entry;
124
+ }
125
+ function wrapButtons(id, buttons) {
126
+ const closing = (handler) => (...args) => {
127
+ closeAlert(id);
128
+ return callHandler(handler, args);
129
+ };
130
+ if (typeof buttons === 'function' || !buttons || buttons.length === 0) {
131
+ return [{ text: DEFAULT_OK, onPress: closing(typeof buttons === 'function' ? buttons : undefined) }];
132
+ }
133
+ return buttons.map((button) => ({ ...button, onPress: closing(button.onPress) }));
134
+ }
135
+ function wrapOptions(id, options) {
136
+ const onDismiss = options?.onDismiss;
137
+ return {
138
+ ...options,
139
+ onDismiss: () => {
140
+ closeAlert(id);
141
+ onDismiss?.();
142
+ },
143
+ };
144
+ }
145
+ function runOriginal(original, args) {
146
+ const previous = delegating;
147
+ delegating = true;
148
+ try {
149
+ original(...args);
150
+ }
151
+ finally {
152
+ delegating = previous;
153
+ }
154
+ }
155
+ function trackedAlert(...args) {
156
+ const original = originalAlert;
157
+ if (!original)
158
+ return;
159
+ if (delegating) {
160
+ original(...args);
161
+ return;
162
+ }
163
+ let entry = null;
164
+ let forwarded = null;
165
+ try {
166
+ const [title, message, buttons, options] = args;
167
+ entry = record('alert', title, message, buttons, standInMode);
168
+ if (!standInMode) {
169
+ forwarded = [title, message, wrapButtons(entry.info.id, buttons), wrapOptions(entry.info.id, options)];
170
+ }
171
+ }
172
+ catch {
173
+ if (entry)
174
+ closeAlert(entry.info.id);
175
+ entry = null;
176
+ forwarded = null;
177
+ }
178
+ if (entry && standInMode)
179
+ return;
180
+ if (!entry || !forwarded) {
181
+ runOriginal(original, args);
182
+ return;
183
+ }
184
+ try {
185
+ runOriginal(original, forwarded);
186
+ }
187
+ catch (error) {
188
+ closeAlert(entry.info.id);
189
+ throw error;
190
+ }
191
+ }
192
+ function trackedPrompt(...args) {
193
+ const original = originalPrompt;
194
+ if (!original)
195
+ return;
196
+ if (delegating) {
197
+ original(...args);
198
+ return;
199
+ }
200
+ let entry = null;
201
+ let forwarded = null;
202
+ try {
203
+ const [title, message, callbackOrButtons, type, defaultValue, keyboardType, options] = args;
204
+ // A prompt of type "default" has no text field: iOS shows a plain alert (it's how iOS's own
205
+ // Alert.alert works, reached here when code kept the original Alert.alert from before Tapline).
206
+ const kind = type === 'default' && typeof callbackOrButtons !== 'function' ? 'alert' : 'prompt';
207
+ entry = record(kind, title, message, callbackOrButtons, standInMode);
208
+ if (!standInMode) {
209
+ const id = entry.info.id;
210
+ const wrapped = wrapButtons(id, callbackOrButtons);
211
+ // Keep the callback form when the app used it, so native behaviour is unchanged.
212
+ const callback = typeof callbackOrButtons === 'function' ? callbackOrButtons : null;
213
+ const third = callback
214
+ ? (text) => {
215
+ closeAlert(id);
216
+ callback(text);
217
+ }
218
+ : wrapped;
219
+ forwarded = [title, message, third, type, defaultValue, keyboardType, wrapOptions(id, options)];
220
+ }
221
+ }
222
+ catch {
223
+ if (entry)
224
+ closeAlert(entry.info.id);
225
+ entry = null;
226
+ forwarded = null;
227
+ }
228
+ if (entry && standInMode)
229
+ return;
230
+ if (!entry || !forwarded) {
231
+ runOriginal(original, args);
232
+ return;
233
+ }
234
+ try {
235
+ runOriginal(original, forwarded);
236
+ }
237
+ catch (error) {
238
+ closeAlert(entry.info.id);
239
+ throw error;
240
+ }
241
+ }
242
+ /**
243
+ * Watches for real touches: it sees a touch start on its way down and says "not mine" (false), so
244
+ * the app's own views get the touch as if this view were not there. A `Modal` is another native
245
+ * window, so touches inside one never pass through here.
246
+ */
247
+ function watchTouch() {
248
+ if (installed)
249
+ (0, touches_1.noteRealTouch)(Date.now());
250
+ return false;
251
+ }
252
+ /** The one wrapper around the app's root: it watches touches and, in stand-in mode, hosts the alert. */
253
+ function Wrapper({ children }) {
254
+ // The provider cannot be unset, so after uninstall the wrapper stays (the tree must not change
255
+ // shape under a running app) but does nothing. Children keep one position either way.
256
+ return ((0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.fill, onStartShouldSetResponderCapture: watchTouch, children: [children, installed && standInMode ? (0, jsx_runtime_1.jsx)(TaplineAlertHost, {}) : null] }));
257
+ }
258
+ function installAlertTracking(options) {
259
+ const standIn = options?.standIn === true;
260
+ if (!installed) {
261
+ installed = true;
262
+ originalAlert = react_native_1.Alert.alert;
263
+ react_native_1.Alert.alert = trackedAlert;
264
+ if (typeof react_native_1.Alert.prompt === 'function') {
265
+ originalPrompt = react_native_1.Alert.prompt;
266
+ react_native_1.Alert.prompt = trackedPrompt;
267
+ }
268
+ }
269
+ standInMode = standIn;
270
+ if (!wrapperRegistered) {
271
+ wrapperRegistered = true;
272
+ react_native_1.AppRegistry.setWrapperComponentProvider(() => Wrapper);
273
+ }
274
+ }
275
+ function uninstallAlertTracking() {
276
+ if (installed) {
277
+ if (originalAlert)
278
+ react_native_1.Alert.alert = originalAlert;
279
+ if (originalPrompt)
280
+ react_native_1.Alert.prompt = originalPrompt;
281
+ }
282
+ installed = false;
283
+ standInMode = false;
284
+ wrapperRegistered = false;
285
+ originalAlert = null;
286
+ originalPrompt = null;
287
+ delegating = false;
288
+ const hadAlerts = queue.length > 0;
289
+ queue = [];
290
+ if (hadAlerts || listeners.size > 0)
291
+ notify();
292
+ }
293
+ /** Ids of Tapline's own prompts (nativeAlert) while they are open. */
294
+ const ownAlertIds = new Set();
295
+ /** True for an open alert that is one of Tapline's own prompts, which only the person answers. */
296
+ function isOwnAlert(id) {
297
+ return ownAlertIds.has(id) && queue.some((entry) => entry.info.id === id);
298
+ }
299
+ /**
300
+ * A real (native) alert, never replaced by the stand-in: for Tapline's own prompts, such as
301
+ * "Connect for testing?", which only the person holding the phone should answer. It is listed as
302
+ * a real alert (not a stand-in) while open, so the agent sees it and its taps behind it are
303
+ * refused, but it has no way to press its buttons.
304
+ */
305
+ function nativeAlert(...args) {
306
+ const show = originalAlert ?? react_native_1.Alert.alert;
307
+ const [title, message, buttons, options] = args;
308
+ let entry = null;
309
+ let forwarded = args;
310
+ try {
311
+ entry = record('alert', title, message, buttons, false);
312
+ ownAlertIds.add(entry.info.id);
313
+ forwarded = [title, message, wrapButtons(entry.info.id, buttons), wrapOptions(entry.info.id, options)];
314
+ }
315
+ catch {
316
+ if (entry)
317
+ closeAlert(entry.info.id);
318
+ entry = null;
319
+ forwarded = args;
320
+ }
321
+ // iOS's Alert.alert calls Alert.prompt, which is ours while tracking: pass it through untouched,
322
+ // or the stand-in would draw this alert and an agent could answer it.
323
+ try {
324
+ runOriginal((...shown) => show.apply(react_native_1.Alert, shown), forwarded);
325
+ }
326
+ catch (error) {
327
+ if (entry)
328
+ closeAlert(entry.info.id);
329
+ throw error;
330
+ }
331
+ }
332
+ /** The id of an alert that only the native module saw (an alert or the share sheet UIKit shows). */
333
+ exports.NATIVE_COVER_ID = -1;
334
+ function openAlerts() {
335
+ const tracked = queue.map((entry) => ({ ...entry.info, buttons: entry.info.buttons.map((button) => ({ ...button })) }));
336
+ const cover = (0, native_1.currentCover)();
337
+ if (cover === null)
338
+ return tracked;
339
+ // An Alert.alert tracked here (without the stand-in) is the same alert UIKit shows: listed once.
340
+ if (cover.kind !== 'share' && tracked.some((alert) => !alert.standIn && alert.title === cover.title))
341
+ return tracked;
342
+ const native = {
343
+ id: exports.NATIVE_COVER_ID,
344
+ kind: 'alert',
345
+ title: cover.kind === 'share' ? 'Share sheet' : cover.title,
346
+ message: cover.message === '' ? null : cover.message,
347
+ buttons: cover.buttons.map((button) => ({ text: button.text, style: button.destructive ? 'destructive' : 'default' })),
348
+ at: 0,
349
+ standIn: false,
350
+ };
351
+ return [...tracked, native];
352
+ }
353
+ function answer(entry, index, text) {
354
+ closeAlert(entry.info.id);
355
+ const handler = entry.handlers[index];
356
+ try {
357
+ if (entry.info.kind === 'prompt')
358
+ callHandler(handler, [text ?? '']);
359
+ else
360
+ callHandler(handler, []);
361
+ }
362
+ catch (error) {
363
+ // The app's handler failed: surface it like a native press would, but not inside our render.
364
+ setTimeout(() => {
365
+ throw error;
366
+ }, 0);
367
+ }
368
+ }
369
+ function AlertCard({ entry }) {
370
+ const [text, setText] = (0, react_1.useState)('');
371
+ const { info } = entry;
372
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { testID: "tapline-alert", accessibilityViewIsModal: true, style: styles.overlay, children: (0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.card, children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.title, children: info.title }), info.message !== null ? (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: styles.message, children: info.message }) : null, info.kind === 'prompt' ? ((0, jsx_runtime_1.jsx)(react_native_1.TextInput, { testID: "tapline-alert-input", style: styles.input, value: text, onChangeText: setText, autoCapitalize: "none", autoCorrect: false })) : null, (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.buttons, children: info.buttons.map((button, index) => ((0, jsx_runtime_1.jsx)(react_native_1.Pressable, { testID: `tapline-alert-button-${index}`, accessibilityRole: "button", style: styles.button, onPress: () => answer(entry, index, text), children: (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [
373
+ styles.buttonText,
374
+ button.style === 'destructive' && styles.destructive,
375
+ button.style === 'cancel' && styles.cancel,
376
+ ], children: button.text }) }, index))) })] }) }));
377
+ }
378
+ /** Draws the oldest open stand-in alert. Only the first mounted host renders. */
379
+ function TaplineAlertHost() {
380
+ const token = (0, react_1.useRef)({}).current;
381
+ (0, react_1.useSyncExternalStore)(subscribe, getVersion);
382
+ react_1.default.useEffect(() => {
383
+ hosts.push(token);
384
+ notify();
385
+ return () => {
386
+ const at = hosts.indexOf(token);
387
+ if (at >= 0)
388
+ hosts.splice(at, 1);
389
+ notify();
390
+ };
391
+ }, [token]);
392
+ if (hosts[0] !== token)
393
+ return null;
394
+ const entry = queue.find((candidate) => candidate.info.standIn);
395
+ if (!entry)
396
+ return null;
397
+ return (0, jsx_runtime_1.jsx)(AlertCard, { entry: entry }, entry.info.id);
398
+ }
399
+ const styles = react_native_1.StyleSheet.create({
400
+ fill: { flex: 1 },
401
+ overlay: {
402
+ position: 'absolute',
403
+ top: 0,
404
+ left: 0,
405
+ right: 0,
406
+ bottom: 0,
407
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
408
+ alignItems: 'center',
409
+ justifyContent: 'center',
410
+ padding: 24,
411
+ },
412
+ card: {
413
+ width: '100%',
414
+ maxWidth: 320,
415
+ backgroundColor: '#ffffff',
416
+ borderRadius: 14,
417
+ padding: 20,
418
+ },
419
+ title: { fontSize: 17, fontWeight: '600', color: '#000000', textAlign: 'center' },
420
+ message: { fontSize: 14, color: '#333333', textAlign: 'center', marginTop: 8 },
421
+ input: {
422
+ marginTop: 12,
423
+ borderWidth: 1,
424
+ borderColor: '#999999',
425
+ borderRadius: 8,
426
+ paddingHorizontal: 10,
427
+ paddingVertical: 8,
428
+ fontSize: 16,
429
+ color: '#000000',
430
+ },
431
+ buttons: { marginTop: 16 },
432
+ button: { paddingVertical: 12, alignItems: 'center', borderTopWidth: react_native_1.StyleSheet.hairlineWidth, borderTopColor: '#cccccc' },
433
+ buttonText: { fontSize: 17, color: '#0a84ff' },
434
+ destructive: { color: '#d70015' },
435
+ cancel: { fontWeight: '600' },
436
+ });
437
+ //# sourceMappingURL=alerts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alerts.js","sourceRoot":"","sources":["../src/alerts.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** Turns keeping the screen on on or off; repeated calls with the same value do nothing. Never throws. */
2
+ export declare function keepAwake(on: boolean): void;
package/dist/awake.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keepAwake = keepAwake;
4
+ const types_1 = require("./types");
5
+ /** Keeps the phone's screen on while an agent is connected, so auto-lock doesn't cut the run. */
6
+ const TAG = 'tapline';
7
+ function isKeepAwake(value) {
8
+ return ((0, types_1.isRecord)(value) &&
9
+ typeof value.deactivateKeepAwake === 'function' &&
10
+ (typeof value.activateKeepAwakeAsync === 'function' || typeof value.activateKeepAwake === 'function'));
11
+ }
12
+ let loaded;
13
+ let awake = false;
14
+ /** expo-keep-awake when the app has it, else null (then this does nothing). */
15
+ function keepAwakeModule() {
16
+ if (loaded !== undefined)
17
+ return loaded;
18
+ try {
19
+ const mod = require('expo-keep-awake');
20
+ loaded = isKeepAwake(mod) ? mod : (0, types_1.isRecord)(mod) && isKeepAwake(mod.default) ? mod.default : null;
21
+ }
22
+ catch {
23
+ loaded = null;
24
+ }
25
+ return loaded;
26
+ }
27
+ /** Turns keeping the screen on on or off; repeated calls with the same value do nothing. Never throws. */
28
+ function keepAwake(on) {
29
+ if (on === awake)
30
+ return;
31
+ awake = on;
32
+ const mod = keepAwakeModule();
33
+ if (!mod)
34
+ return;
35
+ try {
36
+ if (on) {
37
+ if (mod.activateKeepAwakeAsync)
38
+ void mod.activateKeepAwakeAsync(TAG).catch(() => undefined);
39
+ else
40
+ mod.activateKeepAwake?.(TAG);
41
+ }
42
+ else {
43
+ const result = mod.deactivateKeepAwake(TAG);
44
+ if ((0, types_1.isRecord)(result) && typeof result.catch === 'function') {
45
+ result.catch(() => undefined);
46
+ }
47
+ }
48
+ }
49
+ catch {
50
+ // never throw into the app
51
+ }
52
+ }
53
+ //# sourceMappingURL=awake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awake.js","sourceRoot":"","sources":["../src/awake.ts"],"names":[],"mappings":";;AAoCA,8BAkBC;AAtDD,mCAAmC;AAEnC,iGAAiG;AAEjG,MAAM,GAAG,GAAG,SAAS,CAAC;AAQtB,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CACL,IAAA,gBAAQ,EAAC,KAAK,CAAC;QACf,OAAO,KAAK,CAAC,mBAAmB,KAAK,UAAU;QAC/C,CAAC,OAAO,KAAK,CAAC,sBAAsB,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,UAAU,CAAC,CACtG,CAAC;AACJ,CAAC;AAED,IAAI,MAA0C,CAAC;AAC/C,IAAI,KAAK,GAAG,KAAK,CAAC;AAElB,+EAA+E;AAC/E,SAAS,eAAe;IACtB,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAY,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACnG,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,0GAA0G;AAC1G,SAAgB,SAAS,CAAC,EAAW;IACnC,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO;IACzB,KAAK,GAAG,EAAE,CAAC;IACX,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,CAAC;QACH,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,GAAG,CAAC,sBAAsB;gBAAE,KAAK,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;;gBACvF,GAAG,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,IAAA,gBAAQ,EAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC1D,MAAsC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type Entry } from './inspect';
2
+ import { type Frame } from './types';
3
+ /**
4
+ * Automatic visual and layout checks, computed from the fiber tree and the measured frames
5
+ * (no pixels). Every finding names an element by the same ref `tree` uses.
6
+ */
7
+ export type FindingKind = 'small_target' | 'cut_off' | 'overlap' | 'low_contrast' | 'no_name' | 'maybe_truncated';
8
+ export interface Finding {
9
+ kind: FindingKind;
10
+ ref: string;
11
+ /** The second element, for `overlap`. */
12
+ other?: string;
13
+ message: string;
14
+ }
15
+ /**
16
+ * `check_layout`: problems a person would notice on screen, found from the tree and frames.
17
+ * Refs are the ones from the latest `tree` call (they are not reset here).
18
+ */
19
+ export declare function checkLayout(_params?: unknown): Promise<{
20
+ findings: Finding[];
21
+ }>;
22
+ /** The shared audit types Tapline checks; dynamic_type and element_detection are XCTest's own. */
23
+ export declare const AUDIT_TYPES: readonly ["contrast", "hit_region", "description", "clipped_text", "trait", "overlap", "duplicate_id"];
24
+ export type AuditType = (typeof AUDIT_TYPES)[number];
25
+ export interface AuditFinding {
26
+ type: AuditType;
27
+ /** The element, or null for the screen as a whole. */
28
+ entry: Entry | null;
29
+ frame: Frame | null;
30
+ /** What is wrong, in plain words, without the element (the host puts the element line first). */
31
+ problem: string;
32
+ fix: string;
33
+ }
34
+ /** `audit`: the screen's accessibility problems, in the shared types (AGENT-TOOLS 1.8 §10). */
35
+ export declare function auditScreen(types: ReadonlySet<AuditType>): Promise<AuditFinding[]>;