UNPKG

@gibraltarsoftware/loupe-angular

Version:
83 lines 10 kB
import { HttpErrorResponse } from '@angular/common/http'; import { ErrorHandler, Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./loupe-angular.service"; // error handler to automatically log uncaught errors to Loupe export class LoupeErrorHandler extends ErrorHandler { constructor(loupe) { super(); this.loupe = loupe; } handleError(error) { super.handleError(error); // different error types have different properties if (error instanceof HttpErrorResponse) { this.recordHttpError(error); } else if (error instanceof ErrorEvent) { this.recordErrorEvent(error); } else { this.recordError(error); } } recordHttpError(error) { const details = { name: error.name, status: error.status, statusText: error.statusText, url: error.url, error: error.error }; // The http error response doesn't gve us a stack, so create one const err = new Error(error.message); const ex = { name: error.name, caption: error.name, description: error.message, message: err.stack }; this.loupe.recordException(ex, details, error.name); } recordError(error) { // check to see if there's a stack const errorSource = error.stack || error.message; const parts = errorSource.split('\n'); let url = ""; if (parts.length > 2) { // see if we have a url const firstStackLine = parts[2]; const httpStart = firstStackLine.indexOf('http'); if (httpStart > -1) { const httpLength = firstStackLine.length - httpStart - 1; url = firstStackLine.substr(httpStart, httpLength); } } const ex = { name: error.name, caption: parts[1], description: parts[0], url: url, message: errorSource }; const details = null; this.loupe.recordException(ex, details, 'Angular.Exception'); } recordErrorEvent(error) { const details = { line: error.lineno, column: error.colno, url: error.filename }; this.loupe.recordException(error, details, 'Angular.Exception.Event'); } } LoupeErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoupeErrorHandler, deps: [{ token: i1.LoupeService }], target: i0.ɵɵFactoryTarget.Injectable }); LoupeErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoupeErrorHandler, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: LoupeErrorHandler, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.LoupeService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG91cGUtZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xvdXBlLWFuZ3VsYXIvc3JjL2xpYi9sb3VwZS1lcnJvci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFHekQsOERBQThEO0FBSzlELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxZQUFZO0lBRS9DLFlBQ3FCLEtBQW1CO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBRlMsVUFBSyxHQUFMLEtBQUssQ0FBYztJQUd4QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDbEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QixrREFBa0Q7UUFDbEQsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjthQUFNLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQXdCO1FBQzVDLE1BQU0sT0FBTyxHQUFHO1lBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ3JCLENBQUM7UUFFRixnRUFBZ0U7UUFDaEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxHQUFHO1lBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNuQixXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDMUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1NBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVk7UUFDNUIsa0NBQWtDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLElBQUksR0FBRyxHQUFXLEVBQUUsQ0FBQztRQUVyQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLHVCQUF1QjtZQUN2QixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVqRCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RCxHQUFHLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDdEQ7U0FDSjtRQUVELE1BQU0sRUFBRSxHQUFHO1lBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLEdBQUcsRUFBRSxHQUFHO1lBQ1IsT0FBTyxFQUFFLFdBQVc7U0FDdkIsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQztRQUVyQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWlCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHO1lBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ2xCLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSztZQUNuQixHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVE7U0FDdEIsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUMxRSxDQUFDOzs4R0FqRlEsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGZCxNQUFNOzJGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG91cGVTZXJ2aWNlIH0gZnJvbSAnLi9sb3VwZS1hbmd1bGFyLnNlcnZpY2UnO1xuXG4vLyBlcnJvciBoYW5kbGVyIHRvIGF1dG9tYXRpY2FsbHkgbG9nIHVuY2F1Z2h0IGVycm9ycyB0byBMb3VwZVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMb3VwZUVycm9ySGFuZGxlciBleHRlbmRzIEVycm9ySGFuZGxlciB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb3VwZTogTG91cGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICBzdXBlci5oYW5kbGVFcnJvcihlcnJvcik7XG5cbiAgICAgICAgLy8gZGlmZmVyZW50IGVycm9yIHR5cGVzIGhhdmUgZGlmZmVyZW50IHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSHR0cEVycm9yKGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkRXJyb3JFdmVudChlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZEVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVjb3JkSHR0cEVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZXRhaWxzID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIHVybDogZXJyb3IudXJsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLmVycm9yXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVGhlIGh0dHAgZXJyb3IgcmVzcG9uc2UgZG9lc24ndCBndmUgdXMgYSBzdGFjaywgc28gY3JlYXRlIG9uZVxuICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGNvbnN0IGV4ID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICAgICAgICAgIGNhcHRpb246IGVycm9yLm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5zdGFja1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMubG91cGUucmVjb3JkRXhjZXB0aW9uKGV4LCBkZXRhaWxzLCBlcnJvci5uYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29yZEVycm9yKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgICAgICAvLyBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIHN0YWNrXG4gICAgICAgIGNvbnN0IGVycm9yU291cmNlID0gZXJyb3Iuc3RhY2sgfHwgZXJyb3IubWVzc2FnZTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBlcnJvclNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgbGV0IHVybDogc3RyaW5nID0gXCJcIjtcblxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIGhhdmUgYSB1cmxcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U3RhY2tMaW5lID0gcGFydHNbMl07XG4gICAgICAgICAgICBjb25zdCBodHRwU3RhcnQgPSBmaXJzdFN0YWNrTGluZS5pbmRleE9mKCdodHRwJyk7XG5cbiAgICAgICAgICAgIGlmIChodHRwU3RhcnQgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBMZW5ndGggPSBmaXJzdFN0YWNrTGluZS5sZW5ndGggLSBodHRwU3RhcnQgLSAxO1xuICAgICAgICAgICAgICAgIHVybCA9IGZpcnN0U3RhY2tMaW5lLnN1YnN0cihodHRwU3RhcnQsIGh0dHBMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXggPSB7XG4gICAgICAgICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgICAgICAgY2FwdGlvbjogcGFydHNbMV0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcGFydHNbMF0sXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yU291cmNlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGV0YWlscyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5sb3VwZS5yZWNvcmRFeGNlcHRpb24oZXgsIGRldGFpbHMsICdBbmd1bGFyLkV4Y2VwdGlvbicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVjb3JkRXJyb3JFdmVudChlcnJvcjogRXJyb3JFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZXRhaWxzID0ge1xuICAgICAgICAgICAgbGluZTogZXJyb3IubGluZW5vLFxuICAgICAgICAgICAgY29sdW1uOiBlcnJvci5jb2xubyxcbiAgICAgICAgICAgIHVybDogZXJyb3IuZmlsZW5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvdXBlLnJlY29yZEV4Y2VwdGlvbihlcnJvciwgZGV0YWlscywgJ0FuZ3VsYXIuRXhjZXB0aW9uLkV2ZW50Jyk7XG4gICAgfVxufVxuXG4iXX0=