@abp/ng.theme.shared 7.3.1 → 7.4.0-rc.1
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.
- package/esm2022/extensions/lib/components/extensible-form/extensible-form-prop.component.mjs +4 -4
- package/esm2022/extensions/lib/components/extensible-table/extensible-table.component.mjs +4 -1
- package/esm2022/extensions/lib/components/grid-actions/grid-actions.component.mjs +3 -3
- package/esm2022/extensions/lib/models/actions.mjs +4 -2
- package/esm2022/extensions/lib/models/entity-actions.mjs +3 -1
- package/esm2022/lib/components/index.mjs +2 -1
- package/esm2022/lib/components/internet-connection-status/internet-connection-status.component.mjs +29 -0
- package/esm2022/lib/constants/default-errors.mjs +52 -0
- package/esm2022/lib/handlers/error.handler.mjs +39 -249
- package/esm2022/lib/models/common.mjs +1 -1
- package/esm2022/lib/models/nav-item.mjs +1 -1
- package/esm2022/lib/providers/error-handlers.provider.mjs +28 -0
- package/esm2022/lib/providers/index.mjs +2 -1
- package/esm2022/lib/services/abp-format-error-handler.service.mjs +46 -0
- package/esm2022/lib/services/create-error-component.service.mjs +77 -0
- package/esm2022/lib/services/index.mjs +7 -1
- package/esm2022/lib/services/router-error-handler.service.mjs +43 -0
- package/esm2022/lib/services/status-code-error-handler.service.mjs +85 -0
- package/esm2022/lib/services/tenant-resolve-error-handler.service.mjs +30 -0
- package/esm2022/lib/services/unknown-status-code-error-handler.service.mjs +37 -0
- package/esm2022/lib/theme-shared.module.mjs +5 -4
- package/esm2022/lib/tokens/http-error.token.mjs +2 -1
- package/esm2022/lib/utils/error.utils.mjs +25 -0
- package/esm2022/lib/utils/index.mjs +2 -1
- package/esm2022/public-api.mjs +2 -1
- package/extensions/lib/models/actions.d.ts +3 -1
- package/extensions/lib/models/entity-actions.d.ts +2 -0
- package/fesm2022/abp-ng.theme.shared-extensions.mjs +13 -6
- package/fesm2022/abp-ng.theme.shared-extensions.mjs.map +1 -1
- package/fesm2022/abp-ng.theme.shared.mjs +704 -515
- package/fesm2022/abp-ng.theme.shared.mjs.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/internet-connection-status/internet-connection-status.component.d.ts +8 -0
- package/lib/constants/default-errors.d.ts +51 -0
- package/lib/handlers/error.handler.d.ts +11 -69
- package/lib/models/common.d.ts +7 -2
- package/lib/models/nav-item.d.ts +9 -0
- package/lib/providers/error-handlers.provider.d.ts +2 -0
- package/lib/providers/index.d.ts +1 -0
- package/lib/services/abp-format-error-handler.service.d.ts +13 -0
- package/lib/services/create-error-component.service.d.ts +20 -0
- package/lib/services/index.d.ts +6 -0
- package/lib/services/router-error-handler.service.d.ts +12 -0
- package/lib/services/status-code-error-handler.service.d.ts +21 -0
- package/lib/services/tenant-resolve-error-handler.service.d.ts +13 -0
- package/lib/services/unknown-status-code-error-handler.service.d.ts +16 -0
- package/lib/tokens/http-error.token.d.ts +2 -1
- package/lib/utils/error.utils.d.ts +8 -0
- package/lib/utils/index.d.ts +1 -0
- package/package.json +3 -3
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export const DEFAULT_ERROR_MESSAGES = {
|
|
2
|
+
defaultError: {
|
|
3
|
+
title: 'An error has occurred!',
|
|
4
|
+
details: 'Error detail not sent by server.',
|
|
5
|
+
},
|
|
6
|
+
defaultError401: {
|
|
7
|
+
title: 'You are not authenticated!',
|
|
8
|
+
details: 'You should be authenticated (sign in) in order to perform this operation.',
|
|
9
|
+
},
|
|
10
|
+
defaultError403: {
|
|
11
|
+
title: 'You are not authorized!',
|
|
12
|
+
details: 'You are not allowed to perform this operation.',
|
|
13
|
+
},
|
|
14
|
+
defaultError404: {
|
|
15
|
+
title: 'Resource not found!',
|
|
16
|
+
details: 'The resource requested could not found on the server.',
|
|
17
|
+
},
|
|
18
|
+
defaultError500: {
|
|
19
|
+
title: 'Internal server error',
|
|
20
|
+
details: 'Error detail not sent by server.',
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export const DEFAULT_ERROR_LOCALIZATIONS = {
|
|
24
|
+
defaultError: {
|
|
25
|
+
title: 'AbpUi::DefaultErrorMessage',
|
|
26
|
+
details: 'AbpUi::DefaultErrorMessageDetail',
|
|
27
|
+
},
|
|
28
|
+
defaultError401: {
|
|
29
|
+
title: 'AbpUi::DefaultErrorMessage401',
|
|
30
|
+
details: 'AbpUi::DefaultErrorMessage401Detail',
|
|
31
|
+
},
|
|
32
|
+
defaultError403: {
|
|
33
|
+
title: 'AbpUi::DefaultErrorMessage403',
|
|
34
|
+
details: 'AbpUi::DefaultErrorMessage403Detail',
|
|
35
|
+
},
|
|
36
|
+
defaultError404: {
|
|
37
|
+
title: 'AbpUi::DefaultErrorMessage404',
|
|
38
|
+
details: 'AbpUi::DefaultErrorMessage404Detail',
|
|
39
|
+
},
|
|
40
|
+
defaultError500: {
|
|
41
|
+
title: 'AbpUi::500Message',
|
|
42
|
+
details: 'AbpUi::DefaultErrorMessage',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export const CUSTOM_HTTP_ERROR_HANDLER_PRIORITY = Object.freeze({
|
|
46
|
+
veryLow: -99,
|
|
47
|
+
low: -9,
|
|
48
|
+
normal: 0,
|
|
49
|
+
high: 9,
|
|
50
|
+
veryHigh: 99,
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9jb25zdGFudHMvZGVmYXVsdC1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDcEMsWUFBWSxFQUFFO1FBQ1osS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixPQUFPLEVBQUUsa0NBQWtDO0tBQzVDO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLDRCQUE0QjtRQUNuQyxPQUFPLEVBQUUsMkVBQTJFO0tBQ3JGO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxPQUFPLEVBQUUsZ0RBQWdEO0tBQzFEO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLHFCQUFxQjtRQUM1QixPQUFPLEVBQUUsdURBQXVEO0tBQ2pFO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLHVCQUF1QjtRQUM5QixPQUFPLEVBQUUsa0NBQWtDO0tBQzVDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLFlBQVksRUFBRTtRQUNaLEtBQUssRUFBRSw0QkFBNEI7UUFDbkMsT0FBTyxFQUFFLGtDQUFrQztLQUM1QztJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSwrQkFBK0I7UUFDdEMsT0FBTyxFQUFFLHFDQUFxQztLQUMvQztJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSwrQkFBK0I7UUFDdEMsT0FBTyxFQUFFLHFDQUFxQztLQUMvQztJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSwrQkFBK0I7UUFDdEMsT0FBTyxFQUFFLHFDQUFxQztLQUMvQztJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSxtQkFBbUI7UUFDMUIsT0FBTyxFQUFFLDRCQUE0QjtLQUN0QztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlELE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDWixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ1AsTUFBTSxFQUFFLENBQUM7SUFDVCxJQUFJLEVBQUUsQ0FBQztJQUNQLFFBQVEsRUFBRSxFQUFFO0NBQ2IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTUVTU0FHRVMgPSB7XHJcbiAgZGVmYXVsdEVycm9yOiB7XHJcbiAgICB0aXRsZTogJ0FuIGVycm9yIGhhcyBvY2N1cnJlZCEnLFxyXG4gICAgZGV0YWlsczogJ0Vycm9yIGRldGFpbCBub3Qgc2VudCBieSBzZXJ2ZXIuJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjQwMToge1xyXG4gICAgdGl0bGU6ICdZb3UgYXJlIG5vdCBhdXRoZW50aWNhdGVkIScsXHJcbiAgICBkZXRhaWxzOiAnWW91IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkIChzaWduIGluKSBpbiBvcmRlciB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLicsXHJcbiAgfSxcclxuICBkZWZhdWx0RXJyb3I0MDM6IHtcclxuICAgIHRpdGxlOiAnWW91IGFyZSBub3QgYXV0aG9yaXplZCEnLFxyXG4gICAgZGV0YWlsczogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi4nLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNDA0OiB7XHJcbiAgICB0aXRsZTogJ1Jlc291cmNlIG5vdCBmb3VuZCEnLFxyXG4gICAgZGV0YWlsczogJ1RoZSByZXNvdXJjZSByZXF1ZXN0ZWQgY291bGQgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIuJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjUwMDoge1xyXG4gICAgdGl0bGU6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InLFxyXG4gICAgZGV0YWlsczogJ0Vycm9yIGRldGFpbCBub3Qgc2VudCBieSBzZXJ2ZXIuJyxcclxuICB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUyA9IHtcclxuICBkZWZhdWx0RXJyb3I6IHtcclxuICAgIHRpdGxlOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2UnLFxyXG4gICAgZGV0YWlsczogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlRGV0YWlsJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjQwMToge1xyXG4gICAgdGl0bGU6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZTQwMScsXHJcbiAgICBkZXRhaWxzOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2U0MDFEZXRhaWwnLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNDAzOiB7XHJcbiAgICB0aXRsZTogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlNDAzJyxcclxuICAgIGRldGFpbHM6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZTQwM0RldGFpbCcsXHJcbiAgfSxcclxuICBkZWZhdWx0RXJyb3I0MDQ6IHtcclxuICAgIHRpdGxlOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2U0MDQnLFxyXG4gICAgZGV0YWlsczogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlNDA0RGV0YWlsJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjUwMDoge1xyXG4gICAgdGl0bGU6ICdBYnBVaTo6NTAwTWVzc2FnZScsXHJcbiAgICBkZXRhaWxzOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2UnLFxyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgQ1VTVE9NX0hUVFBfRVJST1JfSEFORExFUl9QUklPUklUWSA9IE9iamVjdC5mcmVlemUoe1xyXG4gIHZlcnlMb3c6IC05OSxcclxuICBsb3c6IC05LFxyXG4gIG5vcm1hbDogMCxcclxuICBoaWdoOiA5LFxyXG4gIHZlcnlIaWdoOiA5OSxcclxufSk7XHJcbiJdfQ==
|
|
@@ -1,62 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { ResolveEnd } from '@angular/router';
|
|
5
|
-
import { Observable, of, Subject, throwError } from 'rxjs';
|
|
1
|
+
import { HttpErrorReporterService } from '@abp/ng.core';
|
|
2
|
+
import { inject, Injectable, Injector } from '@angular/core';
|
|
3
|
+
import { Observable, of, throwError } from 'rxjs';
|
|
6
4
|
import { catchError, filter, switchMap } from 'rxjs/operators';
|
|
7
|
-
import { HttpErrorWrapperComponent } from '../components/http-error-wrapper/http-error-wrapper.component';
|
|
8
5
|
import { ConfirmationService } from '../services/confirmation.service';
|
|
9
|
-
import { HTTP_ERROR_HANDLER } from '../tokens/http-error.token';
|
|
6
|
+
import { CUSTOM_ERROR_HANDLERS, HTTP_ERROR_HANDLER } from '../tokens/http-error.token';
|
|
7
|
+
import { DEFAULT_ERROR_LOCALIZATIONS, DEFAULT_ERROR_MESSAGES } from '../constants/default-errors';
|
|
8
|
+
import { RouterErrorHandlerService } from '../services/router-error-handler.service';
|
|
9
|
+
import { HTTP_ERROR_CONFIG } from '../tokens/http-error.token';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
|
-
export const DEFAULT_ERROR_MESSAGES = {
|
|
12
|
-
defaultError: {
|
|
13
|
-
title: 'An error has occurred!',
|
|
14
|
-
details: 'Error detail not sent by server.',
|
|
15
|
-
},
|
|
16
|
-
defaultError401: {
|
|
17
|
-
title: 'You are not authenticated!',
|
|
18
|
-
details: 'You should be authenticated (sign in) in order to perform this operation.',
|
|
19
|
-
},
|
|
20
|
-
defaultError403: {
|
|
21
|
-
title: 'You are not authorized!',
|
|
22
|
-
details: 'You are not allowed to perform this operation.',
|
|
23
|
-
},
|
|
24
|
-
defaultError404: {
|
|
25
|
-
title: 'Resource not found!',
|
|
26
|
-
details: 'The resource requested could not found on the server.',
|
|
27
|
-
},
|
|
28
|
-
defaultError500: {
|
|
29
|
-
title: 'Internal server error',
|
|
30
|
-
details: 'Error detail not sent by server.',
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
export const DEFAULT_ERROR_LOCALIZATIONS = {
|
|
34
|
-
defaultError: {
|
|
35
|
-
title: 'AbpUi::DefaultErrorMessage',
|
|
36
|
-
details: 'AbpUi::DefaultErrorMessageDetail',
|
|
37
|
-
},
|
|
38
|
-
defaultError401: {
|
|
39
|
-
title: 'AbpUi::DefaultErrorMessage401',
|
|
40
|
-
details: 'AbpUi::DefaultErrorMessage401Detail',
|
|
41
|
-
},
|
|
42
|
-
defaultError403: {
|
|
43
|
-
title: 'AbpUi::DefaultErrorMessage403',
|
|
44
|
-
details: 'AbpUi::DefaultErrorMessage403Detail',
|
|
45
|
-
},
|
|
46
|
-
defaultError404: {
|
|
47
|
-
title: 'AbpUi::DefaultErrorMessage404',
|
|
48
|
-
details: 'AbpUi::DefaultErrorMessage404Detail',
|
|
49
|
-
},
|
|
50
|
-
defaultError500: {
|
|
51
|
-
title: 'AbpUi::500Message',
|
|
52
|
-
details: 'AbpUi::DefaultErrorMessage',
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
11
|
class ErrorHandler {
|
|
56
12
|
constructor(injector) {
|
|
57
13
|
this.injector = injector;
|
|
58
|
-
this.
|
|
59
|
-
this.
|
|
14
|
+
this.httpErrorReporter = inject(HttpErrorReporterService);
|
|
15
|
+
this.confirmationService = inject(ConfirmationService);
|
|
16
|
+
this.routerErrorHandlerService = inject(RouterErrorHandlerService);
|
|
17
|
+
this.httpErrorConfig = inject(HTTP_ERROR_CONFIG);
|
|
18
|
+
this.customErrorHandlers = inject(CUSTOM_ERROR_HANDLERS);
|
|
19
|
+
this.defaultHttpErrorHandler = (_, err) => throwError(() => err);
|
|
20
|
+
this.httpErrorHandler = inject(HTTP_ERROR_HANDLER, { optional: true }) || this.defaultHttpErrorHandler;
|
|
60
21
|
this.executeErrorHandler = (error) => {
|
|
61
22
|
const errHandler = this.httpErrorHandler(this.injector, error);
|
|
62
23
|
const isObservable = errHandler instanceof Observable;
|
|
@@ -72,219 +33,48 @@ class ErrorHandler {
|
|
|
72
33
|
return (!!this.httpErrorConfig.skipHandledErrorCodes &&
|
|
73
34
|
this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === status) < 0);
|
|
74
35
|
};
|
|
75
|
-
this.filterRouteErrors = (navigationError) => {
|
|
76
|
-
return (navigationError.error?.message?.indexOf('Cannot match') > -1 &&
|
|
77
|
-
!!this.httpErrorConfig.skipHandledErrorCodes &&
|
|
78
|
-
this.httpErrorConfig.skipHandledErrorCodes.findIndex(code => code === 404) < 0);
|
|
79
|
-
};
|
|
80
|
-
this.httpErrorReporter = injector.get(HttpErrorReporterService);
|
|
81
|
-
this.routerEvents = injector.get(RouterEvents);
|
|
82
|
-
this.confirmationService = injector.get(ConfirmationService);
|
|
83
|
-
this.cfRes = injector.get(ComponentFactoryResolver);
|
|
84
|
-
this.rendererFactory = injector.get(RendererFactory2);
|
|
85
|
-
this.httpErrorConfig = injector.get('HTTP_ERROR_CONFIG');
|
|
86
|
-
this.authService = this.injector.get(AuthService);
|
|
87
|
-
this.sessionStateService = this.injector.get(SessionStateService);
|
|
88
36
|
this.listenToRestError();
|
|
89
37
|
this.listenToRouterError();
|
|
90
|
-
this.listenToRouterDataResolved();
|
|
91
38
|
}
|
|
92
39
|
listenToRouterError() {
|
|
93
|
-
this.
|
|
94
|
-
.getNavigationEvents('Error')
|
|
95
|
-
.pipe(filter(this.filterRouteErrors))
|
|
96
|
-
.subscribe(() => this.show404Page());
|
|
97
|
-
}
|
|
98
|
-
listenToRouterDataResolved() {
|
|
99
|
-
this.routerEvents
|
|
100
|
-
.getEvents(ResolveEnd)
|
|
101
|
-
.pipe(filter(() => !!this.componentRef))
|
|
102
|
-
.subscribe(() => {
|
|
103
|
-
this.componentRef?.destroy();
|
|
104
|
-
this.componentRef = null;
|
|
105
|
-
});
|
|
40
|
+
this.routerErrorHandlerService.listen();
|
|
106
41
|
}
|
|
107
42
|
listenToRestError() {
|
|
108
43
|
this.httpErrorReporter.reporter$
|
|
109
44
|
.pipe(filter(this.filterRestErrors), switchMap(this.executeErrorHandler))
|
|
110
|
-
.subscribe(
|
|
111
|
-
|
|
112
|
-
handleError(err) {
|
|
113
|
-
const body = err?.error?.error || {
|
|
114
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
115
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
116
|
-
};
|
|
117
|
-
if (err instanceof HttpErrorResponse && err.headers.get('Abp-Tenant-Resolve-Error')) {
|
|
118
|
-
this.sessionStateService.setTenant(null);
|
|
119
|
-
this.authService.logout().subscribe();
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (err instanceof HttpErrorResponse && err.headers.get('_AbpErrorFormat')) {
|
|
123
|
-
const confirmation$ = this.showErrorWithRequestBody(body);
|
|
124
|
-
if (err.status === 401) {
|
|
125
|
-
confirmation$.subscribe(() => {
|
|
126
|
-
this.navigateToLogin();
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
switch (err.status) {
|
|
132
|
-
case 401:
|
|
133
|
-
this.canCreateCustomError(401)
|
|
134
|
-
? this.show401Page()
|
|
135
|
-
: this.showError({
|
|
136
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
|
|
137
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
|
|
138
|
-
}, {
|
|
139
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.details,
|
|
140
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.details,
|
|
141
|
-
}).subscribe(() => this.navigateToLogin());
|
|
142
|
-
break;
|
|
143
|
-
case 403:
|
|
144
|
-
this.createErrorComponent({
|
|
145
|
-
title: {
|
|
146
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.title,
|
|
147
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.title,
|
|
148
|
-
},
|
|
149
|
-
details: {
|
|
150
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError403.details,
|
|
151
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError403.details,
|
|
152
|
-
},
|
|
153
|
-
status: 403,
|
|
154
|
-
});
|
|
155
|
-
break;
|
|
156
|
-
case 404:
|
|
157
|
-
this.canCreateCustomError(404)
|
|
158
|
-
? this.show404Page()
|
|
159
|
-
: this.showError({
|
|
160
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.details,
|
|
161
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.details,
|
|
162
|
-
}, {
|
|
163
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
|
|
164
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
|
|
165
|
-
});
|
|
166
|
-
break;
|
|
167
|
-
case 500:
|
|
168
|
-
this.createErrorComponent({
|
|
169
|
-
title: {
|
|
170
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.title,
|
|
171
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.title,
|
|
172
|
-
},
|
|
173
|
-
details: {
|
|
174
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError500.details,
|
|
175
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError500.details,
|
|
176
|
-
},
|
|
177
|
-
status: 500,
|
|
178
|
-
});
|
|
179
|
-
break;
|
|
180
|
-
case 0:
|
|
181
|
-
if (err.statusText === 'Unknown Error') {
|
|
182
|
-
this.createErrorComponent({
|
|
183
|
-
title: {
|
|
184
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
185
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
186
|
-
},
|
|
187
|
-
details: err.message,
|
|
188
|
-
isHomeShow: false,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
default:
|
|
193
|
-
this.showError({
|
|
194
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details,
|
|
195
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details,
|
|
196
|
-
}, {
|
|
197
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
198
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
199
|
-
});
|
|
200
|
-
break;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
show401Page() {
|
|
205
|
-
this.createErrorComponent({
|
|
206
|
-
title: {
|
|
207
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError401.title,
|
|
208
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError401.title,
|
|
209
|
-
},
|
|
210
|
-
status: 401,
|
|
45
|
+
.subscribe(err => {
|
|
46
|
+
this.handleError(err);
|
|
211
47
|
});
|
|
212
48
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
title: {
|
|
216
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError404.title,
|
|
217
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError404.title,
|
|
218
|
-
},
|
|
219
|
-
status: 404,
|
|
220
|
-
});
|
|
49
|
+
sortHttpErrorHandlers(a, b) {
|
|
50
|
+
return (b.priority || 0) - (a.priority || 0);
|
|
221
51
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
232
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
233
|
-
};
|
|
234
|
-
message = body.message;
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
message = body.message || {
|
|
238
|
-
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
239
|
-
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
240
|
-
};
|
|
241
|
-
title = '';
|
|
52
|
+
handleError(err) {
|
|
53
|
+
if (this.customErrorHandlers && this.customErrorHandlers.length) {
|
|
54
|
+
const canHandleService = this.customErrorHandlers
|
|
55
|
+
.sort(this.sortHttpErrorHandlers)
|
|
56
|
+
.find(service => service.canHandle(err));
|
|
57
|
+
if (canHandleService) {
|
|
58
|
+
canHandleService.execute();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
242
61
|
}
|
|
243
|
-
|
|
62
|
+
this.showError().subscribe();
|
|
244
63
|
}
|
|
245
|
-
showError(
|
|
64
|
+
showError() {
|
|
65
|
+
const title = {
|
|
66
|
+
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.title,
|
|
67
|
+
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title,
|
|
68
|
+
};
|
|
69
|
+
const message = {
|
|
70
|
+
key: DEFAULT_ERROR_LOCALIZATIONS.defaultError.details,
|
|
71
|
+
defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.details,
|
|
72
|
+
};
|
|
246
73
|
return this.confirmationService.error(message, title, {
|
|
247
74
|
hideCancelBtn: true,
|
|
248
75
|
yesText: 'AbpAccount::Close',
|
|
249
76
|
});
|
|
250
77
|
}
|
|
251
|
-
navigateToLogin() {
|
|
252
|
-
this.authService.navigateToLogin();
|
|
253
|
-
}
|
|
254
|
-
createErrorComponent(instance) {
|
|
255
|
-
const renderer = this.rendererFactory.createRenderer(null, null);
|
|
256
|
-
const host = renderer.selectRootElement(document.body, true);
|
|
257
|
-
this.componentRef = this.cfRes
|
|
258
|
-
.resolveComponentFactory(HttpErrorWrapperComponent)
|
|
259
|
-
.create(this.injector);
|
|
260
|
-
for (const key in instance) {
|
|
261
|
-
/* istanbul ignore else */
|
|
262
|
-
if (Object.prototype.hasOwnProperty.call(this.componentRef.instance, key)) {
|
|
263
|
-
this.componentRef.instance[key] = instance[key];
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
this.componentRef.instance.hideCloseIcon = !!this.httpErrorConfig.errorScreen?.hideCloseIcon;
|
|
267
|
-
const appRef = this.injector.get(ApplicationRef);
|
|
268
|
-
if (this.canCreateCustomError(instance.status)) {
|
|
269
|
-
this.componentRef.instance.cfRes = this.cfRes;
|
|
270
|
-
this.componentRef.instance.appRef = appRef;
|
|
271
|
-
this.componentRef.instance.injector = this.injector;
|
|
272
|
-
this.componentRef.instance.customComponent = this.httpErrorConfig.errorScreen?.component;
|
|
273
|
-
}
|
|
274
|
-
appRef.attachView(this.componentRef.hostView);
|
|
275
|
-
renderer.appendChild(host, this.componentRef.hostView.rootNodes[0]);
|
|
276
|
-
const destroy$ = new Subject();
|
|
277
|
-
this.componentRef.instance.destroy$ = destroy$;
|
|
278
|
-
destroy$.subscribe(() => {
|
|
279
|
-
this.componentRef?.destroy();
|
|
280
|
-
this.componentRef = null;
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
canCreateCustomError(status) {
|
|
284
|
-
return !!(this.httpErrorConfig?.errorScreen?.component &&
|
|
285
|
-
this.httpErrorConfig?.errorScreen?.forWhichErrors &&
|
|
286
|
-
this.httpErrorConfig?.errorScreen?.forWhichErrors.indexOf(status) > -1);
|
|
287
|
-
}
|
|
288
78
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: ErrorHandler, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
289
79
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: ErrorHandler, providedIn: 'root' }); }
|
|
290
80
|
}
|
|
@@ -293,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImpor
|
|
|
293
83
|
type: Injectable,
|
|
294
84
|
args: [{ providedIn: 'root' }]
|
|
295
85
|
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9zcmMvbGliL2hhbmRsZXJzL2Vycm9yLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsT0FBTyxFQUNOLFdBQVcsRUFDWCx3QkFBd0IsRUFFeEIsWUFBWSxFQUNaLG1CQUFtQixHQUNwQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUd4QixVQUFVLEVBQ1YsUUFBUSxFQUNSLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHMUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRWhFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHO0lBQ3BDLFlBQVksRUFBRTtRQUNaLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsT0FBTyxFQUFFLGtDQUFrQztLQUM1QztJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSw0QkFBNEI7UUFDbkMsT0FBTyxFQUFFLDJFQUEyRTtLQUNyRjtJQUNELGVBQWUsRUFBRTtRQUNmLEtBQUssRUFBRSx5QkFBeUI7UUFDaEMsT0FB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QVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUE2QjtRQUNoRCxPQUFPLENBQUMsQ0FBQyxDQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLFNBQVM7WUFDNUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsY0FBYztZQUNqRCxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQzs4R0FoUlUsWUFBWTtrSEFBWixZQUFZLGNBREMsTUFBTTs7U0FDbkIsWUFBWTsyRkFBWixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIiBpbXBvcnQge1xyXG4gIEF1dGhTZXJ2aWNlLFxyXG4gIEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSxcclxuICBMb2NhbGl6YXRpb25QYXJhbSxcclxuICBSb3V0ZXJFdmVudHMsXHJcbiAgU2Vzc2lvblN0YXRlU2VydmljZSxcclxufSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICBBcHBsaWNhdGlvblJlZixcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIEVtYmVkZGVkVmlld1JlZixcclxuICBJbmplY3RhYmxlLFxyXG4gIEluamVjdG9yLFxyXG4gIFJlbmRlcmVyRmFjdG9yeTIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FcnJvciwgUmVzb2x2ZUVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9odHRwLWVycm9yLXdyYXBwZXIvaHR0cC1lcnJvci13cmFwcGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVycm9yU2NyZWVuRXJyb3JDb2RlcywgSHR0cEVycm9yQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb25maXJtYXRpb24nO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlybWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIVFRQX0VSUk9SX0hBTkRMRVIgfSBmcm9tICcuLi90b2tlbnMvaHR0cC1lcnJvci50b2tlbic7XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyA9IHtcclxuICBkZWZhdWx0RXJyb3I6IHtcclxuICAgIHRpdGxlOiAnQW4gZXJyb3IgaGFzIG9jY3VycmVkIScsXHJcbiAgICBkZXRhaWxzOiAnRXJyb3IgZGV0YWlsIG5vdCBzZW50IGJ5IHNlcnZlci4nLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNDAxOiB7XHJcbiAgICB0aXRsZTogJ1lvdSBhcmUgbm90IGF1dGhlbnRpY2F0ZWQhJyxcclxuICAgIGRldGFpbHM6ICdZb3Ugc2hvdWxkIGJlIGF1dGhlbnRpY2F0ZWQgKHNpZ24gaW4pIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24uJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjQwMzoge1xyXG4gICAgdGl0bGU6ICdZb3UgYXJlIG5vdCBhdXRob3JpemVkIScsXHJcbiAgICBkZXRhaWxzOiAnWW91IGFyZSBub3QgYWxsb3dlZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLicsXHJcbiAgfSxcclxuICBkZWZhdWx0RXJyb3I0MDQ6IHtcclxuICAgIHRpdGxlOiAnUmVzb3VyY2Ugbm90IGZvdW5kIScsXHJcbiAgICBkZXRhaWxzOiAnVGhlIHJlc291cmNlIHJlcXVlc3RlZCBjb3VsZCBub3QgZm91bmQgb24gdGhlIHNlcnZlci4nLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNTAwOiB7XHJcbiAgICB0aXRsZTogJ0ludGVybmFsIHNlcnZlciBlcnJvcicsXHJcbiAgICBkZXRhaWxzOiAnRXJyb3IgZGV0YWlsIG5vdCBzZW50IGJ5IHNlcnZlci4nLFxyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TID0ge1xyXG4gIGRlZmF1bHRFcnJvcjoge1xyXG4gICAgdGl0bGU6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZScsXHJcbiAgICBkZXRhaWxzOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2VEZXRhaWwnLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNDAxOiB7XHJcbiAgICB0aXRsZTogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlNDAxJyxcclxuICAgIGRldGFpbHM6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZTQwMURldGFpbCcsXHJcbiAgfSxcclxuICBkZWZhdWx0RXJyb3I0MDM6IHtcclxuICAgIHRpdGxlOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2U0MDMnLFxyXG4gICAgZGV0YWlsczogJ0FicFVpOjpEZWZhdWx0RXJyb3JNZXNzYWdlNDAzRGV0YWlsJyxcclxuICB9LFxyXG4gIGRlZmF1bHRFcnJvcjQwNDoge1xyXG4gICAgdGl0bGU6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZTQwNCcsXHJcbiAgICBkZXRhaWxzOiAnQWJwVWk6OkRlZmF1bHRFcnJvck1lc3NhZ2U0MDREZXRhaWwnLFxyXG4gIH0sXHJcbiAgZGVmYXVsdEVycm9yNTAwOiB7XHJcbiAgICB0aXRsZTogJ0FicFVpOjo1MDBNZXNzYWdlJyxcclxuICAgIGRldGFpbHM6ICdBYnBVaTo6RGVmYXVsdEVycm9yTWVzc2FnZScsXHJcbiAgfSxcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBFcnJvckhhbmRsZXIge1xyXG4gIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPEh0dHBFcnJvcldyYXBwZXJDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBodHRwRXJyb3JIYW5kbGVyID0gdGhpcy5pbmplY3Rvci5nZXQoSFRUUF9FUlJPUl9IQU5ETEVSLCAoXywgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT5cclxuICAgIHRocm93RXJyb3IoZXJyKSxcclxuICApO1xyXG5cclxuICBwcm90ZWN0ZWQgaHR0cEVycm9yUmVwb3J0ZXI6IEh0dHBFcnJvclJlcG9ydGVyU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcm91dGVyRXZlbnRzOiBSb3V0ZXJFdmVudHM7XHJcbiAgcHJvdGVjdGVkIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIGNmUmVzOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XHJcbiAgcHJvdGVjdGVkIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MjtcclxuICBwcm90ZWN0ZWQgaHR0cEVycm9yQ29uZmlnOiBIdHRwRXJyb3JDb25maWc7XHJcbiAgcHJvdGVjdGVkIHNlc3Npb25TdGF0ZVNlcnZpY2U6IFNlc3Npb25TdGF0ZVNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2U7XHJcbiAgXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMuaHR0cEVycm9yUmVwb3J0ZXIgPSBpbmplY3Rvci5nZXQoSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlKTtcclxuICAgIHRoaXMucm91dGVyRXZlbnRzID0gaW5qZWN0b3IuZ2V0KFJvdXRlckV2ZW50cyk7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29uZmlybWF0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLmNmUmVzID0gaW5qZWN0b3IuZ2V0KENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XHJcbiAgICB0aGlzLnJlbmRlcmVyRmFjdG9yeSA9IGluamVjdG9yLmdldChSZW5kZXJlckZhY3RvcnkyKTtcclxuICAgIHRoaXMuaHR0cEVycm9yQ29uZmlnID0gaW5qZWN0b3IuZ2V0KCdIVFRQX0VSUk9SX0NPTkZJRycpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEF1dGhTZXJ2aWNlKTtcclxuICAgIHRoaXMuc2Vzc2lvblN0YXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFNlc3Npb25TdGF0ZVNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMubGlzdGVuVG9SZXN0RXJyb3IoKTtcclxuICAgIHRoaXMubGlzdGVuVG9Sb3V0ZXJFcnJvcigpO1xyXG4gICAgdGhpcy5saXN0ZW5Ub1JvdXRlckRhdGFSZXNvbHZlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblRvUm91dGVyRXJyb3IoKSB7XHJcbiAgICB0aGlzLnJvdXRlckV2ZW50c1xyXG4gICAgICAuZ2V0TmF2aWdhdGlvbkV2ZW50cygnRXJyb3InKVxyXG4gICAgICAucGlwZShmaWx0ZXIodGhpcy5maWx0ZXJSb3V0ZUVycm9ycykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaG93NDA0UGFnZSgpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub1JvdXRlckRhdGFSZXNvbHZlZCgpIHtcclxuICAgIHRoaXMucm91dGVyRXZlbnRzXHJcbiAgICAgIC5nZXRFdmVudHMoUmVzb2x2ZUVuZClcclxuICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5jb21wb25lbnRSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuVG9SZXN0RXJyb3IoKSB7XHJcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydGVyJFxyXG4gICAgICAucGlwZShmaWx0ZXIodGhpcy5maWx0ZXJSZXN0RXJyb3JzKSwgc3dpdGNoTWFwKHRoaXMuZXhlY3V0ZUVycm9ySGFuZGxlcikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY3V0ZUVycm9ySGFuZGxlciA9IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICBjb25zdCBlcnJIYW5kbGVyID0gdGhpcy5odHRwRXJyb3JIYW5kbGVyKHRoaXMuaW5qZWN0b3IsIGVycm9yKTtcclxuICAgIGNvbnN0IGlzT2JzZXJ2YWJsZSA9IGVyckhhbmRsZXIgaW5zdGFuY2VvZiBPYnNlcnZhYmxlO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBpc09ic2VydmFibGUgPyBlcnJIYW5kbGVyIDogb2YobnVsbCk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnI6IGFueSkge1xyXG4gICAgY29uc3QgYm9keSA9IGVycj8uZXJyb3I/LmVycm9yIHx8IHtcclxuICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyLmhlYWRlcnMuZ2V0KCdBYnAtVGVuYW50LVJlc29sdmUtRXJyb3InKSkge1xyXG4gICAgICB0aGlzLnNlc3Npb25TdGF0ZVNlcnZpY2Uuc2V0VGVuYW50KG51bGwpXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0KCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgZXJyLmhlYWRlcnMuZ2V0KCdfQWJwRXJyb3JGb3JtYXQnKSkge1xyXG4gICAgICBjb25zdCBjb25maXJtYXRpb24kID0gdGhpcy5zaG93RXJyb3JXaXRoUmVxdWVzdEJvZHkoYm9keSk7XHJcblxyXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgY29uZmlybWF0aW9uJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9naW4oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3dpdGNoIChlcnIuc3RhdHVzKSB7XHJcbiAgICAgICAgY2FzZSA0MDE6XHJcbiAgICAgICAgICB0aGlzLmNhbkNyZWF0ZUN1c3RvbUVycm9yKDQwMSlcclxuICAgICAgICAgICAgPyB0aGlzLnNob3c0MDFQYWdlKClcclxuICAgICAgICAgICAgOiB0aGlzLnNob3dFcnJvcihcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDAxLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNDAxLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDAxLmRldGFpbHMsXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I0MDEuZGV0YWlscyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvTG9naW4oKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQwMzpcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRXJyb3JDb21wb25lbnQoe1xyXG4gICAgICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvcjQwMy50aXRsZSxcclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNDAzLnRpdGxlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB7XHJcbiAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDAzLmRldGFpbHMsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvcjQwMy5kZXRhaWxzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdGF0dXM6IDQwMyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0MDQ6XHJcbiAgICAgICAgICB0aGlzLmNhbkNyZWF0ZUN1c3RvbUVycm9yKDQwNClcclxuICAgICAgICAgICAgPyB0aGlzLnNob3c0MDRQYWdlKClcclxuICAgICAgICAgICAgOiB0aGlzLnNob3dFcnJvcihcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNDA0LmRldGFpbHMsXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I0MDQuZGV0YWlscyxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvcjQwNC50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvcjQwNC50aXRsZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTAwOlxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVFcnJvckNvbXBvbmVudCh7XHJcbiAgICAgICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yNTAwLnRpdGxlLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3I1MDAudGl0bGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHtcclxuICAgICAgICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I1MDAuZGV0YWlscyxcclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNTAwLmRldGFpbHMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0YXR1czogNTAwLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c1RleHQgPT09ICdVbmtub3duIEVycm9yJykge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUVycm9yQ29tcG9uZW50KHtcclxuICAgICAgICAgICAgICB0aXRsZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvci50aXRsZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGRldGFpbHM6IGVyci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgIGlzSG9tZVNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLnNob3dFcnJvcihcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvci5kZXRhaWxzLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3IuZGV0YWlscyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvci50aXRsZSxcclxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2hvdzQwMVBhZ2UoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUVycm9yQ29tcG9uZW50KHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OUy5kZWZhdWx0RXJyb3I0MDEudGl0bGUsXHJcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTLmRlZmF1bHRFcnJvcjQwMS50aXRsZSxcclxuICAgICAgfSxcclxuICAgICAgc3RhdHVzOiA0MDEsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzaG93NDA0UGFnZSgpIHtcclxuICAgIHRoaXMuY3JlYXRlRXJyb3JDb21wb25lbnQoe1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvcjQwNC50aXRsZSxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yNDA0LnRpdGxlLFxyXG4gICAgICB9LFxyXG4gICAgICBzdGF0dXM6IDQwNCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNob3dFcnJvcldpdGhSZXF1ZXN0Qm9keShib2R5OiBhbnkpIHtcclxuICAgIGxldCBtZXNzYWdlOiBMb2NhbGl6YXRpb25QYXJhbTtcclxuICAgIGxldCB0aXRsZTogTG9jYWxpemF0aW9uUGFyYW07XHJcblxyXG4gICAgaWYgKGJvZHkuZGV0YWlscykge1xyXG4gICAgICBtZXNzYWdlID0gYm9keS5kZXRhaWxzO1xyXG4gICAgICB0aXRsZSA9IGJvZHkubWVzc2FnZTtcclxuICAgIH0gZWxzZSBpZiAoYm9keS5tZXNzYWdlKSB7XHJcbiAgICAgIHRpdGxlID0ge1xyXG4gICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvci50aXRsZSxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICB9O1xyXG4gICAgICBtZXNzYWdlID0gYm9keS5tZXNzYWdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWVzc2FnZSA9IGJvZHkubWVzc2FnZSB8fCB7XHJcbiAgICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5kZWZhdWx0RXJyb3IudGl0bGUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRpdGxlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yKG1lc3NhZ2UsIHRpdGxlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzaG93RXJyb3IoXHJcbiAgICBtZXNzYWdlOiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICAgIHRpdGxlOiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICApOiBPYnNlcnZhYmxlPENvbmZpcm1hdGlvbi5TdGF0dXM+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuZXJyb3IobWVzc2FnZSwgdGl0bGUsIHtcclxuICAgICAgaGlkZUNhbmNlbEJ0bjogdHJ1ZSxcclxuICAgICAgeWVzVGV4dDogJ0FicEFjY291bnQ6OkNsb3NlJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvTG9naW4oKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm5hdmlnYXRlVG9Mb2dpbigpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRXJyb3JDb21wb25lbnQoaW5zdGFuY2U6IFBhcnRpYWw8SHR0cEVycm9yV3JhcHBlckNvbXBvbmVudD4pIHtcclxuICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICBjb25zdCBob3N0ID0gcmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoZG9jdW1lbnQuYm9keSwgdHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNmUmVzXHJcbiAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShIdHRwRXJyb3JXcmFwcGVyQ29tcG9uZW50KVxyXG4gICAgICAuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGluc3RhbmNlKSB7XHJcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UsIGtleSkpIHtcclxuICAgICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtrZXldID0gKGluc3RhbmNlIGFzIGFueSlba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmhpZGVDbG9zZUljb24gPSAhIXRoaXMuaHR0cEVycm9yQ29uZmlnLmVycm9yU2NyZWVuPy5oaWRlQ2xvc2VJY29uO1xyXG4gICAgY29uc3QgYXBwUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xyXG5cclxuICAgIGlmICh0aGlzLmNhbkNyZWF0ZUN1c3RvbUVycm9yKGluc3RhbmNlLnN0YXR1cyBhcyBFcnJvclNjcmVlbkVycm9yQ29kZXMpKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmNmUmVzID0gdGhpcy5jZlJlcztcclxuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuYXBwUmVmID0gYXBwUmVmO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5pbmplY3RvciA9IHRoaXMuaW5qZWN0b3I7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmN1c3RvbUNvbXBvbmVudCA9IHRoaXMuaHR0cEVycm9yQ29uZmlnLmVycm9yU2NyZWVuPy5jb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG4gICAgcmVuZGVyZXIuYXBwZW5kQ2hpbGQoaG9zdCwgKHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0pO1xyXG5cclxuICAgIGNvbnN0IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmRlc3Ryb3kkID0gZGVzdHJveSQ7XHJcbiAgICBkZXN0cm95JC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbkNyZWF0ZUN1c3RvbUVycm9yKHN0YXR1czogRXJyb3JTY3JlZW5FcnJvckNvZGVzKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEoXHJcbiAgICAgIHRoaXMuaHR0cEVycm9yQ29uZmlnPy5lcnJvclNjcmVlbj8uY29tcG9uZW50ICYmXHJcbiAgICAgIHRoaXMuaHR0cEVycm9yQ29uZmlnPy5lcnJvclNjcmVlbj8uZm9yV2hpY2hFcnJvcnMgJiZcclxuICAgICAgdGhpcy5odHRwRXJyb3JDb25maWc/LmVycm9yU2NyZWVuPy5mb3JXaGljaEVycm9ycy5pbmRleE9mKHN0YXR1cykgPiAtMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaWx0ZXJSZXN0RXJyb3JzID0gKHsgc3RhdHVzIH06IEh0dHBFcnJvclJlc3BvbnNlKTogYm9vbGVhbiA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHN0YXR1cyAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhIXRoaXMuaHR0cEVycm9yQ29uZmlnLnNraXBIYW5kbGVkRXJyb3JDb2RlcyAmJlxyXG4gICAgICB0aGlzLmh0dHBFcnJvckNvbmZpZy5za2lwSGFuZGxlZEVycm9yQ29kZXMuZmluZEluZGV4KGNvZGUgPT4gY29kZSA9PT0gc3RhdHVzKSA8IDBcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlclJvdXRlRXJyb3JzID0gKG5hdmlnYXRpb25FcnJvcjogTmF2aWdhdGlvbkVycm9yKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBuYXZpZ2F0aW9uRXJyb3IuZXJyb3I/Lm1lc3NhZ2U/LmluZGV4T2YoJ0Nhbm5vdCBtYXRjaCcpID4gLTEgJiZcclxuICAgICAgISF0aGlzLmh0dHBFcnJvckNvbmZpZy5za2lwSGFuZGxlZEVycm9yQ29kZXMgJiZcclxuICAgICAgdGhpcy5odHRwRXJyb3JDb25maWcuc2tpcEhhbmRsZWRFcnJvckNvZGVzLmZpbmRJbmRleChjb2RlID0+IGNvZGUgPT09IDQwNCkgPCAwXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3RoZW1lLXNoYXJlZC9zcmMvbGliL2hhbmRsZXJzL2Vycm9yLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXhELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRS9ELE1BQ2EsWUFBWTtJQVV2QixZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBVGhDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3JELHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELDhCQUF5QixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzVELG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsd0JBQW1CLEdBQUcs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QztJQUMvQixDQUFDO0lBRVMsU0FBUztRQUNqQixNQUFNLEtBQUssR0FBRztZQUNaLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsS0FBSztZQUNuRCxZQUFZLEVBQUUsc0JBQXNCLENBQUMsWUFBWSxDQUFDLEtBQUs7U0FDeEQsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxPQUFPO1lBQ3JELFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsT0FBTztTQUMxRCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFDcEQsYUFBYSxFQUFFLElBQUk7WUFDbkIsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXpFVSxZQUFZO2tIQUFaLFlBQVksY0FEQyxNQUFNOztTQUNuQixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEN1c3RvbUh0dHBFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb25maXJtYXRpb24nO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlybWF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDVVNUT01fRVJST1JfSEFORExFUlMsIEhUVFBfRVJST1JfSEFORExFUiB9IGZyb20gJy4uL3Rva2Vucy9odHRwLWVycm9yLnRva2VuJztcclxuaW1wb3J0IHsgREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLCBERUZBVUxUX0VSUk9SX01FU1NBR0VTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RlZmF1bHQtZXJyb3JzJztcclxuaW1wb3J0IHsgUm91dGVyRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JvdXRlci1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIVFRQX0VSUk9SX0NPTkZJRyB9IGZyb20gJy4uL3Rva2Vucy9odHRwLWVycm9yLnRva2VuJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBFcnJvckhhbmRsZXIge1xyXG4gIHByaXZhdGUgaHR0cEVycm9yUmVwb3J0ZXIgPSBpbmplY3QoSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlKTtcclxuICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByb3V0ZXJFcnJvckhhbmRsZXJTZXJ2aWNlID0gaW5qZWN0KFJvdXRlckVycm9ySGFuZGxlclNlcnZpY2UpO1xyXG4gIHByb3RlY3RlZCBodHRwRXJyb3JDb25maWcgPSBpbmplY3QoSFRUUF9FUlJPUl9DT05GSUcpO1xyXG4gIHByaXZhdGUgY3VzdG9tRXJyb3JIYW5kbGVycyA9IGluamVjdChDVVNUT01fRVJST1JfSEFORExFUlMpO1xyXG4gIHByaXZhdGUgZGVmYXVsdEh0dHBFcnJvckhhbmRsZXIgPSAoXywgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xyXG4gIHByaXZhdGUgaHR0cEVycm9ySGFuZGxlciA9XHJcbiAgICBpbmplY3QoSFRUUF9FUlJPUl9IQU5ETEVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pIHx8IHRoaXMuZGVmYXVsdEh0dHBFcnJvckhhbmRsZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMubGlzdGVuVG9SZXN0RXJyb3IoKTtcclxuICAgIHRoaXMubGlzdGVuVG9Sb3V0ZXJFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlblRvUm91dGVyRXJyb3IoKSB7XHJcbiAgICB0aGlzLnJvdXRlckVycm9ySGFuZGxlclNlcnZpY2UubGlzdGVuKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuVG9SZXN0RXJyb3IoKSB7XHJcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydGVyJFxyXG4gICAgICAucGlwZShmaWx0ZXIodGhpcy5maWx0ZXJSZXN0RXJyb3JzKSwgc3dpdGNoTWFwKHRoaXMuZXhlY3V0ZUVycm9ySGFuZGxlcikpXHJcbiAgICAgIC5zdWJzY3JpYmUoZXJyID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGVjdXRlRXJyb3JIYW5kbGVyID0gKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgY29uc3QgZXJySGFuZGxlciA9IHRoaXMuaHR0cEVycm9ySGFuZGxlcih0aGlzLmluamVjdG9yLCBlcnJvcik7XHJcbiAgICBjb25zdCBpc09ic2VydmFibGUgPSBlcnJIYW5kbGVyIGluc3RhbmNlb2YgT2JzZXJ2YWJsZTtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gaXNPYnNlcnZhYmxlID8gZXJySGFuZGxlciA6IG9mKG51bGwpO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIHByb3RlY3RlZCBzb3J0SHR0cEVycm9ySGFuZGxlcnMoXHJcbiAgICBhOiBDdXN0b21IdHRwRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIGI6IEN1c3RvbUh0dHBFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgcmV0dXJuIChiLnByaW9yaXR5IHx8IDApIC0gKGEucHJpb3JpdHkgfHwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogdW5rbm93bikge1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tRXJyb3JIYW5kbGVycyAmJiB0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGNhbkhhbmRsZVNlcnZpY2UgPSB0aGlzLmN1c3RvbUVycm9ySGFuZGxlcnNcclxuICAgICAgICAuc29ydCh0aGlzLnNvcnRIdHRwRXJyb3JIYW5kbGVycylcclxuICAgICAgICAuZmluZChzZXJ2aWNlID0+IHNlcnZpY2UuY2FuSGFuZGxlKGVycikpO1xyXG4gICAgICBpZiAoY2FuSGFuZGxlU2VydmljZSkge1xyXG4gICAgICAgIGNhbkhhbmRsZVNlcnZpY2UuZXhlY3V0ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93RXJyb3IoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzaG93RXJyb3IoKTogT2JzZXJ2YWJsZTxDb25maXJtYXRpb24uU3RhdHVzPiB7XHJcbiAgICBjb25zdCB0aXRsZSA9IHtcclxuICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yLnRpdGxlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7XHJcbiAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TLmRlZmF1bHRFcnJvci5kZXRhaWxzLFxyXG4gICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuZGVmYXVsdEVycm9yLmRldGFpbHMsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSwge1xyXG4gICAgICBoaWRlQ2FuY2VsQnRuOiB0cnVlLFxyXG4gICAgICB5ZXNUZXh0OiAnQWJwQWNjb3VudDo6Q2xvc2UnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmlsdGVyUmVzdEVycm9ycyA9ICh7IHN0YXR1cyB9OiBIdHRwRXJyb3JSZXNwb25zZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0dXMgIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgISF0aGlzLmh0dHBFcnJvckNvbmZpZy5za2lwSGFuZGxlZEVycm9yQ29kZXMgJiZcclxuICAgICAgdGhpcy5odHRwRXJyb3JDb25maWcuc2tpcEhhbmRsZWRFcnJvckNvZGVzLmZpbmRJbmRleChjb2RlID0+IGNvZGUgPT09IHN0YXR1cykgPCAwXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvbW9kZWxzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICdAbmd4LXZhbGlkYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkljb25zIH0gZnJvbSAnLi4vdG9rZW5zL2NvbmZpcm1hdGlvbi1pY29ucy50b2tlbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RQYXJhbXMge1xyXG4gIGh0dHBFcnJvckNvbmZpZz86IEh0dHBFcnJvckNvbmZpZztcclxuICB2YWxpZGF0aW9uPzogUGFydGlhbDxWYWxpZGF0aW9uLkNvbmZpZz47XHJcbiAgY29uZmlybWF0aW9uSWNvbnM/OiBQYXJ0aWFsPENvbmZpcm1hdGlvbkljb25zPjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXJyb3JTY3JlZW5FcnJvckNvZGVzID0gNDAxIHwgNDAzIHwgNDA0IHwgNTAwO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIdHRwRXJyb3JDb25maWcge1xyXG4gIHNraXBIYW5kbGVkRXJyb3JDb2Rlcz86IEVycm9yU2NyZWVuRXJyb3JDb2Rlc1tdIHwgbnVtYmVyW107XHJcbiAgZXJyb3JTY3JlZW4/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvbW9kZWxzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICdAbmd4LXZhbGlkYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkljb25zIH0gZnJvbSAnLi4vdG9rZW5zL2NvbmZpcm1hdGlvbi1pY29ucy50b2tlbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RQYXJhbXMge1xyXG4gIGh0dHBFcnJvckNvbmZpZz86IEh0dHBFcnJvckNvbmZpZztcclxuICB2YWxpZGF0aW9uPzogUGFydGlhbDxWYWxpZGF0aW9uLkNvbmZpZz47XHJcbiAgY29uZmlybWF0aW9uSWNvbnM/OiBQYXJ0aWFsPENvbmZpcm1hdGlvbkljb25zPjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXJyb3JTY3JlZW5FcnJvckNvZGVzID0gNDAxIHwgNDAzIHwgNDA0IHwgNTAwO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIdHRwRXJyb3JDb25maWcge1xyXG4gIHNraXBIYW5kbGVkRXJyb3JDb2Rlcz86IEVycm9yU2NyZWVuRXJyb3JDb2Rlc1tdIHwgbnVtYmVyW107XHJcbiAgZXJyb3JTY3JlZW4/OiB7XHJcbiAgICBjb21wb25lbnQ6IFR5cGU8YW55PjtcclxuICAgIGZvcldoaWNoRXJyb3JzPzogRXJyb3JTY3JlZW5FcnJvckNvZGVzW107XHJcbiAgICBoaWRlQ2xvc2VJY29uPzogYm9vbGVhbjtcclxuICB9O1xyXG59XHJcbmV4cG9ydCB0eXBlIEh0dHBFcnJvckhhbmRsZXI8VCA9IGFueT4gPSAoaHR0cEVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gT2JzZXJ2YWJsZTxUPjtcclxuZXhwb3J0IHR5cGUgTG9jYWxlRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tSHR0cEVycm9ySGFuZGxlclNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IHByaW9yaXR5OiBudW1iZXI7XHJcbiAgY2FuSGFuZGxlKGVycm9yOiB1bmtub3duKTogYm9vbGVhbjtcclxuICBleGVjdXRlKCk7XHJcbn1cclxuIl19
|
|
@@ -3,4 +3,4 @@ export class NavItem {
|
|
|
3
3
|
Object.assign(this, props);
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9tb2RlbHMvbmF2LWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxPQUFPLE9BQU87SUFZbEIsWUFBWSxLQUF1QjtRQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCYWRnZSB7XHJcbiAgY291bnQ/OiBudW1iZXIgfCBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgY29sb3I/OiBzdHJpbmc7XHJcbiAgaWNvbj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE5hdkl0ZW0ge1xyXG4gIGlkPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgYmFkZ2U/OiBCYWRnZTtcclxuICBjb21wb25lbnQ/OiBUeXBlPGFueT47XHJcbiAgaHRtbD86IHN0cmluZztcclxuICBhY3Rpb24/OiAoKSA9PiB2b2lkO1xyXG4gIG9yZGVyPzogbnVtYmVyO1xyXG4gIHJlcXVpcmVkUG9saWN5Pzogc3RyaW5nO1xyXG4gIHZpc2libGU/OiBOYXZCYXJQcm9wUHJlZGljYXRlPE5hdkl0ZW0+O1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgY29uc3RydWN0b3IocHJvcHM6IFBhcnRpYWw8TmF2SXRlbT4pIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcHJvcHMpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTmF2QmFyUHJvcFByZWRpY2F0ZTxUPiA9IChcclxuICBwcm9wPzogVCxcclxuICBpbmplY3Rvcj86IEluamVjdG9yLFxyXG4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { CUSTOM_ERROR_HANDLERS } from '../tokens';
|
|
2
|
+
import { TenantResolveErrorHandlerService } from '../services/tenant-resolve-error-handler.service';
|
|
3
|
+
import { AbpFormatErrorHandlerService } from '../services/abp-format-error-handler.service';
|
|
4
|
+
import { StatusCodeErrorHandlerService } from '../services/status-code-error-handler.service';
|
|
5
|
+
import { UnknownStatusCodeErrorHandlerService } from '../services/unknown-status-code-error-handler.service';
|
|
6
|
+
export const ERROR_HANDLERS_PROVIDERS = [
|
|
7
|
+
{
|
|
8
|
+
provide: CUSTOM_ERROR_HANDLERS,
|
|
9
|
+
multi: true,
|
|
10
|
+
useClass: TenantResolveErrorHandlerService,
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
provide: CUSTOM_ERROR_HANDLERS,
|
|
14
|
+
multi: true,
|
|
15
|
+
useClass: AbpFormatErrorHandlerService,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
provide: CUSTOM_ERROR_HANDLERS,
|
|
19
|
+
multi: true,
|
|
20
|
+
useClass: StatusCodeErrorHandlerService,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
provide: CUSTOM_ERROR_HANDLERS,
|
|
24
|
+
multi: true,
|
|
25
|
+
useClass: UnknownStatusCodeErrorHandlerService,
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlcnMucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9wcm92aWRlcnMvZXJyb3ItaGFuZGxlcnMucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRTdHLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFlO0lBQ2xEO1FBQ0UsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixLQUFLLEVBQUUsSUFBSTtRQUNYLFFBQVEsRUFBRSxnQ0FBZ0M7S0FDM0M7SUFDRDtRQUNFLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsS0FBSyxFQUFFLElBQUk7UUFDWCxRQUFRLEVBQUUsNEJBQTRCO0tBQ3ZDO0lBQ0Q7UUFDRSxPQUFPLEVBQUUscUJBQXFCO1FBQzlCLEtBQUssRUFBRSxJQUFJO1FBQ1gsUUFBUSxFQUFFLDZCQUE2QjtLQUN4QztJQUNEO1FBQ0UsT0FBTyxFQUFFLHFCQUFxQjtRQUM5QixLQUFLLEVBQUUsSUFBSTtRQUNYLFFBQVEsRUFBRSxvQ0FBb0M7S0FDL0M7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ1VTVE9NX0VSUk9SX0hBTkRMRVJTIH0gZnJvbSAnLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgVGVuYW50UmVzb2x2ZUVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90ZW5hbnQtcmVzb2x2ZS1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnBGb3JtYXRFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWJwLWZvcm1hdC1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNDb2RlRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXR1cy1jb2RlLWVycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFVua25vd25TdGF0dXNDb2RlRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Vua25vd24tc3RhdHVzLWNvZGUtZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBFUlJPUl9IQU5ETEVSU19QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXHJcbiAge1xyXG4gICAgcHJvdmlkZTogQ1VTVE9NX0VSUk9SX0hBTkRMRVJTLFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICB1c2VDbGFzczogVGVuYW50UmVzb2x2ZUVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgfSxcclxuICB7XHJcbiAgICBwcm92aWRlOiBDVVNUT01fRVJST1JfSEFORExFUlMsXHJcbiAgICBtdWx0aTogdHJ1ZSxcclxuICAgIHVzZUNsYXNzOiBBYnBGb3JtYXRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgcHJvdmlkZTogQ1VTVE9NX0VSUk9SX0hBTkRMRVJTLFxyXG4gICAgbXVsdGk6IHRydWUsXHJcbiAgICB1c2VDbGFzczogU3RhdHVzQ29kZUVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgfSxcclxuICB7XHJcbiAgICBwcm92aWRlOiBDVVNUT01fRVJST1JfSEFORExFUlMsXHJcbiAgICBtdWx0aTogdHJ1ZSxcclxuICAgIHVzZUNsYXNzOiBVbmtub3duU3RhdHVzQ29kZUVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgfSxcclxuXTtcclxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './ng-bootstrap-config.provider';
|
|
2
2
|
export * from './route.provider';
|
|
3
|
-
|
|
3
|
+
export * from './error-handlers.provider';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25nLWJvb3RzdHJhcC1jb25maWcucHJvdmlkZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLnByb3ZpZGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci1oYW5kbGVycy5wcm92aWRlcic7XHJcbiJdfQ==
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { AuthService } from '@abp/ng.core';
|
|
3
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
4
|
+
import { getErrorFromRequestBody } from '../utils/error.utils';
|
|
5
|
+
import { ConfirmationService } from '../services/confirmation.service';
|
|
6
|
+
import { CUSTOM_HTTP_ERROR_HANDLER_PRIORITY } from '../constants/default-errors';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
class AbpFormatErrorHandlerService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.high;
|
|
11
|
+
this.confirmationService = inject(ConfirmationService);
|
|
12
|
+
this.authService = inject(AuthService);
|
|
13
|
+
this.error = undefined;
|
|
14
|
+
}
|
|
15
|
+
navigateToLogin() {
|
|
16
|
+
return this.authService.navigateToLogin();
|
|
17
|
+
}
|
|
18
|
+
canHandle(error) {
|
|
19
|
+
if (error instanceof HttpErrorResponse && error.headers.get('_AbpErrorFormat')) {
|
|
20
|
+
this.error = error;
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
execute() {
|
|
26
|
+
const { message, title } = getErrorFromRequestBody(this.error?.error?.error);
|
|
27
|
+
this.confirmationService
|
|
28
|
+
.error(message, title, {
|
|
29
|
+
hideCancelBtn: true,
|
|
30
|
+
yesText: 'AbpAccount::Close',
|
|
31
|
+
})
|
|
32
|
+
.subscribe(() => {
|
|
33
|
+
if (this.error?.status === 401) {
|
|
34
|
+
this.navigateToLogin();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AbpFormatErrorHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AbpFormatErrorHandlerService, providedIn: 'root' }); }
|
|
40
|
+
}
|
|
41
|
+
export { AbpFormatErrorHandlerService };
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AbpFormatErrorHandlerService, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{ providedIn: 'root' }]
|
|
45
|
+
}] });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLWZvcm1hdC1lcnJvci1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy9hYnAtZm9ybWF0LWVycm9yLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUVqRixNQUNhLDRCQUE0QjtJQUR6QztRQUVXLGFBQVEsR0FBRyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUM7UUFDcEQsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsVUFBSyxHQUFrQyxTQUFTLENBQUM7S0EyQjFEO0lBekJTLGVBQWU7UUFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYztRQUN0QixJQUFJLEtBQUssWUFBWSxpQkFBaUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzlFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsbUJBQW1CO2FBQ3JCLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ3JCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLE9BQU8sRUFBRSxtQkFBbUI7U0FDN0IsQ0FBQzthQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTlCVSw0QkFBNEI7a0hBQTVCLDRCQUE0QixjQURmLE1BQU07O1NBQ25CLDRCQUE0QjsyRkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBnZXRFcnJvckZyb21SZXF1ZXN0Qm9keSB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLnV0aWxzJztcclxuaW1wb3J0IHsgQ3VzdG9tSHR0cEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ1VTVE9NX0hUVFBfRVJST1JfSEFORExFUl9QUklPUklUWSB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0LWVycm9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQWJwRm9ybWF0RXJyb3JIYW5kbGVyU2VydmljZSBpbXBsZW1lbnRzIEN1c3RvbUh0dHBFcnJvckhhbmRsZXJTZXJ2aWNlIHtcclxuICByZWFkb25seSBwcmlvcml0eSA9IENVU1RPTV9IVFRQX0VSUk9SX0hBTkRMRVJfUFJJT1JJVFkuaGlnaDtcclxuICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVUb0xvZ2luKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UubmF2aWdhdGVUb0xvZ2luKCk7XHJcbiAgfVxyXG5cclxuICBjYW5IYW5kbGUoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIGVycm9yLmhlYWRlcnMuZ2V0KCdfQWJwRXJyb3JGb3JtYXQnKSkge1xyXG4gICAgICB0aGlzLmVycm9yID0gZXJyb3I7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZSgpIHtcclxuICAgIGNvbnN0IHsgbWVzc2FnZSwgdGl0bGUgfSA9IGdldEVycm9yRnJvbVJlcXVlc3RCb2R5KHRoaXMuZXJyb3I/LmVycm9yPy5lcnJvcik7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2VcclxuICAgICAgLmVycm9yKG1lc3NhZ2UsIHRpdGxlLCB7XHJcbiAgICAgICAgaGlkZUNhbmNlbEJ0bjogdHJ1ZSxcclxuICAgICAgICB5ZXNUZXh0OiAnQWJwQWNjb3VudDo6Q2xvc2UnLFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5lcnJvcj8uc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0xvZ2luKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|