vc-error-handlers 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,43 @@
1
+ export const PAGE_LEVEL_API_CONFIG = [
2
+ {
3
+ method: 'POST',
4
+ path: '/compliance_post',
5
+ query: { mode: 'xyz' },
6
+ body: { mode: 'abc' },
7
+ pageCodes: ['compliance:mr', 'risk:mr'],
8
+ },
9
+ {
10
+ method: 'GET',
11
+ path: '/compliance_post',
12
+ query: { mode: 'xyz' },
13
+ body: { mode: 'abc' },
14
+ pageCodes: ['compliance:mr', 'risk:mr'],
15
+ },
16
+ ];
17
+ export const COMPONENT_LEVEL_API_CONFIG = [
18
+ {
19
+ method: 'GET',
20
+ path: '/organization/?mode=organisationUsersList',
21
+ query: { type: 'active' },
22
+ body: null,
23
+ },
24
+ {
25
+ method: 'GET',
26
+ path: '/organization/?mode=organisationUsersList',
27
+ query: { type: 'power_users' },
28
+ body: null,
29
+ },
30
+ {
31
+ method: 'GET',
32
+ path: '/organization/?mode=organisationUsersList',
33
+ query: { type: 'light_users' },
34
+ body: null,
35
+ },
36
+ {
37
+ method: 'GET',
38
+ path: '/organization/?mode=organisationUsersList',
39
+ query: { type: 'inactive' },
40
+ body: null,
41
+ },
42
+ ];
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbmZpZy5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9jb25zdGFudHMvYXBpLWNvbmZpZy5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkM7UUFDRSxNQUFNLEVBQUUsTUFBTTtRQUNkLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUN0QixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3JCLFNBQVMsRUFBRSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUM7S0FDeEM7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3RCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDckIsU0FBUyxFQUFFLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQztLQUN4QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN4QztRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDO1FBQ3ZCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsYUFBYSxFQUFDO1FBQzVCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsYUFBYSxFQUFDO1FBQzVCLElBQUksRUFBRSxJQUFJO0tBQ1g7SUFDRDtRQUNFLE1BQU0sRUFBRSxLQUFLO1FBQ2IsSUFBSSxFQUFFLDJDQUEyQztRQUNqRCxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDO1FBQ3pCLElBQUksRUFBRSxJQUFJO0tBQ1g7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFBBR0VfTEVWRUxfQVBJX0NPTkZJRyA9IFtcclxuICB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHBhdGg6ICcvY29tcGxpYW5jZV9wb3N0JyxcclxuICAgIHF1ZXJ5OiB7IG1vZGU6ICd4eXonIH0sXHJcbiAgICBib2R5OiB7IG1vZGU6ICdhYmMnIH0sXHJcbiAgICBwYWdlQ29kZXM6IFsnY29tcGxpYW5jZTptcicsICdyaXNrOm1yJ10sXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9jb21wbGlhbmNlX3Bvc3QnLFxyXG4gICAgcXVlcnk6IHsgbW9kZTogJ3h5eicgfSxcclxuICAgIGJvZHk6IHsgbW9kZTogJ2FiYycgfSxcclxuICAgIHBhZ2VDb2RlczogWydjb21wbGlhbmNlOm1yJywgJ3Jpc2s6bXInXSxcclxuICB9LFxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9MRVZFTF9BUElfQ09ORklHID0gW1xyXG4gIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICBwYXRoOiAnL29yZ2FuaXphdGlvbi8/bW9kZT1vcmdhbmlzYXRpb25Vc2Vyc0xpc3QnLFxyXG4gICAgcXVlcnk6IHt0eXBlOiAnYWN0aXZlJ30sXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbWV0aG9kOiAnR0VUJyxcclxuICAgIHBhdGg6ICcvb3JnYW5pemF0aW9uLz9tb2RlPW9yZ2FuaXNhdGlvblVzZXJzTGlzdCcsXHJcbiAgICBxdWVyeToge3R5cGU6ICdwb3dlcl91c2Vycyd9LFxyXG4gICAgYm9keTogbnVsbCxcclxuICB9LFxyXG4gIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICBwYXRoOiAnL29yZ2FuaXphdGlvbi8/bW9kZT1vcmdhbmlzYXRpb25Vc2Vyc0xpc3QnLFxyXG4gICAgcXVlcnk6IHt0eXBlOiAnbGlnaHRfdXNlcnMnfSxcclxuICAgIGJvZHk6IG51bGwsXHJcbiAgfSxcclxuICB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgcGF0aDogJy9vcmdhbml6YXRpb24vP21vZGU9b3JnYW5pc2F0aW9uVXNlcnNMaXN0JyxcclxuICAgIHF1ZXJ5OiB7dHlwZTogJ2luYWN0aXZlJ30sXHJcbiAgICBib2R5OiBudWxsLFxyXG4gIH0sXHJcbl07XHJcbiJdfQ==
@@ -5,37 +5,24 @@ import { catchError, tap, timeout } from 'rxjs/operators';
5
5
  import { API_TIMEOUT_TIME } from '../constants/error-handling.constants';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "../services/global-error.service";
