🔨 print javascript errors to html console in dev-env
This commit is contained in:
parent
6b3bc93401
commit
c0ef3b82c7
@ -52,29 +52,108 @@
|
||||
span.line.stderr-info { color: var(--onedark-blue); }
|
||||
span.line.stderr-warning { color: var(--onedark-orange); }
|
||||
span.line.stderr-error { color: var(--onedark-red); }
|
||||
span.line.stderr-javascript { color: var(--onedark-purple); }
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
// CLEAR DEBUGGING FLAGS //
|
||||
// line occupancy in built js source
|
||||
let debug_source_line_occupancy = {};
|
||||
|
||||
|
||||
// EMPTY ERROR BUFFER FOR TIME UNTIL HTML IS AVAILABLE //
|
||||
let javascript_error_buffer = [];
|
||||
|
||||
|
||||
function debug_javascript_error_message(error_event){
|
||||
// TRANSLATE TO SOURCE FILE'S LINES //
|
||||
// find source file occupying this line
|
||||
let source_file = null;
|
||||
let source_line = 0;
|
||||
for(var one_source_file in debug_source_line_occupancy){
|
||||
let occupancy = debug_source_line_occupancy[one_source_file];
|
||||
if(error_event.lineno >= occupancy.start && (occupancy.end === undefined || error_event.lineno <= occupancy.end)){
|
||||
// remember source file name
|
||||
source_file = one_source_file;
|
||||
|
||||
// translate compiled line to source file line
|
||||
source_line = error_event.lineno - debug_source_line_occupancy[source_file].start + 1;
|
||||
|
||||
// stop searching
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// OUTPUT MESSAGE //
|
||||
// build line info
|
||||
let line_info_string;
|
||||
if(source_file !== null){
|
||||
line_info_string = source_file + " line " + source_line;
|
||||
} else {
|
||||
line_info_string = "raw source" + " line " + error_event.lineno;
|
||||
}
|
||||
|
||||
// send to callback
|
||||
my_error_callback("(" + line_info_string + ") " + error_event.message, "javascript");
|
||||
}
|
||||
|
||||
|
||||
// EMPTY ERROR BUFFER WHEN HTML IS AVAILABLE //
|
||||
document.addEventListener("DOMContentLoaded", function(){
|
||||
// print messages
|
||||
for(var one_error_event of javascript_error_buffer){
|
||||
debug_javascript_error_message(one_error_event);
|
||||
}
|
||||
|
||||
// disable buffer
|
||||
javascript_error_buffer = null;
|
||||
});
|
||||
|
||||
window.addEventListener("error", function(error_event){
|
||||
// OUTPUT //
|
||||
if(javascript_error_buffer !== null){
|
||||
// add to buffer
|
||||
javascript_error_buffer.push(error_event);
|
||||
|
||||
} else {
|
||||
// output directly
|
||||
debug_javascript_error_message(error_event);
|
||||
}
|
||||
|
||||
|
||||
// DON'T CANCEL EVENT //
|
||||
return false;
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
<?php
|
||||
foreach(scandir("../src/helper") as $one_file){
|
||||
if(is_file("../src/helper/" . $one_file)){
|
||||
echo("debug_source_line_occupancy[\"" . $one_file . "\"] = {start: new Error().lineNumber};");
|
||||
require("../src/helper/" . $one_file);
|
||||
echo("\n");
|
||||
echo("debug_source_line_occupancy[\"" . $one_file . "\"].end = new Error().lineNumber;");
|
||||
}
|
||||
}
|
||||
|
||||
foreach(scandir("../src") as $one_file){
|
||||
if(is_file("../src/" . $one_file)){
|
||||
echo("debug_source_line_occupancy[\"" . $one_file . "\"] = {start: new Error().lineNumber};");
|
||||
require("../src/" . $one_file);
|
||||
echo("\n");
|
||||
echo("debug_source_line_occupancy[\"" . $one_file . "\"].end = new Error().lineNumber;");
|
||||
}
|
||||
}
|
||||
|
||||
foreach(scandir("../src/command") as $one_file){
|
||||
if(is_file("../src/command/" . $one_file)){
|
||||
echo("debug_source_line_occupancy[\"" . $one_file . "\"] = {start: new Error().lineNumber};");
|
||||
require("../src/command/" . $one_file);
|
||||
echo("\n");
|
||||
echo("debug_source_line_occupancy[\"" . $one_file . "\"].end = new Error().lineNumber;");
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
Reference in New Issue
Block a user