UNPKG

@igo2/core

Version:
165 lines (158 loc) 7.05 kB
import { HttpErrorResponse, HTTP_INTERCEPTORS, HttpResponse } from '@angular/common/http'; import * as i0 from '@angular/core'; import { Injectable, Optional, SkipSelf, NgModule } from '@angular/core'; import * as i1 from '@igo2/core/message'; import { throwError } from 'rxjs'; import { catchError, finalize, tap } from 'rxjs/operators'; class ErrorInterceptor { messageService; constructor(messageService) { this.messageService = messageService; } intercept(originalReq, next) { const interceptError = originalReq.headers.get('interceptError'); const req = originalReq.clone({ headers: originalReq.headers.delete('interceptError') }); if (interceptError === 'false') { return next.handle(req); } const errorContainer = { httpError: undefined }; return next.handle(req).pipe(catchError((error) => this.handleError(error, errorContainer)), finalize(() => { const httpError = errorContainer.httpError; if (!httpError) { return; } if (httpError.error.toDisplay) { this.handleCaughtError(httpError); } else if (!httpError.error.caught) { this.handleUncaughtError(httpError); } })); } handleError(httpError, errorContainer) { if (httpError instanceof HttpErrorResponse) { const errorObj = httpError.error === 'object' ? httpError.error : {}; errorObj.message = httpError.error?.message || httpError.statusText; errorObj.caught = false; httpError = new HttpErrorResponse({ error: errorObj, headers: httpError.headers, status: httpError.status, statusText: httpError.statusText, url: httpError.url }); } errorContainer.httpError = httpError; return throwError(httpError); } handleCaughtError(httpError) { httpError.error.caught = true; this.messageService.error(httpError.error.message, httpError.error.title, { progressBar: false }); } handleUncaughtError(httpError) { httpError.error.caught = true; this.messageService.error('igo.core.errors.uncaught.message', 'igo.core.errors.uncaught.title', { progressBar: false }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ErrorInterceptor, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ErrorInterceptor, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ErrorInterceptor, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.MessageService }] }); class IgoErrorModule { static forRoot() { return { ngModule: IgoErrorModule, providers: [ { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true } ] }; } constructor(parentModule) { if (parentModule) { throw new Error('IgoErrorModule is already loaded. Import it in the AppModule only'); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoErrorModule, deps: [{ token: IgoErrorModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoErrorModule }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoErrorModule }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoErrorModule, decorators: [{ type: NgModule, args: [{ imports: [], declarations: [], exports: [] }] }], ctorParameters: () => [{ type: IgoErrorModule, decorators: [{ type: Optional }, { type: SkipSelf }] }] }); class LoggingInterceptor { intercept(req, next) { const started = Date.now(); let ok; // extend server response observable with logging return next.handle(req).pipe(tap( // Succeeds when there is a response; ignore other events (event) => (ok = event instanceof HttpResponse ? 'succeeded' : ''), // Operation failed; error is an HttpErrorResponse () => (ok = 'failed')), // Log when response observable either completes or errors finalize(() => { const elapsed = Date.now() - started; const msg = `${req.method} "${req.urlWithParams}" ${ok} in ${elapsed} ms.`; console.log(msg); })); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LoggingInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LoggingInterceptor }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LoggingInterceptor, decorators: [{ type: Injectable }] }); class IgoLoggingModule { static forRoot() { return { ngModule: IgoLoggingModule, providers: [ { provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptor, multi: true } ] }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoLoggingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: IgoLoggingModule }); static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoLoggingModule }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: IgoLoggingModule, decorators: [{ type: NgModule, args: [{ imports: [], declarations: [], exports: [] }] }] }); /** * Generated bundle index. Do not edit. */ export { ErrorInterceptor, IgoErrorModule, IgoLoggingModule, LoggingInterceptor }; //# sourceMappingURL=igo2-core-request.mjs.map