8
- import * as i2 from "../../ui-kit/snack-bar/snack-bar.service";
9
8
  export class HttpReqInterceptor {
10
- constructor(errorService, snackBarService) {
9
+ constructor(errorService) {
11
10
  this.errorService = errorService;
12
- this.snackBarService = snackBarService;
13
11
  }
14
12
  intercept(req, next) {
15
13
  return next.handle(req).pipe(timeout(API_TIMEOUT_TIME), tap((event) => {
16
14
  if (event instanceof HttpResponse) {
17
- this.handleSoftErrors(event);
15
+ this.errorService.handleSoftErrors(event);
18
16
  }
19
17
  }), catchError((error) => {
20
18
  this.errorService.handleError(error, req);
21
19
  return throwError(error);
22
20
  }));
23
21
  }
24
- handleSoftErrors(event) {
25
- const xData = event.headers.get('X-Data');
26
- if (xData) {
27
- const parsedData = JSON.parse(xData);
28
- const statusCode = parsedData.statusCode;
29
- const statusMessage = parsedData.message;
30
- if (statusCode && statusCode !== 0) {
31
- this.snackBarService.show(statusMessage || 'Error occurred', 'error');
32
- }
33
- }
34
- }
35
22
  }
36
- HttpReqInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, deps: [{ token: i1.GlobalErrorService }, { token: i2.SnackBarService }], target: i0.ɵɵFactoryTarget.Injectable });
23
+ HttpReqInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, deps: [{ token: i1.GlobalErrorService }], target: i0.ɵɵFactoryTarget.Injectable });
37
24
  HttpReqInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor });
38
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: HttpReqInterceptor, decorators: [{
39
26
  type: Injectable
40
- }], ctorParameters: function () { return [{ type: i1.GlobalErrorService }, { type: i2.SnackBarService }]; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjLWVycm9yLWhhbmRsZXJzL3NyYy9saWIvc2hhcmVkL2ludGVyY2VwdG9ycy9odHRwLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQU1MLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7QUFHekUsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNVLFlBQWdDLEVBQ2hDLGVBQWdDO1FBRGhDLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDdkMsQ0FBQztJQUVKLFNBQVMsQ0FDUCxHQUFxQixFQUNyQixJQUFpQjtRQUVqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUMxQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFDekIsR0FBRyxDQUFDLENBQUMsS0FBcUIsRUFBRSxFQUFFO1lBQzVCLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRTtnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQXdCO1FBQy9DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFDLElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ3pDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFFekMsSUFBSSxVQUFVLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0Y7SUFDSCxDQUFDOzsrR0FwQ1Usa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBIdHRwUmVxdWVzdCxcclxuICBIdHRwSGFuZGxlcixcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEludGVyY2VwdG9yLFxyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBSZXNwb25zZSxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLWVycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEFQSV9USU1FT1VUX1RJTUUgfSBmcm9tICcuLi9jb25zdGFudHMvZXJyb3ItaGFuZGxpbmcuY29uc3RhbnRzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEh0dHBSZXFJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgaW50ZXJjZXB0KFxyXG4gICAgcmVxOiBIdHRwUmVxdWVzdDxhbnk+LFxyXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKFxyXG4gICAgICB0aW1lb3V0KEFQSV9USU1FT1VUX1RJTUUpLFxyXG4gICAgICB0YXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVTb2Z0RXJyb3JzKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmVycm9yU2VydmljZS5oYW5kbGVFcnJvcihlcnJvciwgcmVxKTtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVTb2Z0RXJyb3JzKGV2ZW50OiBIdHRwUmVzcG9uc2U8YW55Pikge1xyXG4gICAgY29uc3QgeERhdGEgPSBldmVudC5oZWFkZXJzLmdldCgnWC1EYXRhJyk7XHJcblxyXG4gICAgaWYgKHhEYXRhKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKHhEYXRhKTtcclxuICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHBhcnNlZERhdGEuc3RhdHVzQ29kZTtcclxuICAgICAgY29uc3Qgc3RhdHVzTWVzc2FnZSA9IHBhcnNlZERhdGEubWVzc2FnZTtcclxuXHJcbiAgICAgIGlmIChzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgIT09IDApIHtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5zaG93KHN0YXR1c01lc3NhZ2UgfHwgJ0Vycm9yIG9jY3VycmVkJywgJ2Vycm9yJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
27
+ }], ctorParameters: function () { return [{ type: i1.GlobalErrorService }]; } });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZjLWVycm9yLWhhbmRsZXJzL3NyYy9saWIvc2hhcmVkL2ludGVyY2VwdG9ycy9odHRwLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQU1MLFlBQVksR0FDYixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7OztBQUd6RSxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQ1UsWUFBZ0M7UUFBaEMsaUJBQVksR0FBWixZQUFZLENBQW9CO0lBQ3ZDLENBQUM7SUFFSixTQUFTLENBQ1AsR0FBcUIsRUFDckIsSUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQ3pCLEdBQUcsQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtZQUM1QixJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0M7UUFDSCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzsrR0FyQlUsa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBIdHRwUmVxdWVzdCxcclxuICBIdHRwSGFuZGxlcixcclxuICBIdHRwRXZlbnQsXHJcbiAgSHR0cEludGVyY2VwdG9yLFxyXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gIEh0dHBSZXNwb25zZSxcclxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLWVycm9yLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQVBJX1RJTUVPVVRfVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9lcnJvci1oYW5kbGluZy5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSHR0cFJlcUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXJyb3JTZXJ2aWNlOiBHbG9iYWxFcnJvclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGludGVyY2VwdChcclxuICAgIHJlcTogSHR0cFJlcXVlc3Q8YW55PixcclxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXHJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZShcclxuICAgICAgdGltZW91dChBUElfVElNRU9VVF9USU1FKSxcclxuICAgICAgdGFwKChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmhhbmRsZVNvZnRFcnJvcnMoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLmhhbmRsZUVycm9yKGVycm9yLCByZXEpO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,19 +1,55 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import { ErrorStatusCode } from '../types/global-error.types';
4
+ import { ERROR_CONFIG } from '../constants/error-handling.constants';
5
+ import { PAGE_LEVEL_API_CONFIG, COMPONENT_LEVEL_API_CONFIG, } from '../constants/api-config.constants';
4
6
  import * as i0 from "@angular/core";
