@buoy-gg/console 7.0.20 → 7.0.22

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.
package/README.md CHANGED
@@ -36,6 +36,7 @@ That's the whole setup — it patches `console.*` directly, so no logger integra
36
36
  ## What you get
37
37
 
38
38
  - **Everything logged, everywhere** — patches `console.*` directly, so logs from your own code *and* your dependencies are captured with no extra setup.
39
+ - **Fatal crashes captured too** — uncaught JS errors (including fatal render crashes) are hooked from React Native's global error handler and recorded as `[FATAL]`-tagged error entries, so a crashed app's last words are in the log instead of nowhere.
39
40
  - **Live, color-coded stream** — `log`, `info`, `warn`, and `error` stream in as they happen, color-coded by level.
40
41
  - **Chrome-DevTools-style panel** — a 1:1 port of the Chrome console view: objects and arrays are formatted and expandable, just like the browser.
41
42
  - **Filter by level** — focus on just errors and warnings when you're chasing a bug.
@@ -105,6 +105,12 @@ Object.defineProperty(exports, "installConsoleCapture", {
105
105
  return _consoleLogStore.installConsoleCapture;
106
106
  }
107
107
  });
108
+ Object.defineProperty(exports, "installFatalErrorCapture", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _consoleLogStore.installFatalErrorCapture;
112
+ }
113
+ });
108
114
  Object.defineProperty(exports, "levelStyles", {
109
115
  enumerable: true,
110
116
  get: function () {
@@ -1 +1 @@
1
- {"version":3,"names":["_preset","require","_ConsoleRoot","_ConsoleModal","_ConsoleIcon","_ConsoleView","_ConsoleMessageRow","_ConsoleValue","_useConsoleMessages","_theme","_ConsoleLogList","_useConsoleLogs","_consoleSyncAdapter","_consoleLogStore"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAAA,OAAA,GAAAC,OAAA;AAKA,IAAAC,YAAA,GAAAD,OAAA;AAKA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAGA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,mBAAA,GAAAP,OAAA;AAEA,IAAAQ,MAAA,GAAAR,OAAA;AAGA,IAAAS,eAAA,GAAAT,OAAA;AAKA,IAAAU,eAAA,GAAAV,OAAA;AAMA,IAAAW,mBAAA,GAAAX,OAAA;AAKA,IAAAY,gBAAA,GAAAZ,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_preset","require","_ConsoleRoot","_ConsoleModal","_ConsoleIcon","_ConsoleView","_ConsoleMessageRow","_ConsoleValue","_useConsoleMessages","_theme","_ConsoleLogList","_useConsoleLogs","_consoleSyncAdapter","_consoleLogStore"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAAA,OAAA,GAAAC,OAAA;AAKA,IAAAC,YAAA,GAAAD,OAAA;AAKA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAGA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AACA,IAAAM,aAAA,GAAAN,OAAA;AACA,IAAAO,mBAAA,GAAAP,OAAA;AAEA,IAAAQ,MAAA,GAAAR,OAAA;AAGA,IAAAS,eAAA,GAAAT,OAAA;AAKA,IAAAU,eAAA,GAAAV,OAAA;AAMA,IAAAW,mBAAA,GAAAX,OAAA;AAKA,IAAAY,gBAAA,GAAAZ,OAAA","ignoreList":[]}
@@ -7,6 +7,7 @@ exports.consoleToolPreset = void 0;
7
7
  exports.createConsoleTool = createConsoleTool;
8
8
  var _ConsoleIcon = require("./components/ConsoleIcon");
9
9
  var _ConsoleModal = require("./components/ConsoleModal");
10
+ var _consoleLogStore = require("./store/consoleLogStore");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  /**
12
13
  * Pre-configured Console tool for FloatingDevTools.
@@ -19,6 +20,30 @@ var _jsxRuntime = require("react/jsx-runtime");
19
20
  * ```
20
21
  */
21
22
 
23
+ /**
24
+ * Install console + fatal-error capture at IMPORT time, not first UI mount.
25
+ *
26
+ * Deliberately a module side effect (same pattern as @buoy-gg/network's
27
+ * override hydration): a fatal error thrown during the app's FIRST render
28
+ * kills the tree before FloatingDevTools' effects ever run, so mount-time
29
+ * install (`ConsoleRoot`) captured nothing for exactly the crashes that most
30
+ * need capturing. Importing the preset happens at bundle-eval, before any
31
+ * rendering, so the `console.*` patch and both fatal-error hooks (`ErrorUtils`
32
+ * and RN's native exception listener) are live from the first line of app code.
33
+ *
34
+ * Guards:
35
+ * - `ErrorUtils` OR `RN$registerExceptionListener` present = a real React Native
36
+ * runtime. The desktop dashboard and web mirrors import this package too, and
37
+ * must never patch their OWN console (they mirror device entries via
38
+ * `replaceEntries`).
39
+ * - Dev-only. In production the existing mount-time path still applies (the
40
+ * tools only mount there for licensed users), so end-user builds are never
41
+ * patched at import.
42
+ */const rnGlobals = globalThis;
43
+ const isReactNativeRuntime = typeof rnGlobals.ErrorUtils?.setGlobalHandler === "function" || typeof rnGlobals.RN$registerExceptionListener === "function";
44
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
45
+ (0, _consoleLogStore.installConsoleCapture)();
46
+ }
22
47
  const consoleToolPreset = exports.consoleToolPreset = {
23
48
  id: "console",
24
49
  name: "CONSOLE",
@@ -1 +1 @@
1
- {"version":3,"names":["_ConsoleIcon","require","_ConsoleModal","_jsxRuntime","consoleToolPreset","exports","id","name","description","slot","icon","size","color","jsx","ConsoleIcon","CONSOLE_ICON_COLOR","component","ConsoleModal","createConsoleTool","options"],"sourceRoot":"../../src","sources":["preset.tsx"],"mappings":";;;;;;;AAWA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAAyD,IAAAE,WAAA,GAAAF,OAAA;AAZzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKO,MAAMG,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG;EAC/BE,EAAE,EAAE,SAAS;EACbC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,2BAA2B;EACxCC,IAAI,EAAE,MAAe;EACrBC,IAAI,EAAEA,CAAC;IAAEC,IAAI;IAAEC;EAAwC,CAAC,kBACtD,IAAAT,WAAA,CAAAU,GAAA,EAACb,YAAA,CAAAc,WAAW;IAACH,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA,KAAK,IAAIG;EAAmB,CAAE,CAC/D;EACDC,SAAS,EAAEC;AACb,CAAC;;AAED;AACO,SAASC,iBAAiBA,CAC/BC,OAAgD,GAAG,CAAC,CAAC,EACrD;EACA,OAAO;IACL,GAAGf,iBAAiB;IACpBG,IAAI,EAAEY,OAAO,CAACZ,IAAI,IAAIH,iBAAiB,CAACG,IAAI;IAC5CC,WAAW,EAAEW,OAAO,CAACX,WAAW,IAAIJ,iBAAiB,CAACI;EACxD,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["_ConsoleIcon","require","_ConsoleModal","_consoleLogStore","_jsxRuntime","rnGlobals","globalThis","isReactNativeRuntime","ErrorUtils","setGlobalHandler","RN$registerExceptionListener","__DEV__","installConsoleCapture","consoleToolPreset","exports","id","name","description","slot","icon","size","color","jsx","ConsoleIcon","CONSOLE_ICON_COLOR","component","ConsoleModal","createConsoleTool","options"],"sourceRoot":"../../src","sources":["preset.tsx"],"mappings":";;;;;;;AAWA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAAgE,IAAAG,WAAA,GAAAH,OAAA;AAbhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GACA,MAAMI,SAAS,GAAGC,UAGjB;AACD,MAAMC,oBAAoB,GACxB,OAAOF,SAAS,CAACG,UAAU,EAAEC,gBAAgB,KAAK,UAAU,IAC5D,OAAOJ,SAAS,CAACK,4BAA4B,KAAK,UAAU;AAC9D,IAAIH,oBAAoB,IAAI,OAAOI,OAAO,KAAK,WAAW,IAAIA,OAAO,EAAE;EACrE,IAAAC,sCAAqB,EAAC,CAAC;AACzB;AAEO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG;EAC/BE,EAAE,EAAE,SAAS;EACbC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,2BAA2B;EACxCC,IAAI,EAAE,MAAe;EACrBC,IAAI,EAAEA,CAAC;IAAEC,IAAI;IAAEC;EAAwC,CAAC,kBACtD,IAAAjB,WAAA,CAAAkB,GAAA,EAACtB,YAAA,CAAAuB,WAAW;IAACH,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA,KAAK,IAAIG;EAAmB,CAAE,CAC/D;EACDC,SAAS,EAAEC;AACb,CAAC;;AAED;AACO,SAASC,iBAAiBA,CAC/BC,OAAgD,GAAG,CAAC,CAAC,EACrD;EACA,OAAO;IACL,GAAGf,iBAAiB;IACpBG,IAAI,EAAEY,OAAO,CAACZ,IAAI,IAAIH,iBAAiB,CAACG,IAAI;IAC5CC,WAAW,EAAEW,OAAO,CAACX,WAAW,IAAIJ,iBAAiB,CAACI;EACxD,CAAC;AACH","ignoreList":[]}
@@ -8,6 +8,7 @@ exports.getEntries = getEntries;
8
8
  exports.getPreserveLog = getPreserveLog;
9
9
  exports.initConsolePersistence = initConsolePersistence;
10
10
  exports.installConsoleCapture = installConsoleCapture;
11
+ exports.installFatalErrorCapture = installFatalErrorCapture;
11
12
  exports.onClear = onClear;
12
13
  exports.replaceEntries = replaceEntries;
13
14
  exports.setPreserveLog = setPreserveLog;
@@ -64,6 +65,13 @@ const MAX_ENTRIES = 1000;
64
65
  let entries = [];
65
66
  let nextId = 1;
66
67
  let installed = false;
68
+ let fatalInstalled = false;
69
+ /**
70
+ * Raised by an explicit `uninstallConsoleCapture()`. The fatal-error hook can't
71
+ * be safely unwound once chained (another library may have chained on top of
72
+ * ours since), so an explicit user OFF mutes fatal recording instead.
73
+ */
74
+ let captureDisabledByUser = false;
67
75
  const listeners = new Set();
68
76
  const clearListeners = new Set();
69
77
 
@@ -116,10 +124,71 @@ function captureOwnerStack() {
116
124
  return undefined;
117
125
  }
118
126
  }
127
+
128
+ /**
129
+ * An error React Native decorated on its way through ExceptionsManager: a
130
+ * render/lifecycle crash carrying the component stack. `isComponentError` is
131
+ * set by RN's `getExtendedError`, so this identifies a REAL crash rather than
132
+ * an ordinary `console.error("...")` call.
133
+ */
134
+
135
+ /** Frames to keep from a component stack — the crash site plus its context. */
136
+ const COMPONENT_STACK_FRAMES = 8;
137
+
138
+ /**
139
+ * Squeeze a React component stack down to the part a human (or an agent
140
+ * reading this over a wire) actually uses: the component names nearest the
141
+ * crash.
142
+ *
143
+ * Raw component stacks in a Metro dev bundle append the full bundle URL with
144
+ * every query param to EVERY frame — one crash is ~15 KB of near-identical
145
+ * `http://192.168.x.x:8830/…&transform.routerRoot=src/app…` noise wrapped
146
+ * around the handful of names that matter. The complete error, componentStack
147
+ * included, is still on the entry's `args` for anyone who wants it.
148
+ */
149
+ function compactComponentStack(stack) {
150
+ const frames = stack.split("\n").map(line => line.trim()).filter(Boolean)
151
+ // Drop the "(url)" tail; keep a "Name(./file.tsx)" hint when RN provides one.
152
+ .map(line => line.replace(/\s*\((?:https?:|\/).*$/, ""));
153
+ const shown = frames.slice(0, COMPONENT_STACK_FRAMES);
154
+ const rest = frames.length - shown.length;
155
+ return shown.map(f => ` ${f}`).join("\n") + (rest > 0 ? `\n …+${rest} more frames` : "");
156
+ }
157
+ function asComponentError(arg) {
158
+ if (!(arg instanceof Error)) return null;
159
+ const e = arg;
160
+ return e.isComponentError || typeof e.componentStack === "string" ? e : null;
161
+ }
119
162
  function record(method, args) {
120
163
  // Capture the call site for every log so we can attribute its origin.
121
164
  const rawStack = new Error().stack;
122
165
  const origin = (0, _origin.parseOrigin)(rawStack, captureOwnerStack());
166
+
167
+ // React Native funnels an uncaught render error back through console.error
168
+ // (ExceptionsManager.reportException) so console monkey-patches still see it.
169
+ // That arrives as an ordinary error row, which badly under-sells it: the app
170
+ // is dead. Promote it to a tagged [FATAL] entry carrying the component stack.
171
+ const crash = method === "error" ? asComponentError(args[0]) : null;
172
+ if (crash) {
173
+ // Tagged [RENDER ERROR], not [FATAL]: React reports an error an
174
+ // ErrorBoundary CAUGHT and recovered from through this same path, with the
175
+ // same componentStack, and nothing here distinguishes the two. Claiming a
176
+ // healthy app "most likely CRASHED" is worse than under-claiming — the
177
+ // component stack, which is the useful part, is reported either way.
178
+ const headline = fatalKey(crash.name, crash.message);
179
+ const located = crash.componentStack ? `\n\nThis error is located at:\n${compactComponentStack(crash.componentStack)}` : "";
180
+ pushFatal({
181
+ id: nextId++,
182
+ method: "error",
183
+ level: "error",
184
+ args: ["[RENDER ERROR]", crash],
185
+ message: `[RENDER ERROR] ${headline}${located}`,
186
+ timestamp: Date.now(),
187
+ stack: crash.stack,
188
+ origin
189
+ }, isDuplicateFatal(`[RENDER ERROR] ${headline}`));
190
+ return;
191
+ }
123
192
  const entry = {
124
193
  id: nextId++,
125
194
  method,
@@ -133,14 +202,236 @@ function record(method, args) {
133
202
  entries = entries.length >= MAX_ENTRIES ? [...entries.slice(entries.length - MAX_ENTRIES + 1), entry] : [...entries, entry];
134
203
  emit();
135
204
  scheduleSave();
205
+ // Errors are the entries most likely to be the last thing an app ever logs,
206
+ // so they get pushed to any dashboard immediately instead of waiting on the
207
+ // throttle that a dying tree will never run. Rate-limited; ordinary logs
208
+ // still ride the normal throttled path.
209
+ if (entry.level === "error") flushConsoleSyncNow();
210
+ }
211
+
212
+ /** Minimal shape of React Native's global `ErrorUtils`. */
213
+
214
+ /**
215
+ * Two independent seams report the same crash on some setups (the C++ handler
216
+ * can also feed `console.error`). Suppress a repeat of the same headline within
217
+ * this window so a crash reads as ONE entry.
218
+ */
219
+ const FATAL_DEDUPE_MS = 2000;
220
+ let lastFatalKey = "";
221
+ let lastFatalAt = 0;
222
+
223
+ /**
224
+ * Normalize a crash headline so the same error reported through two different
225
+ * seams produces the same key. React Native often sets `error.message` to the
226
+ * ALREADY-prefixed string ("TypeError: x is not a function"), so one path
227
+ * builds "TypeError: TypeError: x…" and the other "TypeError: x…" — which
228
+ * defeats the de-duplication entirely.
229
+ */
230
+ function fatalKey(name, message) {
231
+ const body = message.trim();
232
+ if (name && body.startsWith(`${name}: `)) return body;
233
+ return name ? `${name}: ${body}` : body;
234
+ }
235
+
236
+ /**
237
+ * Has this crash already been recorded moments ago?
238
+ *
239
+ * Only ever used to suppress a duplicate PUSH to the dashboard — never to drop
240
+ * an entry. Two different components crashing with the same message inside the
241
+ * window are two crashes, and a tool whose pitch is "the app's last words"
242
+ * must not silently throw one away.
243
+ */
244
+ function isDuplicateFatal(key) {
245
+ const now = Date.now();
246
+ if (key === lastFatalKey && now - lastFatalAt < FATAL_DEDUPE_MS) return true;
247
+ lastFatalKey = key;
248
+ lastFatalAt = now;
249
+ return false;
250
+ }
251
+
252
+ /**
253
+ * The device sync bridge's "push this tool NOW" escape hatch
254
+ * (@buoy-gg/external-sync `crashFlush`). Reached through the global rather than
255
+ * an import because console deliberately has no dependency on external-sync.
256
+ */
257
+ let lastFlushAt = 0;
258
+ /** Floor between opportunistic flushes, so an error storm can't flood the socket. */
259
+ const FLUSH_MIN_INTERVAL_MS = 150;
260
+ const flushConsoleSyncNow = (force = false) => {
261
+ const now = Date.now();
262
+ // A fatal is the app's last word — it always goes out, rate limit or not.
263
+ if (!force && now - lastFlushAt < FLUSH_MIN_INTERVAL_MS) return;
264
+ lastFlushAt = now;
265
+ try {
266
+ const set = globalThis.__buoyFlushToolSync;
267
+ if (!set) return;
268
+ for (const flush of set) flush("console");
269
+ } catch {
270
+ // Best-effort: a crash path must never crash.
271
+ }
272
+ };
273
+
274
+ /**
275
+ * Append a pre-built fatal entry to the ring buffer, then push it to any
276
+ * connected dashboard IMMEDIATELY.
277
+ *
278
+ * A fatal render error unmounts the React tree microseconds later, taking the
279
+ * sync bridge — and the normal 200 ms throttled snapshot — with it. Flushing
280
+ * synchronously here is what makes a crashed app's last words readable from
281
+ * the desktop app and the MCP server instead of the app just going silent.
282
+ */
283
+ function pushFatal(entry, duplicate = false) {
284
+ entries = entries.length >= MAX_ENTRIES ? [...entries.slice(entries.length - MAX_ENTRIES + 1), entry] : [...entries, entry];
285
+ emit();
286
+ scheduleSave();
287
+ // A repeat within the dedupe window is still RECORDED (two crashes are two
288
+ // crashes); it just doesn't earn another forced push to the dashboard.
289
+ if (!duplicate) flushConsoleSyncNow(true);
290
+ }
291
+
292
+ /** Record an uncaught JS error from the global handler as an error entry. */
293
+ function recordFatalError(error, isFatal) {
294
+ const err = error instanceof Error ? error : undefined;
295
+ // RN passes isFatal:false for non-fatal uncaught errors (e.g. errors thrown
296
+ // in event handlers on some setups); anything else is treated as fatal.
297
+ const label = isFatal === false ? "[UNCAUGHT]" : "[FATAL]";
298
+ const headline = err ? fatalKey(err.name, err.message) : formatArg(error);
299
+ const duplicate = isDuplicateFatal(`${label} ${headline}`);
300
+ // The label leads the args (not just the pre-rendered message): the
301
+ // DevTools-style row renders from args, so this is what makes the tag
302
+ // visible in the UI — exactly like `console.error("[FATAL]", err)`.
303
+ pushFatal({
304
+ id: nextId++,
305
+ method: "error",
306
+ level: "error",
307
+ args: [label, error],
308
+ message: `${label} ${headline}`,
309
+ timestamp: Date.now(),
310
+ // The error's OWN stack — the crash site, not this handler's call site.
311
+ stack: err?.stack,
312
+ fatal: true
313
+ }, duplicate);
314
+ }
315
+
316
+ /**
317
+ * The exception payload React Native's C++ error handler hands to listeners
318
+ * registered via `global.RN$registerExceptionListener` (JsErrorHandler.cpp).
319
+ */
320
+
321
+ /** Render the C++ handler's parsed frames back into a normal stack string. */
322
+ function formatNativeStack(data) {
323
+ const raw = data.extraData?.rawStack;
324
+ if (typeof raw === "string" && raw.length > 0) return raw;
325
+ if (!Array.isArray(data.stack) || data.stack.length === 0) return undefined;
326
+ return data.stack.map(f => {
327
+ const where = f.lineNumber != null ? `${f.file ?? "?"}:${f.lineNumber}:${f.column ?? 0}` : f.file ?? "?";
328
+ return ` at ${f.methodName || "<anonymous>"} (${where})`;
329
+ }).join("\n");
330
+ }
331
+
332
+ /** Record a crash reported by React Native's native (C++) error handler. */
333
+ function recordNativeException(data) {
334
+ const label = data.isFatal === false ? "[UNCAUGHT]" : "[FATAL]";
335
+ const headline = fatalKey(data.name ?? undefined, data.originalMessage ?? data.message ?? "Unknown error");
336
+ const duplicate = isDuplicateFatal(`${label} ${headline}`);
337
+ // The component stack is the single most useful line for "which component
338
+ // crashed" — RN puts it in the redbox, so put it in the console entry too.
339
+ const componentStack = typeof data.componentStack === "string" && data.componentStack.trim() ? `\n\nThis error is located at:\n${compactComponentStack(data.componentStack)}` : "";
340
+ const message = `${label} ${headline}${componentStack}`;
341
+ pushFatal({
342
+ id: nextId++,
343
+ method: "error",
344
+ level: "error",
345
+ args: [label, headline, ...(componentStack ? [componentStack.trim()] : [])],
346
+ message,
347
+ timestamp: Date.now(),
348
+ stack: formatNativeStack(data),
349
+ fatal: true
350
+ }, duplicate);
351
+ }
352
+
353
+ /**
354
+ * Register with React Native's native (C++) exception handler — the seam a
355
+ * RENDER crash actually travels through on the New Architecture.
356
+ *
357
+ * React 19 routes an uncaught render error to `onUncaughtError` →
358
+ * `ExceptionsManager.handleException`, which NEVER reaches
359
+ * `ErrorUtils.setGlobalHandler`. Where it goes from there depends on the build:
360
+ *
361
+ * - `useAlwaysAvailableJSErrorHandling` on: the C++ handler
362
+ * (`global.RN$handleException`) reports it and JS sees nothing — this
363
+ * listener is the only seam.
364
+ * - otherwise: JS `reportException` re-feeds `console.error(e)` "so any methods
365
+ * monkey patched on top of console.error are called", which the console patch
366
+ * catches and promotes to `[FATAL]` (see `record`).
367
+ *
368
+ * Both are covered, and a crash reported through both de-duplicates to one
369
+ * entry. `RN$registerExceptionListener` keeps a LIST of listeners (LogBox
370
+ * registers one too), so this is purely additive. We never call the payload's
371
+ * `preventDefault()`: suppressing RN's own redbox is not our call to make.
372
+ */
373
+ function installNativeExceptionCapture() {
374
+ const register = globalThis.RN$registerExceptionListener;
375
+ if (typeof register !== "function") return false;
376
+ register(data => {
377
+ try {
378
+ if (!captureDisabledByUser) recordNativeException(data);
379
+ } catch {
380
+ // Capture must never interfere with error reporting.
381
+ }
382
+ });
383
+ return true;
384
+ }
385
+
386
+ /**
387
+ * Hook React Native's error paths so FATAL/uncaught JS errors land in the
388
+ * console store: the classic `ErrorUtils.setGlobalHandler` (old architecture,
389
+ * native-module callbacks, promise rejections) AND the native C++ exception
390
+ * listener (New Architecture render crashes — see
391
+ * {@link installNativeExceptionCapture}). Both feed the same de-duplicated
392
+ * `[FATAL]` entry, so a crash reported through both seams shows up once.
393
+ *
394
+ * - Chains the previous handler (LogBox/redbox still fire; nothing swallowed).
395
+ * - Idempotent, and a silent no-op off React Native (neither global present) —
396
+ * which also keeps it inert on the desktop dashboard / web mirrors.
397
+ * - Recording respects an explicit `uninstallConsoleCapture()` (user OFF), but
398
+ * the hooks themselves stay chained — they can't be safely removed.
399
+ */
400
+ function installFatalErrorCapture() {
401
+ if (fatalInstalled) return;
402
+ // Latch only once a seam is actually attached. Setting the flag up front
403
+ // means an install that runs before `InitializeCore` has published
404
+ // `ErrorUtils` would latch anyway and never retry — silently losing promise
405
+ // rejections and native-callback errors, which travel ONLY that seam.
406
+ const nativeInstalled = installNativeExceptionCapture();
407
+ const errorUtils = globalThis.ErrorUtils;
408
+ if (typeof errorUtils?.setGlobalHandler !== "function") {
409
+ fatalInstalled = nativeInstalled;
410
+ return;
411
+ }
412
+ fatalInstalled = true;
413
+ const previous = typeof errorUtils.getGlobalHandler === "function" ? errorUtils.getGlobalHandler() : undefined;
414
+ errorUtils.setGlobalHandler((error, isFatal) => {
415
+ try {
416
+ if (!captureDisabledByUser) recordFatalError(error, isFatal);
417
+ } catch {
418
+ // Capture must never interfere with error reporting.
419
+ }
420
+ if (typeof previous === "function") previous(error, isFatal);
421
+ });
136
422
  }
137
423
 
138
424
  /**
139
425
  * Patch the global console methods. Idempotent — safe to call more than once.
140
426
  * Each patched method still forwards to the original so normal logging keeps
141
427
  * working (Metro terminal, Chrome, native logcat/Xcode).
428
+ *
429
+ * Also installs the fatal-error hook (see `installFatalErrorCapture`) so every
430
+ * install path captures crashes, not just `console.*` calls.
142
431
  */
143
432
  function installConsoleCapture() {
433
+ captureDisabledByUser = false;
434
+ installFatalErrorCapture();
144
435
  if (installed) return;
145
436
  installed = true;
146
437
  for (const method of METHODS) {
@@ -157,8 +448,10 @@ function installConsoleCapture() {
157
448
  }
158
449
  }
159
450
 
160
- /** Restore the original console methods. */
451
+ /** Restore the original console methods. Also mutes fatal-error recording
452
+ * (the hook itself stays chained — see `installFatalErrorCapture`). */
161
453
  function uninstallConsoleCapture() {
454
+ captureDisabledByUser = true;
162
455
  if (!installed) return;
163
456
  installed = false;
164
457
  for (const method of METHODS) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","_interopRequireWildcard","require","_sharedUi","_sanitize","_origin","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","METHODS","STACK_METHODS","Set","METHOD_LEVEL","error","assert","warn","debug","log","info","trace","dir","table","group","groupCollapsed","groupEnd","MAX_ENTRIES","entries","nextId","installed","listeners","clearListeners","originals","emitScheduled","emit","requestAnimationFrame","listener","formatArg","arg","Error","stack","name","message","undefined","JSON","stringify","String","formatArgs","args","map","join","cleanStack","raw","split","slice","captureOwnerStack","fn","record","method","rawStack","origin","parseOrigin","entry","id","level","timestamp","Date","now","length","scheduleSave","installConsoleCapture","original","console","buoyConsoleProxy","apply","uninstallConsoleCapture","subscribe","add","delete","getEntries","clearEntries","clearSavedBuffer","replaceEntries","next","onClear","PRESERVE_KEY","BUFFER_KEY","SAVE_DEBOUNCE_MS","preserveLog","persistenceReady","preserveListeners","saveTimer","emitPreserve","clearTimeout","setTimeout","saveBuffer","serializable","sanitizeArgs","persistentStorage","setItem","removeItem","initConsolePersistence","getItem","saved","parse","Array","isArray","Math","max","getPreserveLog","setPreserveLog","catch","subscribePreserveLog"],"sourceRoot":"../../../src","sources":["store/consoleLogStore.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","_interopRequireWildcard","require","_sharedUi","_sanitize","_origin","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","METHODS","STACK_METHODS","Set","METHOD_LEVEL","error","assert","warn","debug","log","info","trace","dir","table","group","groupCollapsed","groupEnd","MAX_ENTRIES","entries","nextId","installed","fatalInstalled","captureDisabledByUser","listeners","clearListeners","originals","emitScheduled","emit","requestAnimationFrame","listener","formatArg","arg","Error","stack","name","message","undefined","JSON","stringify","String","formatArgs","args","map","join","cleanStack","raw","split","slice","captureOwnerStack","fn","COMPONENT_STACK_FRAMES","compactComponentStack","frames","line","trim","filter","Boolean","replace","shown","rest","length","asComponentError","isComponentError","componentStack","record","method","rawStack","origin","parseOrigin","crash","headline","fatalKey","located","pushFatal","id","level","timestamp","Date","now","isDuplicateFatal","entry","scheduleSave","flushConsoleSyncNow","FATAL_DEDUPE_MS","lastFatalKey","lastFatalAt","body","startsWith","key","lastFlushAt","FLUSH_MIN_INTERVAL_MS","force","globalThis","__buoyFlushToolSync","flush","duplicate","recordFatalError","isFatal","err","label","fatal","formatNativeStack","data","extraData","Array","isArray","where","lineNumber","file","column","methodName","recordNativeException","originalMessage","installNativeExceptionCapture","register","RN$registerExceptionListener","installFatalErrorCapture","nativeInstalled","errorUtils","ErrorUtils","setGlobalHandler","previous","getGlobalHandler","installConsoleCapture","original","console","buoyConsoleProxy","apply","uninstallConsoleCapture","subscribe","add","delete","getEntries","clearEntries","clearSavedBuffer","replaceEntries","next","onClear","PRESERVE_KEY","BUFFER_KEY","SAVE_DEBOUNCE_MS","preserveLog","persistenceReady","preserveListeners","saveTimer","emitPreserve","clearTimeout","setTimeout","saveBuffer","serializable","sanitizeArgs","persistentStorage","setItem","removeItem","initConsolePersistence","getItem","saved","parse","Math","max","getPreserveLog","setPreserveLog","catch","subscribePreserveLog"],"sourceRoot":"../../../src","sources":["store/consoleLogStore.ts"],"mappings":";;;;;;;;;;;;;;;;;AAcA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAAiE,SAAAD,wBAAAK,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAP,uBAAA,YAAAA,CAAAK,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAjBjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;;AAeA;;AA4BA;AACA,MAAMkB,OAAwB,GAAG,CAC/B,KAAK,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,UAAU,CACX;;AAED;AACA,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAElF;AACA,MAAMC,YAAiD,GAAG;EACxDC,KAAK,EAAE,OAAO;EACdC,MAAM,EAAE,OAAO;EACfC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAE,SAAS;EAChBC,GAAG,EAAE,MAAM;EACXC,IAAI,EAAE,MAAM;EACZC,KAAK,EAAE,MAAM;EACbC,GAAG,EAAE,MAAM;EACXC,KAAK,EAAE,MAAM;EACbC,KAAK,EAAE,MAAM;EACbC,cAAc,EAAE,MAAM;EACtBC,QAAQ,EAAE;AACZ,CAAC;;AAED;AACA,MAAMC,WAAW,GAAG,IAAI;AAIxB,IAAIC,OAA0B,GAAG,EAAE;AACnC,IAAIC,MAAM,GAAG,CAAC;AACd,IAAIC,SAAS,GAAG,KAAK;AACrB,IAAIC,cAAc,GAAG,KAAK;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAIC,qBAAqB,GAAG,KAAK;AAEjC,MAAMC,SAAS,GAAG,IAAIpB,GAAG,CAAW,CAAC;AACrC,MAAMqB,cAAc,GAAG,IAAIrB,GAAG,CAAW,CAAC;;AAE1C;AACA,MAAMsB,SAAuE,GAAG,CAAC,CAAC;;AAElF;AACA;AACA;AACA;AACA,IAAIC,aAAa,GAAG,KAAK;AACzB,SAASC,IAAIA,CAAA,EAAS;EACpB,IAAID,aAAa,EAAE;EACnBA,aAAa,GAAG,IAAI;EACpBE,qBAAqB,CAAC,MAAM;IAC1BF,aAAa,GAAG,KAAK;IACrB,KAAK,MAAMG,QAAQ,IAAIN,SAAS,EAAEM,QAAQ,CAAC,CAAC;EAC9C,CAAC,CAAC;AACJ;;AAEA;AACA,SAASC,SAASA,CAACC,GAAY,EAAU;EACvC,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAOA,GAAG;EACvC,IAAIA,GAAG,YAAYC,KAAK,EAAE,OAAOD,GAAG,CAACE,KAAK,IAAI,GAAGF,GAAG,CAACG,IAAI,KAAKH,GAAG,CAACI,OAAO,EAAE;EAC3E,IAAIJ,GAAG,KAAKK,SAAS,EAAE,OAAO,WAAW;EACzC,IAAIL,GAAG,KAAK,IAAI,EAAE,OAAO,MAAM;EAC/B,IAAI,OAAOA,GAAG,KAAK,UAAU,EAAE,OAAO,KAAKA,GAAG,CAACG,IAAI,IAAI,aAAa,EAAE;EACtE,IAAI;IACF,OAAOG,IAAI,CAACC,SAAS,CAACP,GAAG,CAAC;EAC5B,CAAC,CAAC,MAAM;IACN,OAAOQ,MAAM,CAACR,GAAG,CAAC;EACpB;AACF;AAEA,SAASS,UAAUA,CAACC,IAAe,EAAU;EAC3C,OAAOA,IAAI,CAACC,GAAG,CAACZ,SAAS,CAAC,CAACa,IAAI,CAAC,GAAG,CAAC;AACtC;;AAEA;AACA,SAASC,UAAUA,CAACC,GAAY,EAAsB;EACpD,IAAI,CAACA,GAAG,EAAE,OAAOT,SAAS;EAC1B,OAAOS,GAAG,CAACC,KAAK,CAAC,IAAI,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,CAACJ,IAAI,CAAC,IAAI,CAAC,IAAIP,SAAS;AACzD;;AAEA;AACA,SAASY,iBAAiBA,CAAA,EAAuB;EAC/C,IAAI;IACF,MAAMC,EAAE,GAAIzE,KAAK,CACdwE,iBAAiB;IACpB,OAAO,OAAOC,EAAE,KAAK,UAAU,GAAGA,EAAE,CAAC,CAAC,IAAIb,SAAS,GAAGA,SAAS;EACjE,CAAC,CAAC,MAAM;IACN,OAAOA,SAAS;EAClB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA,MAAMc,sBAAsB,GAAG,CAAC;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,qBAAqBA,CAAClB,KAAa,EAAU;EACpD,MAAMmB,MAAM,GAAGnB,KAAK,CACjBa,KAAK,CAAC,IAAI,CAAC,CACXJ,GAAG,CAAEW,IAAI,IAAKA,IAAI,CAACC,IAAI,CAAC,CAAC,CAAC,CAC1BC,MAAM,CAACC,OAAO;EACf;EAAA,CACCd,GAAG,CAAEW,IAAI,IAAKA,IAAI,CAACI,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;EAC5D,MAAMC,KAAK,GAAGN,MAAM,CAACL,KAAK,CAAC,CAAC,EAAEG,sBAAsB,CAAC;EACrD,MAAMS,IAAI,GAAGP,MAAM,CAACQ,MAAM,GAAGF,KAAK,CAACE,MAAM;EACzC,OACEF,KAAK,CAAChB,GAAG,CAAEpD,CAAC,IAAK,OAAOA,CAAC,EAAE,CAAC,CAACqD,IAAI,CAAC,IAAI,CAAC,IACtCgB,IAAI,GAAG,CAAC,GAAG,WAAWA,IAAI,cAAc,GAAG,EAAE,CAAC;AAEnD;AACA,SAASE,gBAAgBA,CAAC9B,GAAY,EAAyB;EAC7D,IAAI,EAAEA,GAAG,YAAYC,KAAK,CAAC,EAAE,OAAO,IAAI;EACxC,MAAMlD,CAAC,GAAGiD,GAAqB;EAC/B,OAAOjD,CAAC,CAACgF,gBAAgB,IAAI,OAAOhF,CAAC,CAACiF,cAAc,KAAK,QAAQ,GAAGjF,CAAC,GAAG,IAAI;AAC9E;AAEA,SAASkF,MAAMA,CAACC,MAAqB,EAAExB,IAAe,EAAQ;EAC5D;EACA,MAAMyB,QAAQ,GAAG,IAAIlC,KAAK,CAAC,CAAC,CAACC,KAAK;EAClC,MAAMkC,MAAM,GAAG,IAAAC,mBAAW,EAACF,QAAQ,EAAElB,iBAAiB,CAAC,CAAC,CAAC;;EAEzD;EACA;EACA;EACA;EACA,MAAMqB,KAAK,GAAGJ,MAAM,KAAK,OAAO,GAAGJ,gBAAgB,CAACpB,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;EACnE,IAAI4B,KAAK,EAAE;IACT;IACA;IACA;IACA;IACA;IACA,MAAMC,QAAQ,GAAGC,QAAQ,CAACF,KAAK,CAACnC,IAAI,EAAEmC,KAAK,CAAClC,OAAO,CAAC;IACpD,MAAMqC,OAAO,GAAGH,KAAK,CAACN,cAAc,GAChC,kCAAkCZ,qBAAqB,CAACkB,KAAK,CAACN,cAAc,CAAC,EAAE,GAC/E,EAAE;IACNU,SAAS,CACP;MACEC,EAAE,EAAEvD,MAAM,EAAE;MACZ8C,MAAM,EAAE,OAAO;MACfU,KAAK,EAAE,OAAO;MACdlC,IAAI,EAAE,CAAC,gBAAgB,EAAE4B,KAAK,CAAC;MAC/BlC,OAAO,EAAE,kBAAkBmC,QAAQ,GAAGE,OAAO,EAAE;MAC/CI,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MACrB7C,KAAK,EAAEoC,KAAK,CAACpC,KAAK;MAClBkC;IACF,CAAC,EACDY,gBAAgB,CAAC,kBAAkBT,QAAQ,EAAE,CAC/C,CAAC;IACD;EACF;EAEA,MAAMU,KAAsB,GAAG;IAC7BN,EAAE,EAAEvD,MAAM,EAAE;IACZ8C,MAAM;IACNU,KAAK,EAAEvE,YAAY,CAAC6D,MAAM,CAAC;IAC3BxB,IAAI;IACJN,OAAO,EAAEK,UAAU,CAACC,IAAI,CAAC;IACzBmC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;IACrB7C,KAAK,EAAE/B,aAAa,CAACT,GAAG,CAACwE,MAAM,CAAC,GAAGrB,UAAU,CAACsB,QAAQ,CAAC,GAAG9B,SAAS;IACnE+B;EACF,CAAC;EACDjD,OAAO,GACLA,OAAO,CAAC0C,MAAM,IAAI3C,WAAW,GACzB,CAAC,GAAGC,OAAO,CAAC6B,KAAK,CAAC7B,OAAO,CAAC0C,MAAM,GAAG3C,WAAW,GAAG,CAAC,CAAC,EAAE+D,KAAK,CAAC,GAC3D,CAAC,GAAG9D,OAAO,EAAE8D,KAAK,CAAC;EACzBrD,IAAI,CAAC,CAAC;EACNsD,YAAY,CAAC,CAAC;EACd;EACA;EACA;EACA;EACA,IAAID,KAAK,CAACL,KAAK,KAAK,OAAO,EAAEO,mBAAmB,CAAC,CAAC;AACpD;;AAEA;;AAUA;AACA;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG,IAAI;AAC5B,IAAIC,YAAY,GAAG,EAAE;AACrB,IAAIC,WAAW,GAAG,CAAC;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASd,QAAQA,CAACrC,IAAwB,EAAEC,OAAe,EAAU;EACnE,MAAMmD,IAAI,GAAGnD,OAAO,CAACmB,IAAI,CAAC,CAAC;EAC3B,IAAIpB,IAAI,IAAIoD,IAAI,CAACC,UAAU,CAAC,GAAGrD,IAAI,IAAI,CAAC,EAAE,OAAOoD,IAAI;EACrD,OAAOpD,IAAI,GAAG,GAAGA,IAAI,KAAKoD,IAAI,EAAE,GAAGA,IAAI;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASP,gBAAgBA,CAACS,GAAW,EAAW;EAC9C,MAAMV,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;EACtB,IAAIU,GAAG,KAAKJ,YAAY,IAAIN,GAAG,GAAGO,WAAW,GAAGF,eAAe,EAAE,OAAO,IAAI;EAC5EC,YAAY,GAAGI,GAAG;EAClBH,WAAW,GAAGP,GAAG;EACjB,OAAO,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAIW,WAAW,GAAG,CAAC;AACnB;AACA,MAAMC,qBAAqB,GAAG,GAAG;AACjC,MAAMR,mBAAmB,GAAGA,CAACS,KAAK,GAAG,KAAK,KAAW;EACnD,MAAMb,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;EACtB;EACA,IAAI,CAACa,KAAK,IAAIb,GAAG,GAAGW,WAAW,GAAGC,qBAAqB,EAAE;EACzDD,WAAW,GAAGX,GAAG;EACjB,IAAI;IACF,MAAMnF,GAAG,GAAIiG,UAAU,CACpBC,mBAAmB;IACtB,IAAI,CAAClG,GAAG,EAAE;IACV,KAAK,MAAMmG,KAAK,IAAInG,GAAG,EAAEmG,KAAK,CAAC,SAAS,CAAC;EAC3C,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASrB,SAASA,CAACO,KAAsB,EAAEe,SAAS,GAAG,KAAK,EAAQ;EAClE7E,OAAO,GACLA,OAAO,CAAC0C,MAAM,IAAI3C,WAAW,GACzB,CAAC,GAAGC,OAAO,CAAC6B,KAAK,CAAC7B,OAAO,CAAC0C,MAAM,GAAG3C,WAAW,GAAG,CAAC,CAAC,EAAE+D,KAAK,CAAC,GAC3D,CAAC,GAAG9D,OAAO,EAAE8D,KAAK,CAAC;EACzBrD,IAAI,CAAC,CAAC;EACNsD,YAAY,CAAC,CAAC;EACd;EACA;EACA,IAAI,CAACc,SAAS,EAAEb,mBAAmB,CAAC,IAAI,CAAC;AAC3C;;AAEA;AACA,SAASc,gBAAgBA,CAAC3F,KAAc,EAAE4F,OAAiB,EAAQ;EACjE,MAAMC,GAAG,GAAG7F,KAAK,YAAY2B,KAAK,GAAG3B,KAAK,GAAG+B,SAAS;EACtD;EACA;EACA,MAAM+D,KAAK,GAAGF,OAAO,KAAK,KAAK,GAAG,YAAY,GAAG,SAAS;EAC1D,MAAM3B,QAAQ,GAAG4B,GAAG,GAAG3B,QAAQ,CAAC2B,GAAG,CAAChE,IAAI,EAAEgE,GAAG,CAAC/D,OAAO,CAAC,GAAGL,SAAS,CAACzB,KAAK,CAAC;EACzE,MAAM0F,SAAS,GAAGhB,gBAAgB,CAAC,GAAGoB,KAAK,IAAI7B,QAAQ,EAAE,CAAC;EAC1D;EACA;EACA;EACAG,SAAS,CACP;IACEC,EAAE,EAAEvD,MAAM,EAAE;IACZ8C,MAAM,EAAE,OAAO;IACfU,KAAK,EAAE,OAAO;IACdlC,IAAI,EAAE,CAAC0D,KAAK,EAAE9F,KAAK,CAAC;IACpB8B,OAAO,EAAE,GAAGgE,KAAK,IAAI7B,QAAQ,EAAE;IAC/BM,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;IACrB;IACA7C,KAAK,EAAEiE,GAAG,EAAEjE,KAAK;IACjBmE,KAAK,EAAE;EACT,CAAC,EACDL,SACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;;AAoBA;AACA,SAASM,iBAAiBA,CAACC,IAAyB,EAAsB;EACxE,MAAMzD,GAAG,GAAGyD,IAAI,CAACC,SAAS,EAAErC,QAAQ;EACpC,IAAI,OAAOrB,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACe,MAAM,GAAG,CAAC,EAAE,OAAOf,GAAG;EACzD,IAAI,CAAC2D,KAAK,CAACC,OAAO,CAACH,IAAI,CAACrE,KAAK,CAAC,IAAIqE,IAAI,CAACrE,KAAK,CAAC2B,MAAM,KAAK,CAAC,EAAE,OAAOxB,SAAS;EAC3E,OAAOkE,IAAI,CAACrE,KAAK,CACdS,GAAG,CAAEpD,CAAC,IAAK;IACV,MAAMoH,KAAK,GACTpH,CAAC,CAACqH,UAAU,IAAI,IAAI,GAAG,GAAGrH,CAAC,CAACsH,IAAI,IAAI,GAAG,IAAItH,CAAC,CAACqH,UAAU,IAAIrH,CAAC,CAACuH,MAAM,IAAI,CAAC,EAAE,GAAGvH,CAAC,CAACsH,IAAI,IAAI,GAAG;IAC5F,OAAO,UAAUtH,CAAC,CAACwH,UAAU,IAAI,aAAa,KAAKJ,KAAK,GAAG;EAC7D,CAAC,CAAC,CACD/D,IAAI,CAAC,IAAI,CAAC;AACf;;AAEA;AACA,SAASoE,qBAAqBA,CAACT,IAAyB,EAAQ;EAC9D,MAAMH,KAAK,GAAGG,IAAI,CAACL,OAAO,KAAK,KAAK,GAAG,YAAY,GAAG,SAAS;EAC/D,MAAM3B,QAAQ,GAAGC,QAAQ,CAAC+B,IAAI,CAACpE,IAAI,IAAIE,SAAS,EAAEkE,IAAI,CAACU,eAAe,IAAIV,IAAI,CAACnE,OAAO,IAAI,eAAe,CAAC;EAC1G,MAAM4D,SAAS,GAAGhB,gBAAgB,CAAC,GAAGoB,KAAK,IAAI7B,QAAQ,EAAE,CAAC;EAC1D;EACA;EACA,MAAMP,cAAc,GAClB,OAAOuC,IAAI,CAACvC,cAAc,KAAK,QAAQ,IAAIuC,IAAI,CAACvC,cAAc,CAACT,IAAI,CAAC,CAAC,GACjE,kCAAkCH,qBAAqB,CAACmD,IAAI,CAACvC,cAAc,CAAC,EAAE,GAC9E,EAAE;EACR,MAAM5B,OAAO,GAAG,GAAGgE,KAAK,IAAI7B,QAAQ,GAAGP,cAAc,EAAE;EACvDU,SAAS,CACP;IACEC,EAAE,EAAEvD,MAAM,EAAE;IACZ8C,MAAM,EAAE,OAAO;IACfU,KAAK,EAAE,OAAO;IACdlC,IAAI,EAAE,CAAC0D,KAAK,EAAE7B,QAAQ,EAAE,IAAIP,cAAc,GAAG,CAACA,cAAc,CAACT,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3EnB,OAAO;IACPyC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;IACrB7C,KAAK,EAAEoE,iBAAiB,CAACC,IAAI,CAAC;IAC9BF,KAAK,EAAE;EACT,CAAC,EACDL,SACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkB,6BAA6BA,CAAA,EAAY;EAChD,MAAMC,QAAQ,GACZtB,UAAU,CAKVuB,4BAA4B;EAC9B,IAAI,OAAOD,QAAQ,KAAK,UAAU,EAAE,OAAO,KAAK;EAChDA,QAAQ,CAAEZ,IAAI,IAAK;IACjB,IAAI;MACF,IAAI,CAAChF,qBAAqB,EAAEyF,qBAAqB,CAACT,IAAI,CAAC;IACzD,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC,CAAC;EACF,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASc,wBAAwBA,CAAA,EAAS;EAC/C,IAAI/F,cAAc,EAAE;EACpB;EACA;EACA;EACA;EACA,MAAMgG,eAAe,GAAGJ,6BAA6B,CAAC,CAAC;EACvD,MAAMK,UAAU,GAAI1B,UAAU,CAAmC2B,UAAU;EAC3E,IAAI,OAAOD,UAAU,EAAEE,gBAAgB,KAAK,UAAU,EAAE;IACtDnG,cAAc,GAAGgG,eAAe;IAChC;EACF;EACAhG,cAAc,GAAG,IAAI;EACrB,MAAMoG,QAAQ,GACZ,OAAOH,UAAU,CAACI,gBAAgB,KAAK,UAAU,GAC7CJ,UAAU,CAACI,gBAAgB,CAAC,CAAC,GAC7BtF,SAAS;EACfkF,UAAU,CAACE,gBAAgB,CAAC,CAACnH,KAAc,EAAE4F,OAAiB,KAAK;IACjE,IAAI;MACF,IAAI,CAAC3E,qBAAqB,EAAE0E,gBAAgB,CAAC3F,KAAK,EAAE4F,OAAO,CAAC;IAC9D,CAAC,CAAC,MAAM;MACN;IAAA;IAEF,IAAI,OAAOwB,QAAQ,KAAK,UAAU,EAAEA,QAAQ,CAACpH,KAAK,EAAE4F,OAAO,CAAC;EAC9D,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0B,qBAAqBA,CAAA,EAAS;EAC5CrG,qBAAqB,GAAG,KAAK;EAC7B8F,wBAAwB,CAAC,CAAC;EAC1B,IAAIhG,SAAS,EAAE;EACfA,SAAS,GAAG,IAAI;EAEhB,KAAK,MAAM6C,MAAM,IAAIhE,OAAO,EAAE;IAC5B,MAAM2H,QAAQ,GAAGC,OAAO,CAAC5D,MAAM,CAA+C;IAC9E,IAAI,OAAO2D,QAAQ,KAAK,UAAU,EAAE;IACpCnG,SAAS,CAACwC,MAAM,CAAC,GAAG2D,QAAQ;IAC5B;IACA;IACA;IACAC,OAAO,CAAC5D,MAAM,CAAC,GAAG,SAAS6D,gBAAgBA,CAAC,GAAGrF,IAAe,EAAE;MAC9DuB,MAAM,CAACC,MAAM,EAAExB,IAAI,CAAC;MACpBmF,QAAQ,CAACG,KAAK,CAACF,OAAO,EAAEpF,IAAI,CAAC;IAC/B,CAAC;EACH;AACF;;AAEA;AACA;AACO,SAASuF,uBAAuBA,CAAA,EAAS;EAC9C1G,qBAAqB,GAAG,IAAI;EAC5B,IAAI,CAACF,SAAS,EAAE;EAChBA,SAAS,GAAG,KAAK;EACjB,KAAK,MAAM6C,MAAM,IAAIhE,OAAO,EAAE;IAC5B,MAAM2H,QAAQ,GAAGnG,SAAS,CAACwC,MAAM,CAAC;IAClC,IAAI2D,QAAQ,EAAEC,OAAO,CAAC5D,MAAM,CAAC,GAAG2D,QAAQ;IACxC,OAAOnG,SAAS,CAACwC,MAAM,CAAC;EAC1B;AACF;;AAEA;AACO,SAASgE,SAASA,CAACpG,QAAkB,EAAc;EACxDN,SAAS,CAAC2G,GAAG,CAACrG,QAAQ,CAAC;EACvB,OAAO,MAAM;IACXN,SAAS,CAAC4G,MAAM,CAACtG,QAAQ,CAAC;EAC5B,CAAC;AACH;;AAEA;AACO,SAASuG,UAAUA,CAAA,EAAsB;EAC9C,OAAOlH,OAAO;AAChB;;AAEA;AACA;AACO,SAASmH,YAAYA,CAAA,EAAS;EACnC,KAAK,MAAMxG,QAAQ,IAAIL,cAAc,EAAEK,QAAQ,CAAC,CAAC;EACjD,KAAKyG,gBAAgB,CAAC,CAAC;EACvB,IAAIpH,OAAO,CAAC0C,MAAM,KAAK,CAAC,EAAE;EAC1B1C,OAAO,GAAG,EAAE;EACZS,IAAI,CAAC,CAAC;AACR;;AAEA;AACA;AACA;AACA;;AAEA;AACO,SAAS4G,cAAcA,CAACC,IAAuB,EAAQ;EAC5DtH,OAAO,GAAGsH,IAAI,CAAC5E,MAAM,GAAG3C,WAAW,GAAGuH,IAAI,CAACzF,KAAK,CAACyF,IAAI,CAAC5E,MAAM,GAAG3C,WAAW,CAAC,GAAGuH,IAAI;EAClF7G,IAAI,CAAC,CAAC;AACR;;AAEA;AACA;AACO,SAAS8G,OAAOA,CAAC5G,QAAkB,EAAc;EACtDL,cAAc,CAAC0G,GAAG,CAACrG,QAAQ,CAAC;EAC5B,OAAO,MAAM;IACXL,cAAc,CAAC2G,MAAM,CAACtG,QAAQ,CAAC;EACjC,CAAC;AACH;;AAEA;AACA;AACA;;AAEA,MAAM6G,YAAY,GAAG,8BAA8B;AACnD,MAAMC,UAAU,GAAG,4BAA4B;AAC/C,MAAMC,gBAAgB,GAAG,GAAG;AAE5B,IAAIC,WAAW,GAAG,KAAK;AACvB,IAAIC,gBAAgB,GAAG,KAAK;AAC5B,MAAMC,iBAAiB,GAAG,IAAI5I,GAAG,CAAW,CAAC;AAC7C,IAAI6I,SAA+C,GAAG,IAAI;AAE1D,SAASC,YAAYA,CAAA,EAAS;EAC5B,KAAK,MAAMpH,QAAQ,IAAIkH,iBAAiB,EAAElH,QAAQ,CAAC,CAAC;AACtD;AAEA,SAASoD,YAAYA,CAAA,EAAS;EAC5B,IAAI,CAAC4D,WAAW,EAAE;EAClB,IAAIG,SAAS,EAAEE,YAAY,CAACF,SAAS,CAAC;EACtCA,SAAS,GAAGG,UAAU,CAACC,UAAU,EAAER,gBAAgB,CAAC;AACtD;AAEA,eAAeQ,UAAUA,CAAA,EAAkB;EACzCJ,SAAS,GAAG,IAAI;EAChB,IAAI,CAACH,WAAW,EAAE;EAClB,IAAI;IACF,MAAMQ,YAAY,GAAGnI,OAAO,CAACwB,GAAG,CAAEsC,KAAK,KAAM;MAC3C,GAAGA,KAAK;MACRvC,IAAI,EAAE,IAAA6G,sBAAY,EAACtE,KAAK,CAACvC,IAAI;IAC/B,CAAC,CAAC,CAAC;IACH,MAAM8G,2BAAiB,CAACC,OAAO,CAACb,UAAU,EAAEtG,IAAI,CAACC,SAAS,CAAC+G,YAAY,CAAC,CAAC;EAC3E,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ;AAEA,eAAef,gBAAgBA,CAAA,EAAkB;EAC/C,IAAI;IACF,MAAMiB,2BAAiB,CAACE,UAAU,CAACd,UAAU,CAAC;EAChD,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ;;AAEA;AACA;AACA;AACA;AACA;AACO,eAAee,sBAAsBA,CAAA,EAAkB;EAC5D,IAAIZ,gBAAgB,EAAE;EACtBA,gBAAgB,GAAG,IAAI;EACvB,IAAI;IACFD,WAAW,GAAG,CAAC,MAAMU,2BAAiB,CAACI,OAAO,CAACjB,YAAY,CAAC,MAAM,MAAM;EAC1E,CAAC,CAAC,MAAM;IACNG,WAAW,GAAG,KAAK;EACrB;EACAI,YAAY,CAAC,CAAC;EAEd,IAAI,CAACJ,WAAW,EAAE;IAChB,MAAMP,gBAAgB,CAAC,CAAC;IACxB;EACF;EACA,IAAI;IACF,MAAMzF,GAAG,GAAG,MAAM0G,2BAAiB,CAACI,OAAO,CAAChB,UAAU,CAAC;IACvD,IAAI9F,GAAG,EAAE;MACP,MAAM+G,KAAK,GAAGvH,IAAI,CAACwH,KAAK,CAAChH,GAAG,CAAsB;MAClD,IAAI2D,KAAK,CAACC,OAAO,CAACmD,KAAK,CAAC,IAAIA,KAAK,CAAChG,MAAM,EAAE;QACxC;QACA1C,OAAO,GAAG,CAAC,GAAG0I,KAAK,EAAE,GAAG1I,OAAO,CAAC,CAAC6B,KAAK,CAAC,CAAC9B,WAAW,CAAC;QACpDE,MAAM,GAAG2I,IAAI,CAACC,GAAG,CAAC5I,MAAM,EAAE,GAAGyI,KAAK,CAAClH,GAAG,CAAE5D,CAAC,IAAKA,CAAC,CAAC4F,EAAE,GAAG,CAAC,CAAC,CAAC;QACxD/C,IAAI,CAAC,CAAC;MACR;IACF;EACF,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ;;AAEA;AACO,SAASqI,cAAcA,CAAA,EAAY;EACxC,OAAOnB,WAAW;AACpB;;AAEA;AACO,SAASoB,cAAcA,CAACzB,IAAa,EAAQ;EAClD,IAAIK,WAAW,KAAKL,IAAI,EAAE;EAC1BK,WAAW,GAAGL,IAAI;EAClBS,YAAY,CAAC,CAAC;EACdM,2BAAiB,CAACC,OAAO,CAACd,YAAY,EAAEnG,MAAM,CAACiG,IAAI,CAAC,CAAC,CAAC0B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACrE,IAAI1B,IAAI,EAAEY,UAAU,CAAC,CAAC,CAAC,KAClBd,gBAAgB,CAAC,CAAC;AACzB;;AAEA;AACO,SAAS6B,oBAAoBA,CAACtI,QAAkB,EAAc;EACnEkH,iBAAiB,CAACb,GAAG,CAACrG,QAAQ,CAAC;EAC/B,OAAO,MAAM;IACXkH,iBAAiB,CAACZ,MAAM,CAACtG,QAAQ,CAAC;EACpC,CAAC;AACH","ignoreList":[]}
@@ -48,5 +48,5 @@ export { consoleSyncAdapter } from "./sync/consoleSyncAdapter";
48
48
  // =============================================================================
49
49
  // CAPTURE STORE (install/teardown + types)
50
50
  // =============================================================================
51
- export { installConsoleCapture, uninstallConsoleCapture, clearEntries, getEntries, subscribe, replaceEntries, onClear, initConsolePersistence, getPreserveLog, setPreserveLog, subscribePreserveLog } from "./store/consoleLogStore";
51
+ export { installConsoleCapture, installFatalErrorCapture, uninstallConsoleCapture, clearEntries, getEntries, subscribe, replaceEntries, onClear, initConsolePersistence, getPreserveLog, setPreserveLog, subscribePreserveLog } from "./store/consoleLogStore";
52
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["consoleToolPreset","createConsoleTool","ConsoleRoot","ConsoleModal","ConsoleIcon","CONSOLE_ICON_COLOR","ConsoleView","ConsoleMessageRow","ConsoleValue","useConsoleMessages","consoleTheme","levelStyles","ConsoleLogList","useConsoleLogs","consoleSyncAdapter","installConsoleCapture","uninstallConsoleCapture","clearEntries","getEntries","subscribe","replaceEntries","onClear","initConsolePersistence","getPreserveLog","setPreserveLog","subscribePreserveLog"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASA,iBAAiB,EAAEC,iBAAiB,QAAQ,UAAU;;AAE/D;AACA;AACA;AACA,SAASC,WAAW,QAAQ,0BAA0B;;AAEtD;AACA;AACA;AACA,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,WAAW,EAAEC,kBAAkB,QAAQ,0BAA0B;;AAE1E;AACA,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,kBAAkB,QAAQ,+BAA+B;AAElE,SAASC,YAAY,EAAEC,WAAW,QAAQ,kBAAkB;;AAE5D;AACA,SAASC,cAAc,QAAQ,6BAA6B;;AAE5D;AACA;AACA;AACA,SAASC,cAAc,QAAQ,wBAAwB;AAGvD;AACA;AACA;AACA,SAASC,kBAAkB,QAAQ,2BAA2B;;AAE9D;AACA;AACA;AACA,SACEC,qBAAqB,EACrBC,uBAAuB,EACvBC,YAAY,EACZC,UAAU,EACVC,SAAS,EACTC,cAAc,EACdC,OAAO,EACPC,sBAAsB,EACtBC,cAAc,EACdC,cAAc,EACdC,oBAAoB,QACf,yBAAyB","ignoreList":[]}
1
+ {"version":3,"names":["consoleToolPreset","createConsoleTool","ConsoleRoot","ConsoleModal","ConsoleIcon","CONSOLE_ICON_COLOR","ConsoleView","ConsoleMessageRow","ConsoleValue","useConsoleMessages","consoleTheme","levelStyles","ConsoleLogList","useConsoleLogs","consoleSyncAdapter","installConsoleCapture","installFatalErrorCapture","uninstallConsoleCapture","clearEntries","getEntries","subscribe","replaceEntries","onClear","initConsolePersistence","getPreserveLog","setPreserveLog","subscribePreserveLog"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASA,iBAAiB,EAAEC,iBAAiB,QAAQ,UAAU;;AAE/D;AACA;AACA;AACA,SAASC,WAAW,QAAQ,0BAA0B;;AAEtD;AACA;AACA;AACA,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,WAAW,EAAEC,kBAAkB,QAAQ,0BAA0B;;AAE1E;AACA,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,iBAAiB,QAAQ,8BAA8B;AAChE,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,kBAAkB,QAAQ,+BAA+B;AAElE,SAASC,YAAY,EAAEC,WAAW,QAAQ,kBAAkB;;AAE5D;AACA,SAASC,cAAc,QAAQ,6BAA6B;;AAE5D;AACA;AACA;AACA,SAASC,cAAc,QAAQ,wBAAwB;AAGvD;AACA;AACA;AACA,SAASC,kBAAkB,QAAQ,2BAA2B;;AAE9D;AACA;AACA;AACA,SACEC,qBAAqB,EACrBC,wBAAwB,EACxBC,uBAAuB,EACvBC,YAAY,EACZC,UAAU,EACVC,SAAS,EACTC,cAAc,EACdC,OAAO,EACPC,sBAAsB,EACtBC,cAAc,EACdC,cAAc,EACdC,oBAAoB,QACf,yBAAyB","ignoreList":[]}
@@ -13,7 +13,34 @@
13
13
 
14
14
  import { ConsoleIcon, CONSOLE_ICON_COLOR } from "./components/ConsoleIcon";
15
15
  import { ConsoleModal } from "./components/ConsoleModal";
16
+ import { installConsoleCapture } from "./store/consoleLogStore";
17
+
18
+ /**
19
+ * Install console + fatal-error capture at IMPORT time, not first UI mount.
20
+ *
21
+ * Deliberately a module side effect (same pattern as @buoy-gg/network's
22
+ * override hydration): a fatal error thrown during the app's FIRST render
23
+ * kills the tree before FloatingDevTools' effects ever run, so mount-time
24
+ * install (`ConsoleRoot`) captured nothing for exactly the crashes that most
25
+ * need capturing. Importing the preset happens at bundle-eval, before any
26
+ * rendering, so the `console.*` patch and both fatal-error hooks (`ErrorUtils`
27
+ * and RN's native exception listener) are live from the first line of app code.
28
+ *
29
+ * Guards:
30
+ * - `ErrorUtils` OR `RN$registerExceptionListener` present = a real React Native
31
+ * runtime. The desktop dashboard and web mirrors import this package too, and
32
+ * must never patch their OWN console (they mirror device entries via
33
+ * `replaceEntries`).
34
+ * - Dev-only. In production the existing mount-time path still applies (the
35
+ * tools only mount there for licensed users), so end-user builds are never
36
+ * patched at import.
37
+ */
16
38
  import { jsx as _jsx } from "react/jsx-runtime";
39
+ const rnGlobals = globalThis;
40
+ const isReactNativeRuntime = typeof rnGlobals.ErrorUtils?.setGlobalHandler === "function" || typeof rnGlobals.RN$registerExceptionListener === "function";
41
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
42
+ installConsoleCapture();
43
+ }
17
44
  export const consoleToolPreset = {
18
45
  id: "console",
19
46
  name: "CONSOLE",
@@ -1 +1 @@
1
- {"version":3,"names":["ConsoleIcon","CONSOLE_ICON_COLOR","ConsoleModal","jsx","_jsx","consoleToolPreset","id","name","description","slot","icon","size","color","component","createConsoleTool","options"],"sourceRoot":"../../src","sources":["preset.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,kBAAkB,QAAQ,0BAA0B;AAC1E,SAASC,YAAY,QAAQ,2BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzD,OAAO,MAAMC,iBAAiB,GAAG;EAC/BC,EAAE,EAAE,SAAS;EACbC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,2BAA2B;EACxCC,IAAI,EAAE,MAAe;EACrBC,IAAI,EAAEA,CAAC;IAAEC,IAAI;IAAEC;EAAwC,CAAC,kBACtDR,IAAA,CAACJ,WAAW;IAACW,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA,KAAK,IAAIX;EAAmB,CAAE,CAC/D;EACDY,SAAS,EAAEX;AACb,CAAC;;AAED;AACA,OAAO,SAASY,iBAAiBA,CAC/BC,OAAgD,GAAG,CAAC,CAAC,EACrD;EACA,OAAO;IACL,GAAGV,iBAAiB;IACpBE,IAAI,EAAEQ,OAAO,CAACR,IAAI,IAAIF,iBAAiB,CAACE,IAAI;IAC5CC,WAAW,EAAEO,OAAO,CAACP,WAAW,IAAIH,iBAAiB,CAACG;EACxD,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["ConsoleIcon","CONSOLE_ICON_COLOR","ConsoleModal","installConsoleCapture","jsx","_jsx","rnGlobals","globalThis","isReactNativeRuntime","ErrorUtils","setGlobalHandler","RN$registerExceptionListener","__DEV__","consoleToolPreset","id","name","description","slot","icon","size","color","component","createConsoleTool","options"],"sourceRoot":"../../src","sources":["preset.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,WAAW,EAAEC,kBAAkB,QAAQ,0BAA0B;AAC1E,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,qBAAqB,QAAQ,yBAAyB;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnBA,SAAAC,GAAA,IAAAC,IAAA;AAoBA,MAAMC,SAAS,GAAGC,UAGjB;AACD,MAAMC,oBAAoB,GACxB,OAAOF,SAAS,CAACG,UAAU,EAAEC,gBAAgB,KAAK,UAAU,IAC5D,OAAOJ,SAAS,CAACK,4BAA4B,KAAK,UAAU;AAC9D,IAAIH,oBAAoB,IAAI,OAAOI,OAAO,KAAK,WAAW,IAAIA,OAAO,EAAE;EACrET,qBAAqB,CAAC,CAAC;AACzB;AAEA,OAAO,MAAMU,iBAAiB,GAAG;EAC/BC,EAAE,EAAE,SAAS;EACbC,IAAI,EAAE,SAAS;EACfC,WAAW,EAAE,2BAA2B;EACxCC,IAAI,EAAE,MAAe;EACrBC,IAAI,EAAEA,CAAC;IAAEC,IAAI;IAAEC;EAAwC,CAAC,kBACtDf,IAAA,CAACL,WAAW;IAACmB,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA,KAAK,IAAInB;EAAmB,CAAE,CAC/D;EACDoB,SAAS,EAAEnB;AACb,CAAC;;AAED;AACA,OAAO,SAASoB,iBAAiBA,CAC/BC,OAAgD,GAAG,CAAC,CAAC,EACrD;EACA,OAAO;IACL,GAAGV,iBAAiB;IACpBE,IAAI,EAAEQ,OAAO,CAACR,IAAI,IAAIF,iBAAiB,CAACE,IAAI;IAC5CC,WAAW,EAAEO,OAAO,CAACP,WAAW,IAAIH,iBAAiB,CAACG;EACxD,CAAC;AACH","ignoreList":[]}