react-native-tapline 1.2.0 → 1.3.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.
@@ -0,0 +1,37 @@
1
+ import type { TaplineStorage } from './storage';
2
+ /**
3
+ * A fatal JavaScript error is kept on the phone the moment React Native's global handler sees it, because the
4
+ * app may be gone a moment later. The next connection sends it to the computer (the `crash` event); it forgets
5
+ * it only when the computer acknowledges that crash (`crashAck`). A development build maps the stack to the app's files and lines first. The computer counts a
6
+ * crash it already heard live (same time and message) only once.
7
+ */
8
+ export interface CrashRecord {
9
+ name: string;
10
+ message: string;
11
+ stack: string;
12
+ componentStack?: string;
13
+ ts: number;
14
+ }
15
+ export declare const CRASH_KEY = "tapline.crash";
16
+ /** SecureStore warns above about 2 KB; stay under it. */
17
+ export declare const MAX_SAVED_CHARS = 1800;
18
+ /** Where the crash is kept (null: nowhere). */
19
+ export declare function configureCrash(next: TaplineStorage | null): void;
20
+ export declare function crashFromError(error: unknown, ts: number): CrashRecord;
21
+ /** The record as JSON that fits the storage limit: the stack and component stack lose their tails first. */
22
+ export declare function fitRecord(record: CrashRecord): string;
23
+ /** Starts writing a crash to the storage at once; never throws, never waits. */
24
+ export declare function saveCrash(record: CrashRecord): void;
25
+ /**
26
+ * Sends the crash kept from an earlier run (or this one) to the computer. The record stays on the phone until
27
+ * the computer says it has it (`crashAck`, see `ackSavedCrash`); until then every connection sends it again, and
28
+ * the computer counts it once. Does nothing while no computer is connected. Never throws.
29
+ */
30
+ export declare function deliverSavedCrash(): Promise<void>;
31
+ /**
32
+ * The computer has the crash saved at `ts`: forget it, but only that one. A newer crash saved since (or one
33
+ * the computer has not acknowledged) stays. Never throws.
34
+ */
35
+ export declare function ackSavedCrash(ts: number): Promise<void>;
36
+ /** The `crashAck` request of the computer. */
37
+ export declare function crashAck(params: unknown): Promise<Record<string, never>>;
package/dist/crash.js ADDED
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_SAVED_CHARS = exports.CRASH_KEY = void 0;
4
+ exports.configureCrash = configureCrash;
5
+ exports.crashFromError = crashFromError;
6
+ exports.fitRecord = fitRecord;
7
+ exports.saveCrash = saveCrash;
8
+ exports.deliverSavedCrash = deliverSavedCrash;
9
+ exports.ackSavedCrash = ackSavedCrash;
10
+ exports.crashAck = crashAck;
11
+ const events_1 = require("./events");
12
+ const source_1 = require("./source");
13
+ const types_1 = require("./types");
14
+ exports.CRASH_KEY = 'tapline.crash';
15
+ /** SecureStore warns above about 2 KB; stay under it. */
16
+ exports.MAX_SAVED_CHARS = 1800;
17
+ const SYMBOLICATE_WAIT_MS = 3000;
18
+ let storage = null;
19
+ /** The write in progress, so a delivery right after a crash reads what was written. */
20
+ let saving = Promise.resolve();
21
+ /**
22
+ * Counts the saves. An acknowledgement removes the record only when no save started after it began reading, so it
23
+ * can never remove a newer crash (Codex review of 1.3.0). A save still starts at once: the app may die right after.
24
+ */
25
+ let saves = 0;
26
+ /** Writes not yet done: a new crash written while one is in flight waits for it, so an older one never lands last. */
27
+ let writing = 0;
28
+ /** The newest crash written, so one saved while an acknowledgement was removing the older one can be put back. */
29
+ let lastJson = null;
30
+ /** Where the crash is kept (null: nowhere). */
31
+ function configureCrash(next) {
32
+ storage = next;
33
+ saving = Promise.resolve();
34
+ saves = 0;
35
+ writing = 0;
36
+ lastJson = null;
37
+ delivery = Promise.resolve();
38
+ }
39
+ function crashFromError(error, ts) {
40
+ if (error instanceof Error) {
41
+ const componentStack = error.componentStack;
42
+ return {
43
+ name: error.name !== '' ? error.name : 'Error',
44
+ message: error.message,
45
+ stack: typeof error.stack === 'string' ? error.stack : '',
46
+ ...(typeof componentStack === 'string' && componentStack.trim() !== '' ? { componentStack } : {}),
47
+ ts,
48
+ };
49
+ }
50
+ let message;
51
+ try {
52
+ message = typeof error === 'string' ? error : (JSON.stringify(error) ?? String(error));
53
+ }
54
+ catch {
55
+ message = String(error);
56
+ }
57
+ return { name: 'Error', message, stack: '', ts };
58
+ }
59
+ /** The record as JSON that fits the storage limit: the stack and component stack lose their tails first. */
60
+ function fitRecord(record) {
61
+ const message = cutTo(record.message, 400);
62
+ const componentStack = record.componentStack !== undefined ? cutTo(record.componentStack, 400) : undefined;
63
+ const build = (stack) => JSON.stringify({ ...record, message, stack, ...(componentStack !== undefined ? { componentStack } : {}) });
64
+ let budget = record.stack.length;
65
+ let json = build(cutTo(record.stack, budget));
66
+ while (json.length > exports.MAX_SAVED_CHARS && budget > 0) {
67
+ budget = Math.max(0, budget - Math.max(50, json.length - exports.MAX_SAVED_CHARS));
68
+ json = build(cutTo(record.stack, budget));
69
+ }
70
+ return json;
71
+ }
72
+ /** The first `max` characters, ending at a whole line when there is one. */
73
+ function cutTo(text, max) {
74
+ if (text.length <= max)
75
+ return text;
76
+ const head = text.slice(0, max);
77
+ const newline = head.lastIndexOf('\n');
78
+ return newline > 0 ? head.slice(0, newline) : head;
79
+ }
80
+ /** Starts writing a crash to the storage at once; never throws, never waits. */
81
+ function saveCrash(record) {
82
+ const target = storage;
83
+ if (target === null)
84
+ return;
85
+ try {
86
+ const json = fitRecord(record);
87
+ saves += 1;
88
+ lastJson = json;
89
+ queueWrite(target, () => json);
90
+ }
91
+ catch {
92
+ // the crash is also sent live; losing the copy must not hide the app's own error
93
+ }
94
+ }
95
+ /**
96
+ * One write of the kept crash, in call order: at once when nothing is being written (the app may die right after),
97
+ * after the write in flight otherwise. Saves and an acknowledgement's write-back share this order, so nothing
98
+ * older ever lands after something newer.
99
+ */
100
+ function queueWrite(target, json) {
101
+ const write = () => target.setItem(exports.CRASH_KEY, json()).catch(() => undefined);
102
+ writing += 1;
103
+ const done = () => {
104
+ writing -= 1;
105
+ };
106
+ saving = (writing === 1 ? write() : saving.then(write)).then(done, done);
107
+ }
108
+ function parseSaved(raw) {
109
+ if (raw === null)
110
+ return null;
111
+ try {
112
+ const value = JSON.parse(raw);
113
+ if (!(0, types_1.isRecord)(value) || typeof value.message !== 'string' || typeof value.ts !== 'number')
114
+ return null;
115
+ return {
116
+ name: typeof value.name === 'string' ? value.name : 'Error',
117
+ message: value.message,
118
+ stack: typeof value.stack === 'string' ? value.stack : '',
119
+ ...(typeof value.componentStack === 'string' ? { componentStack: value.componentStack } : {}),
120
+ ts: value.ts,
121
+ };
122
+ }
123
+ catch {
124
+ return null;
125
+ }
126
+ }
127
+ function inDevelopment() {
128
+ return typeof __DEV__ !== 'undefined' && __DEV__;
129
+ }
130
+ /** Deliveries wait their turn: one at a time, so two of them never read, send and compare in an interleaved way. */
131
+ let delivery = Promise.resolve();
132
+ /**
133
+ * Sends the crash kept from an earlier run (or this one) to the computer. The record stays on the phone until
134
+ * the computer says it has it (`crashAck`, see `ackSavedCrash`); until then every connection sends it again, and
135
+ * the computer counts it once. Does nothing while no computer is connected. Never throws.
136
+ */
137
+ function deliverSavedCrash() {
138
+ const next = delivery.then(deliverOnce);
139
+ delivery = next;
140
+ return next;
141
+ }
142
+ /**
143
+ * The computer has the crash saved at `ts`: forget it, but only that one. A newer crash saved since (or one
144
+ * the computer has not acknowledged) stays. Never throws.
145
+ */
146
+ async function ackSavedCrash(ts) {
147
+ const target = storage;
148
+ if (target === null)
149
+ return;
150
+ try {
151
+ await saving;
152
+ const before = saves;
153
+ const record = parseSaved(await target.getItem(exports.CRASH_KEY));
154
+ // A crash saved while this was reading is newer than the one acknowledged: it stays.
155
+ if (saves !== before)
156
+ return;
157
+ if (record !== null && record.ts === ts) {
158
+ await target.removeItem(exports.CRASH_KEY);
159
+ // A crash saved while the removal was on its way may have been erased by it: it is written again.
160
+ // In the same order as the saves, with the newest record when its turn comes: a crash saved later still
161
+ // lands last (Codex re-review 3 of PR #4).
162
+ if (saves !== before && lastJson !== null) {
163
+ queueWrite(target, () => lastJson ?? "");
164
+ await saving;
165
+ }
166
+ }
167
+ }
168
+ catch {
169
+ // never reaches the app
170
+ }
171
+ }
172
+ /** The `crashAck` request of the computer. */
173
+ async function crashAck(params) {
174
+ if ((0, types_1.isRecord)(params) && typeof params.ts === 'number')
175
+ await ackSavedCrash(params.ts);
176
+ return {};
177
+ }
178
+ async function deliverOnce() {
179
+ const target = storage;
180
+ if (target === null)
181
+ return;
182
+ try {
183
+ await saving;
184
+ const record = parseSaved(await target.getItem(exports.CRASH_KEY));
185
+ if (record === null)
186
+ return;
187
+ let stack = record.stack;
188
+ if (inDevelopment() && stack !== '') {
189
+ let timer;
190
+ const limit = new Promise((resolve) => {
191
+ timer = setTimeout(() => resolve(stack), SYMBOLICATE_WAIT_MS);
192
+ });
193
+ try {
194
+ stack = await Promise.race([(0, source_1.symbolicateStack)(stack), limit]);
195
+ }
196
+ catch {
197
+ // keep the raw stack
198
+ }
199
+ finally {
200
+ if (timer !== undefined)
201
+ clearTimeout(timer);
202
+ }
203
+ }
204
+ if (!(0, events_1.hasEventSink)())
205
+ return;
206
+ (0, events_1.emitEvent)('crash', { ...record, stack });
207
+ }
208
+ catch {
209
+ // never reaches the app
210
+ }
211
+ }
212
+ //# sourceMappingURL=crash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crash.js","sourceRoot":"","sources":["../src/crash.ts"],"names":[],"mappings":"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"}
package/dist/events.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  /** Events the app sends the host besides logs (live frames). The client sets the sink while connected. */
2
2
  export type EventSink = (event: string, data: unknown) => void;
