Slightly better error catching..
This commit is contained in:
15
src/API.ts
15
src/API.ts
@ -143,10 +143,21 @@ export class UserAPI {
|
|||||||
};
|
};
|
||||||
|
|
||||||
_reportError = (error: any): void => {
|
_reportError = (error: any): void => {
|
||||||
console.log(error);
|
|
||||||
|
const extractLineNumber = (error: Error) => {
|
||||||
|
const stackLines = error.stack?.split("\n");
|
||||||
|
if (stackLines && stackLines.length > 1) {
|
||||||
|
const match = stackLines[1].match(/:(\d+):/);
|
||||||
|
if (match) return parseInt(match[1], 10);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
const lineNumber = extractLineNumber(error);
|
||||||
|
const errorMessage = lineNumber ? `${error.message} (Line: ${lineNumber})` : error.message;
|
||||||
clearTimeout(this.errorTimeoutID);
|
clearTimeout(this.errorTimeoutID);
|
||||||
clearTimeout(this.printTimeoutID);
|
clearTimeout(this.printTimeoutID);
|
||||||
this.app.interface.error_line.innerHTML = error as string;
|
this.app.interface.error_line.innerHTML = errorMessage;
|
||||||
this.app.interface.error_line.style.color = "color-red-800";
|
this.app.interface.error_line.style.color = "color-red-800";
|
||||||
this.app.interface.error_line.classList.remove("hidden");
|
this.app.interface.error_line.classList.remove("hidden");
|
||||||
this.errorTimeoutID = setTimeout(
|
this.errorTimeoutID = setTimeout(
|
||||||
|
|||||||
@ -25,7 +25,7 @@ const tryCatchWrapper = (
|
|||||||
resolve(true);
|
resolve(true);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
application.interface.error_line.innerHTML = error as string;
|
application.interface.error_line.innerHTML = error as string;
|
||||||
console.log(error);
|
application.api._reportError(error as string)
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -75,7 +75,7 @@ export const tryEvaluate = async (
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
application.interface.error_line.innerHTML = error as string;
|
application.interface.error_line.innerHTML = error as string;
|
||||||
console.log(error);
|
application.api._reportError(error as string)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,9 @@ export const installWindowBehaviors = (
|
|||||||
window: Window,
|
window: Window,
|
||||||
preventMultipleTabs: boolean = false
|
preventMultipleTabs: boolean = false
|
||||||
) => {
|
) => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
window.addEventListener("resize", () =>
|
window.addEventListener("resize", () =>
|
||||||
handleResize(app.interface.scope as HTMLCanvasElement)
|
handleResize(app.interface.scope as HTMLCanvasElement)
|
||||||
);
|
);
|
||||||
@ -42,7 +45,7 @@ export const installWindowBehaviors = (
|
|||||||
localStorage.openpages = Date.now();
|
localStorage.openpages = Date.now();
|
||||||
window.addEventListener(
|
window.addEventListener(
|
||||||
"storage",
|
"storage",
|
||||||
function (e) {
|
function(e) {
|
||||||
if (e.key == "openpages") {
|
if (e.key == "openpages") {
|
||||||
// Listen if anybody else is opening the same page!
|
// Listen if anybody else is opening the same page!
|
||||||
localStorage.page_available = Date.now();
|
localStorage.page_available = Date.now();
|
||||||
@ -57,4 +60,12 @@ export const installWindowBehaviors = (
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.addEventListener('error', e => {
|
||||||
|
console.log("Je suis bien installé !")
|
||||||
|
console.log(e.message
|
||||||
|
, '\n', e.filename, ':', e.lineno, (e.colno ? ':' + e.colno : '')
|
||||||
|
, e.error && e.error.stack ? '\n' : '', e.error ? e.error.stack : undefined
|
||||||
|
);
|
||||||
|
}, false);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user