@igo2/core
Version:
165 lines (158 loc) • 7.05 kB
JavaScript
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