Surpress react/jsx-runtime errors: Bugfix #2

This commit is contained in:
Benjamin Toby 2026-03-25 16:25:39 +01:00
parent 6a024faece
commit ad51f7da0c
2 changed files with 43 additions and 4 deletions

View File

@ -12,6 +12,9 @@ export default async function (params) {
const supress_condition = errors_to_supress
.map((e) => `args[0].includes("${e}")`)
.join(" || ");
const runtime_supress_condition = errors_to_supress
.map((e) => `message.includes("${e}")`)
.join(" || ");
script += `const _ce = console.error.bind(console);\n`;
script += `console.error = (...args) => {\n`;
script += ` if (typeof args[0] === "string" && (${supress_condition})) return;\n`;
@ -26,10 +29,26 @@ export default async function (params) {
script += ` overlay.innerHTML = \`<div style="max-width:900px;margin:0 auto"><div style="font-size:18px;font-weight:bold;margin-bottom:12px;color:#ff4444">Runtime Error</div><div style="color:#fff;margin-bottom:16px">\${message}</div>\${source ? \`<div style="color:#888;margin-bottom:16px">\${source}</div>\` : ""}\${stack ? \`<pre style="background:#111;padding:16px;border-radius:6px;overflow:auto;color:#ffa07a;white-space:pre-wrap">\${stack}</pre>\` : ""}<button onclick="this.closest('#__bunext_error_overlay').remove()" style="margin-top:16px;padding:8px 16px;background:#333;color:#fff;border:none;border-radius:4px;cursor:pointer">Dismiss</button></div>\`;\n`;
script += ` document.body.appendChild(overlay);\n`;
script += `}\n\n`;
script += `function __bunext_should_suppress_runtime_error(message) {\n`;
script += ` return typeof message === "string" && (${runtime_supress_condition});\n`;
script += `}\n\n`;
script += `window.addEventListener("error", (e) => {\n`;
script += ` __bunext_show_error(e.message, e.filename ? e.filename + ":" + e.lineno + ":" + e.colno : "", e.error?.stack ?? "");\n`;
script += ` const message = String(e.message ?? "");\n`;
script += ` if (__bunext_should_suppress_runtime_error(message)) {\n`;
script += ` e.preventDefault();\n`;
script += ` e.stopImmediatePropagation();\n`;
script += ` return;\n`;
script += ` }\n`;
script += ` __bunext_show_error(message, e.filename ? e.filename + ":" + e.lineno + ":" + e.colno : "", e.error?.stack ?? "");\n`;
script += `});\n`;
script += `window.addEventListener("unhandledrejection", (e) => __bunext_show_error(String(e.reason?.message ?? e.reason), "", e.reason?.stack ?? ""));\n\n`;
script += `window.addEventListener("unhandledrejection", (e) => {\n`;
script += ` const message = String(e.reason?.message ?? e.reason ?? "");\n`;
script += ` if (__bunext_should_suppress_runtime_error(message)) {\n`;
script += ` e.preventDefault();\n`;
script += ` return;\n`;
script += ` }\n`;
script += ` __bunext_show_error(message, "", e.reason?.stack ?? "");\n`;
script += `});\n\n`;
script += `const hmr = new EventSource("/__hmr");\n`;
script += `window.BUNEXT_HMR = hmr;\n`;
script += `window.addEventListener("beforeunload", () => hmr.close());\n`;

View File

@ -23,6 +23,10 @@ export default async function (params?: Params) {
.map((e) => `args[0].includes("${e}")`)
.join(" || ");
const runtime_supress_condition = errors_to_supress
.map((e) => `message.includes("${e}")`)
.join(" || ");
script += `const _ce = console.error.bind(console);\n`;
script += `console.error = (...args) => {\n`;
script += ` if (typeof args[0] === "string" && (${supress_condition})) return;\n`;
@ -38,10 +42,26 @@ export default async function (params?: Params) {
script += ` overlay.innerHTML = \`<div style="max-width:900px;margin:0 auto"><div style="font-size:18px;font-weight:bold;margin-bottom:12px;color:#ff4444">Runtime Error</div><div style="color:#fff;margin-bottom:16px">\${message}</div>\${source ? \`<div style="color:#888;margin-bottom:16px">\${source}</div>\` : ""}\${stack ? \`<pre style="background:#111;padding:16px;border-radius:6px;overflow:auto;color:#ffa07a;white-space:pre-wrap">\${stack}</pre>\` : ""}<button onclick="this.closest('#__bunext_error_overlay').remove()" style="margin-top:16px;padding:8px 16px;background:#333;color:#fff;border:none;border-radius:4px;cursor:pointer">Dismiss</button></div>\`;\n`;
script += ` document.body.appendChild(overlay);\n`;
script += `}\n\n`;
script += `function __bunext_should_suppress_runtime_error(message) {\n`;
script += ` return typeof message === "string" && (${runtime_supress_condition});\n`;
script += `}\n\n`;
script += `window.addEventListener("error", (e) => {\n`;
script += ` __bunext_show_error(e.message, e.filename ? e.filename + ":" + e.lineno + ":" + e.colno : "", e.error?.stack ?? "");\n`;
script += ` const message = String(e.message ?? "");\n`;
script += ` if (__bunext_should_suppress_runtime_error(message)) {\n`;
script += ` e.preventDefault();\n`;
script += ` e.stopImmediatePropagation();\n`;
script += ` return;\n`;
script += ` }\n`;
script += ` __bunext_show_error(message, e.filename ? e.filename + ":" + e.lineno + ":" + e.colno : "", e.error?.stack ?? "");\n`;
script += `});\n`;
script += `window.addEventListener("unhandledrejection", (e) => __bunext_show_error(String(e.reason?.message ?? e.reason), "", e.reason?.stack ?? ""));\n\n`;
script += `window.addEventListener("unhandledrejection", (e) => {\n`;
script += ` const message = String(e.reason?.message ?? e.reason ?? "");\n`;
script += ` if (__bunext_should_suppress_runtime_error(message)) {\n`;
script += ` e.preventDefault();\n`;
script += ` return;\n`;
script += ` }\n`;
script += ` __bunext_show_error(message, "", e.reason?.stack ?? "");\n`;
script += `});\n\n`;
script += `const hmr = new EventSource("/__hmr");\n`;
script += `window.BUNEXT_HMR = hmr;\n`;