3
3
  export declare function setEventSink(next: EventSink | null): void;
4
+ /** Whether a host is connected to receive events. */
5
+ export declare function hasEventSink(): boolean;
4
6
  /** Sends an event to the connected host; does nothing while disconnected. Never throws. */
5
7
  export declare function emitEvent(event: string, data: unknown): void;
package/dist/events.js CHANGED
@@ -2,11 +2,16 @@
2
2
  /** Events the app sends the host besides logs (live frames). The client sets the sink while connected. */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.setEventSink = setEventSink;
5
+ exports.hasEventSink = hasEventSink;
5
6
  exports.emitEvent = emitEvent;
6
7
  let sink = null;
7
8
  function setEventSink(next) {
8
9
  sink = next;
9
10
  }
11
+ /** Whether a host is connected to receive events. */
12
+ function hasEventSink() {
13
+ return sink !== null;
14
+ }
10
15
  /** Sends an event to the connected host; does nothing while disconnected. Never throws. */
11
16
  function emitEvent(event, data) {
12
17
  const target = sink;
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":";AAAA,0GAA0G;;AAM1G,oCAEC;AAGD,8BAQC;AAfD,IAAI,IAAI,GAAqB,IAAI,CAAC;AAElC,SAAgB,YAAY,CAAC,IAAsB;IACjD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,SAAgB,SAAS,CAAC,KAAa,EAAE,IAAa;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":";AAAA,0GAA0G;;AAM1G,oCAEC;AAGD,oCAEC;AAGD,8BAQC;AApBD,IAAI,IAAI,GAAqB,IAAI,CAAC;AAElC,SAAgB,YAAY,CAAC,IAAsB;IACjD,IAAI,GAAG,IAAI,CAAC;AACd,CAAC;AAED,qDAAqD;AACrD,SAAgB,YAAY;IAC1B,OAAO,IAAI,KAAK,IAAI,CAAC;AACvB,CAAC;AAED,2FAA2F;AAC3F,SAAgB,SAAS,CAAC,KAAa,EAAE,IAAa;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ exports.stopTapline = stopTapline;
6
6
  const react_native_1 = require("react-native");
7
7
  const agent_1 = require("./agent");
8
8
  const alerts_1 = require("./alerts");
9
+ const crash_1 = require("./crash");
9
10
  const logs_1 = require("./logs");
10
11
  const network_1 = require("./network");
11
12
  const wait_1 = require("./wait");
@@ -110,6 +111,7 @@ function startTapline(options) {
110
111
  (0, logs_1.originalLog)('[tapline] expo-secure-store is not installed, so a pairing lasts until the app restarts (or pass `storage`)');
111
112
  storage = (0, storage_1.memoryStorage)();
112
113
  }
114
+ (0, crash_1.configureCrash)(storage);
113
115
  (0, logs_1.installLogs)();
114
116
  (0, alerts_1.installAlertTracking)({ standIn: options.alerts === 'stand-in' });
115
117
  watchNetwork();
@@ -128,6 +130,7 @@ function stopTapline() {
128
130
  current?.stop();
129
131
  if (current) {
130
132
  (0, logs_1.uninstallLogs)();
133
+ (0, crash_1.configureCrash)(null);
131
134
  (0, alerts_1.uninstallAlertTracking)();
132
135
  unwatchNetwork();
133
136
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/logs.js CHANGED
@@ -10,10 +10,11 @@ exports.setLogSink = setLogSink;
10
10
  exports.originalLog = originalLog;
11
11
  exports.installLogs = installLogs;
12
12
  exports.uninstallLogs = uninstallLogs;
13
+ const crash_1 = require("./crash");
13
14
  const types_1 = require("./types");
14
15
  exports.MAX_LOG_ENTRIES = 500;
15
16
  const MAX_MESSAGE_CHARS = 4000;
16
- const LEVELS = ['log', 'info', 'warn', 'error'];
17
+ const LEVELS = ['log', 'info', 'debug', 'warn', 'error'];
17
18
  const buffer = [];
18
19
  let sink = null;
19
20
  let installed = false;
@@ -21,6 +22,9 @@ let reentrant = false;
21
22
  const originals = new Map();
22
23
  let previousHandler;
23
24
  let ourHandler = null;
25
+ /** Every global handler this module ever installed (an uninstalled one may be left in place). */
26
+ const ourHandlers = new WeakSet();
27
+ let stopOurHandler = null;
24
28
  function consoleOf() {
25
29
  return console;
26
30
  }
@@ -87,7 +91,26 @@ function recordError(error, fatal) {
87
91
  const message = error instanceof Error ? error.message : stringify(error);
88
92
  const stack = error instanceof Error && typeof error.stack === 'string' ? error.stack : '';
89
93
  push({ level: 'error', message: stack || message, ts });
90
- emit('error', { message, stack, fatal, ts });
94
+ if (!fatal) {
95
+ emit('error', { message, stack, fatal, ts });
96
+ return;
97
+ }
98
+ // The app may be gone a moment later: keep the crash on the phone first, then tell the computer now.
99
+ // (The computer counts the live report and the saved one as a single crash.)
100
+ const crash = (0, crash_1.crashFromError)(error, ts);
101
+ (0, crash_1.saveCrash)(crash);
102
+ emit('error', {
103
+ message,
104
+ stack,
105
+ fatal,
106
+ ts,
107
+ name: crash.name,
108
+ ...(crash.componentStack !== undefined ? { componentStack: crash.componentStack } : {}),
109
+ });
110
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
111
+ // A development build usually goes on after a fatal error (the red box): send the mapped version now.
112
+ void (0, crash_1.deliverSavedCrash)();
113
+ }
91
114
  }
92
115
  /** Buffered entries, optionally only those newer than `since` (ms epoch). */
93
116
  function getLogEntries(since) {
@@ -137,18 +160,29 @@ function installLogs() {
137
160
  }
138
161
  const utils = errorUtils();
139
162
  if (utils && typeof utils.setGlobalHandler === 'function') {
140
- previousHandler = typeof utils.getGlobalHandler === 'function' ? utils.getGlobalHandler() : undefined;
141
- ourHandler = (error, isFatal) => {
142
- try {
143
- recordError(error, isFatal === true);
144
- }
145
- catch {
146
- // ignore
163
+ const existing = typeof utils.getGlobalHandler === 'function' ? utils.getGlobalHandler() : undefined;
164
+ // Never chain to a handler of ours (one an earlier install left behind): it would record every error twice.
165
+ previousHandler = existing !== undefined && !ourHandlers.has(existing) ? existing : undefined;
166
+ const previous = previousHandler;
167
+ let live = true;
168
+ const handler = (error, isFatal) => {
169
+ if (live) {
170
+ try {
171
+ recordError(error, isFatal === true);
172
+ }
173
+ catch {
174
+ // ignore
175
+ }
147
176
  }
148
- if (previousHandler)
149
- previousHandler(error, isFatal);
177
+ if (previous)
178
+ previous(error, isFatal);
179
+ };
180
+ ourHandlers.add(handler);
181
+ ourHandler = handler;
182
+ stopOurHandler = () => {
183
+ live = false;
150
184
  };
151
- utils.setGlobalHandler(ourHandler);
185
+ utils.setGlobalHandler(handler);
152
186
  }
153
187
  }
154
188
  function uninstallLogs() {
@@ -164,6 +198,10 @@ function uninstallLogs() {
164
198
  if (previousHandler)
165
199
  utils.setGlobalHandler(previousHandler);
166
200
  }
201
+ // With no previous handler there is nothing to put back: our handler stays installed but records nothing.
202
+ if (stopOurHandler)
203
+ stopOurHandler();
204
+ stopOurHandler = null;
167
205
  previousHandler = undefined;
168
206
  ourHandler = null;
169
207
  sink = null;
package/dist/logs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"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"}
package/dist/methods.js CHANGED
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.methods = void 0;
4
4
  const actions_1 = require("./actions");
5
5
  const checks_1 = require("./checks");
6
+ const crash_1 = require("./crash");
6
7
  const commands_1 = require("./commands");
7
8
  const inspect_1 = require("./inspect");
8
9
  const live_1 = require("./live");
10
+ const perf_1 = require("./perf");
9
11
  const wait_1 = require("./wait");
10
12
  // The handler has run: viewers get their first frame now, not after the settle wait.
11
13
  (0, actions_1.onActed)(live_1.frameAfterAction);
@@ -42,6 +44,11 @@ exports.methods = {
42
44
  inspect: (params) => (0, actions_1.inspect)(params),
43
45
  audit: (params) => (0, actions_1.audit)(params),
44
46
  reload: () => (0, actions_1.reload)(),
47
+ perfStart: () => (0, perf_1.perfStart)(),
48
+ perfStop: (params) => (0, perf_1.perfStop)(params),
49
+ perfSettle: () => (0, actions_1.settleOutcome)(),
50
+ // The computer has the crash saved at `ts`: the phone may forget that one (and no other).
51
+ crashAck: (params) => (0, crash_1.crashAck)(params),
45
52
  screenshot: (params) => (0, actions_1.screenshot)(params),
46
53
  feed: (params) => (0, live_1.feedMethod)(params),
47
54
  overlay: () => (0, inspect_1.overlay)(),
@@ -1 +1 @@
1
- {"version":3,"file":"methods.js","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":";;;AAAA,uCAAkK;AAClK,qCAAuC;AACvC,yCAAsD;AACtD,uCAA0C;AAC1C,iCAAsD;AACtD,iCAAiC;AAIjC,qFAAqF;AACrF,IAAA,iBAAO,EAAC,uBAAgB,CAAC,CAAC;AAE1B,6EAA6E;AAC7E,SAAS,MAAM,CAAC,EAAY;IAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAA,uBAAgB,GAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,8CAA8C;AACjC,QAAA,OAAO,GAA6B;IAC/C,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,cAAI,EAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,eAAK,EAAC,MAAM,CAAC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,mBAAS,EAAC,MAAM,CAAC,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,kBAAQ,EAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,gBAAM,EAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,iBAAO,EAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,cAAI,EAAC,MAAM,CAAC,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,eAAK,EAAC,MAAM,CAAC,CAAC;IACxC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAA,uBAAY,GAAE,EAAE,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,MAAM,IAAA,uBAAa,GAAE,CAAC,EAAE,CAAC;IAChD,CAAC,CAAC;IACF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,cAAO,EAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,iBAAO,EAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,iBAAO,EAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,eAAK,EAAC,MAAM,CAAC;IAChC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAA,gBAAM,GAAE;IACtB,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,iBAAU,EAAC,MAAM,CAAC;IACpC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,iBAAO,GAAE;CACzB,CAAC"}
1
+ {"version":3,"file":"methods.js","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"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"}
package/dist/perf.d.ts ADDED
@@ -0,0 +1,120 @@
1
+ /**
2
+ * AGENT-TOOLS §15.3 `performance`, Tapline's side: the JavaScript thread's frames, the Hermes heap and (in a
3
+ * development build) the slowest component renders, measured between `perfStart` and `perfStop`.
4
+ *
5
+ * Frames come from a requestAnimationFrame loop: each callback is one frame, the gap to the one before is the
6
+ * frame interval. A gap over 50 ms is a drop; the longest gap is how long the JS thread was busy at most.
7
+ * This is the JavaScript thread's view, not the screen's: native animations that don't need JS don't show.
8
+ */
9
+ /** A frame interval longer than this is a drop (§15.3). */
10
+ export declare const DROP_MS = 50;
11
+ /** How often the heap is read while measuring. */
12
+ export declare const HEAP_SAMPLE_MS = 250;
13
+ /** A measurement nobody stopped (the host went away) ends by itself after this long. */
14
+ export declare const MAX_WINDOW_MS = 40000;
15
+ /** Renders shorter than this don't make the list. */
16
+ export declare const MIN_RENDER_MS = 1;
17
+ /** At most this many components are reported. */
18
+ export declare const MAX_RENDERS = 5;
19
+ export interface RenderTime {
20
+ name: string;
21
+ /** The longest this component took in one render in the window (its own time, without its children), in ms. */
22
+ ms: number;
23
+ /** How many times it rendered in the window. */
24
+ count: number;
25
+ }
26
+ export interface PerfResult {
27
+ /** The length of the window in seconds. */
28
+ seconds: number;
29
+ frames: number;
30
+ /** Average frames per second over the window. */
31
+ fps: number;
32
+ /** The lowest one-second sample (the whole window's average when it is shorter than a second). */
33
+ fpsLowest: number;
34
+ /** Frame intervals over 50 ms. */
35
+ drops: number;
36
+ /** The longest frame interval: the JS thread's longest stall. */
37
+ busyMs: number;
38
+ /** The Hermes heap now and at its peak, in MB; absent without Hermes. */
39
+ heapMb?: number;
40
+ heapPeakMb?: number;
41
+ /** The slowest components, longest first; absent outside a development build or when React gave no timing. */
42
+ renders?: RenderTime[];
43
+ }
44
+ export interface PerfDeps {
45
+ now: () => number;
46
+ requestFrame: (fn: () => void) => unknown;
47
+ cancelFrame: (handle: unknown) => void;
48
+ setInterval: (fn: () => void, ms: number) => unknown;
49
+ clearInterval: (handle: unknown) => void;
50
+ /** The Hermes heap in MB, or null when it can't be read. */
51
+ heapMb: () => number | null;
52
+ /** A development build: React times its renders. */
53
+ dev: boolean;
54
+ onCommitRoot: (listener: (root: unknown) => void) => () => void;
55
+ /** Foreground/background changes ("active", "inactive", "background"); returns the way to stop listening. */
56
+ onAppState: (listener: (state: string) => void) => () => void;
57
+ }
58
+ /** The Hermes heap in MB (live allocated bytes, else the heap's size); null without Hermes. */
59
+ export declare function hermesHeapMb(): number | null;
60
+ /** The numbers of one measurement window. */
61
+ export declare class PerfSampler {
62
+ private readonly deps;
63
+ private running;
64
+ private startedAt;
65
+ private lastFrame;
66
+ private frames;
67
+ private drops;
68
+ private busy;
69
+ /** Frames per one-second slot of the window. */
70
+ private slots;
71
+ private heap;
72
+ private heapPeak;
73
+ private frameHandle;
74
+ private heapTimer;
75
+ private stopCommits;
76
+ private stopAppState;
77
+ /** The app is not in front: requestAnimationFrame is paused, so no frame is due. */
78
+ private away;
79
+ /** The next frame follows a stretch away from the front: its interval is not a stall. */
80
+ private skipGap;
81
+ /** Time spent away from the front so far, and when the current stretch away began: left out of fps and slots. */
82
+ private awayMs;
83
+ private awaySince;
84
+ private readonly renders;
85
+ /** React gave no timing for a render that did work (a build without the profiler). */
86
+ private timingMissing;
87
+ constructor(deps?: Partial<PerfDeps>);
88
+ get active(): boolean;
89
+ start(): void;
90
+ /** requestAnimationFrame stops while the app is in the background: the pause is no frame interval. */
91
+ private onAppState;
92
+ /** Ends the window without a result (the host went away). */
93
+ abort(): void;
94
+ stop(): PerfResult;
95
+ private release;
96
+ private readonly onFrame;
97
+ private sampleHeap;
98
+ /**
99
+ * One commit's renders (development builds): every component that did work in this commit has an
100
+ * `actualDuration` (its time and its children's); its own time is that less what its children took.
101
+ * A subtree that did no work is skipped when React says so (`subtreeFlags`), which keeps this cheap.
102
+ */
103
+ private onCommit;
104
+ private noteRender;
105
+ }
106
+ /** Ends any measurement without a result: the host is gone, so nobody will ask for it. */
107
+ export declare function stopPerf(): void;
108
+ /**
109
+ * `perfStart`: begins a window and answers its `id`. A window already running is not dropped: the start answers
110
+ * bad_params, so a second call can never reset the first one's numbers (Codex review of 1.3.0). A window nobody stops
111
+ * ends by itself after MAX_WINDOW_MS.
112
+ */
113
+ export declare function perfStart(): Promise<{
114
+ started: true;
115
+ id: number;
116
+ dev: boolean;
117
+ heap: boolean;
118
+ }>;
119
+ /** `perfStop`: ends the window (`id`, when given, must be the running one) and answers its numbers. */
120
+ export declare function perfStop(params?: unknown): Promise<PerfResult>;