7
+ import * as i1 from "../../ui-kit/snack-bar/snack-bar.service";
8
+ import * as i2 from "./util.service";
9
+ import * as i3 from "@angular/router";
5
10
  export class GlobalErrorService {
6
- constructor() {
11
+ constructor(snackBarService, utilService, router) {
12
+ this.snackBarService = snackBarService;
13
+ this.utilService = utilService;
14
+ this.router = router;
7
15
  this.globalError$ = new Subject();
8
16
  this.localError$ = new Subject();
17
+ this.pageLevelApiConfig = PAGE_LEVEL_API_CONFIG;
18
+ this.componentLevelApiConfig = COMPONENT_LEVEL_API_CONFIG;
19
+ }
20
+ handleSoftErrors(event) {
21
+ const xData = event.headers.get('X-Data');
22
+ if (xData) {
23
+ const parsedData = JSON.parse(xData);
24
+ const statusCode = parsedData.statusCode;
25
+ const statusMessage = parsedData.message;
26
+ if (statusCode && statusCode !== 0) {
27
+ this.snackBarService.show(statusMessage || 'Error occurred', 'error');
28
+ }
29
+ }
9
30
  }
10
31
  handleError(error, request) {
11
32
  if (this.isUnauthenticated(error) ||
12
33
  this.isUnauthorizedAccess(error) ||
13
34
  this.isNetworkUnavailable(error)) {
14
- this.globalError$.next(error);
35
+ this.publishGlobalError(error);
36
+ }
37
+ else if (this.isServerError(error)) {
38
+ this.handleServerError(error, request);
39
+ }
40
+ else {
41
+ this.handleSoftErrors(error);
15
42
  }
16
43
  }
44
+ isServerError(error) {
45
+ const serverErrorCodes = [
46
+ ErrorStatusCode.InternalServerError,
47
+ ErrorStatusCode.ServiceUnavailable,
48
+ ErrorStatusCode.BadGateway,
49
+ ErrorStatusCode.RequestTimeout,
50
+ ];
51
+ return serverErrorCodes.includes(error.status);
52
+ }
17
53
  isUnauthenticated(error) {
18
54
  return error.status === ErrorStatusCode.Unauthenticated;
19
55
  }
@@ -23,13 +59,87 @@ export class GlobalErrorService {
23
59
  isNetworkUnavailable(error) {
24
60
  return error.status === ErrorStatusCode.NetworkUnavailable;
25
61
  }
62
+ handleServerError(error, request) {
63
+ if (this.isPageLevelError(error, request)) {
64
+ this.publishGlobalError(error);
65
+ }
66
+ else if (this.isComponentLevelError(error, request)) {
67
+ this.publishLocalError(error, request);
68
+ }
69
+ else {
70
+ this.showServerSnackBarError();
71
+ }
72
+ }
73
+ publishGlobalError(error) {
74
+ this.globalError$.next(error);
75
+ }
76
+ publishLocalError(error, request) {
77
+ this.localError$.next({ error, request });
78
+ }
79
+ showServerSnackBarError() {
80
+ const message = ERROR_CONFIG.SERVER_ERROR.snackBarMessage;
81
+ this.snackBarService.show(message, 'error');
82
+ }
83
+ isPageLevelError(error, request) {
84
+ const { method, path, query, body } = this.parseRequest(request);
85
+ const pageCode = this.getPageCode();
86
+ const isConfigMatched = this.pageLevelApiConfig.some((apiConfig) => {
87
+ if (apiConfig.method !== method)
88
+ return false;
89
+ if (apiConfig.path !== path)
90
+ return false;
91
+ const isQuerySubset = this.utilService.isJsonSubset(apiConfig.query, query);
92
+ if (!isQuerySubset)
93
+ return false;
94
+ const isBodyMatch = this.utilService.isJsonSubset(apiConfig.body, body);
95
+ if (!isBodyMatch)
96
+ return false;
97
+ return apiConfig.pageCodes.includes(pageCode);
98
+ });
99
+ return isConfigMatched;
100
+ }
101
+ isComponentLevelError(error, request) {
102
+ const { method, url: path, params, body } = request;
103
+ const query = {};
104
+ params.keys().forEach((key) => {
105
+ query[key] = params.get(key);
106
+ });
107
+ const isConfigFound = this.componentLevelApiConfig.some((apiConfig) => {
108
+ if (apiConfig.method !== method)
109
+ return false;
110
+ if (!path.includes(apiConfig.path))
111
+ return false;
112
+ const isQuerySubset = this.utilService.isJsonSubset(query, apiConfig.query);
113
+ if (!isQuerySubset)
114
+ return false;
115
+ if (apiConfig.body) {
116
+ const isBodyMatch = this.utilService.isJsonSubset(apiConfig.body, body);
117
+ if (!isBodyMatch)
118
+ return false;
119
+ }
120
+ return true;
121
+ });
122
+ return isConfigFound;
123
+ }
124
+ parseRequest(request) {
125
+ const { method, url: path, params, body } = request;
126
+ const query = {};
127
+ params.keys().forEach((key) => {
128
+ query[key] = params.get(key);
129
+ });
130
+ return { method, path, query, body };
131
+ }
132
+ getPageCode() {
133
+ const currentRoute = this.router.routerState.snapshot.root.firstChild;
134
+ return currentRoute?.data?.pageCode;
135
+ }
26
136
  }
27
- GlobalErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
137
+ GlobalErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, deps: [{ token: i1.SnackBarService }, { token: i2.UtilsService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
28
138
  GlobalErrorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, providedIn: 'root' });
29
139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: GlobalErrorService, decorators: [{
30
140
  type: Injectable,
31
141
  args: [{
32
142
  providedIn: 'root',
33
143
  }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUs5RCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSVMsaUJBQVksR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQyxnQkFBVyxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO0tBdUJsRDtJQXJCUSxXQUFXLENBQUMsS0FBd0IsRUFBRSxPQUF5QjtRQUNwRSxJQUNFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQ2hDO1lBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBd0I7UUFDaEQsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxlQUFlLENBQUM7SUFDMUQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXdCO1FBQ25ELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQXdCO1FBQ25ELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLENBQUM7SUFDN0QsQ0FBQzs7K0dBeEJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBFcnJvclN0YXR1c0NvZGUgfSBmcm9tICcuLi90eXBlcy9nbG9iYWwtZXJyb3IudHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdsb2JhbEVycm9yU2VydmljZSB7XHJcbiAgcHVibGljIGdsb2JhbEVycm9yJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBwdWJsaWMgbG9jYWxFcnJvciQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pc1VuYXV0aGVudGljYXRlZChlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc05ldHdvcmtVbmF2YWlsYWJsZShlcnJvcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdsb2JhbEVycm9yJC5uZXh0KGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmF1dGhlbnRpY2F0ZWQoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTmV0d29ya1VuYXZhaWxhYmxlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGVycm9yLnN0YXR1cyA9PT0gRXJyb3JTdGF0dXNDb2RlLk5ldHdvcmtVbmF2YWlsYWJsZTtcclxuICB9XHJcbn1cclxuIl19
144
+ }], ctorParameters: function () { return [{ type: i1.SnackBarService }, { type: i2.UtilsService }, { type: i3.Router }]; } });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Yy1lcnJvci1oYW5kbGVycy9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixHQUMzQixNQUFNLG1DQUFtQyxDQUFDOzs7OztBQUszQyxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCLFlBQ1UsZUFBZ0MsRUFDaEMsV0FBeUIsRUFDekIsTUFBYztRQUZkLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYztRQUN6QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBVGpCLGlCQUFZLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0MsZ0JBQVcsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV6Qyx1QkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztRQUMzQyw0QkFBdUIsR0FBRywwQkFBMEIsQ0FBQztJQU0xRCxDQUFDO0lBRUcsZ0JBQWdCLENBQUMsS0FBNEM7UUFDbEUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLFVB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QUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3RFLE9BQU8sWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7SUFDdEMsQ0FBQzs7K0dBekpVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgSHR0cFJlcXVlc3QsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi91dGlsLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgRXJyb3JTdGF0dXNDb2RlIH0gZnJvbSAnLi4vdHlwZXMvZ2xvYmFsLWVycm9yLnR5cGVzJztcclxuaW1wb3J0IHsgRVJST1JfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Vycm9yLWhhbmRsaW5nLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgUEFHRV9MRVZFTF9BUElfQ09ORklHLFxyXG4gIENPTVBPTkVOVF9MRVZFTF9BUElfQ09ORklHLFxyXG59IGZyb20gJy4uL2NvbnN0YW50cy9hcGktY29uZmlnLmNvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2xvYmFsRXJyb3JTZXJ2aWNlIHtcclxuICBwdWJsaWMgZ2xvYmFsRXJyb3IkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyBsb2NhbEVycm9yJDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBwYWdlTGV2ZWxBcGlDb25maWcgPSBQQUdFX0xFVkVMX0FQSV9DT05GSUc7XHJcbiAgcHJpdmF0ZSBjb21wb25lbnRMZXZlbEFwaUNvbmZpZyA9IENPTVBPTkVOVF9MRVZFTF9BUElfQ09ORklHO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc25hY2tCYXJTZXJ2aWNlOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7fVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU29mdEVycm9ycyhldmVudDogSHR0cFJlc3BvbnNlPGFueT4gfCBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgY29uc3QgeERhdGEgPSBldmVudC5oZWFkZXJzLmdldCgnWC1EYXRhJyk7XHJcblxyXG4gICAgaWYgKHhEYXRhKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKHhEYXRhKTtcclxuICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9IHBhcnNlZERhdGEuc3RhdHVzQ29kZTtcclxuICAgICAgY29uc3Qgc3RhdHVzTWVzc2FnZSA9IHBhcnNlZERhdGEubWVzc2FnZTtcclxuXHJcbiAgICAgIGlmIChzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgIT09IDApIHtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5zaG93KHN0YXR1c01lc3NhZ2UgfHwgJ0Vycm9yIG9jY3VycmVkJywgJ2Vycm9yJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4pIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pc1VuYXV0aGVudGljYXRlZChlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcikgfHxcclxuICAgICAgdGhpcy5pc05ldHdvcmtVbmF2YWlsYWJsZShlcnJvcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hHbG9iYWxFcnJvcihlcnJvcik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZXJ2ZXJFcnJvcihlcnJvcikpIHtcclxuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJFcnJvcihlcnJvciwgcmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhbmRsZVNvZnRFcnJvcnMoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU2VydmVyRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZXJ2ZXJFcnJvckNvZGVzID0gW1xyXG4gICAgICBFcnJvclN0YXR1c0NvZGUuSW50ZXJuYWxTZXJ2ZXJFcnJvcixcclxuICAgICAgRXJyb3JTdGF0dXNDb2RlLlNlcnZpY2VVbmF2YWlsYWJsZSxcclxuICAgICAgRXJyb3JTdGF0dXNDb2RlLkJhZEdhdGV3YXksXHJcbiAgICAgIEVycm9yU3RhdHVzQ29kZS5SZXF1ZXN0VGltZW91dCxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIHNlcnZlckVycm9yQ29kZXMuaW5jbHVkZXMoZXJyb3Iuc3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVbmF1dGhlbnRpY2F0ZWQoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VuYXV0aG9yaXplZEFjY2VzcyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTmV0d29ya1VuYXZhaWxhYmxlKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGVycm9yLnN0YXR1cyA9PT0gRXJyb3JTdGF0dXNDb2RlLk5ldHdvcmtVbmF2YWlsYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2VydmVyRXJyb3IoXHJcbiAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+XHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5pc1BhZ2VMZXZlbEVycm9yKGVycm9yLCByZXF1ZXN0KSkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hHbG9iYWxFcnJvcihlcnJvcik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wb25lbnRMZXZlbEVycm9yKGVycm9yLCByZXF1ZXN0KSkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hMb2NhbEVycm9yKGVycm9yLCByZXF1ZXN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd1NlcnZlclNuYWNrQmFyRXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHVibGlzaEdsb2JhbEVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgdGhpcy5nbG9iYWxFcnJvciQubmV4dChlcnJvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHB1Ymxpc2hMb2NhbEVycm9yKFxyXG4gICAgZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLFxyXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PlxyXG4gICkge1xyXG4gICAgdGhpcy5sb2NhbEVycm9yJC5uZXh0KHsgZXJyb3IsIHJlcXVlc3QgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dTZXJ2ZXJTbmFja0JhckVycm9yKCkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IEVSUk9SX0NPTkZJRy5TRVJWRVJfRVJST1Iuc25hY2tCYXJNZXNzYWdlO1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uuc2hvdyhtZXNzYWdlLCAnZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNQYWdlTGV2ZWxFcnJvcihcclxuICAgIGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSxcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT5cclxuICApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHsgbWV0aG9kLCBwYXRoLCBxdWVyeSwgYm9keSB9ID0gdGhpcy5wYXJzZVJlcXVlc3QocmVxdWVzdCk7XHJcbiAgICBjb25zdCBwYWdlQ29kZSA9IHRoaXMuZ2V0UGFnZUNvZGUoKTtcclxuXHJcbiAgICBjb25zdCBpc0NvbmZpZ01hdGNoZWQgPSB0aGlzLnBhZ2VMZXZlbEFwaUNvbmZpZy5zb21lKChhcGlDb25maWcpID0+IHtcclxuICAgICAgaWYgKGFwaUNvbmZpZy5tZXRob2QgIT09IG1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoYXBpQ29uZmlnLnBhdGggIT09IHBhdGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgY29uc3QgaXNRdWVyeVN1YnNldCA9IHRoaXMudXRpbFNlcnZpY2UuaXNKc29uU3Vic2V0KFxyXG4gICAgICAgIGFwaUNvbmZpZy5xdWVyeSxcclxuICAgICAgICBxdWVyeVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWlzUXVlcnlTdWJzZXQpIHJldHVybiBmYWxzZTtcclxuICAgICAgY29uc3QgaXNCb2R5TWF0Y2ggPSB0aGlzLnV0aWxTZXJ2aWNlLmlzSnNvblN1YnNldChhcGlDb25maWcuYm9keSwgYm9keSk7XHJcbiAgICAgIGlmICghaXNCb2R5TWF0Y2gpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIGFwaUNvbmZpZy5wYWdlQ29kZXMuaW5jbHVkZXMocGFnZUNvZGUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXNDb25maWdNYXRjaGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NvbXBvbmVudExldmVsRXJyb3IoXHJcbiAgICBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsXHJcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+XHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB7IG1ldGhvZCwgdXJsOiBwYXRoLCBwYXJhbXMsIGJvZHkgfSA9IHJlcXVlc3Q7XHJcbiAgICBjb25zdCBxdWVyeTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgcGFyYW1zLmtleXMoKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgcXVlcnlba2V5XSA9IHBhcmFtcy5nZXQoa2V5KTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgaXNDb25maWdGb3VuZCA9IHRoaXMuY29tcG9uZW50TGV2ZWxBcGlDb25maWcuc29tZSgoYXBpQ29uZmlnKSA9PiB7XHJcbiAgICAgIGlmIChhcGlDb25maWcubWV0aG9kICE9PSBtZXRob2QpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKCFwYXRoLmluY2x1ZGVzKGFwaUNvbmZpZy5wYXRoKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBjb25zdCBpc1F1ZXJ5U3Vic2V0ID0gdGhpcy51dGlsU2VydmljZS5pc0pzb25TdWJzZXQoXHJcbiAgICAgICAgcXVlcnksXHJcbiAgICAgICAgYXBpQ29uZmlnLnF1ZXJ5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghaXNRdWVyeVN1YnNldCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBpZiAoYXBpQ29uZmlnLmJvZHkpIHtcclxuICAgICAgICBjb25zdCBpc0JvZHlNYXRjaCA9IHRoaXMudXRpbFNlcnZpY2UuaXNKc29uU3Vic2V0KGFwaUNvbmZpZy5ib2R5LCBib2R5KTtcclxuICAgICAgICBpZiAoIWlzQm9keU1hdGNoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpc0NvbmZpZ0ZvdW5kO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZVJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55Pikge1xyXG4gICAgY29uc3QgeyBtZXRob2QsIHVybDogcGF0aCwgcGFyYW1zLCBib2R5IH0gPSByZXF1ZXN0O1xyXG4gICAgY29uc3QgcXVlcnk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIHBhcmFtcy5rZXlzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIHF1ZXJ5W2tleV0gPSBwYXJhbXMuZ2V0KGtleSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IG1ldGhvZCwgcGF0aCwgcXVlcnksIGJvZHkgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFnZUNvZGUoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290LmZpcnN0Q2hpbGQ7XHJcbiAgICByZXR1cm4gY3VycmVudFJvdXRlPy5kYXRhPy5wYWdlQ29kZTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,21 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class UtilsService {
4
+ isJsonSubset(parentJson, subsetJson) {
5
+ for (let key in subsetJson) {
6
+ if (!parentJson.hasOwnProperty(key) || parentJson[key] !== subsetJson[key]) {
7
+ return false;
8
+ }
9
+ }
10
+ return true;
11
+ }
12
+ }
13
+ UtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: UtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
+ UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: UtilsService, providedIn: 'root' });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: UtilsService, decorators: [{
16
+ type: Injectable,
17
+ args: [{
18
+ providedIn: 'root',
19
+ }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxZQUFZO0lBQ2hCLFlBQVksQ0FBQyxVQUFlLEVBQUUsVUFBZTtRQUNsRCxLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRSxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O3lHQVJVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcclxuICBwdWJsaWMgaXNKc29uU3Vic2V0KHBhcmVudEpzb246IGFueSwgc3Vic2V0SnNvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gc3Vic2V0SnNvbikge1xyXG4gICAgICBpZiAoIXBhcmVudEpzb24uaGFzT3duUHJvcGVydHkoa2V5KSB8fCBwYXJlbnRKc29uW2tleV0gIT09IHN1YnNldEpzb25ba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -8,7 +8,8 @@ import * as i3 from "./ui-kit/snack-bar/snack-bar/snack-bar.component";
8
8
  import * as i4 from "./shared/components/session-expired/session-expired.component";
9
9
  import * as i5 from "./shared/components/unauthorized/unauthorized.component";
10
10
  import * as i6 from "./shared/components/chunk-unavailable/chunk-unavailable.component";
11
- import * as i7 from "@angular/common";
11
+ import * as i7 from "./shared/components/server-error/server-error.component";
12
+ import * as i8 from "@angular/common";
12
13
  export class VcErrorHandlersComponent {
13
14
  constructor(errorService, snackBarService) {
14
15
  this.errorService = errorService;
@@ -17,6 +18,7 @@ export class VcErrorHandlersComponent {
17
18
  this.unauthorized = false;
18
19
  this.sessionExpired = false;
19
20
  this.chunkUnavailable = false;
21
+ this.serverError = false;
20
22
  this.isOnline = navigator.onLine;
21
23
  this.onNetworkOnline = () => {
22
24
  this.isOnline = true;
@@ -53,6 +55,9 @@ export class VcErrorHandlersComponent {
53
55
  else if (error.status === ErrorStatusCode.NetworkUnavailable) {
54
56
  this.handleNetworkError();
55
57
  }
58
+ else if (this.errorService.isServerError(error)) {
59
+ this.serverError = true;
60
+ }
56
61
  }
57
62
  subscribeNetworkDetection() {
58
63
  window.addEventListener('online', this.onNetworkOnline);
@@ -80,7 +85,8 @@ VcErrorHandlersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
80
85
  <lib-vc-error-chunk-unavailable
81
86
  *ngIf="chunkUnavailable"
82
87
  ></lib-vc-error-chunk-unavailable>
83
- `, isInline: true, components: [{ type: i3.SnackBarComponent, selector: "app-snack-bar" }, { type: i4.SessionExpiredComponent, selector: "lib-vc-error-session-expired" }, { type: i5.UnauthorizedComponent, selector: "lib-vc-error-unauthorized" }, { type: i6.ChunkUnavailableComponent, selector: "lib-vc-error-chunk-unavailable" }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
88
+ <lib-vc-error-server-error *ngIf="serverError"></lib-vc-error-server-error>
89
+ `, isInline: true, components: [{ type: i3.SnackBarComponent, selector: "app-snack-bar" }, { type: i4.SessionExpiredComponent, selector: "lib-vc-error-session-expired" }, { type: i5.UnauthorizedComponent, selector: "lib-vc-error-unauthorized" }, { type: i6.ChunkUnavailableComponent, selector: "lib-vc-error-chunk-unavailable" }, { type: i7.ServerErrorComponent, selector: "lib-vc-error-server-error" }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
84
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImport: i0, type: VcErrorHandlersComponent, decorators: [{
85
91
  type: Component,
86
92
  args: [{
@@ -94,7 +100,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.1", ngImpor
94
100
  <lib-vc-error-chunk-unavailable
95
101
  *ngIf="chunkUnavailable"
96
102
  ></lib-vc-error-chunk-unavailable>
103
+ <lib-vc-error-server-error *ngIf="serverError"></lib-vc-error-server-error>
97
104
  `,
98
105
  }]
99
106
  }], ctorParameters: function () { return [{ type: i1.GlobalErrorService }, { type: i2.SnackBarService }]; } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmMtZXJyb3ItaGFuZGxlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi92Yy1lcnJvci1oYW5kbGVycy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7QUFlM0UsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQyxZQUNVLFlBQWdDLEVBQ2hDLGVBQWdDO1FBRGhDLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFUbEMsZ0JBQVcsR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUM7UUFFdkQsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGFBQVEsR0FBWSxTQUFTLENBQUMsTUFBTSxDQUFDO1FBeUM3QixvQkFBZSxHQUFHLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBRU0scUJBQWdCLEdBQUcsR0FBRyxFQUFFO1lBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQTNDQSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUF3QjtRQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLGVBQWUsRUFBRTtZQUNwRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM1QjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLGtCQUFrQixFQUFFO1lBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDOUI7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLGtCQUFrQixFQUFFO1lBQzlELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFZTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7cUhBckVVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDZEQVh6Qjs7Ozs7Ozs7O0dBU1Q7MkZBRVUsd0JBQXdCO2tCQWJwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7O0dBU1Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyBHbG9iYWxFcnJvclNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBFcnJvclN0YXR1c0NvZGUgfSBmcm9tICcuL3NoYXJlZC90eXBlcy9nbG9iYWwtZXJyb3IudHlwZXMnO1xyXG5pbXBvcnQgeyBFUlJPUl9DT05GSUcgfSBmcm9tICcuL3NoYXJlZC9jb25zdGFudHMvZXJyb3ItaGFuZGxpbmcuY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXZjLWVycm9yLWhhbmRsZXJzJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC1zbmFjay1iYXI+PC9hcHAtc25hY2stYmFyPlxyXG4gICAgPGxpYi12Yy1lcnJvci1zZXNzaW9uLWV4cGlyZWRcclxuICAgICAgKm5nSWY9XCJzZXNzaW9uRXhwaXJlZFwiXHJcbiAgICA+PC9saWItdmMtZXJyb3Itc2Vzc2lvbi1leHBpcmVkPlxyXG4gICAgPGxpYi12Yy1lcnJvci11bmF1dGhvcml6ZWQgKm5nSWY9XCJ1bmF1dGhvcml6ZWRcIj48L2xpYi12Yy1lcnJvci11bmF1dGhvcml6ZWQ+XHJcbiAgICA8bGliLXZjLWVycm9yLWNodW5rLXVuYXZhaWxhYmxlXHJcbiAgICAgICpuZ0lmPVwiY2h1bmtVbmF2YWlsYWJsZVwiXHJcbiAgICA+PC9saWItdmMtZXJyb3ItY2h1bmstdW5hdmFpbGFibGU+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZjRXJyb3JIYW5kbGVyc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBlcnJvckNvbmZpZyA9IEVSUk9SX0NPTkZJRy5ORVRXT1JLX1VOQVZBSUxBQkxFO1xyXG5cclxuICB1bmF1dGhvcml6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXNzaW9uRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNodW5rVW5hdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc09ubGluZTogYm9vbGVhbiA9IG5hdmlnYXRvci5vbkxpbmU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEdsb2JhbEVycm9yU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXJTZXJ2aWNlOiBTbmFja0JhclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuc3Vic2NyaWJlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVOZXR3b3JrRGV0ZWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCB0aGlzLm9uTmV0d29ya09ubGluZSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIHRoaXMub25OZXR3b3JrT2ZmbGluZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZUdsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5lcnJvclNlcnZpY2UuZ2xvYmFsRXJyb3IkLnN1YnNjcmliZSgoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gRXJyb3JTdGF0dXNDb2RlLlVuYXV0aGVudGljYXRlZCkge1xyXG4gICAgICB0aGlzLnNlc3Npb25FeHBpcmVkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRob3JpemVkQWNjZXNzKSB7XHJcbiAgICAgIHRoaXMudW5hdXRob3JpemVkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuSlNDaHVua1VuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHRoaXMuY2h1bmtVbmF2YWlsYWJsZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gRXJyb3JTdGF0dXNDb2RlLk5ldHdvcmtVbmF2YWlsYWJsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU5ldHdvcmtFcnJvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVOZXR3b3JrRGV0ZWN0aW9uKCkge1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT25saW5lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc09ubGluZSA9IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT2ZmbGluZSA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNPbmxpbmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTmV0d29ya0Vycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKSB7XHJcbiAgICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93T2ZmbGluZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uuc2hvdyh0aGlzLmVycm9yQ29uZmlnLm9mZmxpbmVNZXNzYWdlLCAnZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlkZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UuaGlkZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmMtZXJyb3ItaGFuZGxlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdmMtZXJyb3ItaGFuZGxlcnMvc3JjL2xpYi92Yy1lcnJvci1oYW5kbGVycy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0xQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7Ozs7O0FBZ0IzRSxNQUFNLE9BQU8sd0JBQXdCO0lBU25DLFlBQ1UsWUFBZ0MsRUFDaEMsZUFBZ0M7UUFEaEMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQVZsQyxnQkFBVyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztRQUV2RCxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsYUFBUSxHQUFZLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUEyQzdCLG9CQUFlLEdBQUcsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFTSxxQkFBZ0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBN0NBLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQXdCO1FBQzFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsZUFBZSxFQUFFO1lBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUMxQjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsa0JBQWtCLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFZTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7cUhBeEVVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDZEQVp6Qjs7Ozs7Ozs7OztHQVVUOzJGQUVVLHdCQUF3QjtrQkFkcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuXHJcbmltcG9ydCB7IEdsb2JhbEVycm9yU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2dsb2JhbC1lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEVycm9yU3RhdHVzQ29kZSB9IGZyb20gJy4vc2hhcmVkL3R5cGVzL2dsb2JhbC1lcnJvci50eXBlcyc7XHJcbmltcG9ydCB7IEVSUk9SX0NPTkZJRyB9IGZyb20gJy4vc2hhcmVkL2NvbnN0YW50cy9lcnJvci1oYW5kbGluZy5jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdmMtZXJyb3ItaGFuZGxlcnMnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXBwLXNuYWNrLWJhcj48L2FwcC1zbmFjay1iYXI+XHJcbiAgICA8bGliLXZjLWVycm9yLXNlc3Npb24tZXhwaXJlZFxyXG4gICAgICAqbmdJZj1cInNlc3Npb25FeHBpcmVkXCJcclxuICAgID48L2xpYi12Yy1lcnJvci1zZXNzaW9uLWV4cGlyZWQ+XHJcbiAgICA8bGliLXZjLWVycm9yLXVuYXV0aG9yaXplZCAqbmdJZj1cInVuYXV0aG9yaXplZFwiPjwvbGliLXZjLWVycm9yLXVuYXV0aG9yaXplZD5cclxuICAgIDxsaWItdmMtZXJyb3ItY2h1bmstdW5hdmFpbGFibGVcclxuICAgICAgKm5nSWY9XCJjaHVua1VuYXZhaWxhYmxlXCJcclxuICAgID48L2xpYi12Yy1lcnJvci1jaHVuay11bmF2YWlsYWJsZT5cclxuICAgIDxsaWItdmMtZXJyb3Itc2VydmVyLWVycm9yICpuZ0lmPVwic2VydmVyRXJyb3JcIj48L2xpYi12Yy1lcnJvci1zZXJ2ZXItZXJyb3I+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZjRXJyb3JIYW5kbGVyc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBlcnJvckNvbmZpZyA9IEVSUk9SX0NPTkZJRy5ORVRXT1JLX1VOQVZBSUxBQkxFO1xyXG5cclxuICB1bmF1dGhvcml6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXNzaW9uRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNodW5rVW5hdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXJ2ZXJFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzT25saW5lOiBib29sZWFuID0gbmF2aWdhdG9yLm9uTGluZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmliZU5ldHdvcmtEZXRlY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlR2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmVycm9yU2VydmljZS5nbG9iYWxFcnJvciQuc3Vic2NyaWJlKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuVW5hdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkV4cGlyZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWRBY2Nlc3MpIHtcclxuICAgICAgdGhpcy51bmF1dGhvcml6ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IEVycm9yU3RhdHVzQ29kZS5KU0NodW5rVW5hdmFpbGFibGUpIHtcclxuICAgICAgdGhpcy5jaHVua1VuYXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSBFcnJvclN0YXR1c0NvZGUuTmV0d29ya1VuYXZhaWxhYmxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTmV0d29ya0Vycm9yKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3JTZXJ2aWNlLmlzU2VydmVyRXJyb3IoZXJyb3IpKSB7XHJcbiAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVOZXR3b3JrRGV0ZWN0aW9uKCkge1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMub25OZXR3b3JrT25saW5lKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5vbk5ldHdvcmtPZmZsaW5lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT25saW5lID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc09ubGluZSA9IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgb25OZXR3b3JrT2ZmbGluZSA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNPbmxpbmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTmV0d29ya0Vycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzT25saW5lKSB7XHJcbiAgICAgIHRoaXMuc2hvd09mZmxpbmVTbmFja0JhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93T2ZmbGluZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2Uuc2hvdyh0aGlzLmVycm9yQ29uZmlnLm9mZmxpbmVNZXNzYWdlLCAnZXJyb3InKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGlkZVNuYWNrQmFyKCkge1xyXG4gICAgdGhpcy5zbmFja0JhclNlcnZpY2UuaGlkZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=