Compare commits
1
Commits
abd530d146
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
419d9d55df |
+21
-10
@@ -1,4 +1,7 @@
|
|||||||
class ErrorHandler {
|
class ErrorHandler {
|
||||||
|
|
||||||
|
#unhandledRection = false
|
||||||
|
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
if (!options) throw new Error("Options not provided");
|
if (!options) throw new Error("Options not provided");
|
||||||
if (!options.url) throw new Error("URL is required");
|
if (!options.url) throw new Error("URL is required");
|
||||||
@@ -6,7 +9,8 @@ class ErrorHandler {
|
|||||||
|
|
||||||
this.url = options.url;
|
this.url = options.url;
|
||||||
this.apikey = options.apikey;
|
this.apikey = options.apikey;
|
||||||
|
this.catchError();
|
||||||
|
}
|
||||||
|
|
||||||
getErrorPosition(script) {
|
getErrorPosition(script) {
|
||||||
let totalLines = 0;
|
let totalLines = 0;
|
||||||
@@ -36,19 +40,19 @@ class ErrorHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
window.addEventListener('unhandledrejection', event => {
|
window.addEventListener('unhandledrejection', event => {
|
||||||
|
if (! this.#unhandledRection) {
|
||||||
|
this.#unhandledRection = true;
|
||||||
this.reportError(event.reason.toString(), document.location.href, 0, 0, event.reason.stack, 'Promise Rejection');
|
this.reportError(event.reason.toString(), document.location.href, 0, 0, event.reason.stack, 'Promise Rejection');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
this.createErrorAgain();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async reportError(message, url, line, column, stack, type = 'JavaScript Error') {
|
async reportError(message, url, line, column, stack, type = 'JavaScript Error') {
|
||||||
await new Promise(r => setTimeout(r, 2000));
|
await new Promise(r => setTimeout(r, 2000));
|
||||||
|
|
||||||
fetch(this.url ? `${this.url}/${this.apikey}` : window.location.href, {
|
try {
|
||||||
method: "POST",
|
const response = await fetch(this.url ? `${this.url}/${this.apikey}` : window.location.href, {
|
||||||
|
method: "PUT",
|
||||||
headers: {
|
headers: {
|
||||||
'Accept': "application/json",
|
'Accept': "application/json",
|
||||||
'Content-Type': "application/json"
|
'Content-Type': "application/json"
|
||||||
@@ -63,7 +67,16 @@ class ErrorHandler {
|
|||||||
file: window.location.href,
|
file: window.location.href,
|
||||||
source: await this.getSourceCode(url, line),
|
source: await this.getSourceCode(url, line),
|
||||||
})
|
})
|
||||||
}).then(response => response.json()).then(console.info);
|
});
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
this.#unhandledRection = false;
|
||||||
|
|
||||||
|
return await response.json()
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('CORS or network error:', error.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async getSourceCode(url, errorLineNumber) {
|
async getSourceCode(url, errorLineNumber) {
|
||||||
@@ -94,8 +107,6 @@ class ErrorHandler {
|
|||||||
obj.file = match[2];
|
obj.file = match[2];
|
||||||
obj.line = match[3];
|
obj.line = match[3];
|
||||||
// column would be match[4] if needed
|
// column would be match[4] if needed
|
||||||
|
|
||||||
console.log(match);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove undefined/empty values
|
// Remove undefined/empty values
|
||||||
|
|||||||
Reference in new issue
Block a user