@buoy-gg/console 7.0.20 → 7.0.21

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,28 @@ 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 both the `console.*` patch and the `ErrorUtils` fatal hook are
32
+ * live from the first line of app code.
33
+ *
34
+ * Guards:
35
+ * - `ErrorUtils` present = a real React Native runtime. The desktop dashboard
36
+ * and web mirrors import this package too, and must never patch their OWN
37
+ * console (they mirror device entries via `replaceEntries`).
38
+ * - Dev-only. In production the existing mount-time path still applies (the
39
+ * tools only mount there for licensed users), so end-user builds are never
40
+ * patched at import.
41
+ */const isReactNativeRuntime = typeof globalThis.ErrorUtils?.setGlobalHandler === "function";
42
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
43
+ (0, _consoleLogStore.installConsoleCapture)();
44
+ }
22
45
  const consoleToolPreset = exports.consoleToolPreset = {
23
46
  id: "console",
24
47
  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","isReactNativeRuntime","globalThis","ErrorUtils","setGlobalHandler","__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,GACA,MAAMI,oBAAoB,GACxB,OAAQC,UAAU,CACfC,UAAU,EAAEC,gBAAgB,KAAK,UAAU;AAChD,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,IAAAf,WAAA,CAAAgB,GAAA,EAACpB,YAAA,CAAAqB,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
 
@@ -135,12 +143,74 @@ function record(method, args) {
135
143
  scheduleSave();
136
144
  }
137
145
 
146
+ /** Minimal shape of React Native's global `ErrorUtils`. */
147
+
148
+ /** Record an uncaught JS error from the global handler as an error entry. */
149
+ function recordFatalError(error, isFatal) {
150
+ const err = error instanceof Error ? error : undefined;
151
+ // RN passes isFatal:false for non-fatal uncaught errors (e.g. errors thrown
152
+ // in event handlers on some setups); anything else is treated as fatal.
153
+ const label = isFatal === false ? "[UNCAUGHT]" : "[FATAL]";
154
+ const headline = err ? `${err.name}: ${err.message}` : formatArg(error);
155
+ // The label leads the args (not just the pre-rendered message): the
156
+ // DevTools-style row renders from args, so this is what makes the tag
157
+ // visible in the UI — exactly like `console.error("[FATAL]", err)`.
158
+ const entry = {
159
+ id: nextId++,
160
+ method: "error",
161
+ level: "error",
162
+ args: [label, error],
163
+ message: `${label} ${headline}`,
164
+ timestamp: Date.now(),
165
+ // The error's OWN stack — the crash site, not this handler's call site.
166
+ stack: err?.stack,
167
+ fatal: true
168
+ };
169
+ entries = entries.length >= MAX_ENTRIES ? [...entries.slice(entries.length - MAX_ENTRIES + 1), entry] : [...entries, entry];
170
+ emit();
171
+ scheduleSave();
172
+ }
173
+
174
+ /**
175
+ * Hook React Native's global error handler (`ErrorUtils.setGlobalHandler`) so
176
+ * FATAL/uncaught JS errors land in the console store. A fatal render error
177
+ * kills the tree without ever calling `console.error` through our patch —
178
+ * without this hook a crashing app reads as "0 entries captured", the most
179
+ * misleading possible answer to "why is my app broken".
180
+ *
181
+ * - Chains the previous handler (LogBox/redbox still fire; nothing swallowed).
182
+ * - Idempotent, and a silent no-op off React Native (no `ErrorUtils` global) —
183
+ * which also keeps it inert on the desktop dashboard / web mirrors.
184
+ * - Recording respects an explicit `uninstallConsoleCapture()` (user OFF), but
185
+ * the hook itself stays chained — it can't be safely removed.
186
+ */
187
+ function installFatalErrorCapture() {
188
+ if (fatalInstalled) return;
189
+ const errorUtils = globalThis.ErrorUtils;
190
+ if (typeof errorUtils?.setGlobalHandler !== "function") return;
191
+ fatalInstalled = true;
192
+ const previous = typeof errorUtils.getGlobalHandler === "function" ? errorUtils.getGlobalHandler() : undefined;
193
+ errorUtils.setGlobalHandler((error, isFatal) => {
194
+ try {
195
+ if (!captureDisabledByUser) recordFatalError(error, isFatal);
196
+ } catch {
197
+ // Capture must never interfere with error reporting.
198
+ }
199
+ if (typeof previous === "function") previous(error, isFatal);
200
+ });
201
+ }
202
+
138
203
  /**
139
204
  * Patch the global console methods. Idempotent — safe to call more than once.
140
205
  * Each patched method still forwards to the original so normal logging keeps
141
206
  * working (Metro terminal, Chrome, native logcat/Xcode).
207
+ *
208
+ * Also installs the fatal-error hook (see `installFatalErrorCapture`) so every
209
+ * install path captures crashes, not just `console.*` calls.
142
210
  */
143
211
  function installConsoleCapture() {
212
+ captureDisabledByUser = false;
213
+ installFatalErrorCapture();
144
214
  if (installed) return;
145
215
  installed = true;
146
216
  for (const method of METHODS) {
@@ -157,8 +227,10 @@ function installConsoleCapture() {
157
227
  }
158
228
  }
159
229
 
160
- /** Restore the original console methods. */
230
+ /** Restore the original console methods. Also mutes fatal-error recording
231
+ * (the hook itself stays chained — see `installFatalErrorCapture`). */
161
232
  function uninstallConsoleCapture() {
233
+ captureDisabledByUser = true;
162
234
  if (!installed) return;
163
235
  installed = false;
164
236
  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":";;;;;;;;;;;;;;;;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;;AAsBA;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;AAErB,MAAMC,SAAS,GAAG,IAAIlB,GAAG,CAAW,CAAC;AACrC,MAAMmB,cAAc,GAAG,IAAInB,GAAG,CAAW,CAAC;;AAE1C;AACA,MAAMoB,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,GAAIvE,KAAK,CACdsE,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,SAASc,MAAMA,CAACC,MAAqB,EAAEV,IAAe,EAAQ;EAC5D;EACA,MAAMW,QAAQ,GAAG,IAAIpB,KAAK,CAAC,CAAC,CAACC,KAAK;EAClC,MAAMoB,MAAM,GAAG,IAAAC,mBAAW,EAACF,QAAQ,EAAEJ,iBAAiB,CAAC,CAAC,CAAC;EACzD,MAAMO,KAAsB,GAAG;IAC7BC,EAAE,EAAEnC,MAAM,EAAE;IACZ8B,MAAM;IACNM,KAAK,EAAEnD,YAAY,CAAC6C,MAAM,CAAC;IAC3BV,IAAI;IACJN,OAAO,EAAEK,UAAU,CAACC,IAAI,CAAC;IACzBiB,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;IACrB3B,KAAK,EAAE7B,aAAa,CAACT,GAAG,CAACwD,MAAM,CAAC,GAAGP,UAAU,CAACQ,QAAQ,CAAC,GAAGhB,SAAS;IACnEiB;EACF,CAAC;EACDjC,OAAO,GACLA,OAAO,CAACyC,MAAM,IAAI1C,WAAW,GACzB,CAAC,GAAGC,OAAO,CAAC2B,KAAK,CAAC3B,OAAO,CAACyC,MAAM,GAAG1C,WAAW,GAAG,CAAC,CAAC,EAAEoC,KAAK,CAAC,GAC3D,CAAC,GAAGnC,OAAO,EAAEmC,KAAK,CAAC;EACzB5B,IAAI,CAAC,CAAC;EACNmC,YAAY,CAAC,CAAC;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAAA,EAAS;EAC5C,IAAIzC,SAAS,EAAE;EACfA,SAAS,GAAG,IAAI;EAEhB,KAAK,MAAM6B,MAAM,IAAIhD,OAAO,EAAE;IAC5B,MAAM6D,QAAQ,GAAGC,OAAO,CAACd,MAAM,CAA+C;IAC9E,IAAI,OAAOa,QAAQ,KAAK,UAAU,EAAE;IACpCvC,SAAS,CAAC0B,MAAM,CAAC,GAAGa,QAAQ;IAC5B;IACA;IACA;IACAC,OAAO,CAACd,MAAM,CAAC,GAAG,SAASe,gBAAgBA,CAAC,GAAGzB,IAAe,EAAE;MAC9DS,MAAM,CAACC,MAAM,EAAEV,IAAI,CAAC;MACpBuB,QAAQ,CAACG,KAAK,CAACF,OAAO,EAAExB,IAAI,CAAC;IAC/B,CAAC;EACH;AACF;;AAEA;AACO,SAAS2B,uBAAuBA,CAAA,EAAS;EAC9C,IAAI,CAAC9C,SAAS,EAAE;EAChBA,SAAS,GAAG,KAAK;EACjB,KAAK,MAAM6B,MAAM,IAAIhD,OAAO,EAAE;IAC5B,MAAM6D,QAAQ,GAAGvC,SAAS,CAAC0B,MAAM,CAAC;IAClC,IAAIa,QAAQ,EAAEC,OAAO,CAACd,MAAM,CAAC,GAAGa,QAAQ;IACxC,OAAOvC,SAAS,CAAC0B,MAAM,CAAC;EAC1B;AACF;;AAEA;AACO,SAASkB,SAASA,CAACxC,QAAkB,EAAc;EACxDN,SAAS,CAAC+C,GAAG,CAACzC,QAAQ,CAAC;EACvB,OAAO,MAAM;IACXN,SAAS,CAACgD,MAAM,CAAC1C,QAAQ,CAAC;EAC5B,CAAC;AACH;;AAEA;AACO,SAAS2C,UAAUA,CAAA,EAAsB;EAC9C,OAAOpD,OAAO;AAChB;;AAEA;AACA;AACO,SAASqD,YAAYA,CAAA,EAAS;EACnC,KAAK,MAAM5C,QAAQ,IAAIL,cAAc,EAAEK,QAAQ,CAAC,CAAC;EACjD,KAAK6C,gBAAgB,CAAC,CAAC;EACvB,IAAItD,OAAO,CAACyC,MAAM,KAAK,CAAC,EAAE;EAC1BzC,OAAO,GAAG,EAAE;EACZO,IAAI,CAAC,CAAC;AACR;;AAEA;AACA;AACA;AACA;;AAEA;AACO,SAASgD,cAAcA,CAACC,IAAuB,EAAQ;EAC5DxD,OAAO,GAAGwD,IAAI,CAACf,MAAM,GAAG1C,WAAW,GAAGyD,IAAI,CAAC7B,KAAK,CAAC6B,IAAI,CAACf,MAAM,GAAG1C,WAAW,CAAC,GAAGyD,IAAI;EAClFjD,IAAI,CAAC,CAAC;AACR;;AAEA;AACA;AACO,SAASkD,OAAOA,CAAChD,QAAkB,EAAc;EACtDL,cAAc,CAAC8C,GAAG,CAACzC,QAAQ,CAAC;EAC5B,OAAO,MAAM;IACXL,cAAc,CAAC+C,MAAM,CAAC1C,QAAQ,CAAC;EACjC,CAAC;AACH;;AAEA;AACA;AACA;;AAEA,MAAMiD,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,IAAI9E,GAAG,CAAW,CAAC;AAC7C,IAAI+E,SAA+C,GAAG,IAAI;AAE1D,SAASC,YAAYA,CAAA,EAAS;EAC5B,KAAK,MAAMxD,QAAQ,IAAIsD,iBAAiB,EAAEtD,QAAQ,CAAC,CAAC;AACtD;AAEA,SAASiC,YAAYA,CAAA,EAAS;EAC5B,IAAI,CAACmB,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,GAAGrE,OAAO,CAACsB,GAAG,CAAEa,KAAK,KAAM;MAC3C,GAAGA,KAAK;MACRd,IAAI,EAAE,IAAAiD,sBAAY,EAACnC,KAAK,CAACd,IAAI;IAC/B,CAAC,CAAC,CAAC;IACH,MAAMkD,2BAAiB,CAACC,OAAO,CAACb,UAAU,EAAE1C,IAAI,CAACC,SAAS,CAACmD,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,MAAM7B,GAAG,GAAG,MAAM8C,2BAAiB,CAACI,OAAO,CAAChB,UAAU,CAAC;IACvD,IAAIlC,GAAG,EAAE;MACP,MAAMmD,KAAK,GAAG3D,IAAI,CAAC4D,KAAK,CAACpD,GAAG,CAAsB;MAClD,IAAIqD,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC,IAAIA,KAAK,CAACnC,MAAM,EAAE;QACxC;QACAzC,OAAO,GAAG,CAAC,GAAG4E,KAAK,EAAE,GAAG5E,OAAO,CAAC,CAAC2B,KAAK,CAAC,CAAC5B,WAAW,CAAC;QACpDE,MAAM,GAAG+E,IAAI,CAACC,GAAG,CAAChF,MAAM,EAAE,GAAG2E,KAAK,CAACtD,GAAG,CAAE1D,CAAC,IAAKA,CAAC,CAACwE,EAAE,GAAG,CAAC,CAAC,CAAC;QACxD7B,IAAI,CAAC,CAAC;MACR;IACF;EACF,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ;;AAEA;AACO,SAAS2E,cAAcA,CAAA,EAAY;EACxC,OAAOrB,WAAW;AACpB;;AAEA;AACO,SAASsB,cAAcA,CAAC3B,IAAa,EAAQ;EAClD,IAAIK,WAAW,KAAKL,IAAI,EAAE;EAC1BK,WAAW,GAAGL,IAAI;EAClBS,YAAY,CAAC,CAAC;EACdM,2BAAiB,CAACC,OAAO,CAACd,YAAY,EAAEvC,MAAM,CAACqC,IAAI,CAAC,CAAC,CAAC4B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACrE,IAAI5B,IAAI,EAAEY,UAAU,CAAC,CAAC,CAAC,KAClBd,gBAAgB,CAAC,CAAC;AACzB;;AAEA;AACO,SAAS+B,oBAAoBA,CAAC5E,QAAkB,EAAc;EACnEsD,iBAAiB,CAACb,GAAG,CAACzC,QAAQ,CAAC;EAC/B,OAAO,MAAM;IACXsD,iBAAiB,CAACZ,MAAM,CAAC1C,QAAQ,CAAC;EACpC,CAAC;AACH","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","record","method","rawStack","origin","parseOrigin","entry","id","level","timestamp","Date","now","length","scheduleSave","recordFatalError","isFatal","err","label","headline","fatal","installFatalErrorCapture","errorUtils","globalThis","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","Array","isArray","Math","max","getPreserveLog","setPreserveLog","catch","subscribePreserveLog"],"sourceRoot":"../../../src","sources":["store/consoleLogStore.ts"],"mappings":"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","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,32 @@
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 both the `console.*` patch and the `ErrorUtils` fatal hook are
27
+ * live from the first line of app code.
28
+ *
29
+ * Guards:
30
+ * - `ErrorUtils` present = a real React Native runtime. The desktop dashboard
31
+ * and web mirrors import this package too, and must never patch their OWN
32
+ * console (they mirror device entries via `replaceEntries`).
33
+ * - Dev-only. In production the existing mount-time path still applies (the
34
+ * tools only mount there for licensed users), so end-user builds are never
35
+ * patched at import.
36
+ */
16
37
  import { jsx as _jsx } from "react/jsx-runtime";
38
+ const isReactNativeRuntime = typeof globalThis.ErrorUtils?.setGlobalHandler === "function";
39
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
40
+ installConsoleCapture();
41
+ }
17
42
  export const consoleToolPreset = {
18
43
  id: "console",
19
44
  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","isReactNativeRuntime","globalThis","ErrorUtils","setGlobalHandler","__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;AAlBA,SAAAC,GAAA,IAAAC,IAAA;AAmBA,MAAMC,oBAAoB,GACxB,OAAQC,UAAU,CACfC,UAAU,EAAEC,gBAAgB,KAAK,UAAU;AAChD,IAAIH,oBAAoB,IAAI,OAAOI,OAAO,KAAK,WAAW,IAAIA,OAAO,EAAE;EACrEP,qBAAqB,CAAC,CAAC;AACzB;AAEA,OAAO,MAAMQ,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,kBACtDb,IAAA,CAACL,WAAW;IAACiB,IAAI,EAAEA,IAAK;IAACC,KAAK,EAAEA,KAAK,IAAIjB;EAAmB,CAAE,CAC/D;EACDkB,SAAS,EAAEjB;AACb,CAAC;;AAED;AACA,OAAO,SAASkB,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":[]}
@@ -50,6 +50,13 @@ const MAX_ENTRIES = 1000;
50
50
  let entries = [];
51
51
  let nextId = 1;
52
52
  let installed = false;
53
+ let fatalInstalled = false;
54
+ /**
55
+ * Raised by an explicit `uninstallConsoleCapture()`. The fatal-error hook can't
56
+ * be safely unwound once chained (another library may have chained on top of
57
+ * ours since), so an explicit user OFF mutes fatal recording instead.
58
+ */
59
+ let captureDisabledByUser = false;
53
60
  const listeners = new Set();
54
61
  const clearListeners = new Set();
55
62
 
@@ -121,12 +128,74 @@ function record(method, args) {
121
128
  scheduleSave();
122
129
  }
123
130
 
131
+ /** Minimal shape of React Native's global `ErrorUtils`. */
132
+
133
+ /** Record an uncaught JS error from the global handler as an error entry. */
134
+ function recordFatalError(error, isFatal) {
135
+ const err = error instanceof Error ? error : undefined;
136
+ // RN passes isFatal:false for non-fatal uncaught errors (e.g. errors thrown
137
+ // in event handlers on some setups); anything else is treated as fatal.
138
+ const label = isFatal === false ? "[UNCAUGHT]" : "[FATAL]";
139
+ const headline = err ? `${err.name}: ${err.message}` : formatArg(error);
140
+ // The label leads the args (not just the pre-rendered message): the
141
+ // DevTools-style row renders from args, so this is what makes the tag
142
+ // visible in the UI — exactly like `console.error("[FATAL]", err)`.
143
+ const entry = {
144
+ id: nextId++,
145
+ method: "error",
146
+ level: "error",
147
+ args: [label, error],
148
+ message: `${label} ${headline}`,
149
+ timestamp: Date.now(),
150
+ // The error's OWN stack — the crash site, not this handler's call site.
151
+ stack: err?.stack,
152
+ fatal: true
153
+ };
154
+ entries = entries.length >= MAX_ENTRIES ? [...entries.slice(entries.length - MAX_ENTRIES + 1), entry] : [...entries, entry];
155
+ emit();
156
+ scheduleSave();
157
+ }
158
+
159
+ /**
160
+ * Hook React Native's global error handler (`ErrorUtils.setGlobalHandler`) so
161
+ * FATAL/uncaught JS errors land in the console store. A fatal render error
162
+ * kills the tree without ever calling `console.error` through our patch —
163
+ * without this hook a crashing app reads as "0 entries captured", the most
164
+ * misleading possible answer to "why is my app broken".
165
+ *
166
+ * - Chains the previous handler (LogBox/redbox still fire; nothing swallowed).
167
+ * - Idempotent, and a silent no-op off React Native (no `ErrorUtils` global) —
168
+ * which also keeps it inert on the desktop dashboard / web mirrors.
169
+ * - Recording respects an explicit `uninstallConsoleCapture()` (user OFF), but
170
+ * the hook itself stays chained — it can't be safely removed.
171
+ */
172
+ export function installFatalErrorCapture() {
173
+ if (fatalInstalled) return;
174
+ const errorUtils = globalThis.ErrorUtils;
175
+ if (typeof errorUtils?.setGlobalHandler !== "function") return;
176
+ fatalInstalled = true;
177
+ const previous = typeof errorUtils.getGlobalHandler === "function" ? errorUtils.getGlobalHandler() : undefined;
178
+ errorUtils.setGlobalHandler((error, isFatal) => {
179
+ try {
180
+ if (!captureDisabledByUser) recordFatalError(error, isFatal);
181
+ } catch {
182
+ // Capture must never interfere with error reporting.
183
+ }
184
+ if (typeof previous === "function") previous(error, isFatal);
185
+ });
186
+ }
187
+
124
188
  /**
125
189
  * Patch the global console methods. Idempotent — safe to call more than once.
126
190
  * Each patched method still forwards to the original so normal logging keeps
127
191
  * working (Metro terminal, Chrome, native logcat/Xcode).
192
+ *
193
+ * Also installs the fatal-error hook (see `installFatalErrorCapture`) so every
194
+ * install path captures crashes, not just `console.*` calls.
128
195
  */
129
196
  export function installConsoleCapture() {
197
+ captureDisabledByUser = false;
198
+ installFatalErrorCapture();
130
199
  if (installed) return;
131
200
  installed = true;
132
201
  for (const method of METHODS) {
@@ -143,8 +212,10 @@ export function installConsoleCapture() {
143
212
  }
144
213
  }
145
214
 
146
- /** Restore the original console methods. */
215
+ /** Restore the original console methods. Also mutes fatal-error recording
216
+ * (the hook itself stays chained — see `installFatalErrorCapture`). */
147
217
  export function uninstallConsoleCapture() {
218
+ captureDisabledByUser = true;
148
219
  if (!installed) return;
149
220
  installed = false;
150
221
  for (const method of METHODS) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","persistentStorage","sanitizeArgs","parseOrigin","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","entry","id","level","timestamp","Date","now","has","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","setItem","removeItem","initConsolePersistence","getItem","saved","parse","Array","isArray","Math","max","e","getPreserveLog","setPreserveLog","catch","subscribePreserveLog"],"sourceRoot":"../../../src","sources":["store/consoleLogStore.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","persistentStorage","sanitizeArgs","parseOrigin","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","record","method","rawStack","origin","entry","id","level","timestamp","Date","now","has","length","scheduleSave","recordFatalError","isFatal","err","label","headline","fatal","installFatalErrorCapture","errorUtils","globalThis","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","setItem","removeItem","initConsolePersistence","getItem","saved","parse","Array","isArray","Math","max","e","getPreserveLog","setPreserveLog","catch","subscribePreserveLog"],"sourceRoot":"../../../src","sources":["store/consoleLogStore.ts"],"mappings":"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","ignoreList":[]}
@@ -21,6 +21,6 @@ export { ConsoleLogList } from "./components/ConsoleLogList";
21
21
  export { useConsoleLogs } from "./hooks/useConsoleLogs";
22
22
  export type { UseConsoleLogsResult } from "./hooks/useConsoleLogs";
23
23
  export { consoleSyncAdapter } from "./sync/consoleSyncAdapter";
24
- export { installConsoleCapture, uninstallConsoleCapture, clearEntries, getEntries, subscribe, replaceEntries, onClear, initConsolePersistence, getPreserveLog, setPreserveLog, subscribePreserveLog, } from "./store/consoleLogStore";
24
+ export { installConsoleCapture, installFatalErrorCapture, uninstallConsoleCapture, clearEntries, getEntries, subscribe, replaceEntries, onClear, initConsolePersistence, getPreserveLog, setPreserveLog, subscribePreserveLog, } from "./store/consoleLogStore";
25
25
  export type { ConsoleLogEntry, ConsoleLevel, ConsoleMethod, } from "./store/consoleLogStore";
26
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAKhE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAKnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,OAAO,EACP,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAKhE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAKnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,OAAO,EACP,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,eAAO,MAAM,iBAAiB;;;;;4BAKJ;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;CAIzD,CAAC;AAEF,kDAAkD;AAClD,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;4BAR7B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;EAezD"}
1
+ {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AA6BzD,eAAO,MAAM,iBAAiB;;;;;4BAKJ;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;CAIzD,CAAC;AAEF,kDAAkD;AAClD,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;4BAR7B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;EAezD"}
@@ -33,15 +33,39 @@ export interface ConsoleLogEntry {
33
33
  stack?: string;
34
34
  /** Where the log came from (component / function / call site). */
35
35
  origin?: LogOrigin;
36
+ /**
37
+ * True when this entry came from React Native's global error handler (an
38
+ * uncaught — usually fatal — JS error), not from a `console.*` call. The
39
+ * message carries a matching `[FATAL]` / `[UNCAUGHT]` prefix.
40
+ */
41
+ fatal?: boolean;
36
42
  }
37
43
  type Listener = () => void;
44
+ /**
45
+ * Hook React Native's global error handler (`ErrorUtils.setGlobalHandler`) so
46
+ * FATAL/uncaught JS errors land in the console store. A fatal render error
47
+ * kills the tree without ever calling `console.error` through our patch —
48
+ * without this hook a crashing app reads as "0 entries captured", the most
49
+ * misleading possible answer to "why is my app broken".
50
+ *
51
+ * - Chains the previous handler (LogBox/redbox still fire; nothing swallowed).
52
+ * - Idempotent, and a silent no-op off React Native (no `ErrorUtils` global) —
53
+ * which also keeps it inert on the desktop dashboard / web mirrors.
54
+ * - Recording respects an explicit `uninstallConsoleCapture()` (user OFF), but
55
+ * the hook itself stays chained — it can't be safely removed.
56
+ */
57
+ export declare function installFatalErrorCapture(): void;
38
58
  /**
39
59
  * Patch the global console methods. Idempotent — safe to call more than once.
40
60
  * Each patched method still forwards to the original so normal logging keeps
41
61
  * working (Metro terminal, Chrome, native logcat/Xcode).
62
+ *
63
+ * Also installs the fatal-error hook (see `installFatalErrorCapture`) so every
64
+ * install path captures crashes, not just `console.*` calls.
42
65
  */
43
66
  export declare function installConsoleCapture(): void;
44
- /** Restore the original console methods. */
67
+ /** Restore the original console methods. Also mutes fatal-error recording
68
+ * (the hook itself stays chained — see `installFatalErrorCapture`). */
45
69
  export declare function uninstallConsoleCapture(): void;
46
70
  /** Subscribe to changes. Returns an unsubscribe function. */
47
71
  export declare function subscribe(listener: Listener): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"consoleLogStore.d.ts","sourceRoot":"","sources":["../../../src/store/consoleLogStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,iDAAiD;AACjD,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,KAAK,GACL,OAAO,GACP,QAAQ,GACR,OAAO,GACP,gBAAgB,GAChB,UAAU,CAAC;AAEf,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,MAAM,EAAE,aAAa,CAAC;IACtB,+CAA+C;IAC/C,KAAK,EAAE,YAAY,CAAC;IACpB,sDAAsD;IACtD,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAwCD,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAmF3B;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAgB5C;AAED,4CAA4C;AAC5C,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAKxD;AAED,sFAAsF;AACtF,wBAAgB,UAAU,IAAI,eAAe,EAAE,CAE9C;AAED;4DAC4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,CAMnC;AAOD,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAG5D;AAED;kFACkF;AAClF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAKtD;AA+CD;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B5D;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAOlD;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAKnE"}
1
+ {"version":3,"file":"consoleLogStore.d.ts","sourceRoot":"","sources":["../../../src/store/consoleLogStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,iDAAiD;AACjD,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,KAAK,GACL,OAAO,GACP,QAAQ,GACR,OAAO,GACP,gBAAgB,GAChB,UAAU,CAAC;AAEf,wDAAwD;AACxD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,MAAM,EAAE,aAAa,CAAC;IACtB,+CAA+C;IAC/C,KAAK,EAAE,YAAY,CAAC;IACpB,sDAAsD;IACtD,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAwCD,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAiI3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAiB/C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAkB5C;AAED;uEACuE;AACvE,wBAAgB,uBAAuB,IAAI,IAAI,CAS9C;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAKxD;AAED,sFAAsF;AACtF,wBAAgB,UAAU,IAAI,eAAe,EAAE,CAE9C;AAED;4DAC4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,CAMnC;AAOD,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAG5D;AAED;kFACkF;AAClF,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAKtD;AA+CD;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B5D;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAOlD;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAKnE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/console",
3
- "version": "7.0.20",
3
+ "version": "7.0.21",
4
4
  "description": "Chrome DevTools-style console for React Native — captures every console.* on device, even in release builds. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "sideEffects": false,
15
15
  "dependencies": {
16
- "@buoy-gg/shared-ui": "^7.0.20"
16
+ "@buoy-gg/shared-ui": "^7.0.21"
17
17
  },
18
18
  "peerDependencies": {
19
19
  "react": "*",
package/src/index.tsx CHANGED
@@ -51,6 +51,7 @@ export { consoleSyncAdapter } from "./sync/consoleSyncAdapter";
51
51
  // =============================================================================
52
52
  export {
53
53
  installConsoleCapture,
54
+ installFatalErrorCapture,
54
55
  uninstallConsoleCapture,
55
56
  clearEntries,
56
57
  getEntries,
package/src/preset.tsx CHANGED
@@ -11,6 +11,33 @@
11
11
 
12
12
  import { ConsoleIcon, CONSOLE_ICON_COLOR } from "./components/ConsoleIcon";
13
13
  import { ConsoleModal } from "./components/ConsoleModal";
14
+ import { installConsoleCapture } from "./store/consoleLogStore";
15
+
16
+ /**
17
+ * Install console + fatal-error capture at IMPORT time, not first UI mount.
18
+ *
19
+ * Deliberately a module side effect (same pattern as @buoy-gg/network's
20
+ * override hydration): a fatal error thrown during the app's FIRST render
21
+ * kills the tree before FloatingDevTools' effects ever run, so mount-time
22
+ * install (`ConsoleRoot`) captured nothing for exactly the crashes that most
23
+ * need capturing. Importing the preset happens at bundle-eval, before any
24
+ * rendering, so both the `console.*` patch and the `ErrorUtils` fatal hook are
25
+ * live from the first line of app code.
26
+ *
27
+ * Guards:
28
+ * - `ErrorUtils` present = a real React Native runtime. The desktop dashboard
29
+ * and web mirrors import this package too, and must never patch their OWN
30
+ * console (they mirror device entries via `replaceEntries`).
31
+ * - Dev-only. In production the existing mount-time path still applies (the
32
+ * tools only mount there for licensed users), so end-user builds are never
33
+ * patched at import.
34
+ */
35
+ const isReactNativeRuntime =
36
+ typeof (globalThis as { ErrorUtils?: { setGlobalHandler?: unknown } })
37
+ .ErrorUtils?.setGlobalHandler === "function";
38
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
39
+ installConsoleCapture();
40
+ }
14
41
 
15
42
  export const consoleToolPreset = {
16
43
  id: "console",
@@ -52,6 +52,12 @@ export interface ConsoleLogEntry {
52
52
  stack?: string;
53
53
  /** Where the log came from (component / function / call site). */
54
54
  origin?: LogOrigin;
55
+ /**
56
+ * True when this entry came from React Native's global error handler (an
57
+ * uncaught — usually fatal — JS error), not from a `console.*` call. The
58
+ * message carries a matching `[FATAL]` / `[UNCAUGHT]` prefix.
59
+ */
60
+ fatal?: boolean;
55
61
  }
56
62
 
57
63
  /** Methods we intercept, in the order we install them. */
@@ -97,6 +103,13 @@ type Listener = () => void;
97
103
  let entries: ConsoleLogEntry[] = [];
98
104
  let nextId = 1;
99
105
  let installed = false;
106
+ let fatalInstalled = false;
107
+ /**
108
+ * Raised by an explicit `uninstallConsoleCapture()`. The fatal-error hook can't
109
+ * be safely unwound once chained (another library may have chained on top of
110
+ * ours since), so an explicit user OFF mutes fatal recording instead.
111
+ */
112
+ let captureDisabledByUser = false;
100
113
 
101
114
  const listeners = new Set<Listener>();
102
115
  const clearListeners = new Set<Listener>();
@@ -175,12 +188,88 @@ function record(method: ConsoleMethod, args: unknown[]): void {
175
188
  scheduleSave();
176
189
  }
177
190
 
191
+ /** Minimal shape of React Native's global `ErrorUtils`. */
192
+ interface RNErrorUtils {
193
+ getGlobalHandler?: () =>
194
+ | ((error: unknown, isFatal?: boolean) => void)
195
+ | undefined;
196
+ setGlobalHandler?: (
197
+ handler: (error: unknown, isFatal?: boolean) => void
198
+ ) => void;
199
+ }
200
+
201
+ /** Record an uncaught JS error from the global handler as an error entry. */
202
+ function recordFatalError(error: unknown, isFatal?: boolean): void {
203
+ const err = error instanceof Error ? error : undefined;
204
+ // RN passes isFatal:false for non-fatal uncaught errors (e.g. errors thrown
205
+ // in event handlers on some setups); anything else is treated as fatal.
206
+ const label = isFatal === false ? "[UNCAUGHT]" : "[FATAL]";
207
+ const headline = err ? `${err.name}: ${err.message}` : formatArg(error);
208
+ // The label leads the args (not just the pre-rendered message): the
209
+ // DevTools-style row renders from args, so this is what makes the tag
210
+ // visible in the UI — exactly like `console.error("[FATAL]", err)`.
211
+ const entry: ConsoleLogEntry = {
212
+ id: nextId++,
213
+ method: "error",
214
+ level: "error",
215
+ args: [label, error],
216
+ message: `${label} ${headline}`,
217
+ timestamp: Date.now(),
218
+ // The error's OWN stack — the crash site, not this handler's call site.
219
+ stack: err?.stack,
220
+ fatal: true,
221
+ };
222
+ entries =
223
+ entries.length >= MAX_ENTRIES
224
+ ? [...entries.slice(entries.length - MAX_ENTRIES + 1), entry]
225
+ : [...entries, entry];
226
+ emit();
227
+ scheduleSave();
228
+ }
229
+
230
+ /**
231
+ * Hook React Native's global error handler (`ErrorUtils.setGlobalHandler`) so
232
+ * FATAL/uncaught JS errors land in the console store. A fatal render error
233
+ * kills the tree without ever calling `console.error` through our patch —
234
+ * without this hook a crashing app reads as "0 entries captured", the most
235
+ * misleading possible answer to "why is my app broken".
236
+ *
237
+ * - Chains the previous handler (LogBox/redbox still fire; nothing swallowed).
238
+ * - Idempotent, and a silent no-op off React Native (no `ErrorUtils` global) —
239
+ * which also keeps it inert on the desktop dashboard / web mirrors.
240
+ * - Recording respects an explicit `uninstallConsoleCapture()` (user OFF), but
241
+ * the hook itself stays chained — it can't be safely removed.
242
+ */
243
+ export function installFatalErrorCapture(): void {
244
+ if (fatalInstalled) return;
245
+ const errorUtils = (globalThis as { ErrorUtils?: RNErrorUtils }).ErrorUtils;
246
+ if (typeof errorUtils?.setGlobalHandler !== "function") return;
247
+ fatalInstalled = true;
248
+ const previous =
249
+ typeof errorUtils.getGlobalHandler === "function"
250
+ ? errorUtils.getGlobalHandler()
251
+ : undefined;
252
+ errorUtils.setGlobalHandler((error: unknown, isFatal?: boolean) => {
253
+ try {
254
+ if (!captureDisabledByUser) recordFatalError(error, isFatal);
255
+ } catch {
256
+ // Capture must never interfere with error reporting.
257
+ }
258
+ if (typeof previous === "function") previous(error, isFatal);
259
+ });
260
+ }
261
+
178
262
  /**
179
263
  * Patch the global console methods. Idempotent — safe to call more than once.
180
264
  * Each patched method still forwards to the original so normal logging keeps
181
265
  * working (Metro terminal, Chrome, native logcat/Xcode).
266
+ *
267
+ * Also installs the fatal-error hook (see `installFatalErrorCapture`) so every
268
+ * install path captures crashes, not just `console.*` calls.
182
269
  */
183
270
  export function installConsoleCapture(): void {
271
+ captureDisabledByUser = false;
272
+ installFatalErrorCapture();
184
273
  if (installed) return;
185
274
  installed = true;
186
275
 
@@ -198,8 +287,10 @@ export function installConsoleCapture(): void {
198
287
  }
199
288
  }
200
289
 
201
- /** Restore the original console methods. */
290
+ /** Restore the original console methods. Also mutes fatal-error recording
291
+ * (the hook itself stays chained — see `installFatalErrorCapture`). */
202
292
  export function uninstallConsoleCapture(): void {
293
+ captureDisabledByUser = true;
203
294
  if (!installed) return;
204
295
  installed = false;
205
296
  for (const method of METHODS) {