@mosa-ng/core 17.0.1 → 19.0.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/fesm2022/mosa-ng-core.mjs +74 -63
- package/fesm2022/mosa-ng-core.mjs.map +1 -1
- package/package.json +3 -5
- package/esm2022/lib/constants/local-storage.constant.mjs +0 -4
- package/esm2022/lib/enums/browser.enum.mjs +0 -11
- package/esm2022/lib/enums/content-position.enum.mjs +0 -13
- package/esm2022/lib/enums/i18n-supported.enum.mjs +0 -12
- package/esm2022/lib/enums/theme.enum.mjs +0 -6
- package/esm2022/lib/models/api-options.model.mjs +0 -2
- package/esm2022/lib/models/dictionary-item.model.mjs +0 -2
- package/esm2022/lib/models/key-map.model.mjs +0 -2
- package/esm2022/lib/models/logger/log-event.model.mjs +0 -2
- package/esm2022/lib/models/logger/log-message-data.model.mjs +0 -2
- package/esm2022/lib/models/logger/log-type.model.mjs +0 -2
- package/esm2022/lib/models/logger/log.model.mjs +0 -2
- package/esm2022/lib/models/logger/logger-base-config.model.mjs +0 -2
- package/esm2022/lib/models/logger/logger-config.model.mjs +0 -2
- package/esm2022/lib/models/logger/logger-default-config.model.mjs +0 -2
- package/esm2022/lib/models/mosa-duration.model.mjs +0 -2
- package/esm2022/lib/models/sieve/sieve-filter.model.mjs +0 -2
- package/esm2022/lib/models/sieve/sieve-operator.model.mjs +0 -2
- package/esm2022/lib/models/sieve/sieve-options.model.mjs +0 -2
- package/esm2022/lib/models/sieve/sieve-response.model.mjs +0 -2
- package/esm2022/lib/models/sieve/sieve-sort.model.mjs +0 -2
- package/esm2022/lib/models/token-settings.model.mjs +0 -2
- package/esm2022/lib/models/transform-matrix.model.mjs +0 -2
- package/esm2022/lib/mosa-core.module.mjs +0 -105
- package/esm2022/lib/pipes/dictionary-item-pipe/dictionary-item-pipe.module.mjs +0 -22
- package/esm2022/lib/pipes/dictionary-item-pipe/dictionary-item.pipe.mjs +0 -17
- package/esm2022/lib/pipes/find-in-array/find-in-array-pipe.module.mjs +0 -24
- package/esm2022/lib/pipes/find-in-array/find-in-array.pipe.mjs +0 -34
- package/esm2022/lib/pipes/join/join-pipe.module.mjs +0 -24
- package/esm2022/lib/pipes/join/join.pipe.mjs +0 -24
- package/esm2022/lib/pipes/mosa-date-pipe/mosa-date-pipe.module.mjs +0 -21
- package/esm2022/lib/pipes/mosa-date-pipe/mosa-date.pipe.mjs +0 -91
- package/esm2022/lib/pipes/mosa-duration-pipe/mosa-duration-pipe.module.mjs +0 -20
- package/esm2022/lib/pipes/mosa-duration-pipe/mosa-duration.pipe.mjs +0 -88
- package/esm2022/lib/services/api.service.mjs +0 -225
- package/esm2022/lib/services/core-logger.service.mjs +0 -197
- package/esm2022/lib/services/guards/can-deactivate.guard.mjs +0 -16
- package/esm2022/lib/services/mosa-socket.service.mjs +0 -44
- package/esm2022/lib/services/translation/assets-i18n-loader.service.mjs +0 -58
- package/esm2022/lib/services/translation/custom-translate-loader.service.mjs +0 -28
- package/esm2022/lib/services/translation/translate-collector.service.mjs +0 -54
- package/esm2022/lib/utils/commons.util.mjs +0 -89
- package/esm2022/lib/utils/dictionary.util.mjs +0 -121
- package/esm2022/lib/utils/item.util.mjs +0 -2
- package/esm2022/lib/utils/promise.util.mjs +0 -2
- package/esm2022/lib/utils/prototypes.util.mjs +0 -86
- package/esm2022/lib/utils/sieve.util.mjs +0 -137
- package/esm2022/lib/utils/size.util.mjs +0 -2
- package/esm2022/mosa-ng-core.mjs +0 -5
- package/esm2022/public-api.mjs +0 -2
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { Pipe } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@ngx-translate/core";
|
|
6
|
-
export class MosaDurationPipe {
|
|
7
|
-
constructor(myTranslateService) {
|
|
8
|
-
this.myTranslateService = myTranslateService;
|
|
9
|
-
this.store$ = new BehaviorSubject(new Date().getTime());
|
|
10
|
-
this.interval = setInterval(() => {
|
|
11
|
-
this.store$.next(new Date().getTime());
|
|
12
|
-
}, 1000);
|
|
13
|
-
this.myTranslateService.onLangChange.subscribe(() => {
|
|
14
|
-
this.store$.next(new Date().getTime());
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Converts a timestamp to a duration in the given format
|
|
19
|
-
* @param millis
|
|
20
|
-
* @param format
|
|
21
|
-
* @returns
|
|
22
|
-
* auto: 15000 -> 15 seconds
|
|
23
|
-
* seconds: 15000 -> 15 seconds
|
|
24
|
-
* minutes: 60000 -> 1 minute
|
|
25
|
-
* hours: 7200000 -> 2 hours
|
|
26
|
-
* days: 172800000 -> 2 days
|
|
27
|
-
*/
|
|
28
|
-
transform(millis, format = 'auto') {
|
|
29
|
-
return this.store$.pipe(map((currentDate) => {
|
|
30
|
-
if (!millis) {
|
|
31
|
-
clearInterval(this.interval);
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
if (millis - currentDate < 0) {
|
|
35
|
-
clearInterval(this.interval);
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
return this.calcDuration(currentDate, millis, format);
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
getTranslation(num, format) {
|
|
42
|
-
if (num === 1) {
|
|
43
|
-
return `${num.toFixed(0)} ${this.myTranslateService.instant(`mosa.commons.dateTime[${format}].label`)}`;
|
|
44
|
-
}
|
|
45
|
-
return `${num.toFixed(0)} ${this.myTranslateService.instant(`mosa.commons.dateTime[${format}].plural.label`)}`;
|
|
46
|
-
}
|
|
47
|
-
calcDuration(currentDate, millis, format) {
|
|
48
|
-
millis = millis - currentDate;
|
|
49
|
-
const seconds = millis / 1000;
|
|
50
|
-
if (format === 'seconds') {
|
|
51
|
-
return this.getTranslation(seconds, 'seconds');
|
|
52
|
-
}
|
|
53
|
-
const minutes = seconds / 60;
|
|
54
|
-
if (format === 'minutes') {
|
|
55
|
-
return this.getTranslation(minutes, 'minutes');
|
|
56
|
-
}
|
|
57
|
-
const hours = minutes / 60;
|
|
58
|
-
if (format === 'hours') {
|
|
59
|
-
return this.getTranslation(hours, 'hours');
|
|
60
|
-
}
|
|
61
|
-
const days = hours / 24;
|
|
62
|
-
if (format === 'days') {
|
|
63
|
-
return this.getTranslation(days, 'days');
|
|
64
|
-
}
|
|
65
|
-
if (format === 'auto') {
|
|
66
|
-
if (seconds < 60) {
|
|
67
|
-
return this.getTranslation(seconds, 'seconds');
|
|
68
|
-
}
|
|
69
|
-
if (minutes < 60) {
|
|
70
|
-
return this.getTranslation(minutes, 'minutes');
|
|
71
|
-
}
|
|
72
|
-
if (hours < 24) {
|
|
73
|
-
return this.getTranslation(hours, 'hours');
|
|
74
|
-
}
|
|
75
|
-
return this.getTranslation(days, 'days');
|
|
76
|
-
}
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: MosaDurationPipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
80
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.7", ngImport: i0, type: MosaDurationPipe, name: "mosaDuration" }); }
|
|
81
|
-
}
|
|
82
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: MosaDurationPipe, decorators: [{
|
|
83
|
-
type: Pipe,
|
|
84
|
-
args: [{
|
|
85
|
-
name: 'mosaDuration',
|
|
86
|
-
}]
|
|
87
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9zYS1kdXJhdGlvbi5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3BpcGVzL21vc2EtZHVyYXRpb24tcGlwZS9tb3NhLWR1cmF0aW9uLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU1yQyxNQUFNLE9BQU8sZ0JBQWdCO0lBS3pCLFlBQ3FCLGtCQUFvQztRQUFwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWtCO1FBRXJELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBUyxFQUFFO1lBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksU0FBUyxDQUFDLE1BQWMsRUFBRSxTQUE2QixNQUFNO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25CLEdBQUcsQ0FBQyxDQUFDLFdB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QUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxjQUFjO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9zYUR1cmF0aW9uRm9ybWF0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL21vc2EtZHVyYXRpb24ubW9kZWwnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21vc2FEdXJhdGlvbicsXG59KVxuZXhwb3J0IGNsYXNzIE1vc2FEdXJhdGlvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGludGVydmFsOiBOb2RlSlMuVGltZW91dDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG15VHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5zdG9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4obmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZSQubmV4dChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICB0aGlzLm15VHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUkLm5leHQobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIHRpbWVzdGFtcCB0byBhIGR1cmF0aW9uIGluIHRoZSBnaXZlbiBmb3JtYXRcbiAgICAgKiBAcGFyYW0gbWlsbGlzXG4gICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAqIEByZXR1cm5zXG4gICAgICogYXV0bzogMTUwMDAgLT4gMTUgc2Vjb25kc1xuICAgICAqIHNlY29uZHM6IDE1MDAwIC0+IDE1IHNlY29uZHNcbiAgICAgKiBtaW51dGVzOiA2MDAwMCAtPiAxIG1pbnV0ZVxuICAgICAqIGhvdXJzOiA3MjAwMDAwIC0+IDIgaG91cnNcbiAgICAgKiBkYXlzOiAxNzI4MDAwMDAgLT4gMiBkYXlzXG4gICAgICovXG4gICAgcHVibGljIHRyYW5zZm9ybShtaWxsaXM6IG51bWJlciwgZm9ybWF0OiBNb3NhRHVyYXRpb25Gb3JtYXQgPSAnYXV0bycpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZSQucGlwZShcbiAgICAgICAgICAgIG1hcCgoY3VycmVudERhdGU6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFtaWxsaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1pbGxpcyAtIGN1cnJlbnREYXRlIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxjRHVyYXRpb24oY3VycmVudERhdGUsIG1pbGxpcywgZm9ybWF0KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGlvbihudW06IG51bWJlciwgZm9ybWF0OiBNb3NhRHVyYXRpb25Gb3JtYXQpOiBzdHJpbmcge1xuICAgICAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7IG51bS50b0ZpeGVkKDApIH0gJHsgdGhpcy5teVRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgbW9zYS5jb21tb25zLmRhdGVUaW1lWyR7IGZvcm1hdCB9XS5sYWJlbGApIH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHsgbnVtLnRvRml4ZWQoMCkgfSAkeyB0aGlzLm15VHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBtb3NhLmNvbW1vbnMuZGF0ZVRpbWVbJHsgZm9ybWF0IH1dLnBsdXJhbC5sYWJlbGApIH1gO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBjYWxjRHVyYXRpb24oY3VycmVudERhdGU6IG51bWJlciwgbWlsbGlzOiBudW1iZXIsIGZvcm1hdDogTW9zYUR1cmF0aW9uRm9ybWF0KTogc3RyaW5nIHtcbiAgICAgICAgbWlsbGlzID0gbWlsbGlzIC0gY3VycmVudERhdGU7XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kczogbnVtYmVyID0gbWlsbGlzIC8gMTAwMDtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NlY29uZHMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihzZWNvbmRzLCAnc2Vjb25kcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWludXRlczogbnVtYmVyID0gc2Vjb25kcyAvIDYwO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbWludXRlcycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9uKG1pbnV0ZXMsICdtaW51dGVzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBob3VyczogbnVtYmVyID0gbWludXRlcyAvIDYwO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnaG91cnMnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihob3VycywgJ2hvdXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXlzOiBudW1iZXIgPSBob3VycyAvIDI0O1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGF5cycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9uKGRheXMsICdkYXlzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgNjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihzZWNvbmRzLCAnc2Vjb25kcycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWludXRlcyA8IDYwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb24obWludXRlcywgJ21pbnV0ZXMnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbihob3VycywgJ2hvdXJzJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9uKGRheXMsICdkYXlzJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { HttpHeaders, HttpResponse } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { throwError } from 'rxjs';
|
|
4
|
-
import { catchError, map } from 'rxjs/operators';
|
|
5
|
-
import { isNullOrEmpty } from '../utils/commons.util';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "./core-logger.service";
|
|
8
|
-
import * as i2 from "@angular/common/http";
|
|
9
|
-
export const LOCAL_STORAGE_TOKEN_KEY = 'tokenSettings';
|
|
10
|
-
export class ApiService {
|
|
11
|
-
constructor(myCoreLoggerService, myHttpClient) {
|
|
12
|
-
this.myCoreLoggerService = myCoreLoggerService;
|
|
13
|
-
this.myHttpClient = myHttpClient;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Gets an access token
|
|
17
|
-
* @deprecated use getToken()
|
|
18
|
-
*/
|
|
19
|
-
getAccessToken() {
|
|
20
|
-
return window.localStorage.getItem('jwtAccessToken');
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Sets an access token
|
|
24
|
-
* @param token
|
|
25
|
-
* @deprecated use setToken()
|
|
26
|
-
*/
|
|
27
|
-
setAccessToken(token) {
|
|
28
|
-
window.localStorage.setItem('jwtAccessToken', token);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Removes an access token from local storage
|
|
32
|
-
* @deprecated use deleteAccessToken()
|
|
33
|
-
*/
|
|
34
|
-
removeAccessToken() {
|
|
35
|
-
window.localStorage.removeItem('jwtAccessToken');
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Sets the token
|
|
39
|
-
* @param tokenSettings
|
|
40
|
-
*/
|
|
41
|
-
setToken(tokenSettings) {
|
|
42
|
-
window.localStorage.setItem(LOCAL_STORAGE_TOKEN_KEY, JSON.stringify(tokenSettings));
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Gets token
|
|
46
|
-
*/
|
|
47
|
-
getToken() {
|
|
48
|
-
const tokenSettings = window.localStorage.getItem(LOCAL_STORAGE_TOKEN_KEY);
|
|
49
|
-
if (isNullOrEmpty(tokenSettings)) {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
return JSON.parse(tokenSettings);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Deletes token
|
|
56
|
-
*/
|
|
57
|
-
deleteToken() {
|
|
58
|
-
window.localStorage.removeItem(LOCAL_STORAGE_TOKEN_KEY);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Makes an http get call
|
|
62
|
-
* @param url
|
|
63
|
-
* @param headers
|
|
64
|
-
* @param options
|
|
65
|
-
*/
|
|
66
|
-
get(url, headers, options) {
|
|
67
|
-
options = ApiService.serializeOptions(options);
|
|
68
|
-
headers = this.getHeaders(headers, options);
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
-
return this.myHttpClient.get(url, { ...options.httpOptions, headers })
|
|
71
|
-
.pipe(map((response) => this.handleResponse(response)), catchError((err) => this.handleError(err, options)));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Makes an async http get call, which also includes the response headers
|
|
75
|
-
* @param url
|
|
76
|
-
* @param headers
|
|
77
|
-
* @param options
|
|
78
|
-
*/
|
|
79
|
-
async getWithHeadersAsync(url, headers, options) {
|
|
80
|
-
return this.getWithHeaders(url, headers, options).toPromise();
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Makes an http get call, which also includes the response headers
|
|
84
|
-
* @param url
|
|
85
|
-
* @param headers
|
|
86
|
-
* @param options
|
|
87
|
-
*/
|
|
88
|
-
getWithHeaders(url, headers, options) {
|
|
89
|
-
options = ApiService.serializeOptions(options);
|
|
90
|
-
headers = this.getHeaders(headers, options);
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
|
-
return this.myHttpClient.get(url, { ...options.httpOptions, headers, observe: 'response' })
|
|
93
|
-
.pipe(catchError((err) => this.handleError(err, options)));
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Makes an http patch call (For partial updates)
|
|
97
|
-
* @param url
|
|
98
|
-
* @param data
|
|
99
|
-
* @param headers
|
|
100
|
-
* @param options
|
|
101
|
-
*/
|
|
102
|
-
patch(url, data, headers, options) {
|
|
103
|
-
options = ApiService.serializeOptions(options);
|
|
104
|
-
headers = this.getHeaders(headers, options);
|
|
105
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
106
|
-
return this.myHttpClient.patch(url, data, { ...options.httpOptions, headers })
|
|
107
|
-
.pipe(map((response) => this.handleResponse(response)), catchError((err) => this.handleError(err, options)));
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Makes an http put call
|
|
111
|
-
* @param url
|
|
112
|
-
* @param data
|
|
113
|
-
* @param headers
|
|
114
|
-
* @param options
|
|
115
|
-
*/
|
|
116
|
-
put(url, data, headers, options) {
|
|
117
|
-
options = ApiService.serializeOptions(options);
|
|
118
|
-
headers = this.getHeaders(headers, options);
|
|
119
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
120
|
-
return this.myHttpClient.put(url, data, { ...options.httpOptions, headers })
|
|
121
|
-
.pipe(map((response) => this.handleResponse(response)), catchError((err) => this.handleError(err, options)));
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Makes an http post call
|
|
125
|
-
* @param url
|
|
126
|
-
* @param data
|
|
127
|
-
* @param headers
|
|
128
|
-
* @param options
|
|
129
|
-
*/
|
|
130
|
-
post(url, data, headers, options) {
|
|
131
|
-
options = ApiService.serializeOptions(options);
|
|
132
|
-
headers = this.getHeaders(headers, options);
|
|
133
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
134
|
-
return this.myHttpClient.post(url, data, { ...options.httpOptions, headers })
|
|
135
|
-
.pipe(map((response) => this.handleResponse(response)), catchError((err) => this.handleError(err, options)));
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* makes an http delete call
|
|
139
|
-
* @param url
|
|
140
|
-
* @param headers
|
|
141
|
-
* @param options
|
|
142
|
-
* @returns Observable
|
|
143
|
-
*/
|
|
144
|
-
delete(url, headers, options) {
|
|
145
|
-
options = ApiService.serializeOptions(options);
|
|
146
|
-
headers = this.getHeaders(headers, options);
|
|
147
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
148
|
-
return this.myHttpClient.delete(url, { ...options.httpOptions, headers })
|
|
149
|
-
.pipe(catchError((err) => this.handleError(err, options)));
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Appends a script to the html body
|
|
153
|
-
* @param path
|
|
154
|
-
* @param attributes
|
|
155
|
-
* @param onLoad
|
|
156
|
-
*/
|
|
157
|
-
loadExternalScript(path, attributes,
|
|
158
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
159
|
-
onLoad) {
|
|
160
|
-
const script = document.createElement('script');
|
|
161
|
-
script.type = 'text/javascript';
|
|
162
|
-
script.src = path;
|
|
163
|
-
script.async = true;
|
|
164
|
-
if (onLoad) {
|
|
165
|
-
script.onload = onLoad;
|
|
166
|
-
}
|
|
167
|
-
if (attributes) {
|
|
168
|
-
for (const attribute of attributes) {
|
|
169
|
-
script.setAttribute(attribute.key, attribute.value);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
document.body.append(script);
|
|
173
|
-
}
|
|
174
|
-
handleError(err, options) {
|
|
175
|
-
if (!options?.skipErrorHandling) {
|
|
176
|
-
this.myCoreLoggerService.logError({ msg: err });
|
|
177
|
-
}
|
|
178
|
-
return throwError(err);
|
|
179
|
-
}
|
|
180
|
-
handleResponse(response) {
|
|
181
|
-
if (response instanceof HttpResponse) {
|
|
182
|
-
return response.body;
|
|
183
|
-
}
|
|
184
|
-
return response;
|
|
185
|
-
}
|
|
186
|
-
getHeaders(headers, options) {
|
|
187
|
-
if (!headers) {
|
|
188
|
-
headers = new HttpHeaders();
|
|
189
|
-
}
|
|
190
|
-
if (!options.skipContentType) {
|
|
191
|
-
if (!headers.get('Content-Type')) {
|
|
192
|
-
headers = headers.set('Content-Type', 'application/json');
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
if (!options?.skipAuth) {
|
|
196
|
-
if (this.getToken()) {
|
|
197
|
-
const tokenSettings = this.getToken();
|
|
198
|
-
headers = headers.set('Authorization', `${tokenSettings.tokenType} ${tokenSettings.token}`);
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
// Deprecated. Use ITokenSettings
|
|
202
|
-
headers = headers.set('Authorization', `Bearer ${this.getAccessToken()}`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return headers;
|
|
206
|
-
}
|
|
207
|
-
static serializeOptions(options) {
|
|
208
|
-
if (!options) {
|
|
209
|
-
options = {};
|
|
210
|
-
}
|
|
211
|
-
if (!options.httpOptions) {
|
|
212
|
-
options.httpOptions = {};
|
|
213
|
-
}
|
|
214
|
-
return options;
|
|
215
|
-
}
|
|
216
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ApiService, deps: [{ token: i1.CoreLoggerService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
217
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ApiService, providedIn: 'root' }); }
|
|
218
|
-
}
|
|
219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: ApiService, decorators: [{
|
|
220
|
-
type: Injectable,
|
|
221
|
-
args: [{
|
|
222
|
-
providedIn: 'root',
|
|
223
|
-
}]
|
|
224
|
-
}], ctorParameters: () => [{ type: i1.CoreLoggerService }, { type: i2.HttpClient }] });
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc2VydmljZXMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QyxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0csT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBRXRELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLGVBQWUsQ0FBQztBQUt2RCxNQUFNLE9BQU8sVUFBVTtJQUVuQixZQUNxQixtQkFBc0MsRUFDdEMsWUFBd0I7UUFEeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFtQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBWTtJQUU3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYztRQUNqQixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsS0FBYTtRQUMvQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCO1FBQ3BCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxhQUE2QjtRQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLE1BQU0sYUFBYSxHQUFXLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDbkYsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEdBQUcsQ0FBSSxHQUFXLEVBQUUsT0FBcUIsRUFBRSxPQUFxQjtRQUNuRSxPQUFPLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1Qyw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQzNFLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxRQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzlELFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUM1RixDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUFJLEdBQVcsRUFBRSxPQUFxQixFQUFFLE9BQXFCO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBSSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBSSxHQUFXLEVBQUUsT0FBcUIsRUFBRSxPQUFxQjtRQUM5RSxPQUFPLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1Qyw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFrQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7YUFDaEcsSUFBSSxDQUNELFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUM1RixDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBUSxHQUFXLEVBQUUsSUFBUSxFQUFFLE9BQXFCLEVBQUUsT0FBcUI7UUFDbkYsT0FBTyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFNUMsOERBQThEO1FBQzlELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUssR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDcEYsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLFFBQXVCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDL0QsVUFBVSxDQUFDLENBQUMsR0FBc0IsRUFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQzVGLENBQUM7SUFDVixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksR0FBRyxDQUFRLEdBQVcsRUFBRSxJQUFRLEVBQUUsT0FBcUIsRUFBRSxPQUFxQjtRQUNqRixPQUFPLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1Qyw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNsRixJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBdUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUMvRCxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDNUYsQ0FBQztJQUNWLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxJQUFJLENBQVEsR0FBVyxFQUFFLElBQVEsRUFBRSxPQUFxQixFQUFFLE9BQXFCO1FBQ2xGLE9BQU8sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTVDLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQ25GLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxRQUF1QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQy9ELFVBQVUsQ0FBQyxDQUFDLEdBQXNCLEVBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUM1RixDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBSSxHQUFXLEVBQUUsT0FBcUIsRUFBRSxPQUFxQjtRQUN0RSxPQUFPLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1Qyx3REFBd0Q7UUFDeEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQzdFLElBQUksQ0FDRCxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDNUYsQ0FBQztJQUNWLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLElBQVksRUFBRSxVQUE2QztJQUMzRCw4REFBOEQ7SUFDOUQsTUFBd0Q7UUFDOUUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUM7UUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQXNCLEVBQUUsT0FBb0I7UUFDNUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLGNBQWMsQ0FBSSxRQUFzQjtRQUM1QyxJQUFJLFFBQVEsWUFBWSxZQUFZLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sUUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBb0IsRUFBRSxPQUFvQjtRQUN6RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxhQUFhLEdBQW1CLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUksYUFBYSxDQUFDLFNBQVUsSUFBSyxhQUFhLENBQUMsS0FBTSxFQUFFLENBQUMsQ0FBQztZQUNwRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osaUNBQWlDO2dCQUNqQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVyxJQUFJLENBQUMsY0FBYyxFQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFvQjtRQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOzhHQTlQUSxVQUFVO2tIQUFWLFVBQVUsY0FGUCxNQUFNOzsyRkFFVCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQXBpT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscy9hcGktb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQgeyBJVG9rZW5TZXR0aW5ncyB9IGZyb20gJy4uL21vZGVscy90b2tlbi1zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBDb3JlTG9nZ2VyU2VydmljZSB9IGZyb20gJy4vY29yZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBpc051bGxPckVtcHR5IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9ucy51dGlsJztcblxuZXhwb3J0IGNvbnN0IExPQ0FMX1NUT1JBR0VfVE9LRU5fS0VZID0gJ3Rva2VuU2V0dGluZ3MnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBcGlTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG15Q29yZUxvZ2dlclNlcnZpY2U6IENvcmVMb2dnZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG15SHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICApIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGFjY2VzcyB0b2tlblxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBnZXRUb2tlbigpXG4gICAgICovXG4gICAgcHVibGljIGdldEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2p3dEFjY2Vzc1Rva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBAcGFyYW0gdG9rZW5cbiAgICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0VG9rZW4oKVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRBY2Nlc3NUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnand0QWNjZXNzVG9rZW4nLCB0b2tlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBhY2Nlc3MgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGRlbGV0ZUFjY2Vzc1Rva2VuKClcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlQWNjZXNzVG9rZW4oKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnand0QWNjZXNzVG9rZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0b2tlblxuICAgICAqIEBwYXJhbSB0b2tlblNldHRpbmdzXG4gICAgICovXG4gICAgcHVibGljIHNldFRva2VuKHRva2VuU2V0dGluZ3M6IElUb2tlblNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFX1RPS0VOX0tFWSwgSlNPTi5zdHJpbmdpZnkodG9rZW5TZXR0aW5ncykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdG9rZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VG9rZW4oKTogSVRva2VuU2V0dGluZ3Mge1xuICAgICAgICBjb25zdCB0b2tlblNldHRpbmdzOiBzdHJpbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oTE9DQUxfU1RPUkFHRV9UT0tFTl9LRVkpO1xuICAgICAgICBpZiAoaXNOdWxsT3JFbXB0eSh0b2tlblNldHRpbmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0b2tlblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIHRva2VuXG4gICAgICovXG4gICAgcHVibGljIGRlbGV0ZVRva2VuKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfU1RPUkFHRV9UT0tFTl9LRVkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIGFuIGh0dHAgZ2V0IGNhbGxcbiAgICAgKiBAcGFyYW0gdXJsXG4gICAgICogQHBhcmFtIGhlYWRlcnNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQ8VD4odXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgb3B0aW9ucz86IElBcGlPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIG9wdGlvbnMgPSBBcGlTZXJ2aWNlLnNlcmlhbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoaGVhZGVycywgb3B0aW9ucyk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIHRoaXMubXlIdHRwQ2xpZW50LmdldDxUPih1cmwsIHsgLi4ub3B0aW9ucy5odHRwT3B0aW9ucyBhcyBhbnksIGhlYWRlcnMgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBFdmVudDxUPikgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgb3B0aW9ucykpLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhbiBhc3luYyBodHRwIGdldCBjYWxsLCB3aGljaCBhbHNvIGluY2x1ZGVzIHRoZSByZXNwb25zZSBoZWFkZXJzXG4gICAgICogQHBhcmFtIHVybFxuICAgICAqIEBwYXJhbSBoZWFkZXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2l0aEhlYWRlcnNBc3luYzxUPih1cmw6IHN0cmluZywgaGVhZGVycz86IEh0dHBIZWFkZXJzLCBvcHRpb25zPzogSUFwaU9wdGlvbnMpOiBQcm9taXNlPEh0dHBFdmVudDxUPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRXaXRoSGVhZGVyczxUPih1cmwsIGhlYWRlcnMsIG9wdGlvbnMpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ha2VzIGFuIGh0dHAgZ2V0IGNhbGwsIHdoaWNoIGFsc28gaW5jbHVkZXMgdGhlIHJlc3BvbnNlIGhlYWRlcnNcbiAgICAgKiBAcGFyYW0gdXJsXG4gICAgICogQHBhcmFtIGhlYWRlcnNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXaXRoSGVhZGVyczxUPih1cmw6IHN0cmluZywgaGVhZGVycz86IEh0dHBIZWFkZXJzLCBvcHRpb25zPzogSUFwaU9wdGlvbnMpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxUPj4ge1xuICAgICAgICBvcHRpb25zID0gQXBpU2VydmljZS5zZXJpYWxpemVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKGhlYWRlcnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiB0aGlzLm15SHR0cENsaWVudC5nZXQ8VD4odXJsLCB7IC4uLm9wdGlvbnMuaHR0cE9wdGlvbnMgYXMgYW55LCBoZWFkZXJzLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4gPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFrZXMgYW4gaHR0cCBwYXRjaCBjYWxsIChGb3IgcGFydGlhbCB1cGRhdGVzKVxuICAgICAqIEBwYXJhbSB1cmxcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBoZWFkZXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgcGF0Y2g8VCwgVDE+KHVybDogc3RyaW5nLCBkYXRhPzogVCwgaGVhZGVycz86IEh0dHBIZWFkZXJzLCBvcHRpb25zPzogSUFwaU9wdGlvbnMpOiBPYnNlcnZhYmxlPFQxPiB7XG4gICAgICAgIG9wdGlvbnMgPSBBcGlTZXJ2aWNlLnNlcmlhbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoaGVhZGVycywgb3B0aW9ucyk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgcmV0dXJuIHRoaXMubXlIdHRwQ2xpZW50LnBhdGNoPFQxPih1cmwsIGRhdGEsIHsgLi4ub3B0aW9ucy5odHRwT3B0aW9ucyBhcyBhbnksIGhlYWRlcnMgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBFdmVudDxUMT4pID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4gPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFrZXMgYW4gaHR0cCBwdXQgY2FsbFxuICAgICAqIEBwYXJhbSB1cmxcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBoZWFkZXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgcHV0PFQsIFQxPih1cmw6IHN0cmluZywgZGF0YT86IFQsIGhlYWRlcnM/OiBIdHRwSGVhZGVycywgb3B0aW9ucz86IElBcGlPcHRpb25zKTogT2JzZXJ2YWJsZTxUMT4ge1xuICAgICAgICBvcHRpb25zID0gQXBpU2VydmljZS5zZXJpYWxpemVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKGhlYWRlcnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHJldHVybiB0aGlzLm15SHR0cENsaWVudC5wdXQ8VDE+KHVybCwgZGF0YSwgeyAuLi5vcHRpb25zLmh0dHBPcHRpb25zIGFzIGFueSwgaGVhZGVycyB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cEV2ZW50PFQxPikgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgb3B0aW9ucykpLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhbiBodHRwIHBvc3QgY2FsbFxuICAgICAqIEBwYXJhbSB1cmxcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBoZWFkZXJzXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgcG9zdDxULCBUMT4odXJsOiBzdHJpbmcsIGRhdGE/OiBULCBoZWFkZXJzPzogSHR0cEhlYWRlcnMsIG9wdGlvbnM/OiBJQXBpT3B0aW9ucyk6IE9ic2VydmFibGU8VDE+IHtcbiAgICAgICAgb3B0aW9ucyA9IEFwaVNlcnZpY2Uuc2VyaWFsaXplT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaGVhZGVycyA9IHRoaXMuZ2V0SGVhZGVycyhoZWFkZXJzLCBvcHRpb25zKTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gdGhpcy5teUh0dHBDbGllbnQucG9zdDxUMT4odXJsLCBkYXRhLCB7IC4uLm9wdGlvbnMuaHR0cE9wdGlvbnMgYXMgYW55LCBoZWFkZXJzIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwRXZlbnQ8VDE+KSA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8bmV2ZXI+ID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCBvcHRpb25zKSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1ha2VzIGFuIGh0dHAgZGVsZXRlIGNhbGxcbiAgICAgKiBAcGFyYW0gdXJsXG4gICAgICogQHBhcmFtIGhlYWRlcnNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogSHR0cEhlYWRlcnMsIG9wdGlvbnM/OiBJQXBpT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBvcHRpb25zID0gQXBpU2VydmljZS5zZXJpYWxpemVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBoZWFkZXJzID0gdGhpcy5nZXRIZWFkZXJzKGhlYWRlcnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICAgICAgICByZXR1cm4gdGhpcy5teUh0dHBDbGllbnQuZGVsZXRlPFQ+KHVybCwgeyAuLi5vcHRpb25zLmh0dHBPcHRpb25zIGFzIHt9LCBoZWFkZXJzIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4gPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBhIHNjcmlwdCB0byB0aGUgaHRtbCBib2R5XG4gICAgICogQHBhcmFtIHBhdGhcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlc1xuICAgICAqIEBwYXJhbSBvbkxvYWRcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZEV4dGVybmFsU2NyaXB0KHBhdGg6IHN0cmluZywgYXR0cmlidXRlcz86IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTG9hZD86ICgodGhpczogR2xvYmFsRXZlbnRIYW5kbGVycywgZXY6IEV2ZW50KSA9PiBhbnkpKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICBzY3JpcHQuc3JjID0gcGF0aDtcbiAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcblxuICAgICAgICBpZiAob25Mb2FkKSB7XG4gICAgICAgICAgICBzY3JpcHQub25sb2FkID0gb25Mb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5rZXksIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSwgb3B0aW9uczogSUFwaU9wdGlvbnMpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIGlmICghb3B0aW9ucz8uc2tpcEVycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubXlDb3JlTG9nZ2VyU2VydmljZS5sb2dFcnJvcih7IG1zZzogZXJyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFQ+KHJlc3BvbnNlOiBIdHRwRXZlbnQ8VD4pOiBUIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhlYWRlcnMoaGVhZGVyczogSHR0cEhlYWRlcnMsIG9wdGlvbnM6IElBcGlPcHRpb25zKTogSHR0cEhlYWRlcnMge1xuICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5za2lwQ29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIGlmICghaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zPy5za2lwQXV0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0VG9rZW4oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuU2V0dGluZ3M6IElUb2tlblNldHRpbmdzID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGAkeyB0b2tlblNldHRpbmdzLnRva2VuVHlwZSB9ICR7IHRva2VuU2V0dGluZ3MudG9rZW4gfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGVkLiBVc2UgSVRva2VuU2V0dGluZ3NcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSB9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2VyaWFsaXplT3B0aW9ucyhvcHRpb25zOiBJQXBpT3B0aW9ucyk6IElBcGlPcHRpb25zIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMuaHR0cE9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuaHR0cE9wdGlvbnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { isNullOrUndefined } from '../utils/commons.util';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class CoreLoggerService {
|
|
7
|
-
/**
|
|
8
|
-
* Default constructor
|
|
9
|
-
*/
|
|
10
|
-
constructor() {
|
|
11
|
-
this.uiLogs$ = new BehaviorSubject(null);
|
|
12
|
-
}
|
|
13
|
-
subUiLogs() {
|
|
14
|
-
return this.uiLogs$.asObservable();
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Gets the error message from any type of object
|
|
18
|
-
*/
|
|
19
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
-
getErrorMsg(err) {
|
|
21
|
-
let msg = 'Unknown Error';
|
|
22
|
-
if (!err) {
|
|
23
|
-
return msg;
|
|
24
|
-
}
|
|
25
|
-
if (err instanceof HttpErrorResponse) {
|
|
26
|
-
if (typeof err.error !== 'string') {
|
|
27
|
-
return `mosa.commons.errors.status[${err.status}].message`;
|
|
28
|
-
}
|
|
29
|
-
return err.error;
|
|
30
|
-
}
|
|
31
|
-
if (typeof err === 'string') {
|
|
32
|
-
msg = err;
|
|
33
|
-
}
|
|
34
|
-
else if (err.msg) {
|
|
35
|
-
msg = err.msg;
|
|
36
|
-
}
|
|
37
|
-
else if (err.error?.msg) {
|
|
38
|
-
msg = err.error.msg;
|
|
39
|
-
}
|
|
40
|
-
else if (err.error?.message) {
|
|
41
|
-
msg = err.error.message;
|
|
42
|
-
}
|
|
43
|
-
else if (err.error?.errors && err.error?.errors[0]?.message) {
|
|
44
|
-
msg = err.error.errors[0].message;
|
|
45
|
-
}
|
|
46
|
-
else if (err.message) {
|
|
47
|
-
msg = err.message;
|
|
48
|
-
}
|
|
49
|
-
else if (err.Message) {
|
|
50
|
-
msg = err.Message;
|
|
51
|
-
}
|
|
52
|
-
if (typeof err.error === 'string') {
|
|
53
|
-
msg = err.error;
|
|
54
|
-
}
|
|
55
|
-
return msg;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Get the title to be shown in logger toast
|
|
59
|
-
* @param err
|
|
60
|
-
*/
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
62
|
-
getErrorTitle(err) {
|
|
63
|
-
let title = 'mosa.commons.logs.error.label';
|
|
64
|
-
if (err?.label) {
|
|
65
|
-
title = err.label;
|
|
66
|
-
}
|
|
67
|
-
else if (err?.title) {
|
|
68
|
-
title = err.title;
|
|
69
|
-
}
|
|
70
|
-
else if (err?.error?.label) {
|
|
71
|
-
title = err.error.label;
|
|
72
|
-
}
|
|
73
|
-
else if (err?.error?.title) {
|
|
74
|
-
title = err.error.title;
|
|
75
|
-
}
|
|
76
|
-
return title;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Logs an error to the user
|
|
80
|
-
* @param data
|
|
81
|
-
* @param showUser
|
|
82
|
-
* @param config
|
|
83
|
-
*/
|
|
84
|
-
logError(config) {
|
|
85
|
-
config = this.serializeConfig(config);
|
|
86
|
-
config.msg = this.getErrorMsg(config.msg);
|
|
87
|
-
if (!config.title) {
|
|
88
|
-
config.title = this.getErrorTitle(config.msg);
|
|
89
|
-
}
|
|
90
|
-
config.className = 'snackbar-error';
|
|
91
|
-
this.show(config, 'error');
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Logs a success message to the user
|
|
95
|
-
* @param data
|
|
96
|
-
* @param config
|
|
97
|
-
*/
|
|
98
|
-
logSuccess(config) {
|
|
99
|
-
config = this.serializeConfig(config);
|
|
100
|
-
config.className = 'snackbar-success';
|
|
101
|
-
this.show(config, 'success');
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Logs a warning to the user
|
|
105
|
-
* @param data
|
|
106
|
-
* @param showUser
|
|
107
|
-
* @param config
|
|
108
|
-
*/
|
|
109
|
-
logWarning(config) {
|
|
110
|
-
config = this.serializeConfig(config);
|
|
111
|
-
config.className = 'snackbar-warning';
|
|
112
|
-
this.show(config, 'warning');
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Logs an info to the user
|
|
116
|
-
* @param data
|
|
117
|
-
* @param config
|
|
118
|
-
*/
|
|
119
|
-
logInfo(config) {
|
|
120
|
-
config = this.serializeConfig(config);
|
|
121
|
-
config.className = 'snackbar-info';
|
|
122
|
-
this.show(config, 'info');
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Logs any kind of message to the user
|
|
126
|
-
* @param data
|
|
127
|
-
* @param config
|
|
128
|
-
*/
|
|
129
|
-
log(config) {
|
|
130
|
-
config = this.serializeConfig(config);
|
|
131
|
-
config.className = 'snackbar-default';
|
|
132
|
-
this.show(config, 'default');
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Show the log
|
|
136
|
-
* @requires @mosa-ng/material
|
|
137
|
-
* @param data
|
|
138
|
-
* @param type
|
|
139
|
-
* @param config
|
|
140
|
-
*/
|
|
141
|
-
show(config, type) {
|
|
142
|
-
this.uiLogs$.next({ title: config.title, msg: config.msg, type, config });
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Serializes empty values, so no error is being returned
|
|
146
|
-
* @param config
|
|
147
|
-
* @private
|
|
148
|
-
*/
|
|
149
|
-
serializeConfig(config) {
|
|
150
|
-
// Check if user has default config
|
|
151
|
-
if (!this.defaultConfig) {
|
|
152
|
-
this.defaultConfig = {
|
|
153
|
-
debug: true,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
if (!config) {
|
|
157
|
-
// Get user default config
|
|
158
|
-
config = {
|
|
159
|
-
showDismiss: this.defaultConfig.showDismiss,
|
|
160
|
-
closeOnClick: isNullOrUndefined(this.defaultConfig.closeOnClick) ? true : this.defaultConfig.closeOnClick,
|
|
161
|
-
className: this.defaultConfig.className,
|
|
162
|
-
duration: this.defaultConfig.duration || 4,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
// Serialize configuration
|
|
166
|
-
config.duration = CoreLoggerService.getValue(config.duration, this.defaultConfig.duration, 4);
|
|
167
|
-
config.className = CoreLoggerService.getValue(config.className, this.defaultConfig.className, null);
|
|
168
|
-
config.showDismiss = CoreLoggerService.getValue(config.showDismiss, this.defaultConfig.showDismiss, false);
|
|
169
|
-
config.closeOnClick = CoreLoggerService.getValue(config.closeOnClick, this.defaultConfig.closeOnClick, true);
|
|
170
|
-
return config;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Gets a value which is not undefined or null
|
|
174
|
-
* @param val
|
|
175
|
-
* @param val1
|
|
176
|
-
* @param def
|
|
177
|
-
* @private
|
|
178
|
-
*/
|
|
179
|
-
static getValue(val, val1, def) {
|
|
180
|
-
if (isNullOrUndefined(val)) {
|
|
181
|
-
if (isNullOrUndefined(val1)) {
|
|
182
|
-
return def;
|
|
183
|
-
}
|
|
184
|
-
return val1;
|
|
185
|
-
}
|
|
186
|
-
return val;
|
|
187
|
-
}
|
|
188
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CoreLoggerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
189
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CoreLoggerService, providedIn: 'root' }); }
|
|
190
|
-
}
|
|
191
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CoreLoggerService, decorators: [{
|
|
192
|
-
type: Injectable,
|
|
193
|
-
args: [{
|
|
194
|
-
providedIn: 'root',
|
|
195
|
-
}]
|
|
196
|
-
}], ctorParameters: () => [] });
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1sb2dnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9jb3JlLWxvZ2dlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUtuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLMUQsTUFBTSxPQUFPLGlCQUFpQjtJQU0xQjs7T0FFRztJQUNIO1FBQ0ksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCw4REFBOEQ7SUFDdkQsV0FBVyxDQUFDLEdBQVE7UUFDdkIsSUFBSSxHQUFHLEdBQVcsZUFBZSxDQUFDO1FBRWxDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksR0FBRyxZQUFZLGlCQUFpQixFQUFFLENBQUM7WUFDbkMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sOEJBQStCLEdBQUcsQ0FBQyxNQUFPLFdBQVcsQ0FBQztZQUNqRSxDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUM7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TTtRQUM5QyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLEdBQUcsQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzhHQTVNUSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZkLE1BQU07OzJGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUxvZ0V2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2xvZ2dlci9sb2ctZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgTG9nVHlwZSB9IGZyb20gJy4uL21vZGVscy9sb2dnZXIvbG9nLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgSUxvZ2dlckNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9sb2dnZXIvbG9nZ2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBJTG9nZ2VyRGVmYXVsdENvbmZpZyB9IGZyb20gJy4uL21vZGVscy9sb2dnZXIvbG9nZ2VyLWRlZmF1bHQtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9ucy51dGlsJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUxvZ2dlclNlcnZpY2Uge1xuXG4gICAgcHVibGljIGRlZmF1bHRDb25maWc6IElMb2dnZXJEZWZhdWx0Q29uZmlnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB1aUxvZ3MkOiBCZWhhdmlvclN1YmplY3Q8SUxvZ0V2ZW50PjtcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy51aUxvZ3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3ViVWlMb2dzKCk6IE9ic2VydmFibGU8SUxvZ0V2ZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVpTG9ncyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIGFueSB0eXBlIG9mIG9iamVjdFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHVibGljIGdldEVycm9yTXNnKGVycjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG1zZzogc3RyaW5nID0gJ1Vua25vd24gRXJyb3InO1xuXG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gbXNnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVyci5lcnJvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYG1vc2EuY29tbW9ucy5lcnJvcnMuc3RhdHVzWyR7IGVyci5zdGF0dXMgfV0ubWVzc2FnZWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlcnIuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1zZyA9IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChlcnIubXNnKSB7XG4gICAgICAgICAgICBtc2cgPSBlcnIubXNnO1xuICAgICAgICB9IGVsc2UgaWYgKGVyci5lcnJvcj8ubXNnKSB7XG4gICAgICAgICAgICBtc2cgPSBlcnIuZXJyb3IubXNnO1xuICAgICAgICB9IGVsc2UgaWYgKGVyci5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgbXNnID0gZXJyLmVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLmVycm9yPy5lcnJvcnMgJiYgZXJyLmVycm9yPy5lcnJvcnNbIDAgXT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgbXNnID0gZXJyLmVycm9yLmVycm9yc1sgMCBdLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG1zZyA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9IGVsc2UgaWYgKGVyci5NZXNzYWdlKSB7XG4gICAgICAgICAgICBtc2cgPSBlcnIuTWVzc2FnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZXJyLmVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbXNnID0gZXJyLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHRpdGxlIHRvIGJlIHNob3duIGluIGxvZ2dlciB0b2FzdFxuICAgICAqIEBwYXJhbSBlcnJcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHB1YmxpYyBnZXRFcnJvclRpdGxlKGVycjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgPSAnbW9zYS5jb21tb25zLmxvZ3MuZXJyb3IubGFiZWwnO1xuICAgICAgICBpZiAoZXJyPy5sYWJlbCkge1xuICAgICAgICAgICAgdGl0bGUgPSBlcnIubGFiZWw7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyPy50aXRsZSkge1xuICAgICAgICAgICAgdGl0bGUgPSBlcnIudGl0bGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyPy5lcnJvcj8ubGFiZWwpIHtcbiAgICAgICAgICAgIHRpdGxlID0gZXJyLmVycm9yLmxhYmVsO1xuICAgICAgICB9IGVsc2UgaWYgKGVycj8uZXJyb3I/LnRpdGxlKSB7XG4gICAgICAgICAgICB0aXRsZSA9IGVyci5lcnJvci50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9ncyBhbiBlcnJvciB0byB0aGUgdXNlclxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIHNob3dVc2VyXG4gICAgICogQHBhcmFtIGNvbmZpZ1xuICAgICAqL1xuICAgIHB1YmxpYyBsb2dFcnJvcihjb25maWc6IElMb2dnZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgY29uZmlnID0gdGhpcy5zZXJpYWxpemVDb25maWcoY29uZmlnKTtcbiAgICAgICAgY29uZmlnLm1zZyA9IHRoaXMuZ2V0RXJyb3JNc2coY29uZmlnLm1zZyk7XG5cbiAgICAgICAgaWYgKCFjb25maWcudGl0bGUpIHtcbiAgICAgICAgICAgIGNvbmZpZy50aXRsZSA9IHRoaXMuZ2V0RXJyb3JUaXRsZShjb25maWcubXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5jbGFzc05hbWUgPSAnc25hY2tiYXItZXJyb3InO1xuXG4gICAgICAgIHRoaXMuc2hvdyhjb25maWcsICdlcnJvcicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvZ3MgYSBzdWNjZXNzIG1lc3NhZ2UgdG8gdGhlIHVzZXJcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9nU3VjY2Vzcyhjb25maWc6IElMb2dnZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgY29uZmlnID0gdGhpcy5zZXJpYWxpemVDb25maWcoY29uZmlnKTtcbiAgICAgICAgY29uZmlnLmNsYXNzTmFtZSA9ICdzbmFja2Jhci1zdWNjZXNzJztcblxuICAgICAgICB0aGlzLnNob3coY29uZmlnLCAnc3VjY2VzcycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvZ3MgYSB3YXJuaW5nIHRvIHRoZSB1c2VyXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKiBAcGFyYW0gc2hvd1VzZXJcbiAgICAgKiBAcGFyYW0gY29uZmlnXG4gICAgICovXG4gICAgcHVibGljIGxvZ1dhcm5pbmcoY29uZmlnOiBJTG9nZ2VyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbmZpZyA9IHRoaXMuc2VyaWFsaXplQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGNvbmZpZy5jbGFzc05hbWUgPSAnc25hY2tiYXItd2FybmluZyc7XG5cbiAgICAgICAgdGhpcy5zaG93KGNvbmZpZywgJ3dhcm5pbmcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2dzIGFuIGluZm8gdG8gdGhlIHVzZXJcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9nSW5mbyhjb25maWc6IElMb2dnZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgY29uZmlnID0gdGhpcy5zZXJpYWxpemVDb25maWcoY29uZmlnKTtcbiAgICAgICAgY29uZmlnLmNsYXNzTmFtZSA9ICdzbmFja2Jhci1pbmZvJztcblxuICAgICAgICB0aGlzLnNob3coY29uZmlnLCAnaW5mbycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvZ3MgYW55IGtpbmQgb2YgbWVzc2FnZSB0byB0aGUgdXNlclxuICAgICAqIEBwYXJhbSBkYXRhXG4gICAgICogQHBhcmFtIGNvbmZpZ1xuICAgICAqL1xuICAgIHB1YmxpYyBsb2coY29uZmlnOiBJTG9nZ2VyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbmZpZyA9IHRoaXMuc2VyaWFsaXplQ29uZmlnKGNvbmZpZyk7XG4gICAgICAgIGNvbmZpZy5jbGFzc05hbWUgPSAnc25hY2tiYXItZGVmYXVsdCc7XG5cbiAgICAgICAgdGhpcy5zaG93KGNvbmZpZywgJ2RlZmF1bHQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBsb2dcbiAgICAgKiBAcmVxdWlyZXMgQG1vc2EtbmcvbWF0ZXJpYWxcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB0eXBlXG4gICAgICogQHBhcmFtIGNvbmZpZ1xuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KGNvbmZpZzogSUxvZ2dlckNvbmZpZywgdHlwZTogTG9nVHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnVpTG9ncyQubmV4dCh7IHRpdGxlOiBjb25maWcudGl0bGUsIG1zZzogY29uZmlnLm1zZywgdHlwZSwgY29uZmlnIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZXMgZW1wdHkgdmFsdWVzLCBzbyBubyBlcnJvciBpcyBiZWluZyByZXR1cm5lZFxuICAgICAqIEBwYXJhbSBjb25maWdcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2VyaWFsaXplQ29uZmlnKGNvbmZpZzogSUxvZ2dlckNvbmZpZyk6IElMb2dnZXJDb25maWcge1xuICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdENvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRlYnVnOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICAvLyBHZXQgdXNlciBkZWZhdWx0IGNvbmZpZ1xuICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHNob3dEaXNtaXNzOiB0aGlzLmRlZmF1bHRDb25maWcuc2hvd0Rpc21pc3MsXG4gICAgICAgICAgICAgICAgY2xvc2VPbkNsaWNrOiBpc051bGxPclVuZGVmaW5lZCh0aGlzLmRlZmF1bHRDb25maWcuY2xvc2VPbkNsaWNrKSA/IHRydWUgOiB0aGlzLmRlZmF1bHRDb25maWcuY2xvc2VPbkNsaWNrLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5kZWZhdWx0Q29uZmlnLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5kZWZhdWx0Q29uZmlnLmR1cmF0aW9uIHx8IDQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VyaWFsaXplIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uZmlnLmR1cmF0aW9uID0gQ29yZUxvZ2dlclNlcnZpY2UuZ2V0VmFsdWU8bnVtYmVyPihjb25maWcuZHVyYXRpb24sIHRoaXMuZGVmYXVsdENvbmZpZy5kdXJhdGlvbiwgNCk7XG4gICAgICAgIGNvbmZpZy5jbGFzc05hbWUgPSBDb3JlTG9nZ2VyU2VydmljZS5nZXRWYWx1ZTxzdHJpbmc+KGNvbmZpZy5jbGFzc05hbWUsIHRoaXMuZGVmYXVsdENvbmZpZy5jbGFzc05hbWUsIG51bGwpO1xuICAgICAgICBjb25maWcuc2hvd0Rpc21pc3MgPSBDb3JlTG9nZ2VyU2VydmljZS5nZXRWYWx1ZTxib29sZWFuPihjb25maWcuc2hvd0Rpc21pc3MsIHRoaXMuZGVmYXVsdENvbmZpZy5zaG93RGlzbWlzcywgZmFsc2UpO1xuICAgICAgICBjb25maWcuY2xvc2VPbkNsaWNrID0gQ29yZUxvZ2dlclNlcnZpY2UuZ2V0VmFsdWU8Ym9vbGVhbj4oY29uZmlnLmNsb3NlT25DbGljaywgdGhpcy5kZWZhdWx0Q29uZmlnLmNsb3NlT25DbGljaywgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgdmFsdWUgd2hpY2ggaXMgbm90IHVuZGVmaW5lZCBvciBudWxsXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqIEBwYXJhbSB2YWwxXG4gICAgICogQHBhcmFtIGRlZlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VmFsdWU8VD4odmFsOiBULCB2YWwxOiBULCBkZWY6IFQpOiBUIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh2YWwxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxufVxuIl19
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class CanDeactivateGuard {
|
|
4
|
-
canDeactivate(component) {
|
|
5
|
-
return component.canDeactivate ? component.canDeactivate() : true;
|
|
6
|
-
}
|
|
7
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CanDeactivateGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
8
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CanDeactivateGuard, providedIn: 'root' }); }
|
|
9
|
-
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: CanDeactivateGuard, decorators: [{
|
|
11
|
-
type: Injectable,
|
|
12
|
-
args: [{
|
|
13
|
-
providedIn: 'root',
|
|
14
|
-
}]
|
|
15
|
-
}] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWRlYWN0aXZhdGUuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc2VydmljZXMvZ3VhcmRzL2Nhbi1kZWFjdGl2YXRlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVzNDLE1BQU0sT0FBTyxrQkFBa0I7SUFFcEIsYUFBYSxDQUFDLFNBQWlDO1FBQ2xELE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakYsQ0FBQzs4R0FKUSxrQkFBa0I7a0hBQWxCLGtCQUFrQixjQUZmLE1BQU07OzJGQUVULGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5EZWFjdGl2YXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDYW5Db21wb25lbnREZWFjdGl2YXRlIHtcbiAgICBjYW5EZWFjdGl2YXRlOiAoKSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENhbkRlYWN0aXZhdGVHdWFyZCBpbXBsZW1lbnRzIENhbkRlYWN0aXZhdGU8Q2FuQ29tcG9uZW50RGVhY3RpdmF0ZT4ge1xuXG4gICAgcHVibGljIGNhbkRlYWN0aXZhdGUoY29tcG9uZW50OiBDYW5Db21wb25lbnREZWFjdGl2YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY2FuRGVhY3RpdmF0ZSA/IGNvbXBvbmVudC5jYW5EZWFjdGl2YXRlKCkgYXMgYm9vbGVhbiA6IHRydWU7XG4gICAgfVxuXG59XG4iXX0=
|