@buoy-gg/console 4.0.2
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/LICENSE +58 -0
- package/README.md +55 -0
- package/lib/commonjs/components/ConsoleIcon.js +47 -0
- package/lib/commonjs/components/ConsoleIcon.js.map +1 -0
- package/lib/commonjs/components/ConsoleLogList.js +145 -0
- package/lib/commonjs/components/ConsoleLogList.js.map +1 -0
- package/lib/commonjs/components/ConsoleModal.js +48 -0
- package/lib/commonjs/components/ConsoleModal.js.map +1 -0
- package/lib/commonjs/components/ConsoleRoot.js +28 -0
- package/lib/commonjs/components/ConsoleRoot.js.map +1 -0
- package/lib/commonjs/devtools/ConsoleBody.js +235 -0
- package/lib/commonjs/devtools/ConsoleBody.js.map +1 -0
- package/lib/commonjs/devtools/ConsoleHeader.js +146 -0
- package/lib/commonjs/devtools/ConsoleHeader.js.map +1 -0
- package/lib/commonjs/devtools/ConsoleMessageRow.js +338 -0
- package/lib/commonjs/devtools/ConsoleMessageRow.js.map +1 -0
- package/lib/commonjs/devtools/ConsoleValue.js +254 -0
- package/lib/commonjs/devtools/ConsoleValue.js.map +1 -0
- package/lib/commonjs/devtools/ConsoleView.js +51 -0
- package/lib/commonjs/devtools/ConsoleView.js.map +1 -0
- package/lib/commonjs/devtools/consoleFilter.js +125 -0
- package/lib/commonjs/devtools/consoleFilter.js.map +1 -0
- package/lib/commonjs/devtools/consoleFormat.js +313 -0
- package/lib/commonjs/devtools/consoleFormat.js.map +1 -0
- package/lib/commonjs/devtools/origin.js +191 -0
- package/lib/commonjs/devtools/origin.js.map +1 -0
- package/lib/commonjs/devtools/theme.js +143 -0
- package/lib/commonjs/devtools/theme.js.map +1 -0
- package/lib/commonjs/devtools/useConsoleController.js +82 -0
- package/lib/commonjs/devtools/useConsoleController.js.map +1 -0
- package/lib/commonjs/devtools/useConsoleMessages.js +241 -0
- package/lib/commonjs/devtools/useConsoleMessages.js.map +1 -0
- package/lib/commonjs/hooks/useConsoleLogs.js +23 -0
- package/lib/commonjs/hooks/useConsoleLogs.js.map +1 -0
- package/lib/commonjs/index.js +175 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/preset.js +45 -0
- package/lib/commonjs/preset.js.map +1 -0
- package/lib/commonjs/store/consoleLogStore.js +298 -0
- package/lib/commonjs/store/consoleLogStore.js.map +1 -0
- package/lib/commonjs/store/sanitize.js +64 -0
- package/lib/commonjs/store/sanitize.js.map +1 -0
- package/lib/commonjs/sync/consoleSyncAdapter.js +47 -0
- package/lib/commonjs/sync/consoleSyncAdapter.js.map +1 -0
- package/lib/module/components/ConsoleIcon.js +42 -0
- package/lib/module/components/ConsoleIcon.js.map +1 -0
- package/lib/module/components/ConsoleLogList.js +140 -0
- package/lib/module/components/ConsoleLogList.js.map +1 -0
- package/lib/module/components/ConsoleModal.js +44 -0
- package/lib/module/components/ConsoleModal.js.map +1 -0
- package/lib/module/components/ConsoleRoot.js +25 -0
- package/lib/module/components/ConsoleRoot.js.map +1 -0
- package/lib/module/devtools/ConsoleBody.js +230 -0
- package/lib/module/devtools/ConsoleBody.js.map +1 -0
- package/lib/module/devtools/ConsoleHeader.js +141 -0
- package/lib/module/devtools/ConsoleHeader.js.map +1 -0
- package/lib/module/devtools/ConsoleMessageRow.js +333 -0
- package/lib/module/devtools/ConsoleMessageRow.js.map +1 -0
- package/lib/module/devtools/ConsoleValue.js +249 -0
- package/lib/module/devtools/ConsoleValue.js.map +1 -0
- package/lib/module/devtools/ConsoleView.js +46 -0
- package/lib/module/devtools/ConsoleView.js.map +1 -0
- package/lib/module/devtools/consoleFilter.js +119 -0
- package/lib/module/devtools/consoleFilter.js.map +1 -0
- package/lib/module/devtools/consoleFormat.js +309 -0
- package/lib/module/devtools/consoleFormat.js.map +1 -0
- package/lib/module/devtools/origin.js +183 -0
- package/lib/module/devtools/origin.js.map +1 -0
- package/lib/module/devtools/theme.js +140 -0
- package/lib/module/devtools/theme.js.map +1 -0
- package/lib/module/devtools/useConsoleController.js +79 -0
- package/lib/module/devtools/useConsoleController.js.map +1 -0
- package/lib/module/devtools/useConsoleMessages.js +238 -0
- package/lib/module/devtools/useConsoleMessages.js.map +1 -0
- package/lib/module/hooks/useConsoleLogs.js +19 -0
- package/lib/module/hooks/useConsoleLogs.js.map +1 -0
- package/lib/module/index.js +52 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/preset.js +40 -0
- package/lib/module/preset.js.map +1 -0
- package/lib/module/store/consoleLogStore.js +284 -0
- package/lib/module/store/consoleLogStore.js.map +1 -0
- package/lib/module/store/sanitize.js +60 -0
- package/lib/module/store/sanitize.js.map +1 -0
- package/lib/module/sync/consoleSyncAdapter.js +43 -0
- package/lib/module/sync/consoleSyncAdapter.js.map +1 -0
- package/lib/typescript/components/ConsoleIcon.d.ts +14 -0
- package/lib/typescript/components/ConsoleIcon.d.ts.map +1 -0
- package/lib/typescript/components/ConsoleLogList.d.ts +8 -0
- package/lib/typescript/components/ConsoleLogList.d.ts.map +1 -0
- package/lib/typescript/components/ConsoleModal.d.ts +18 -0
- package/lib/typescript/components/ConsoleModal.d.ts.map +1 -0
- package/lib/typescript/components/ConsoleRoot.d.ts +14 -0
- package/lib/typescript/components/ConsoleRoot.d.ts.map +1 -0
- package/lib/typescript/devtools/ConsoleBody.d.ts +11 -0
- package/lib/typescript/devtools/ConsoleBody.d.ts.map +1 -0
- package/lib/typescript/devtools/ConsoleHeader.d.ts +17 -0
- package/lib/typescript/devtools/ConsoleHeader.d.ts.map +1 -0
- package/lib/typescript/devtools/ConsoleMessageRow.d.ts +20 -0
- package/lib/typescript/devtools/ConsoleMessageRow.d.ts.map +1 -0
- package/lib/typescript/devtools/ConsoleValue.d.ts +21 -0
- package/lib/typescript/devtools/ConsoleValue.d.ts.map +1 -0
- package/lib/typescript/devtools/ConsoleView.d.ts +10 -0
- package/lib/typescript/devtools/ConsoleView.d.ts.map +1 -0
- package/lib/typescript/devtools/consoleFilter.d.ts +31 -0
- package/lib/typescript/devtools/consoleFilter.d.ts.map +1 -0
- package/lib/typescript/devtools/consoleFormat.d.ts +29 -0
- package/lib/typescript/devtools/consoleFormat.d.ts.map +1 -0
- package/lib/typescript/devtools/origin.d.ts +39 -0
- package/lib/typescript/devtools/origin.d.ts.map +1 -0
- package/lib/typescript/devtools/theme.d.ts +57 -0
- package/lib/typescript/devtools/theme.d.ts.map +1 -0
- package/lib/typescript/devtools/useConsoleController.d.ts +35 -0
- package/lib/typescript/devtools/useConsoleController.d.ts.map +1 -0
- package/lib/typescript/devtools/useConsoleMessages.d.ts +74 -0
- package/lib/typescript/devtools/useConsoleMessages.d.ts.map +1 -0
- package/lib/typescript/hooks/useConsoleLogs.d.ts +11 -0
- package/lib/typescript/hooks/useConsoleLogs.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +26 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/preset.d.ts +38 -0
- package/lib/typescript/preset.d.ts.map +1 -0
- package/lib/typescript/store/consoleLogStore.d.ts +71 -0
- package/lib/typescript/store/consoleLogStore.d.ts.map +1 -0
- package/lib/typescript/store/sanitize.d.ts +11 -0
- package/lib/typescript/store/sanitize.d.ts.map +1 -0
- package/lib/typescript/sync/consoleSyncAdapter.d.ts +30 -0
- package/lib/typescript/sync/consoleSyncAdapter.d.ts.map +1 -0
- package/package.json +56 -0
- package/src/components/ConsoleIcon.tsx +49 -0
- package/src/components/ConsoleLogList.tsx +133 -0
- package/src/components/ConsoleModal.tsx +48 -0
- package/src/components/ConsoleRoot.tsx +25 -0
- package/src/devtools/ConsoleBody.tsx +225 -0
- package/src/devtools/ConsoleHeader.tsx +149 -0
- package/src/devtools/ConsoleMessageRow.tsx +345 -0
- package/src/devtools/ConsoleValue.tsx +265 -0
- package/src/devtools/ConsoleView.tsx +41 -0
- package/src/devtools/consoleFilter.ts +123 -0
- package/src/devtools/consoleFormat.ts +314 -0
- package/src/devtools/origin.ts +190 -0
- package/src/devtools/theme.ts +137 -0
- package/src/devtools/useConsoleController.ts +104 -0
- package/src/devtools/useConsoleMessages.ts +337 -0
- package/src/hooks/useConsoleLogs.ts +26 -0
- package/src/index.tsx +69 -0
- package/src/preset.tsx +35 -0
- package/src/store/consoleLogStore.ts +346 -0
- package/src/store/sanitize.ts +58 -0
- package/src/sync/consoleSyncAdapter.ts +49 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.clearEntries = clearEntries;
|
|
7
|
+
exports.getEntries = getEntries;
|
|
8
|
+
exports.getPreserveLog = getPreserveLog;
|
|
9
|
+
exports.initConsolePersistence = initConsolePersistence;
|
|
10
|
+
exports.installConsoleCapture = installConsoleCapture;
|
|
11
|
+
exports.onClear = onClear;
|
|
12
|
+
exports.replaceEntries = replaceEntries;
|
|
13
|
+
exports.setPreserveLog = setPreserveLog;
|
|
14
|
+
exports.subscribe = subscribe;
|
|
15
|
+
exports.subscribePreserveLog = subscribePreserveLog;
|
|
16
|
+
exports.uninstallConsoleCapture = uninstallConsoleCapture;
|
|
17
|
+
var React = _interopRequireWildcard(require("react"));
|
|
18
|
+
var _sharedUi = require("@buoy-gg/shared-ui");
|
|
19
|
+
var _sanitize = require("./sanitize");
|
|
20
|
+
var _origin = require("../devtools/origin");
|
|
21
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
22
|
+
/**
|
|
23
|
+
* consoleLogStore
|
|
24
|
+
*
|
|
25
|
+
* Intercepts the global `console` methods and keeps a bounded ring buffer of
|
|
26
|
+
* captured entries, modeled after Chrome DevTools' ConsoleMessage. Direct
|
|
27
|
+
* console patching is the capture path (works identically on Expo, RN CLI, and
|
|
28
|
+
* web). The DevTools-style view layer (filtering, formatting, grouping) is built
|
|
29
|
+
* on top of these raw entries.
|
|
30
|
+
*
|
|
31
|
+
* By default the buffer is in-memory only, so a JS reload starts fresh — just
|
|
32
|
+
* like the Metro/Chrome console. A "Preserve log" toggle persists the buffer to
|
|
33
|
+
* storage and restores it on the next launch (Chrome's "Preserve log").
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/** The console method that produced an entry. */
|
|
37
|
+
|
|
38
|
+
/** DevTools log levels (Protocol.Log.LogEntryLevel). */
|
|
39
|
+
|
|
40
|
+
/** Methods we intercept, in the order we install them. */
|
|
41
|
+
const METHODS = ["log", "info", "warn", "error", "debug", "trace", "dir", "table", "assert", "group", "groupCollapsed", "groupEnd"];
|
|
42
|
+
|
|
43
|
+
/** Methods whose call site we capture a stack for. */
|
|
44
|
+
const STACK_METHODS = new Set(["error", "warn", "trace", "assert"]);
|
|
45
|
+
|
|
46
|
+
/** method → DevTools level. */
|
|
47
|
+
const METHOD_LEVEL = {
|
|
48
|
+
error: "error",
|
|
49
|
+
assert: "error",
|
|
50
|
+
warn: "warning",
|
|
51
|
+
debug: "verbose",
|
|
52
|
+
log: "info",
|
|
53
|
+
info: "info",
|
|
54
|
+
trace: "info",
|
|
55
|
+
dir: "info",
|
|
56
|
+
table: "info",
|
|
57
|
+
group: "info",
|
|
58
|
+
groupCollapsed: "info",
|
|
59
|
+
groupEnd: "info"
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/** Max entries retained before the oldest are dropped. */
|
|
63
|
+
const MAX_ENTRIES = 1000;
|
|
64
|
+
let entries = [];
|
|
65
|
+
let nextId = 1;
|
|
66
|
+
let installed = false;
|
|
67
|
+
const listeners = new Set();
|
|
68
|
+
const clearListeners = new Set();
|
|
69
|
+
|
|
70
|
+
/** Saved originals so we can restore on uninstall and still print through. */
|
|
71
|
+
const originals = {};
|
|
72
|
+
function emit() {
|
|
73
|
+
for (const listener of listeners) listener();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Best-effort, single-line serialization of a single console argument. */
|
|
77
|
+
function formatArg(arg) {
|
|
78
|
+
if (typeof arg === "string") return arg;
|
|
79
|
+
if (arg instanceof Error) return arg.stack ?? `${arg.name}: ${arg.message}`;
|
|
80
|
+
if (arg === undefined) return "undefined";
|
|
81
|
+
if (arg === null) return "null";
|
|
82
|
+
if (typeof arg === "function") return `ƒ ${arg.name || "(anonymous)"}`;
|
|
83
|
+
try {
|
|
84
|
+
return JSON.stringify(arg);
|
|
85
|
+
} catch {
|
|
86
|
+
return String(arg);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function formatArgs(args) {
|
|
90
|
+
return args.map(formatArg).join(" ");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Drop the "Error" header + the interceptor's own frames from a raw stack. */
|
|
94
|
+
function cleanStack(raw) {
|
|
95
|
+
if (!raw) return undefined;
|
|
96
|
+
return raw.split("\n").slice(3).join("\n") || undefined;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Nearest owning React component stack (dev only; empty off-render). */
|
|
100
|
+
function captureOwnerStack() {
|
|
101
|
+
try {
|
|
102
|
+
const fn = React.captureOwnerStack;
|
|
103
|
+
return typeof fn === "function" ? fn() ?? undefined : undefined;
|
|
104
|
+
} catch {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function record(method, args) {
|
|
109
|
+
// Capture the call site for every log so we can attribute its origin.
|
|
110
|
+
const rawStack = new Error().stack;
|
|
111
|
+
const origin = (0, _origin.parseOrigin)(rawStack, captureOwnerStack());
|
|
112
|
+
const entry = {
|
|
113
|
+
id: nextId++,
|
|
114
|
+
method,
|
|
115
|
+
level: METHOD_LEVEL[method],
|
|
116
|
+
args,
|
|
117
|
+
message: formatArgs(args),
|
|
118
|
+
timestamp: Date.now(),
|
|
119
|
+
stack: STACK_METHODS.has(method) ? cleanStack(rawStack) : undefined,
|
|
120
|
+
origin
|
|
121
|
+
};
|
|
122
|
+
entries = entries.length >= MAX_ENTRIES ? [...entries.slice(entries.length - MAX_ENTRIES + 1), entry] : [...entries, entry];
|
|
123
|
+
emit();
|
|
124
|
+
scheduleSave();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Patch the global console methods. Idempotent — safe to call more than once.
|
|
129
|
+
* Each patched method still forwards to the original so normal logging keeps
|
|
130
|
+
* working (Metro terminal, Chrome, native logcat/Xcode).
|
|
131
|
+
*/
|
|
132
|
+
function installConsoleCapture() {
|
|
133
|
+
if (installed) return;
|
|
134
|
+
installed = true;
|
|
135
|
+
for (const method of METHODS) {
|
|
136
|
+
const original = console[method];
|
|
137
|
+
if (typeof original !== "function") continue;
|
|
138
|
+
originals[method] = original;
|
|
139
|
+
// Named so origin parsing can identify (and skip) this frame by function
|
|
140
|
+
// name — in a Metro bundle every frame shares one bundle URL, so filename
|
|
141
|
+
// filtering can't distinguish our wrapper from the real caller.
|
|
142
|
+
console[method] = function buoyConsoleProxy(...args) {
|
|
143
|
+
record(method, args);
|
|
144
|
+
original.apply(console, args);
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Restore the original console methods. */
|
|
150
|
+
function uninstallConsoleCapture() {
|
|
151
|
+
if (!installed) return;
|
|
152
|
+
installed = false;
|
|
153
|
+
for (const method of METHODS) {
|
|
154
|
+
const original = originals[method];
|
|
155
|
+
if (original) console[method] = original;
|
|
156
|
+
delete originals[method];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Subscribe to changes. Returns an unsubscribe function. */
|
|
161
|
+
function subscribe(listener) {
|
|
162
|
+
listeners.add(listener);
|
|
163
|
+
return () => {
|
|
164
|
+
listeners.delete(listener);
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Current snapshot (stable reference between mutations for useSyncExternalStore). */
|
|
169
|
+
function getEntries() {
|
|
170
|
+
return entries;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** Clear all captured entries. Fires onClear listeners (e.g. to forward the
|
|
174
|
+
* clear to a remote device when running in mirror mode). */
|
|
175
|
+
function clearEntries() {
|
|
176
|
+
for (const listener of clearListeners) listener();
|
|
177
|
+
void clearSavedBuffer();
|
|
178
|
+
if (entries.length === 0) return;
|
|
179
|
+
entries = [];
|
|
180
|
+
emit();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// ─── Remote-mirror mode (desktop dashboard) ──────────────────────────────────
|
|
184
|
+
// The desktop imports this same store but, instead of patching its own console,
|
|
185
|
+
// drives it from device snapshots via replaceEntries(). Capture is never
|
|
186
|
+
// installed there, so local and remote modes never mix.
|
|
187
|
+
|
|
188
|
+
/** Replace the whole entry list from a remote snapshot. */
|
|
189
|
+
function replaceEntries(next) {
|
|
190
|
+
entries = next.length > MAX_ENTRIES ? next.slice(next.length - MAX_ENTRIES) : next;
|
|
191
|
+
emit();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** Register a listener fired when clearEntries() is called. Returns an
|
|
195
|
+
* unsubscribe function. Used by the dashboard to forward clears to the device. */
|
|
196
|
+
function onClear(listener) {
|
|
197
|
+
clearListeners.add(listener);
|
|
198
|
+
return () => {
|
|
199
|
+
clearListeners.delete(listener);
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// ─── Preserve log (persist across reload) ────────────────────────────────────
|
|
204
|
+
// Default OFF: the buffer is in-memory only, so a reload starts fresh. When ON,
|
|
205
|
+
// the buffer is saved to storage (debounced) and restored on the next launch.
|
|
206
|
+
|
|
207
|
+
const PRESERVE_KEY = "@react_buoy_console_preserve";
|
|
208
|
+
const BUFFER_KEY = "@react_buoy_console_buffer";
|
|
209
|
+
const SAVE_DEBOUNCE_MS = 600;
|
|
210
|
+
let preserveLog = false;
|
|
211
|
+
let persistenceReady = false;
|
|
212
|
+
const preserveListeners = new Set();
|
|
213
|
+
let saveTimer = null;
|
|
214
|
+
function emitPreserve() {
|
|
215
|
+
for (const listener of preserveListeners) listener();
|
|
216
|
+
}
|
|
217
|
+
function scheduleSave() {
|
|
218
|
+
if (!preserveLog) return;
|
|
219
|
+
if (saveTimer) clearTimeout(saveTimer);
|
|
220
|
+
saveTimer = setTimeout(saveBuffer, SAVE_DEBOUNCE_MS);
|
|
221
|
+
}
|
|
222
|
+
async function saveBuffer() {
|
|
223
|
+
saveTimer = null;
|
|
224
|
+
if (!preserveLog) return;
|
|
225
|
+
try {
|
|
226
|
+
const serializable = entries.map(entry => ({
|
|
227
|
+
...entry,
|
|
228
|
+
args: (0, _sanitize.sanitizeArgs)(entry.args)
|
|
229
|
+
}));
|
|
230
|
+
await _sharedUi.persistentStorage.setItem(BUFFER_KEY, JSON.stringify(serializable));
|
|
231
|
+
} catch {
|
|
232
|
+
// Storage unavailable — preserve is best-effort.
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async function clearSavedBuffer() {
|
|
236
|
+
try {
|
|
237
|
+
await _sharedUi.persistentStorage.removeItem(BUFFER_KEY);
|
|
238
|
+
} catch {
|
|
239
|
+
// ignore
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Load the persisted preserve-log flag and, if enabled, restore the saved
|
|
245
|
+
* buffer. If disabled, drop any saved buffer so the session starts fresh.
|
|
246
|
+
* Idempotent — safe to call from ConsoleRoot on every mount.
|
|
247
|
+
*/
|
|
248
|
+
async function initConsolePersistence() {
|
|
249
|
+
if (persistenceReady) return;
|
|
250
|
+
persistenceReady = true;
|
|
251
|
+
try {
|
|
252
|
+
preserveLog = (await _sharedUi.persistentStorage.getItem(PRESERVE_KEY)) === "true";
|
|
253
|
+
} catch {
|
|
254
|
+
preserveLog = false;
|
|
255
|
+
}
|
|
256
|
+
emitPreserve();
|
|
257
|
+
if (!preserveLog) {
|
|
258
|
+
await clearSavedBuffer();
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
try {
|
|
262
|
+
const raw = await _sharedUi.persistentStorage.getItem(BUFFER_KEY);
|
|
263
|
+
if (raw) {
|
|
264
|
+
const saved = JSON.parse(raw);
|
|
265
|
+
if (Array.isArray(saved) && saved.length) {
|
|
266
|
+
// Prepend restored entries before anything captured this session.
|
|
267
|
+
entries = [...saved, ...entries].slice(-MAX_ENTRIES);
|
|
268
|
+
nextId = Math.max(nextId, ...saved.map(e => e.id + 1));
|
|
269
|
+
emit();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
} catch {
|
|
273
|
+
// Corrupt/absent buffer — ignore.
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** Whether logs persist across reload. */
|
|
278
|
+
function getPreserveLog() {
|
|
279
|
+
return preserveLog;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/** Toggle preserve-log. Persists the flag; saves or drops the buffer. */
|
|
283
|
+
function setPreserveLog(next) {
|
|
284
|
+
if (preserveLog === next) return;
|
|
285
|
+
preserveLog = next;
|
|
286
|
+
emitPreserve();
|
|
287
|
+
_sharedUi.persistentStorage.setItem(PRESERVE_KEY, String(next)).catch(() => {});
|
|
288
|
+
if (next) saveBuffer();else clearSavedBuffer();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/** Subscribe to preserve-log changes. Returns an unsubscribe function. */
|
|
292
|
+
function subscribePreserveLog(listener) {
|
|
293
|
+
preserveListeners.add(listener);
|
|
294
|
+
return () => {
|
|
295
|
+
preserveListeners.delete(listener);
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=consoleLogStore.js.map
|
|
@@ -0,0 +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","emit","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":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.sanitizeArgs = sanitizeArgs;
|
|
7
|
+
/**
|
|
8
|
+
* sanitizeArgs — deep-convert captured console arguments into JSON-safe values.
|
|
9
|
+
*
|
|
10
|
+
* Captured `args` can hold Errors, functions, bigints, symbols, and circular
|
|
11
|
+
* references. Both the external-sync snapshot (device → desktop) and the
|
|
12
|
+
* preserve-log persistence need plain JSON, so this produces a structural copy
|
|
13
|
+
* (objects/arrays preserved so they stay expandable) with cycles broken.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const MAX_DEPTH = 6;
|
|
17
|
+
const MAX_ARRAY = 100;
|
|
18
|
+
const MAX_KEYS = 100;
|
|
19
|
+
function sanitizeValue(value, depth, seen) {
|
|
20
|
+
if (value === null) return null;
|
|
21
|
+
const t = typeof value;
|
|
22
|
+
if (t === "string" || t === "boolean") return value;
|
|
23
|
+
if (t === "number") return Number.isFinite(value) ? value : String(value);
|
|
24
|
+
if (t === "undefined") return "undefined";
|
|
25
|
+
if (t === "bigint") return `${String(value)}n`;
|
|
26
|
+
if (t === "function") return `ƒ ${value.name || "(anonymous)"}`;
|
|
27
|
+
if (t === "symbol") return value.toString();
|
|
28
|
+
if (value instanceof Error) {
|
|
29
|
+
return {
|
|
30
|
+
name: value.name,
|
|
31
|
+
message: value.message,
|
|
32
|
+
stack: value.stack
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (depth >= MAX_DEPTH) return Array.isArray(value) ? "[Array]" : "{…}";
|
|
36
|
+
const obj = value;
|
|
37
|
+
if (seen.has(obj)) return "[Circular]";
|
|
38
|
+
seen.add(obj);
|
|
39
|
+
try {
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
const out = value.slice(0, MAX_ARRAY).map(v => sanitizeValue(v, depth + 1, seen));
|
|
42
|
+
if (value.length > MAX_ARRAY) out.push(`… ${value.length - MAX_ARRAY} more`);
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
const out = {};
|
|
46
|
+
for (const key of Object.keys(obj).slice(0, MAX_KEYS)) {
|
|
47
|
+
try {
|
|
48
|
+
out[key] = sanitizeValue(obj[key], depth + 1, seen);
|
|
49
|
+
} catch {
|
|
50
|
+
out[key] = "[Unserializable]";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
} finally {
|
|
55
|
+
seen.delete(obj);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Deep-sanitize an array of console arguments into JSON-safe values. */
|
|
60
|
+
function sanitizeArgs(args) {
|
|
61
|
+
const seen = new WeakSet();
|
|
62
|
+
return args.map(arg => sanitizeValue(arg, 0, seen));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MAX_DEPTH","MAX_ARRAY","MAX_KEYS","sanitizeValue","value","depth","seen","t","Number","isFinite","String","name","toString","Error","message","stack","Array","isArray","obj","has","add","out","slice","map","v","length","push","key","Object","keys","delete","sanitizeArgs","args","WeakSet","arg"],"sourceRoot":"../../../src","sources":["store/sanitize.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,SAAS,GAAG,CAAC;AACnB,MAAMC,SAAS,GAAG,GAAG;AACrB,MAAMC,QAAQ,GAAG,GAAG;AAEpB,SAASC,aAAaA,CAACC,KAAc,EAAEC,KAAa,EAAEC,IAAqB,EAAW;EACpF,IAAIF,KAAK,KAAK,IAAI,EAAE,OAAO,IAAI;EAC/B,MAAMG,CAAC,GAAG,OAAOH,KAAK;EACtB,IAAIG,CAAC,KAAK,QAAQ,IAAIA,CAAC,KAAK,SAAS,EAAE,OAAOH,KAAK;EACnD,IAAIG,CAAC,KAAK,QAAQ,EAAE,OAAOC,MAAM,CAACC,QAAQ,CAACL,KAAe,CAAC,GAAGA,KAAK,GAAGM,MAAM,CAACN,KAAK,CAAC;EACnF,IAAIG,CAAC,KAAK,WAAW,EAAE,OAAO,WAAW;EACzC,IAAIA,CAAC,KAAK,QAAQ,EAAE,OAAO,GAAGG,MAAM,CAACN,KAAK,CAAC,GAAG;EAC9C,IAAIG,CAAC,KAAK,UAAU,EAAE,OAAO,KAAMH,KAAK,CAAuBO,IAAI,IAAI,aAAa,EAAE;EACtF,IAAIJ,CAAC,KAAK,QAAQ,EAAE,OAAQH,KAAK,CAAYQ,QAAQ,CAAC,CAAC;EAEvD,IAAIR,KAAK,YAAYS,KAAK,EAAE;IAC1B,OAAO;MAAEF,IAAI,EAAEP,KAAK,CAACO,IAAI;MAAEG,OAAO,EAAEV,KAAK,CAACU,OAAO;MAAEC,KAAK,EAAEX,KAAK,CAACW;IAAM,CAAC;EACzE;EAEA,IAAIV,KAAK,IAAIL,SAAS,EAAE,OAAOgB,KAAK,CAACC,OAAO,CAACb,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK;EAEvE,MAAMc,GAAG,GAAGd,KAAe;EAC3B,IAAIE,IAAI,CAACa,GAAG,CAACD,GAAG,CAAC,EAAE,OAAO,YAAY;EACtCZ,IAAI,CAACc,GAAG,CAACF,GAAG,CAAC;EAEb,IAAI;IACF,IAAIF,KAAK,CAACC,OAAO,CAACb,KAAK,CAAC,EAAE;MACxB,MAAMiB,GAAG,GAAGjB,KAAK,CAACkB,KAAK,CAAC,CAAC,EAAErB,SAAS,CAAC,CAACsB,GAAG,CAAEC,CAAC,IAAKrB,aAAa,CAACqB,CAAC,EAAEnB,KAAK,GAAG,CAAC,EAAEC,IAAI,CAAC,CAAC;MACnF,IAAIF,KAAK,CAACqB,MAAM,GAAGxB,SAAS,EAAEoB,GAAG,CAACK,IAAI,CAAC,KAAKtB,KAAK,CAACqB,MAAM,GAAGxB,SAAS,OAAO,CAAC;MAC5E,OAAOoB,GAAG;IACZ;IACA,MAAMA,GAA4B,GAAG,CAAC,CAAC;IACvC,KAAK,MAAMM,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACX,GAAG,CAAC,CAACI,KAAK,CAAC,CAAC,EAAEpB,QAAQ,CAAC,EAAE;MACrD,IAAI;QACFmB,GAAG,CAACM,GAAG,CAAC,GAAGxB,aAAa,CAAEe,GAAG,CAA6BS,GAAG,CAAC,EAAEtB,KAAK,GAAG,CAAC,EAAEC,IAAI,CAAC;MAClF,CAAC,CAAC,MAAM;QACNe,GAAG,CAACM,GAAG,CAAC,GAAG,kBAAkB;MAC/B;IACF;IACA,OAAON,GAAG;EACZ,CAAC,SAAS;IACRf,IAAI,CAACwB,MAAM,CAACZ,GAAG,CAAC;EAClB;AACF;;AAEA;AACO,SAASa,YAAYA,CAACC,IAAe,EAAa;EACvD,MAAM1B,IAAI,GAAG,IAAI2B,OAAO,CAAS,CAAC;EAClC,OAAOD,IAAI,CAACT,GAAG,CAAEW,GAAG,IAAK/B,aAAa,CAAC+B,GAAG,EAAE,CAAC,EAAE5B,IAAI,CAAC,CAAC;AACvD","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.consoleSyncAdapter = void 0;
|
|
7
|
+
var _consoleLogStore = require("../store/consoleLogStore");
|
|
8
|
+
var _sanitize = require("../store/sanitize");
|
|
9
|
+
/**
|
|
10
|
+
* consoleSyncAdapter — streams captured console entries from the device to the
|
|
11
|
+
* desktop dashboard via @buoy-gg/external-sync.
|
|
12
|
+
*
|
|
13
|
+
* Structurally matches external-sync's `ToolSyncAdapter` WITHOUT importing the
|
|
14
|
+
* package (so console has no hard dependency on external-sync, matching how the
|
|
15
|
+
* other tools' adapters are written). Auto-discovery in @buoy-gg/core picks it
|
|
16
|
+
* up by the export name and announces the "console" capability.
|
|
17
|
+
*
|
|
18
|
+
* Snapshots MUST be JSON-serializable. Captured `args` can hold Errors,
|
|
19
|
+
* functions, bigints, and circular references, so we deep-sanitize them into
|
|
20
|
+
* plain JSON values (objects/arrays preserved so they stay expandable on the
|
|
21
|
+
* dashboard).
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const consoleSyncAdapter = exports.consoleSyncAdapter = {
|
|
25
|
+
version: 1,
|
|
26
|
+
getSnapshot() {
|
|
27
|
+
const entries = (0, _consoleLogStore.getEntries)().map(entry => ({
|
|
28
|
+
...entry,
|
|
29
|
+
args: (0, _sanitize.sanitizeArgs)(entry.args)
|
|
30
|
+
}));
|
|
31
|
+
return {
|
|
32
|
+
entries
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
subscribe(onChange) {
|
|
36
|
+
return (0, _consoleLogStore.subscribe)(onChange);
|
|
37
|
+
},
|
|
38
|
+
actions: {
|
|
39
|
+
clearEntries() {
|
|
40
|
+
(0, _consoleLogStore.clearEntries)();
|
|
41
|
+
return {
|
|
42
|
+
cleared: true
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=consoleSyncAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_consoleLogStore","require","_sanitize","consoleSyncAdapter","exports","version","getSnapshot","entries","getEntries","map","entry","args","sanitizeArgs","subscribe","onChange","actions","clearEntries","cleared"],"sourceRoot":"../../../src","sources":["sync/consoleSyncAdapter.ts"],"mappings":";;;;;;AAeA,IAAAA,gBAAA,GAAAC,OAAA;AAMA,IAAAC,SAAA,GAAAD,OAAA;AArBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcO,MAAME,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG;EAChCE,OAAO,EAAE,CAAC;EAEVC,WAAWA,CAAA,EAAoB;IAC7B,MAAMC,OAAO,GAAG,IAAAC,2BAAU,EAAC,CAAC,CAACC,GAAG,CAAEC,KAAK,KAAM;MAC3C,GAAGA,KAAK;MACRC,IAAI,EAAE,IAAAC,sBAAY,EAACF,KAAK,CAACC,IAAI;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO;MAAEJ;IAAQ,CAAC;EACpB,CAAC;EAEDM,SAASA,CAACC,QAAoB,EAAc;IAC1C,OAAO,IAAAD,0BAAS,EAACC,QAAQ,CAAC;EAC5B,CAAC;EAEDC,OAAO,EAAE;IACPC,YAAYA,CAAA,EAAsB;MAChC,IAAAA,6BAAY,EAAC,CAAC;MACd,OAAO;QAAEC,OAAO,EAAE;MAAK,CAAC;IAC1B;EACF;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { View, Text, StyleSheet } from "react-native";
|
|
5
|
+
|
|
6
|
+
/** Tool accent color (terminal green). */
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
export const CONSOLE_ICON_COLOR = "#10B981";
|
|
9
|
+
/**
|
|
10
|
+
* Dependency-free terminal glyph: a rounded window outline with a `>_` prompt.
|
|
11
|
+
* Rendered in the floating menu and the modal header.
|
|
12
|
+
*/
|
|
13
|
+
export function ConsoleIcon({
|
|
14
|
+
size,
|
|
15
|
+
color = CONSOLE_ICON_COLOR
|
|
16
|
+
}) {
|
|
17
|
+
return /*#__PURE__*/_jsx(View, {
|
|
18
|
+
style: [styles.frame, {
|
|
19
|
+
width: size,
|
|
20
|
+
height: size,
|
|
21
|
+
borderRadius: size * 0.2,
|
|
22
|
+
borderColor: color
|
|
23
|
+
}],
|
|
24
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
25
|
+
style: {
|
|
26
|
+
color,
|
|
27
|
+
fontSize: size * 0.46,
|
|
28
|
+
fontWeight: "700",
|
|
29
|
+
fontFamily: "monospace"
|
|
30
|
+
},
|
|
31
|
+
children: ">_"
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const styles = StyleSheet.create({
|
|
36
|
+
frame: {
|
|
37
|
+
borderWidth: 1.5,
|
|
38
|
+
alignItems: "center",
|
|
39
|
+
justifyContent: "center"
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=ConsoleIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Text","StyleSheet","jsx","_jsx","CONSOLE_ICON_COLOR","ConsoleIcon","size","color","style","styles","frame","width","height","borderRadius","borderColor","children","fontSize","fontWeight","fontFamily","create","borderWidth","alignItems","justifyContent"],"sourceRoot":"../../../src","sources":["components/ConsoleIcon.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;;AAErD;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,OAAO,MAAMC,kBAAkB,GAAG,SAAS;AAO3C;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAC;EAAEC,IAAI;EAAEC,KAAK,GAAGH;AAAqC,CAAC,EAAE;EAClF,oBACED,IAAA,CAACJ,IAAI;IACHS,KAAK,EAAE,CACLC,MAAM,CAACC,KAAK,EACZ;MACEC,KAAK,EAAEL,IAAI;MACXM,MAAM,EAAEN,IAAI;MACZO,YAAY,EAAEP,IAAI,GAAG,GAAG;MACxBQ,WAAW,EAAEP;IACf,CAAC,CACD;IAAAQ,QAAA,eAEFZ,IAAA,CAACH,IAAI;MACHQ,KAAK,EAAE;QACLD,KAAK;QACLS,QAAQ,EAAEV,IAAI,GAAG,IAAI;QACrBW,UAAU,EAAE,KAAK;QACjBC,UAAU,EAAE;MACd,CAAE;MAAAH,QAAA,EAED;IAAI,CACD;EAAC,CACH,CAAC;AAEX;AAEA,MAAMN,MAAM,GAAGR,UAAU,CAACkB,MAAM,CAAC;EAC/BT,KAAK,EAAE;IACLU,WAAW,EAAE,GAAG;IAChBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { View, Text, FlatList, TouchableOpacity, StyleSheet } from "react-native";
|
|
5
|
+
import { useConsoleLogs } from "../hooks/useConsoleLogs";
|
|
6
|
+
import { clearEntries } from "../store/consoleLogStore";
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
const LEVEL_COLOR = {
|
|
9
|
+
verbose: "#9b9b9b",
|
|
10
|
+
info: "#d4d4d4",
|
|
11
|
+
warning: "#e2c08d",
|
|
12
|
+
error: "#f48771"
|
|
13
|
+
};
|
|
14
|
+
function formatTime(ts) {
|
|
15
|
+
const d = new Date(ts);
|
|
16
|
+
const pad = (n, len = 2) => String(n).padStart(len, "0");
|
|
17
|
+
return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}.${pad(d.getMilliseconds(), 3)}`;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Basic console log list — a flat, newest-last stream of captured entries.
|
|
22
|
+
* This is the proof-of-concept view; it will be replaced by a 1:1 port of
|
|
23
|
+
* Chrome DevTools' console once capture is verified.
|
|
24
|
+
*/
|
|
25
|
+
export function ConsoleLogList() {
|
|
26
|
+
const {
|
|
27
|
+
logs
|
|
28
|
+
} = useConsoleLogs();
|
|
29
|
+
const renderItem = ({
|
|
30
|
+
item
|
|
31
|
+
}) => /*#__PURE__*/_jsxs(View, {
|
|
32
|
+
style: styles.row,
|
|
33
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
34
|
+
style: styles.time,
|
|
35
|
+
children: formatTime(item.timestamp)
|
|
36
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
37
|
+
style: [styles.level, {
|
|
38
|
+
color: LEVEL_COLOR[item.level]
|
|
39
|
+
}],
|
|
40
|
+
children: item.level.toUpperCase()
|
|
41
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
42
|
+
style: [styles.message, {
|
|
43
|
+
color: LEVEL_COLOR[item.level]
|
|
44
|
+
}],
|
|
45
|
+
numberOfLines: 3,
|
|
46
|
+
children: item.message
|
|
47
|
+
})]
|
|
48
|
+
});
|
|
49
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
50
|
+
style: styles.container,
|
|
51
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
52
|
+
style: styles.header,
|
|
53
|
+
children: [/*#__PURE__*/_jsxs(Text, {
|
|
54
|
+
style: styles.headerTitle,
|
|
55
|
+
children: ["Console (", logs.length, ")"]
|
|
56
|
+
}), /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
57
|
+
onPress: () => clearEntries(),
|
|
58
|
+
style: styles.clearButton,
|
|
59
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
60
|
+
style: styles.clearText,
|
|
61
|
+
children: "Clear"
|
|
62
|
+
})
|
|
63
|
+
})]
|
|
64
|
+
}), /*#__PURE__*/_jsx(FlatList, {
|
|
65
|
+
data: logs,
|
|
66
|
+
keyExtractor: item => String(item.id),
|
|
67
|
+
renderItem: renderItem,
|
|
68
|
+
ListEmptyComponent: /*#__PURE__*/_jsx(Text, {
|
|
69
|
+
style: styles.empty,
|
|
70
|
+
children: "No console logs captured yet."
|
|
71
|
+
}),
|
|
72
|
+
contentContainerStyle: logs.length === 0 ? styles.emptyContainer : undefined
|
|
73
|
+
})]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const styles = StyleSheet.create({
|
|
77
|
+
container: {
|
|
78
|
+
flex: 1,
|
|
79
|
+
backgroundColor: "#1e1e1e"
|
|
80
|
+
},
|
|
81
|
+
header: {
|
|
82
|
+
flexDirection: "row",
|
|
83
|
+
alignItems: "center",
|
|
84
|
+
justifyContent: "space-between",
|
|
85
|
+
paddingHorizontal: 12,
|
|
86
|
+
paddingVertical: 8,
|
|
87
|
+
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
88
|
+
borderBottomColor: "#333"
|
|
89
|
+
},
|
|
90
|
+
headerTitle: {
|
|
91
|
+
color: "#d4d4d4",
|
|
92
|
+
fontSize: 13,
|
|
93
|
+
fontWeight: "600"
|
|
94
|
+
},
|
|
95
|
+
clearButton: {
|
|
96
|
+
paddingHorizontal: 10,
|
|
97
|
+
paddingVertical: 4,
|
|
98
|
+
borderRadius: 4,
|
|
99
|
+
backgroundColor: "#333"
|
|
100
|
+
},
|
|
101
|
+
clearText: {
|
|
102
|
+
color: "#d4d4d4",
|
|
103
|
+
fontSize: 12
|
|
104
|
+
},
|
|
105
|
+
row: {
|
|
106
|
+
flexDirection: "row",
|
|
107
|
+
paddingHorizontal: 12,
|
|
108
|
+
paddingVertical: 4,
|
|
109
|
+
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
110
|
+
borderBottomColor: "#2a2a2a",
|
|
111
|
+
gap: 8
|
|
112
|
+
},
|
|
113
|
+
time: {
|
|
114
|
+
color: "#6a6a6a",
|
|
115
|
+
fontSize: 11,
|
|
116
|
+
fontVariant: ["tabular-nums"],
|
|
117
|
+
minWidth: 86
|
|
118
|
+
},
|
|
119
|
+
level: {
|
|
120
|
+
fontSize: 11,
|
|
121
|
+
fontWeight: "700",
|
|
122
|
+
minWidth: 44
|
|
123
|
+
},
|
|
124
|
+
message: {
|
|
125
|
+
flex: 1,
|
|
126
|
+
fontSize: 12,
|
|
127
|
+
fontFamily: "monospace"
|
|
128
|
+
},
|
|
129
|
+
empty: {
|
|
130
|
+
color: "#6a6a6a",
|
|
131
|
+
fontSize: 13,
|
|
132
|
+
textAlign: "center"
|
|
133
|
+
},
|
|
134
|
+
emptyContainer: {
|
|
135
|
+
flexGrow: 1,
|
|
136
|
+
alignItems: "center",
|
|
137
|
+
justifyContent: "center"
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=ConsoleLogList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Text","FlatList","TouchableOpacity","StyleSheet","useConsoleLogs","clearEntries","jsx","_jsx","jsxs","_jsxs","LEVEL_COLOR","verbose","info","warning","error","formatTime","ts","d","Date","pad","n","len","String","padStart","getHours","getMinutes","getSeconds","getMilliseconds","ConsoleLogList","logs","renderItem","item","style","styles","row","children","time","timestamp","level","color","toUpperCase","message","numberOfLines","container","header","headerTitle","length","onPress","clearButton","clearText","data","keyExtractor","id","ListEmptyComponent","empty","contentContainerStyle","emptyContainer","undefined","create","flex","backgroundColor","flexDirection","alignItems","justifyContent","paddingHorizontal","paddingVertical","borderBottomWidth","hairlineWidth","borderBottomColor","fontSize","fontWeight","borderRadius","gap","fontVariant","minWidth","fontFamily","textAlign","flexGrow"],"sourceRoot":"../../../src","sources":["components/ConsoleLogList.tsx"],"mappings":"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","ignoreList":[]}
|