Fix #2220 - Avoid DOM notifications on errors (#2226)

* Fix #2220 - Avoid DOM notifications on errors
This commit is contained in:
Andrea Giammarchi
2024-10-17 16:18:05 +02:00
committed by GitHub
parent 5d751493f6
commit 6b1330d28a
12 changed files with 118 additions and 38 deletions

View File

@@ -1,6 +1,12 @@
// PyScript Error Plugin
import { buffered } from "polyscript/exports";
import { hooks } from "../core.js";
let dontBotherDOM = false;
export function notOnDOM() {
dontBotherDOM = true;
}
hooks.main.onReady.add(function override(pyScript) {
// be sure this override happens only once
hooks.main.onReady.delete(override);
@@ -8,13 +14,15 @@ hooks.main.onReady.add(function override(pyScript) {
// trap generic `stderr` to propagate to it regardless
const { stderr } = pyScript.io;
// override it with our own logic
pyScript.io.stderr = (error, ...rest) => {
const cb = (error, ...rest) => {
notify(error.message || error);
// let other plugins or stderr hook, if any, do the rest
return stderr(error, ...rest);
};
// override it with our own logic
pyScript.io.stderr = pyScript.type === "py" ? cb : buffered(cb);
// be sure uncaught Python errors are also visible
addEventListener("error", ({ message }) => {
if (message.startsWith("Uncaught PythonError")) notify(message);
@@ -30,6 +38,7 @@ hooks.main.onReady.add(function override(pyScript) {
* @param {string} message
*/
export function notify(message) {
if (dontBotherDOM) return;
const div = document.createElement("div");
div.className = "py-error";
div.textContent = message;