zek 14.2.70 → 14.2.72
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.
|
@@ -7,12 +7,13 @@ import * as i2 from "@ngx-translate/core";
|
|
|
7
7
|
import * as i3 from "@angular/router";
|
|
8
8
|
/** Handles HttpClient errors */
|
|
9
9
|
export class HttpErrorHandler {
|
|
10
|
-
constructor(
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
10
|
+
constructor(alert, translate, router) {
|
|
11
|
+
this.alert = alert;
|
|
12
|
+
this.translate = translate;
|
|
13
13
|
this.router = router;
|
|
14
14
|
/** Create curried handleError function that already knows the service name */
|
|
15
15
|
this.createHandleError = (serviceName = '') => (operation = 'operation', result = {}, show = true) => this.handleError(serviceName, operation, result, show);
|
|
16
|
+
this.createHandleErrorResult = (serviceName = '') => (operation = 'operation', show = true) => this.handleErrorResult(serviceName, operation, show);
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
19
|
* Returns a function that handles Http operation failures.
|
|
@@ -20,86 +21,126 @@ export class HttpErrorHandler {
|
|
|
20
21
|
* @param serviceName = name of the data service that attempted the operation
|
|
21
22
|
* @param operation - name of the operation that failed
|
|
22
23
|
* @param result - optional value to return as the observable result
|
|
24
|
+
* @param show - optional value to show error
|
|
23
25
|
*/
|
|
24
26
|
handleError(serviceName = '', operation = 'operation', result = {}, show) {
|
|
25
27
|
return (response) => {
|
|
26
28
|
console.error(response);
|
|
27
29
|
if (show) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
30
|
+
this.showError(serviceName, operation, response);
|
|
31
|
+
}
|
|
32
|
+
//return throwError('Error! please try again later.');
|
|
33
|
+
return of(result);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns a function that handles Http operation failures.
|
|
38
|
+
* This error handler lets the app continue to run as if no error occurred.
|
|
39
|
+
* @param serviceName = name of the data service that attempted the operation
|
|
40
|
+
* @param operation - name of the operation that failed
|
|
41
|
+
* @param show - optional value to show error
|
|
42
|
+
*/
|
|
43
|
+
handleErrorResult(serviceName = '', operation = 'operation', show) {
|
|
44
|
+
return (response) => {
|
|
45
|
+
console.error(response);
|
|
46
|
+
if (show) {
|
|
47
|
+
this.showError(serviceName, operation, response);
|
|
48
|
+
}
|
|
49
|
+
let error;
|
|
50
|
+
if (typeof response.error === 'string' && response.error[0] === '{') {
|
|
51
|
+
error = JSON.parse(response.error);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
error = response.error;
|
|
55
|
+
}
|
|
56
|
+
let result;
|
|
57
|
+
if (error instanceof ErrorEvent) {
|
|
58
|
+
result = { '': [response.error.message] };
|
|
59
|
+
}
|
|
60
|
+
if (typeof error === 'string') {
|
|
61
|
+
result = { '': [response.error] };
|
|
62
|
+
}
|
|
63
|
+
else if (typeof error === 'object') {
|
|
64
|
+
const errors = error.traceId || error.success === false
|
|
65
|
+
? error.errors
|
|
66
|
+
: error;
|
|
67
|
+
result = errors;
|
|
68
|
+
}
|
|
69
|
+
return of(result);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
showError(serviceName, operation, response) {
|
|
73
|
+
switch (response.status) {
|
|
74
|
+
case 0: //No Connection
|
|
75
|
+
this.alert.error(`Can't connect to api server.`);
|
|
76
|
+
break;
|
|
77
|
+
case 400: //Bad Request
|
|
78
|
+
let error;
|
|
79
|
+
if (typeof response.error === 'string' && response.error[0] === '{') {
|
|
80
|
+
error = JSON.parse(response.error);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
error = response.error;
|
|
84
|
+
}
|
|
85
|
+
if (error instanceof ErrorEvent) {
|
|
86
|
+
this.alert.error(`${serviceName}: ${operation} failed: ${response.error.message}`);
|
|
87
|
+
}
|
|
88
|
+
if (typeof error === 'string') {
|
|
89
|
+
this.alert.error(response.error);
|
|
90
|
+
}
|
|
91
|
+
else if (typeof error === 'object') {
|
|
92
|
+
const errors = error.traceId || error.success === false
|
|
93
|
+
? error.errors
|
|
94
|
+
: error;
|
|
95
|
+
const errorMessages = [];
|
|
96
|
+
const properties = Object.getOwnPropertyNames(errors);
|
|
97
|
+
for (let property of properties) {
|
|
98
|
+
const messages = errors[property];
|
|
99
|
+
if (messages instanceof Array) {
|
|
100
|
+
for (let message of messages) {
|
|
101
|
+
const messageKey = `Validation.${message}`;
|
|
102
|
+
let translatedMessage = this.translate.instant(messageKey);
|
|
103
|
+
// if translation not found then use message
|
|
104
|
+
if (messageKey == translatedMessage) {
|
|
105
|
+
translatedMessage = message;
|
|
106
|
+
}
|
|
107
|
+
if (property) {
|
|
108
|
+
const propertyKey = `Fields.${property}`;
|
|
109
|
+
let translatedProperty = this.translate.instant(`Fields.${property}`);
|
|
110
|
+
// if translation not found then use property
|
|
111
|
+
if (propertyKey == translatedProperty) {
|
|
112
|
+
translatedProperty = property;
|
|
74
113
|
}
|
|
114
|
+
errorMessages.push(translatedProperty + ' - ' + translatedMessage);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
errorMessages.push(translatedMessage);
|
|
75
118
|
}
|
|
76
119
|
}
|
|
77
|
-
this.alertService.addRange(AlertType.Danger, errorMessages);
|
|
78
120
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
this.alertService.error('Unauthorized');
|
|
82
|
-
this.router.navigate(['/login']);
|
|
83
|
-
break;
|
|
84
|
-
case 403: //Forbidden
|
|
85
|
-
this.alertService.error('Forbidden');
|
|
86
|
-
break;
|
|
87
|
-
case 404: //Not Found
|
|
88
|
-
this.alertService.error('Not Found');
|
|
89
|
-
break;
|
|
90
|
-
case 402: //Payment Required
|
|
91
|
-
this.alertService.error('License Payment Required');
|
|
92
|
-
break;
|
|
93
|
-
case 500: //Internal Server Error
|
|
94
|
-
this.alertService.error('Internal Server Error');
|
|
95
|
-
break;
|
|
96
|
-
default:
|
|
97
|
-
break;
|
|
121
|
+
}
|
|
122
|
+
this.alert.addRange(AlertType.Danger, errorMessages);
|
|
98
123
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
124
|
+
break;
|
|
125
|
+
case 401: //Unauthorized
|
|
126
|
+
this.alert.error('Unauthorized');
|
|
127
|
+
this.router.navigate(['/login']);
|
|
128
|
+
break;
|
|
129
|
+
case 403: //Forbidden
|
|
130
|
+
this.alert.error('Forbidden');
|
|
131
|
+
break;
|
|
132
|
+
case 404: //Not Found
|
|
133
|
+
this.alert.error('Not Found');
|
|
134
|
+
break;
|
|
135
|
+
case 402: //Payment Required
|
|
136
|
+
this.alert.error('License Payment Required');
|
|
137
|
+
break;
|
|
138
|
+
case 500: //Internal Server Error
|
|
139
|
+
this.alert.error('Internal Server Error');
|
|
140
|
+
break;
|
|
141
|
+
default:
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
103
144
|
}
|
|
104
145
|
}
|
|
105
146
|
HttpErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: HttpErrorHandler, deps: [{ token: i1.AlertService }, { token: i2.TranslateService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -107,4 +148,4 @@ HttpErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ver
|
|
|
107
148
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: HttpErrorHandler, decorators: [{
|
|
108
149
|
type: Injectable
|
|
109
150
|
}], ctorParameters: function () { return [{ type: i1.AlertService }, { type: i2.TranslateService }, { type: i3.Router }]; } });
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9zZXJ2aWNlcy9odHRwLWVycm9yLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFLdEMsZ0NBQWdDO0FBRWhDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsWUFDcUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLE1BQWM7UUFGZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFbkMsOEVBQThFO1FBQzlFLHNCQUFpQixHQUFHLENBQUMsV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBSSxTQUFTLEdBQUcsV0FBVyxFQUFFLFNBQVMsRUFBTyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFIekgsQ0FBQztJQUt4Qzs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcsV0FBVyxFQUFFLFNBQVMsRUFBTyxFQUFFLElBQWM7UUFDdEYsT0FBTyxDQUFDLFFBQTJCLEVBQWlCLEVBQUU7WUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV4QixJQUFJLElBQUksRUFBRTtnQkFDTixRQUFRLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JB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RVYsS0FBSyxHQUFHLEVBQUMsV0FBVzt3QkFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ3JDLE1BQU07b0JBRVYsS0FBSyxHQUFHLEVBQUMsV0FBVzt3QkFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ3JDLE1BQU07b0JBRVYsS0FBSyxHQUFHLEVBQUMsa0JBQWtCO3dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3dCQUNwRCxNQUFNO29CQUVWLEtBQUssR0FBRyxFQUFDLHVCQUF1Qjt3QkFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDakQsTUFBTTtvQkFFVjt3QkFDSSxNQUFNO2lCQUNiO2FBQ0o7WUFJRCxzREFBc0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQzs7NkdBNUdRLGdCQUFnQjtpSEFBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0VHlwZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG4vKiogVHlwZSBvZiB0aGUgaGFuZGxlRXJyb3IgZnVuY3Rpb24gcmV0dXJuZWQgYnkgSHR0cEVycm9ySGFuZGxlci5jcmVhdGVIYW5kbGVFcnJvciAqL1xyXG5leHBvcnQgdHlwZSBIYW5kbGVFcnJvciA9IDxUID0gYW55PihvcGVyYXRpb24/OiBzdHJpbmcsIHJlc3VsdD86IFQsIHNob3c/OiBib29sZWFuKSA9PiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBPYnNlcnZhYmxlPFQ+Oy8vQWRkZWQgJz0gYW55J1xyXG5cclxuLyoqIEhhbmRsZXMgSHR0cENsaWVudCBlcnJvcnMgKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSHR0cEVycm9ySGFuZGxlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyKSB7IH1cclxuXHJcbiAgICAvKiogQ3JlYXRlIGN1cnJpZWQgaGFuZGxlRXJyb3IgZnVuY3Rpb24gdGhhdCBhbHJlYWR5IGtub3dzIHRoZSBzZXJ2aWNlIG5hbWUgKi9cclxuICAgIGNyZWF0ZUhhbmRsZUVycm9yID0gKHNlcnZpY2VOYW1lID0gJycpID0+IDxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0ID0ge30gYXMgVCwgc2hvdyA9IHRydWUpID0+IHRoaXMuaGFuZGxlRXJyb3Ioc2VydmljZU5hbWUsIG9wZXJhdGlvbiwgcmVzdWx0LCBzaG93KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgSHR0cCBvcGVyYXRpb24gZmFpbHVyZXMuXHJcbiAgICAgKiBUaGlzIGVycm9yIGhhbmRsZXIgbGV0cyB0aGUgYXBwIGNvbnRpbnVlIHRvIHJ1biBhcyBpZiBubyBlcnJvciBvY2N1cnJlZC5cclxuICAgICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSA9IG5hbWUgb2YgdGhlIGRhdGEgc2VydmljZSB0aGF0IGF0dGVtcHRlZCB0aGUgb3BlcmF0aW9uXHJcbiAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgZmFpbGVkXHJcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGFzIHRoZSBvYnNlcnZhYmxlIHJlc3VsdFxyXG4gICAgICovXHJcbiAgICBoYW5kbGVFcnJvcjxUPihzZXJ2aWNlTmFtZSA9ICcnLCBvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0ID0ge30gYXMgVCwgc2hvdz86IGJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8VD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDovL05vIENvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYENhbid0IGNvbm5lY3QgdG8gYXBpIHNlcnZlci5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDAwOi8vQmFkIFJlcXVlc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yOiBhbnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXJyb3IgPT09ICdzdHJpbmcnICYmIHJlc3BvbnNlLmVycm9yWzBdID09PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShyZXNwb25zZS5lcnJvcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYCR7c2VydmljZU5hbWV9OiAke29wZXJhdGlvbn0gZmFpbGVkOiAke3Jlc3BvbnNlLmVycm9yLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gaWYgKGVycm9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IocmVzcG9uc2UuZXJyb3IgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gZXJyb3IudHJhY2VJZCB8fCBlcnJvci5zdWNjZXNzID09PSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3IuZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9ycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gZXJyb3JzW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gYFZhbGlkYXRpb24uJHttZXNzYWdlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHJhbnNsYXRlZE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRyYW5zbGF0aW9uIG5vdCBmb3VuZCB0aGVuIHVzZSBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZUtleSA9PSB0cmFuc2xhdGVkTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eUtleSA9IGBGaWVsZHMuJHtwcm9wZXJ0eX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2xhdGVkUHJvcGVydHkgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgRmllbGRzLiR7cHJvcGVydHl9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdHJhbnNsYXRpb24gbm90IGZvdW5kIHRoZW4gdXNlIHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5S2V5ID09IHRyYW5zbGF0ZWRQcm9wZXJ0eSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRQcm9wZXJ0eSA9IHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaCh0cmFuc2xhdGVkUHJvcGVydHkgKyAnIC0gJyArIHRyYW5zbGF0ZWRNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaCh0cmFuc2xhdGVkTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRSYW5nZShBbGVydFR5cGUuRGFuZ2VyLCBlcnJvck1lc3NhZ2VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDE6Ly9VbmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoJ1VuYXV0aG9yaXplZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9sb2dpbiddKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDAzOi8vRm9yYmlkZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKCdGb3JiaWRkZW4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDA0Oi8vTm90IEZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKCdOb3QgRm91bmQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDAyOi8vUGF5bWVudCBSZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcignTGljZW5zZSBQYXltZW50IFJlcXVpcmVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDUwMDovL0ludGVybmFsIFNlcnZlciBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcignSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAvL3JldHVybiB0aHJvd0Vycm9yKCdFcnJvciEgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufSJdfQ==
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci1oYW5kbGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96ZWsvc3JjL2xpYi9zZXJ2aWNlcy9odHRwLWVycm9yLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7QUFNdEMsZ0NBQWdDO0FBRWhDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsWUFDcUIsS0FBbUIsRUFDbkIsU0FBMkIsRUFDM0IsTUFBYztRQUZkLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUVuQyw4RUFBOEU7UUFDOUUsc0JBQWlCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFJLFNBQVMsR0FBRyxXQUFXLEVBQUUsU0FBUyxFQUFPLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoSyw0QkFBdUIsR0FBRyxDQUFDLFdBQVcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUozRyxDQUFDO0lBTXhDOzs7Ozs7O09BT0c7SUFDSCxXQUFXLENBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcs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bSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0VHlwZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG4vKiogVHlwZSBvZiB0aGUgaGFuZGxlRXJyb3IgZnVuY3Rpb24gcmV0dXJuZWQgYnkgSHR0cEVycm9ySGFuZGxlci5jcmVhdGVIYW5kbGVFcnJvciAqL1xyXG5leHBvcnQgdHlwZSBIYW5kbGVFcnJvciA9IDxUID0gYW55PihvcGVyYXRpb24/OiBzdHJpbmcsIHJlc3VsdD86IFQsIHNob3c/OiBib29sZWFuKSA9PiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBPYnNlcnZhYmxlPFQ+O1xyXG5leHBvcnQgdHlwZSBIYW5kbGVFcnJvclJlc3VsdCA9IDxUID0gYW55PihvcGVyYXRpb24/OiBzdHJpbmcsIHNob3c/OiBib29sZWFuKSA9PiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBPYnNlcnZhYmxlPFQ+O1xyXG5cclxuLyoqIEhhbmRsZXMgSHR0cENsaWVudCBlcnJvcnMgKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSHR0cEVycm9ySGFuZGxlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0OiBBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gICAgLyoqIENyZWF0ZSBjdXJyaWVkIGhhbmRsZUVycm9yIGZ1bmN0aW9uIHRoYXQgYWxyZWFkeSBrbm93cyB0aGUgc2VydmljZSBuYW1lICovXHJcbiAgICBjcmVhdGVIYW5kbGVFcnJvciA9IChzZXJ2aWNlTmFtZSA9ICcnKSA9PiA8VD4ob3BlcmF0aW9uID0gJ29wZXJhdGlvbicsIHJlc3VsdCA9IHt9IGFzIFQsIHNob3cgPSB0cnVlKSA9PiB0aGlzLmhhbmRsZUVycm9yKHNlcnZpY2VOYW1lLCBvcGVyYXRpb24sIHJlc3VsdCwgc2hvdyk7XHJcbiAgICBjcmVhdGVIYW5kbGVFcnJvclJlc3VsdCA9IChzZXJ2aWNlTmFtZSA9ICcnKSA9PiA8VD4ob3BlcmF0aW9uID0gJ29wZXJhdGlvbicsIHNob3cgPSB0cnVlKSA9PiB0aGlzLmhhbmRsZUVycm9yUmVzdWx0KHNlcnZpY2VOYW1lLCBvcGVyYXRpb24sIHNob3cpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBIdHRwIG9wZXJhdGlvbiBmYWlsdXJlcy5cclxuICAgICAqIFRoaXMgZXJyb3IgaGFuZGxlciBsZXRzIHRoZSBhcHAgY29udGludWUgdG8gcnVuIGFzIGlmIG5vIGVycm9yIG9jY3VycmVkLlxyXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lID0gbmFtZSBvZiB0aGUgZGF0YSBzZXJ2aWNlIHRoYXQgYXR0ZW1wdGVkIHRoZSBvcGVyYXRpb25cclxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWRcclxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gYXMgdGhlIG9ic2VydmFibGUgcmVzdWx0XHJcbiAgICAgKiBAcGFyYW0gc2hvdyAtIG9wdGlvbmFsIHZhbHVlIHRvIHNob3cgZXJyb3JcclxuICAgICAqL1xyXG4gICAgaGFuZGxlRXJyb3I8VD4oc2VydmljZU5hbWUgPSAnJywgb3BlcmF0aW9uID0gJ29wZXJhdGlvbicsIHJlc3VsdCA9IHt9IGFzIFQsIHNob3c/OiBib29sZWFuKSB7XHJcbiAgICAgICAgcmV0dXJuIChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3Ioc2VydmljZU5hbWUsIG9wZXJhdGlvbiwgcmVzcG9uc2UpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vcmV0dXJuIHRocm93RXJyb3IoJ0Vycm9yISBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YocmVzdWx0KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBIdHRwIG9wZXJhdGlvbiBmYWlsdXJlcy5cclxuICAgICAqIFRoaXMgZXJyb3IgaGFuZGxlciBsZXRzIHRoZSBhcHAgY29udGludWUgdG8gcnVuIGFzIGlmIG5vIGVycm9yIG9jY3VycmVkLlxyXG4gICAgICogQHBhcmFtIHNlcnZpY2VOYW1lID0gbmFtZSBvZiB0aGUgZGF0YSBzZXJ2aWNlIHRoYXQgYXR0ZW1wdGVkIHRoZSBvcGVyYXRpb25cclxuICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWRcclxuICAgICAqIEBwYXJhbSBzaG93IC0gb3B0aW9uYWwgdmFsdWUgdG8gc2hvdyBlcnJvclxyXG4gICAgICovXHJcbiAgICBoYW5kbGVFcnJvclJlc3VsdDxUPihzZXJ2aWNlTmFtZSA9ICcnLCBvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgc2hvdz86IGJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8VD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihzZXJ2aWNlTmFtZSwgb3BlcmF0aW9uLCByZXNwb25zZSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVycm9yOiBhbnk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuZXJyb3IgPT09ICdzdHJpbmcnICYmIHJlc3BvbnNlLmVycm9yWzBdID09PSAneycpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yID0gSlNPTi5wYXJzZShyZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBhbnk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsgJyc6IFtyZXNwb25zZS5lcnJvci5tZXNzYWdlIGFzIHN0cmluZ10gfTtcclxuICAgICAgICAgICAgfSBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0geyAnJzogW3Jlc3BvbnNlLmVycm9yIGFzIHN0cmluZ10gfTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBlcnJvci50cmFjZUlkIHx8IGVycm9yLnN1Y2Nlc3MgPT09IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvci5lcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICA6IGVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZXJyb3JzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvZihyZXN1bHQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgc2hvd0Vycm9yKHNlcnZpY2VOYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCByZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2Upe1xyXG4gICAgICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMDovL05vIENvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnQuZXJyb3IoYENhbid0IGNvbm5lY3QgdG8gYXBpIHNlcnZlci5gKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA0MDA6Ly9CYWQgUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yOiBhbnk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmVycm9yID09PSAnc3RyaW5nJyAmJiByZXNwb25zZS5lcnJvclswXSA9PT0gJ3snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBKU09OLnBhcnNlKHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydC5lcnJvcihgJHtzZXJ2aWNlTmFtZX06ICR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7cmVzcG9uc2UuZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0LmVycm9yKHJlc3BvbnNlLmVycm9yIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBlcnJvci50cmFjZUlkIHx8IGVycm9yLnN1Y2Nlc3MgPT09IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3IuZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZXJyb3I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9ycyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBlcnJvcnNbcHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbWVzc2FnZSBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBgVmFsaWRhdGlvbi4ke21lc3NhZ2V9YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHJhbnNsYXRlZE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KG1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRyYW5zbGF0aW9uIG5vdCBmb3VuZCB0aGVuIHVzZSBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VLZXkgPT0gdHJhbnNsYXRlZE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gYEZpZWxkcy4ke3Byb3BlcnR5fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2xhdGVkUHJvcGVydHkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGBGaWVsZHMuJHtwcm9wZXJ0eX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdHJhbnNsYXRpb24gbm90IGZvdW5kIHRoZW4gdXNlIHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUtleSA9PSB0cmFuc2xhdGVkUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRQcm9wZXJ0eSA9IHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKHRyYW5zbGF0ZWRQcm9wZXJ0eSArICcgLSAnICsgdHJhbnNsYXRlZE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKHRyYW5zbGF0ZWRNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydC5hZGRSYW5nZShBbGVydFR5cGUuRGFuZ2VyLCBlcnJvck1lc3NhZ2VzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA0MDE6Ly9VbmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnQuZXJyb3IoJ1VuYXV0aG9yaXplZCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbG9naW4nXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgNDAzOi8vRm9yYmlkZGVuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0LmVycm9yKCdGb3JiaWRkZW4nKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSA0MDQ6Ly9Ob3QgRm91bmRcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnQuZXJyb3IoJ05vdCBGb3VuZCcpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDQwMjovL1BheW1lbnQgUmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnQuZXJyb3IoJ0xpY2Vuc2UgUGF5bWVudCBSZXF1aXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIDUwMDovL0ludGVybmFsIFNlcnZlciBFcnJvclxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydC5lcnJvcignSW50ZXJuYWwgU2VydmVyIEVycm9yJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59Il19
|
package/fesm2015/zek.mjs
CHANGED
|
@@ -1586,12 +1586,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
|
|
|
1586
1586
|
|
|
1587
1587
|
/** Handles HttpClient errors */
|
|
1588
1588
|
class HttpErrorHandler {
|
|
1589
|
-
constructor(
|
|
1590
|
-
this.
|
|
1591
|
-
this.
|
|
1589
|
+
constructor(alert, translate, router) {
|
|
1590
|
+
this.alert = alert;
|
|
1591
|
+
this.translate = translate;
|
|
1592
1592
|
this.router = router;
|
|
1593
1593
|
/** Create curried handleError function that already knows the service name */
|
|
1594
1594
|
this.createHandleError = (serviceName = '') => (operation = 'operation', result = {}, show = true) => this.handleError(serviceName, operation, result, show);
|
|
1595
|
+
this.createHandleErrorResult = (serviceName = '') => (operation = 'operation', show = true) => this.handleErrorResult(serviceName, operation, show);
|
|
1595
1596
|
}
|
|
1596
1597
|
/**
|
|
1597
1598
|
* Returns a function that handles Http operation failures.
|
|
@@ -1599,86 +1600,126 @@ class HttpErrorHandler {
|
|
|
1599
1600
|
* @param serviceName = name of the data service that attempted the operation
|
|
1600
1601
|
* @param operation - name of the operation that failed
|
|
1601
1602
|
* @param result - optional value to return as the observable result
|
|
1603
|
+
* @param show - optional value to show error
|
|
1602
1604
|
*/
|
|
1603
1605
|
handleError(serviceName = '', operation = 'operation', result = {}, show) {
|
|
1604
1606
|
return (response) => {
|
|
1605
1607
|
console.error(response);
|
|
1606
1608
|
if (show) {
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1609
|
+
this.showError(serviceName, operation, response);
|
|
1610
|
+
}
|
|
1611
|
+
//return throwError('Error! please try again later.');
|
|
1612
|
+
return of(result);
|
|
1613
|
+
};
|
|
1614
|
+
}
|
|
1615
|
+
/**
|
|
1616
|
+
* Returns a function that handles Http operation failures.
|
|
1617
|
+
* This error handler lets the app continue to run as if no error occurred.
|
|
1618
|
+
* @param serviceName = name of the data service that attempted the operation
|
|
1619
|
+
* @param operation - name of the operation that failed
|
|
1620
|
+
* @param show - optional value to show error
|
|
1621
|
+
*/
|
|
1622
|
+
handleErrorResult(serviceName = '', operation = 'operation', show) {
|
|
1623
|
+
return (response) => {
|
|
1624
|
+
console.error(response);
|
|
1625
|
+
if (show) {
|
|
1626
|
+
this.showError(serviceName, operation, response);
|
|
1627
|
+
}
|
|
1628
|
+
let error;
|
|
1629
|
+
if (typeof response.error === 'string' && response.error[0] === '{') {
|
|
1630
|
+
error = JSON.parse(response.error);
|
|
1631
|
+
}
|
|
1632
|
+
else {
|
|
1633
|
+
error = response.error;
|
|
1634
|
+
}
|
|
1635
|
+
let result;
|
|
1636
|
+
if (error instanceof ErrorEvent) {
|
|
1637
|
+
result = { '': [response.error.message] };
|
|
1638
|
+
}
|
|
1639
|
+
if (typeof error === 'string') {
|
|
1640
|
+
result = { '': [response.error] };
|
|
1641
|
+
}
|
|
1642
|
+
else if (typeof error === 'object') {
|
|
1643
|
+
const errors = error.traceId || error.success === false
|
|
1644
|
+
? error.errors
|
|
1645
|
+
: error;
|
|
1646
|
+
result = errors;
|
|
1647
|
+
}
|
|
1648
|
+
return of(result);
|
|
1649
|
+
};
|
|
1650
|
+
}
|
|
1651
|
+
showError(serviceName, operation, response) {
|
|
1652
|
+
switch (response.status) {
|
|
1653
|
+
case 0: //No Connection
|
|
1654
|
+
this.alert.error(`Can't connect to api server.`);
|
|
1655
|
+
break;
|
|
1656
|
+
case 400: //Bad Request
|
|
1657
|
+
let error;
|
|
1658
|
+
if (typeof response.error === 'string' && response.error[0] === '{') {
|
|
1659
|
+
error = JSON.parse(response.error);
|
|
1660
|
+
}
|
|
1661
|
+
else {
|
|
1662
|
+
error = response.error;
|
|
1663
|
+
}
|
|
1664
|
+
if (error instanceof ErrorEvent) {
|
|
1665
|
+
this.alert.error(`${serviceName}: ${operation} failed: ${response.error.message}`);
|
|
1666
|
+
}
|
|
1667
|
+
if (typeof error === 'string') {
|
|
1668
|
+
this.alert.error(response.error);
|
|
1669
|
+
}
|
|
1670
|
+
else if (typeof error === 'object') {
|
|
1671
|
+
const errors = error.traceId || error.success === false
|
|
1672
|
+
? error.errors
|
|
1673
|
+
: error;
|
|
1674
|
+
const errorMessages = [];
|
|
1675
|
+
const properties = Object.getOwnPropertyNames(errors);
|
|
1676
|
+
for (let property of properties) {
|
|
1677
|
+
const messages = errors[property];
|
|
1678
|
+
if (messages instanceof Array) {
|
|
1679
|
+
for (let message of messages) {
|
|
1680
|
+
const messageKey = `Validation.${message}`;
|
|
1681
|
+
let translatedMessage = this.translate.instant(messageKey);
|
|
1682
|
+
// if translation not found then use message
|
|
1683
|
+
if (messageKey == translatedMessage) {
|
|
1684
|
+
translatedMessage = message;
|
|
1685
|
+
}
|
|
1686
|
+
if (property) {
|
|
1687
|
+
const propertyKey = `Fields.${property}`;
|
|
1688
|
+
let translatedProperty = this.translate.instant(`Fields.${property}`);
|
|
1689
|
+
// if translation not found then use property
|
|
1690
|
+
if (propertyKey == translatedProperty) {
|
|
1691
|
+
translatedProperty = property;
|
|
1653
1692
|
}
|
|
1693
|
+
errorMessages.push(translatedProperty + ' - ' + translatedMessage);
|
|
1694
|
+
}
|
|
1695
|
+
else {
|
|
1696
|
+
errorMessages.push(translatedMessage);
|
|
1654
1697
|
}
|
|
1655
1698
|
}
|
|
1656
|
-
this.alertService.addRange(AlertType.Danger, errorMessages);
|
|
1657
1699
|
}
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
this.alertService.error('Unauthorized');
|
|
1661
|
-
this.router.navigate(['/login']);
|
|
1662
|
-
break;
|
|
1663
|
-
case 403: //Forbidden
|
|
1664
|
-
this.alertService.error('Forbidden');
|
|
1665
|
-
break;
|
|
1666
|
-
case 404: //Not Found
|
|
1667
|
-
this.alertService.error('Not Found');
|
|
1668
|
-
break;
|
|
1669
|
-
case 402: //Payment Required
|
|
1670
|
-
this.alertService.error('License Payment Required');
|
|
1671
|
-
break;
|
|
1672
|
-
case 500: //Internal Server Error
|
|
1673
|
-
this.alertService.error('Internal Server Error');
|
|
1674
|
-
break;
|
|
1675
|
-
default:
|
|
1676
|
-
break;
|
|
1700
|
+
}
|
|
1701
|
+
this.alert.addRange(AlertType.Danger, errorMessages);
|
|
1677
1702
|
}
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1703
|
+
break;
|
|
1704
|
+
case 401: //Unauthorized
|
|
1705
|
+
this.alert.error('Unauthorized');
|
|
1706
|
+
this.router.navigate(['/login']);
|
|
1707
|
+
break;
|
|
1708
|
+
case 403: //Forbidden
|
|
1709
|
+
this.alert.error('Forbidden');
|
|
1710
|
+
break;
|
|
1711
|
+
case 404: //Not Found
|
|
1712
|
+
this.alert.error('Not Found');
|
|
1713
|
+
break;
|
|
1714
|
+
case 402: //Payment Required
|
|
1715
|
+
this.alert.error('License Payment Required');
|
|
1716
|
+
break;
|
|
1717
|
+
case 500: //Internal Server Error
|
|
1718
|
+
this.alert.error('Internal Server Error');
|
|
1719
|
+
break;
|
|
1720
|
+
default:
|
|
1721
|
+
break;
|
|
1722
|
+
}
|
|
1682
1723
|
}
|
|
1683
1724
|
}
|
|
1684
1725
|
HttpErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: HttpErrorHandler, deps: [{ token: AlertService }, { token: i1$1.TranslateService }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|