{"version":3,"file":"gewd-ng-utils-ng-error-overlay.mjs","sources":["../../../../libs/ng-utils/ng-error-overlay/ng-error/error-handler.service.ts","../../../../libs/ng-utils/ng-error-overlay/ng-error/error-overlay/error-overlay.component.ts","../../../../libs/ng-utils/ng-error-overlay/ng-error/error-overlay/error-overlay.component.html","../../../../libs/ng-utils/ng-error-overlay/ng-error/ng-error.component.ts","../../../../libs/ng-utils/ng-error-overlay/ng-error/ng-error.component.html","../../../../libs/ng-utils/ng-error-overlay/ng-error/ng-error-overlay.module.ts","../../../../libs/ng-utils/ng-error-overlay/gewd-ng-utils-ng-error-overlay.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface ErrorInterface {\n  name: string;\n  message: string;\n  stack: string;\n}\n\nexport interface NgErrorConfig {\n  zIndex: number;\n  ignoreErrors: string[];\n}\n\nconst DEFAULT_CONFIG: NgErrorConfig = {\n  zIndex: 10000,\n  ignoreErrors: []\n};\n\nexport const NG_ERROR_CONFIG_TOKEN = new InjectionToken<NgErrorConfig>('@gewd/ng-utils/NgErrorConfig');\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ErrorHandlerService implements ErrorHandler {\n\n  public error$ = new BehaviorSubject<ErrorInterface>(null);\n\n  constructor(\n    @Optional() @Inject(NG_ERROR_CONFIG_TOKEN)\n    public readonly config: NgErrorConfig\n  ) {\n    this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n    window.addEventListener('error', ev => {\n      this.handleError(ev.error);\n    });\n  }\n\n  handleError (error: Error): void {\n    if (this.config.ignoreErrors.includes(error.name)) {\n      return;\n    }\n\n    this.error$.next({\n      name: error.name,\n      message: error.message,\n      stack: error.stack\n    });\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ErrorInterface } from '../error-handler.service';\nimport ErrorStackParser from 'error-stack-parser';\n\n@Component({\n  selector: 'error-overlay',\n  templateUrl: './error-overlay.component.html',\n  styleUrls: ['./error-overlay.component.scss']\n})\nexport class ErrorOverlayComponent implements OnInit {\n\n  @Input()\n  error: ErrorInterface;\n\n  public errorStack: any[];\n\n  constructor() { }\n\n  ngOnInit(): void {\n    this.errorStack = ErrorStackParser.parse(this.error);\n  }\n\n}\n","<span class=\"error-info\">\n<span class=\"error error-name\">{{error.name}} <br/></span>\nError Message: <span class=\"error\">{{error.message}}</span>\n</span>\n\n\n<div class=\"stack-block\" *ngIf=\"error.stack\">\nStack:\n<table class=\"stack-table\">\n  <tr>\n    <th class=\"align-left\">Function Name</th>\n    <th class=\"align-right\">Line Number</th>\n    <th class=\"align-right\">Column Number</th>\n  </tr>\n  <ng-container *ngFor=\"let stack of errorStack; let odd = odd; let even = even;\">\n    <tr class=\"row\"\n        [class.odd]=\"odd\"\n        [class.even]=\"even\"\n    >\n      <td>{{stack.functionName}}</td>\n      <td class=\"align-right\">{{stack.lineNumber}}</td>\n      <td class=\"align-right\">{{stack.columnNumber}}</td>\n    </tr>\n    <tr>\n      <td colspan=\"3\"\n          class=\"row\"\n          [class.odd]=\"odd\"\n          [class.even]=\"even\"\n      >\n        {{stack.fileName}}</td>\n    </tr>\n  </ng-container>\n</table>\n</div>\n","import { ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit } from '@angular/core';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { map, scan, takeUntil } from 'rxjs/operators';\nimport { CssPropsService } from '@gewd/ng-utils/css-props';\n\n@Component({\n  selector: 'ng-error',\n  templateUrl: './ng-error.component.html',\n  styleUrls: ['./ng-error.component.scss']\n})\nexport class NgErrorComponent implements OnInit, OnDestroy {\n\n  public showIndex = 0;\n\n  public visible$ = new BehaviorSubject(false);\n\n  public errors$ = this.errorService.error$.pipe(\n    // add all errors to an array\n    // only keep the newest 10\n    scan((a, c) => [c, ...a].slice(0, 10), []),\n    map(value => value.filter(v => !!v))\n  );\n\n  private _destroy$ = new Subject<void>();\n\n  constructor(private errorService: ErrorHandlerService,\n              private cd: ChangeDetectorRef,\n              private cssProps: CssPropsService,\n              private element: ElementRef<HTMLElement>) {\n    cssProps.updateElementVars(element.nativeElement, {\n      '--overlay-zindex': errorService.config.zIndex\n    })\n  }\n\n  ngOnInit(): void {\n    this.errors$.pipe(\n      takeUntil(this._destroy$)\n    ).subscribe(value => {\n      this.visible$.next(value.length > 0);\n      this.cd.markForCheck();\n    })\n  }\n\n  ngOnDestroy (): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  hide (): void  {\n    this.visible$.next(false);\n  }\n}\n","<ng-container *ngIf=\"errors$ | async as errors\">\n  <div class=\"fullscreen\"\n       *ngIf=\"visible$ | async\"\n  >\n    <simple-pager [items]=\"errors\">\n      <div simplePagerTopLeft>\n        <dynamic-portal [key]=\"'errorName'\"></dynamic-portal>\n      </div>\n      <ng-template let-item>\n         <ng-template [dynamicPortalSource]=\"'errorName'\">\n           <span class=\"error-next-to-navigation\">{{item.name}}</span>\n         </ng-template>\n         <error-overlay [error]=\"item\"></error-overlay>\n      </ng-template>\n      <div simplePagerTopRight>\n        <button class=\"mat-focus-indicator mat-button mat-raised-button mat-button-base\"\n            (click)=\"hide()\">\n      close\n    </button>\n      </div>\n    </simple-pager>\n  </div>\n</ng-container>\n","import { ErrorHandler, ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgErrorComponent } from './ng-error.component';\nimport { ErrorOverlayComponent } from './error-overlay/error-overlay.component';\nimport { ErrorHandlerService, NG_ERROR_CONFIG_TOKEN } from './error-handler.service';\nimport { BootstrapComponentConfig, BootstrapComponentModule } from '@gewd/ng-utils/bootstrap-component';\nimport { SimplePagerModule } from '@gewd/ng-utils/components';\nimport { DynamicPortalModule } from '@gewd/ng-utils/dynamic-portal';\n\n@NgModule({\n    declarations: [NgErrorComponent, ErrorOverlayComponent],\n    imports: [\n        CommonModule,\n        BootstrapComponentModule.component({\n            elementName: 'ng-error',\n            component: NgErrorComponent\n        }),\n        SimplePagerModule,\n        DynamicPortalModule\n    ],\n    providers: [\n        ErrorHandlerService,\n        { provide: ErrorHandler, useExisting: ErrorHandlerService },\n    ]\n})\nexport class NgErrorOverlayModule {\n  static config (useValue: BootstrapComponentConfig): ModuleWithProviders<BootstrapComponentModule> {\n    return {\n      ngModule: NgErrorOverlayModule,\n      providers: [\n        { provide: NG_ERROR_CONFIG_TOKEN, useValue }\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ErrorHandlerService","i3","i6.ErrorOverlayComponent"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,cAAc,GAAkB;AACpC,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,YAAY,EAAE,EAAE;CACjB,CAAC;AAEK,MAAM,qBAAqB,GAAG,IAAI,cAAc,CAAgB,8BAA8B,CAAC,CAAC;MAK1F,mBAAmB,CAAA;AAI9B,IAAA,WAAA,CAEkB,MAAqB,EAAA;QAArB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;AAJhC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,eAAe,CAAiB,IAAI,CAAC,CAAC;AAMxD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AAExD,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,IAAG;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAE,KAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACjD,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,CAAC,CAAC;KACJ;AAzBU,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAKR,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AALhC,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAMI,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB,CAAA;;;MCpBhC,qBAAqB,CAAA;AAOhC,IAAA,WAAA,GAAA,GAAiB;IAEjB,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtD;iIAXU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,iFCTlC,u9BAkCA,EAAA,MAAA,EAAA,CAAA,gcAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDzBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,u9BAAA,EAAA,MAAA,EAAA,CAAA,gcAAA,CAAA,EAAA,CAAA;0EAOzB,KAAK,EAAA,CAAA;sBADJ,KAAK;;;MEAK,gBAAgB,CAAA;AAe3B,IAAA,WAAA,CAAoB,YAAiC,EACjC,EAAqB,EACrB,QAAyB,EACzB,OAAgC,EAAA;QAHhC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAqB;QACjC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;QACrB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QACzB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAyB;QAhB7C,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;AAEd,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;AAEtC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI;;;QAG5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAC1C,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC;AAEM,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;AAMtC,QAAA,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,EAAE;AAChD,YAAA,kBAAkB,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM;AAC/C,SAAA,CAAC,CAAA;KACH;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,CAAC,SAAS,CAAC,KAAK,IAAG;YAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC,CAAA;KACH;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC3B;IAED,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;iIAxCU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,gDCX7B,yxBAuBA,EAAA,MAAA,EAAA,CAAA,2eAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDZa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,yxBAAA,EAAA,MAAA,EAAA,CAAA,2eAAA,CAAA,EAAA,CAAA;;;MEkBT,oBAAoB,CAAA;IAC/B,OAAO,MAAM,CAAE,QAAkC,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,oBAAoB;AAC9B,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE;AAC7C,aAAA;SACF,CAAC;KACH;iIARU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAApB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBAfd,gBAAgB,EAAE,qBAAqB,CAElD,EAAA,OAAA,EAAA,CAAA,YAAY,iCAKZ,iBAAiB;YACjB,mBAAmB,CAAA,EAAA,CAAA,CAAA,EAAA;AAOd,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EALlB,SAAA,EAAA;YACP,mBAAmB;AACnB,YAAA,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE;AAC9D,SAAA,EAAA,OAAA,EAAA,CAXG,YAAY;YACZ,wBAAwB,CAAC,SAAS,CAAC;AAC/B,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,SAAS,EAAE,gBAAgB;aAC9B,CAAC;YACF,iBAAiB;YACjB,mBAAmB,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAOd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhBhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;AACvD,oBAAA,OAAO,EAAE;wBACL,YAAY;wBACZ,wBAAwB,CAAC,SAAS,CAAC;AAC/B,4BAAA,WAAW,EAAE,UAAU;AACvB,4BAAA,SAAS,EAAE,gBAAgB;yBAC9B,CAAC;wBACF,iBAAiB;wBACjB,mBAAmB;AACtB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,mBAAmB;AACnB,wBAAA,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE;AAC9D,qBAAA;AACJ,iBAAA,CAAA;;;ACxBD;;AAEG;;;;"}