0
0
This repository has been archived on 2024-05-25. You can view files and clone it, but cannot push or open issues or pull requests.
legacy-code/dev/debugger.js
2022-10-05 19:18:32 +02:00

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;
});