71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
|
"use strict";
|
||
|
// 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;
|
||
|
});
|