codefoxcore 0.0.6 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/interceptors/error.interceptor.mjs +32 -0
- package/esm2022/lib/interceptors/index.mjs +3 -1
- package/esm2022/lib/interceptors/precheck.interceptor.mjs +34 -0
- package/esm2022/lib/providers.mjs +9 -3
- package/esm2022/lib/services/dialog.service.mjs +18 -4
- package/esm2022/lib/services/google.maps.service.mjs +42 -0
- package/esm2022/lib/services/index.mjs +2 -1
- package/esm2022/lib/tokens/dialog.token.mjs +7 -2
- package/esm2022/lib/tokens/google.maps.token.mjs +7 -0
- package/esm2022/lib/tokens/index.mjs +2 -1
- package/fesm2022/codefoxcore.mjs +128 -5
- package/fesm2022/codefoxcore.mjs.map +1 -1
- package/lib/interceptors/error.interceptor.d.ts +10 -0
- package/lib/interceptors/index.d.ts +2 -0
- package/lib/interceptors/precheck.interceptor.d.ts +10 -0
- package/lib/providers.d.ts +1 -0
- package/lib/services/dialog.service.d.ts +3 -0
- package/lib/services/google.maps.service.d.ts +14 -0
- package/lib/services/index.d.ts +1 -0
- package/lib/tokens/dialog.token.d.ts +2 -1
- package/lib/tokens/google.maps.token.d.ts +2 -0
- package/lib/tokens/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { throwError } from 'rxjs';
|
|
3
|
+
import { catchError } from 'rxjs/operators';
|
|
4
|
+
import { BaseInterceptor } from './base.interceptor';
|
|
5
|
+
import { InterceptorType } from '../interfaces';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ErrorInterceptor extends BaseInterceptor {
|
|
8
|
+
intercept(request, next) {
|
|
9
|
+
if (this.skipInterceptor()) {
|
|
10
|
+
return next.handle(request);
|
|
11
|
+
}
|
|
12
|
+
return next.handle(request).pipe(catchError((httpErrorResponse) => {
|
|
13
|
+
if (this.interceptorsService.errorCallbackfunction !== null && !this.interceptorsService.errorSkipStatusCodes.includes(httpErrorResponse.status)) {
|
|
14
|
+
this.loggerService.info('Error Interceptor Callback Function Called');
|
|
15
|
+
this.interceptorsService.errorCallbackfunction(httpErrorResponse);
|
|
16
|
+
}
|
|
17
|
+
return throwError(() => httpErrorResponse);
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
constructor() {
|
|
21
|
+
super(InterceptorType.ERROR);
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
24
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorInterceptor, providedIn: 'root' }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorInterceptor, decorators: [{
|
|
27
|
+
type: Injectable,
|
|
28
|
+
args: [{
|
|
29
|
+
providedIn: 'root'
|
|
30
|
+
}]
|
|
31
|
+
}], ctorParameters: function () { return []; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL2ludGVyY2VwdG9ycy9lcnJvci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUtoRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZUFBZTtJQUNwRCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUMvQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixVQUFVLENBQUMsQ0FBQyxpQkFBb0MsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3JFO1lBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEO1FBQ0MsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOytHQWxCUSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZiLE1BQU07OzRGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyLCBIdHRwRXZlbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEJhc2VJbnRlcmNlcHRvciB9IGZyb20gJy4vYmFzZS5pbnRlcmNlcHRvcic7XHJcbmltcG9ydCB7IEludGVyY2VwdG9yVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcnJvckludGVyY2VwdG9yIGV4dGVuZHMgQmFzZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHRpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2tpcEludGVyY2VwdG9yKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoaHR0cEVycm9yUmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnRlcmNlcHRvcnNTZXJ2aWNlLmVycm9yQ2FsbGJhY2tmdW5jdGlvbiAhPT0gbnVsbCAmJiAhdGhpcy5pbnRlcmNlcHRvcnNTZXJ2aWNlLmVycm9yU2tpcFN0YXR1c0NvZGVzLmluY2x1ZGVzKGh0dHBFcnJvclJlc3BvbnNlLnN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuaW5mbygnRXJyb3IgSW50ZXJjZXB0b3IgQ2FsbGJhY2sgRnVuY3Rpb24gQ2FsbGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcmNlcHRvcnNTZXJ2aWNlLmVycm9yQ2FsbGJhY2tmdW5jdGlvbihodHRwRXJyb3JSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBodHRwRXJyb3JSZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIFx0c3VwZXIoSW50ZXJjZXB0b3JUeXBlLkVSUk9SKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export * from './token.interceptor';
|
|
2
|
-
|
|
2
|
+
export * from './precheck.interceptor';
|
|
3
|
+
export * from './error.interceptor';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL2ludGVyY2VwdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdG9rZW4uaW50ZXJjZXB0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL3ByZWNoZWNrLmludGVyY2VwdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9lcnJvci5pbnRlcmNlcHRvcic7XHJcbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BaseInterceptor } from './base.interceptor';
|
|
3
|
+
import { InterceptorType } from '../interfaces';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class PrecheckInterceptor extends BaseInterceptor {
|
|
6
|
+
intercept(request, next) {
|
|
7
|
+
if (this.skipInterceptor()) {
|
|
8
|
+
return next.handle(request);
|
|
9
|
+
}
|
|
10
|
+
if (this.interceptorsService.precheck !== null) {
|
|
11
|
+
request = request.clone({
|
|
12
|
+
setHeaders: {
|
|
13
|
+
Precheck: this.interceptorsService.precheck
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
if (this.interceptorsService.resetPrecheck) {
|
|
17
|
+
this.interceptorsService.precheck = null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return next.handle(request);
|
|
21
|
+
}
|
|
22
|
+
constructor() {
|
|
23
|
+
super(InterceptorType.PRECHECK);
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PrecheckInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PrecheckInterceptor, providedIn: 'root' }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PrecheckInterceptor, decorators: [{
|
|
29
|
+
type: Injectable,
|
|
30
|
+
args: [{
|
|
31
|
+
providedIn: 'root'
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return []; } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlY2hlY2suaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL2ludGVyY2VwdG9ycy9wcmVjaGVjay5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUtoRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZUFBZTtJQUV2RCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUNyRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQy9DLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN2QixVQUFVLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRO2lCQUMzQzthQUNELENBQUMsQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDekM7U0FDRDtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7UUFDQyxLQUFLLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBckJXLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRm5CLE1BQU07OzRGQUVOLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyLCBIdHRwRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUludGVyY2VwdG9yIH0gZnJvbSAnLi9iYXNlLmludGVyY2VwdG9yJztcclxuaW1wb3J0IHsgSW50ZXJjZXB0b3JUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcmVjaGVja0ludGVyY2VwdG9yIGV4dGVuZHMgQmFzZUludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuXHJcblx0aW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG5cdFx0aWYgKHRoaXMuc2tpcEludGVyY2VwdG9yKCkpIHtcclxuXHRcdFx0cmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuaW50ZXJjZXB0b3JzU2VydmljZS5wcmVjaGVjayAhPT0gbnVsbCkge1xyXG5cdFx0XHRyZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcblx0XHRcdFx0c2V0SGVhZGVyczoge1xyXG5cdFx0XHRcdFx0UHJlY2hlY2s6IHRoaXMuaW50ZXJjZXB0b3JzU2VydmljZS5wcmVjaGVja1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmICh0aGlzLmludGVyY2VwdG9yc1NlcnZpY2UucmVzZXRQcmVjaGVjaykge1xyXG5cdFx0XHRcdHRoaXMuaW50ZXJjZXB0b3JzU2VydmljZS5wcmVjaGVjayA9IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoSW50ZXJjZXB0b3JUeXBlLlBSRUNIRUNLKTtcclxuXHR9XHJcbn1cclxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HTTP_INTERCEPTORS } from "@angular/common/http";
|
|
2
2
|
import { makeEnvironmentProviders } from "@angular/core";
|
|
3
3
|
import { TokenInterceptor } from "./interceptors/token.interceptor";
|
|
4
|
-
import {
|
|
4
|
+
import { OPENED_DIALOG_BODY_CLASS, PREDEFINED_DIALOGS } from "./tokens";
|
|
5
5
|
export function provideTokenInterceptor() {
|
|
6
6
|
return makeEnvironmentProviders([{
|
|
7
7
|
provide: HTTP_INTERCEPTORS,
|
|
@@ -11,8 +11,14 @@ export function provideTokenInterceptor() {
|
|
|
11
11
|
}
|
|
12
12
|
export function providePredefinedDialogs(predefinedDialogs) {
|
|
13
13
|
return makeEnvironmentProviders([{
|
|
14
|
-
provide:
|
|
14
|
+
provide: PREDEFINED_DIALOGS,
|
|
15
15
|
useValue: predefinedDialogs
|
|
16
16
|
}]);
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
export function provideOpenedDialogBodyClass(openedDialogBodyClass) {
|
|
19
|
+
return makeEnvironmentProviders([{
|
|
20
|
+
provide: OPENED_DIALOG_BODY_CLASS,
|
|
21
|
+
useValue: openedDialogBodyClass
|
|
22
|
+
}]);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kZWZveGNvcmUvc3JjL2xpYi9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUF3Qix3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHeEUsTUFBTSxVQUFVLHVCQUF1QjtJQUNuQyxPQUFPLHdCQUF3QixDQUFDLENBQUM7WUFDN0IsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLGlCQUFvQztJQUN6RSxPQUFPLHdCQUF3QixDQUFDLENBQUM7WUFDN0IsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixRQUFRLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxxQkFBb0M7SUFDN0UsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sRUFBRSx3QkFBd0I7WUFDakMsUUFBUSxFQUFFLHFCQUFxQjtTQUNsQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVG9rZW5JbnRlcmNlcHRvciB9IGZyb20gXCIuL2ludGVyY2VwdG9ycy90b2tlbi5pbnRlcmNlcHRvclwiO1xyXG5pbXBvcnQgeyBPUEVORURfRElBTE9HX0JPRFlfQ0xBU1MsIFBSRURFRklORURfRElBTE9HUyB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5pbXBvcnQgeyBQcmVkZWZpbmVkRGlhbG9ncyB9IGZyb20gXCIuL2ludGVyZmFjZXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVG9rZW5JbnRlcmNlcHRvcigpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XHJcbiAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXHJcbiAgICAgICAgdXNlQ2xhc3M6IFRva2VuSW50ZXJjZXB0b3IsXHJcbiAgICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1dKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVQcmVkZWZpbmVkRGlhbG9ncyhwcmVkZWZpbmVkRGlhbG9nczogUHJlZGVmaW5lZERpYWxvZ3MpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XHJcbiAgICAgICAgcHJvdmlkZTogUFJFREVGSU5FRF9ESUFMT0dTLFxyXG4gICAgICAgIHVzZVZhbHVlOiBwcmVkZWZpbmVkRGlhbG9nc1xyXG4gICAgfV0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU9wZW5lZERpYWxvZ0JvZHlDbGFzcyhvcGVuZWREaWFsb2dCb2R5Q2xhc3M6IHN0cmluZyB8IG51bGwpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFt7XHJcbiAgICAgICAgcHJvdmlkZTogT1BFTkVEX0RJQUxPR19CT0RZX0NMQVNTLFxyXG4gICAgICAgIHVzZVZhbHVlOiBvcGVuZWREaWFsb2dCb2R5Q2xhc3NcclxuICAgIH1dKTtcclxufVxyXG4iXX0=
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { isPlatformBrowser } from '@angular/common';
|
|
2
2
|
import { ApplicationRef, createComponent, inject, Injectable, Injector, PLATFORM_ID } from '@angular/core';
|
|
3
3
|
import { Title } from '@angular/platform-browser';
|
|
4
|
-
import { filter } from 'rxjs';
|
|
4
|
+
import { filter, Subject } from 'rxjs';
|
|
5
5
|
import { DialogConfig, DialogInjector, DialogRef } from '../classes';
|
|
6
|
-
import { ALERT_CONFIGURATIONS,
|
|
6
|
+
import { ALERT_CONFIGURATIONS, PREDEFINED_DIALOGS, CONFIRM_CONFIGURATIONS, OPENED_DIALOG_BODY_CLASS } from '../tokens';
|
|
7
7
|
import { MessageService } from '../services';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
export class DialogService {
|
|
@@ -11,10 +11,12 @@ export class DialogService {
|
|
|
11
11
|
this.injector = inject(Injector);
|
|
12
12
|
this.predefinedConfirmConfigurations = inject(CONFIRM_CONFIGURATIONS);
|
|
13
13
|
this.predefinedAlertConfigurations = inject(ALERT_CONFIGURATIONS);
|
|
14
|
-
this.predefinedDialogs = inject(
|
|
14
|
+
this.predefinedDialogs = inject(PREDEFINED_DIALOGS);
|
|
15
|
+
this.openedDialogBodyClass = inject(OPENED_DIALOG_BODY_CLASS);
|
|
15
16
|
this.title = inject(Title);
|
|
16
17
|
this.messageService = inject(MessageService);
|
|
17
18
|
this.dialogs = new Map();
|
|
19
|
+
this.dialogCountChanged = new Subject();
|
|
18
20
|
this.openIndex = 1;
|
|
19
21
|
this.platformId = inject(PLATFORM_ID);
|
|
20
22
|
if (isPlatformBrowser(this.platformId)) {
|
|
@@ -37,6 +39,16 @@ export class DialogService {
|
|
|
37
39
|
}
|
|
38
40
|
});
|
|
39
41
|
}
|
|
42
|
+
this.dialogCountChanged.subscribe((size) => {
|
|
43
|
+
if (isPlatformBrowser(this.platformId) && this.openedDialogBodyClass !== null) {
|
|
44
|
+
if (size === 0) {
|
|
45
|
+
document.body.classList.remove(this.openedDialogBodyClass);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
document.body.classList.add(this.openedDialogBodyClass);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
40
52
|
}
|
|
41
53
|
async openPredefined(name, dialogConfiguration = {}) {
|
|
42
54
|
if (this.predefinedDialogs[name] === undefined) {
|
|
@@ -183,6 +195,7 @@ export class DialogService {
|
|
|
183
195
|
container: dialogContainer,
|
|
184
196
|
openIndex: this.openIndex
|
|
185
197
|
});
|
|
198
|
+
this.dialogCountChanged.next(this.dialogs.size);
|
|
186
199
|
this.openIndex++;
|
|
187
200
|
return dialogRef;
|
|
188
201
|
}
|
|
@@ -201,6 +214,7 @@ export class DialogService {
|
|
|
201
214
|
}
|
|
202
215
|
dialogComponentRefContainer.componentRef.destroy();
|
|
203
216
|
this.dialogs.delete(dialogRef);
|
|
217
|
+
this.dialogCountChanged.next(this.dialogs.size);
|
|
204
218
|
if (this.dialogs.size === 0) {
|
|
205
219
|
this.openIndex = 1;
|
|
206
220
|
}
|
|
@@ -321,4 +335,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
321
335
|
providedIn: 'root'
|
|
322
336
|
}]
|
|
323
337
|
}], ctorParameters: function () { return []; } });
|
|
324
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxjQUFjLEVBRWQsZUFBZSxFQUVmLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLFdBQVcsRUFFZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUs3QyxNQUFNLE9BQU8sYUFBYTtJQWN0QjtRQVpLLGFBQVEsR0FBYSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsb0NBQStCLEdBQTBDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hHLGtDQUE2QixHQUF3QyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRyxzQkFBaUIsR0FBc0IsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFN0UsVUFBSyxHQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixtQkFBYyxHQUFtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFeEQsWUFBTyxHQUFnRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pFLGNBQVMsR0FBVyxDQUFD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Q0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0E1WFcsYUFBYTttSEFBYixhQUFhLGNBRlYsTUFBTTs7NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBBcHBsaWNhdGlvblJlZixcclxuICAgIENvbXBvbmVudFJlZixcclxuICAgIGNyZWF0ZUNvbXBvbmVudCxcclxuICAgIEVtYmVkZGVkVmlld1JlZixcclxuICAgIGluamVjdCxcclxuICAgIEluamVjdGFibGUsXHJcbiAgICBJbmplY3RvcixcclxuICAgIFBMQVRGT1JNX0lELFxyXG4gICAgVHlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBbGVydENvbmZpZ3VyYXRpb24sIERpYWxvZ0NvbmZpZ3VyYXRpb24sIENvbmZpcm1Db25maWd1cmF0aW9uLCBMb2FkaW5nQ29uZmlndXJhdGlvbiwgTW9kYWxXaXRoQnV0dG9uc0NvbmZpZ3VyYXRpb24sIFByZWRlZmluZWREaWFsb2dzLCBEaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dJbmplY3RvciwgRGlhbG9nUmVmIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFMRVJUX0NPTkZJR1VSQVRJT05TLCBDRl9QUkVERUZJTkVEX0RJQUxPR1MsIENPTkZJUk1fQ09ORklHVVJBVElPTlMgfSBmcm9tICcuLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcblxyXG5cdHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuXHRwcml2YXRlIHByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbnM6IHtba2V5OiBzdHJpbmddOiBDb25maXJtQ29uZmlndXJhdGlvbn0gPSBpbmplY3QoQ09ORklSTV9DT05GSUdVUkFUSU9OUyk7XHJcblx0cHJpdmF0ZSBwcmVkZWZpbmVkQWxlcnRDb25maWd1cmF0aW9uczoge1trZXk6IHN0cmluZ106IEFsZXJ0Q29uZmlndXJhdGlvbn0gPSBpbmplY3QoQUxFUlRfQ09ORklHVVJBVElPTlMpO1xyXG5cdHByaXZhdGUgcHJlZGVmaW5lZERpYWxvZ3M6IFByZWRlZmluZWREaWFsb2dzID0gaW5qZWN0KENGX1BSRURFRklORURfRElBTE9HUyk7XHJcblxyXG5cdHRpdGxlOiBUaXRsZSA9IGluamVjdChUaXRsZSk7XHJcblx0bWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuXHJcblx0ZGlhbG9nczogTWFwPERpYWxvZ1JlZiwgRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyPiA9IG5ldyBNYXAoKTtcclxuXHRvcGVuSW5kZXg6IG51bWJlciA9IDE7XHJcblx0cGxhdGZvcm1JZDogT2JqZWN0ID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuXHRcdGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoa2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG5cdFx0XHRcdGlmIChrZXlib2FyZEV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnZXNjYXBlJykge1xyXG5cdFx0XHRcdFx0bGV0IGxhc3RPcGVuSW5kZXg6IG51bWJlciA9IDA7XHJcblx0XHRcdFx0XHRsZXQgbGFzdE9wZW5lZERpYWxvZ1JlZjogRGlhbG9nUmVmIHwgbnVsbCA9IG51bGw7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IFtkaWFsb2dSZWYsIGNmRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyXSBvZiB0aGlzLmRpYWxvZ3MuZW50cmllcygpKSB7XHJcblx0XHRcdFx0XHRcdGlmIChjZkRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5vcGVuSW5kZXggPiBsYXN0T3BlbkluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0bGFzdE9wZW5JbmRleCA9IGNmRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLm9wZW5JbmRleDtcclxuXHRcdFx0XHRcdFx0XHRsYXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHJcblx0XHRcdFx0XHRpZiAobGFzdE9wZW5lZERpYWxvZ1JlZiAhPT0gbnVsbCAmJiBsYXN0T3BlbmVkRGlhbG9nUmVmLmRpYWxvZ0NvbmZpZyAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRpZiAobGFzdE9wZW5lZERpYWxvZ1JlZi5kaWFsb2dDb25maWcuaWdub3JlS2V5VXAgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcclxuXHRcdFx0XHRcdFx0bGFzdE9wZW5lZERpYWxvZ1JlZi5jbG9zZSgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBvcGVuUHJlZGVmaW5lZDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSk6IFByb21pc2U8RGlhbG9nUmVmPFQ+PiB7XHJcblx0XHRpZiAodGhpcy5wcmVkZWZpbmVkRGlhbG9nc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRocm93IEVycm9yKCdEaWFsb2cgd2l0aCBuYW1lIFwiJyArIG5hbWUgKyAnXCIgbm90IGZvdW5kIScpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcHJlZGVmaW5lZERpYWxvZyA9IHRoaXMucHJlZGVmaW5lZERpYWxvZ3NbbmFtZV07XHJcblx0XHRpZiAodHlwZW9mIHByZWRlZmluZWREaWFsb2cgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3BlbkltcG9ydChwcmVkZWZpbmVkRGlhbG9nLCBkaWFsb2dDb25maWd1cmF0aW9uKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLm9wZW5JbXBvcnQocHJlZGVmaW5lZERpYWxvZy5jb21wb25lbnQsIHsuLi5wcmVkZWZpbmVkRGlhbG9nLmNvbmZpZ3VyYXRpb24sIC4uLmRpYWxvZ0NvbmZpZ3VyYXRpb259KTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIG9wZW5JbXBvcnQ8VCA9IGFueT4oY29tcG9uZW50OiAoKSA9PiBQcm9taXNlPFR5cGU8YW55Pj4sIGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSk6IFByb21pc2U8RGlhbG9nUmVmPFQ+PiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuXHRcdFx0cmVzb2x2ZSh0aGlzLm9wZW48VD4oYXdhaXQgY29tcG9uZW50KCksIGRpYWxvZ0NvbmZpZ3VyYXRpb24pKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgICBvcGVuPFQgPSBhbnk+KGNvbXBvbmVudDogVHlwZTxhbnk+LCBkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30pOiBEaWFsb2dSZWY8VD4ge1xyXG5cclxuXHRcdGZvciAobGV0IGRpYWxvZyBvZiB0aGlzLmRpYWxvZ3MuZW50cmllcygpKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQoZGlhbG9nQ29uZmlndXJhdGlvbi5zaW5nbGUgJiYgZGlhbG9nWzFdLmNvbXBvbmVudFJlZi5jb21wb25lbnRUeXBlLm5hbWUgPT09IGNvbXBvbmVudC5uYW1lKSB8fFxyXG5cdFx0XHRcdChkaWFsb2dbMF0uZGlhbG9nQ29uZmlnICE9PSBudWxsICYmIGRpYWxvZ1swXS5kaWFsb2dDb25maWcuc2luZ2xlICYmIGRpYWxvZ1sxXS5jb21wb25lbnRSZWYuY29tcG9uZW50VHlwZS5uYW1lID09PSBjb21wb25lbnQubmFtZSlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ1swXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyA9IHRoaXMuY3JlYXRlRGlhbG9nQ29uZmlnKGRpYWxvZ0NvbmZpZ3VyYXRpb24pO1xyXG5cclxuXHRcdGlmICghZGlhbG9nQ29uZmlnLmtlZXBBY3RpdmVFbGVtZW50KSB7XHJcblx0XHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuXHRcdFx0XHRkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IERpYWxvZ1JlZjxUPiA9IHRoaXMuYXBwZW5kVG9Cb2R5KGNvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcclxuXHRcdGRpYWxvZ1JlZi5tZXNzYWdlU2VydmljZSA9IHRoaXMubWVzc2FnZVNlcnZpY2U7XHJcblx0XHRkaWFsb2dSZWYuZGlhbG9nQ29uZmlnID0gZGlhbG9nQ29uZmlnO1xyXG5cclxuXHRcdHRoaXMuY2hhbmdlQW5kU3RvcmVUaXRsZShkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuXHRjaGFuZ2VBbmRTdG9yZVRpdGxlKGRpYWxvZ1JlZjogRGlhbG9nUmVmKTogdm9pZCB7XHJcblx0XHRkaWFsb2dSZWYuc2F2ZWRUaXRsZSA9IHRoaXMudGl0bGUuZ2V0VGl0bGUoKTtcclxuXHRcdGlmIChkaWFsb2dSZWYuZGlhbG9nQ29uZmlnICE9PSBudWxsICYmIGRpYWxvZ1JlZi5kaWFsb2dDb25maWcudGl0bGUgIT09IG51bGwpIHtcclxuXHRcdFx0dGhpcy50aXRsZS5zZXRUaXRsZShkaWFsb2dSZWYuZGlhbG9nQ29uZmlnLnRpdGxlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgY3JlYXRlRGlhbG9nQ29uZmlnKGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24pOiBEaWFsb2dDb25maWcge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0gbmV3IERpYWxvZ0NvbmZpZygpO1xyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWd1cmF0aW9uLnNob3dDbG9zZUljb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb25maWcuc2hvd0Nsb3NlSWNvbiA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uc2hvd0Nsb3NlSWNvbjtcclxuICAgICAgICB9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5iZWZvcmVDbG9zZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5iZWZvcmVDbG9zZSA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uYmVmb3JlQ2xvc2U7XHJcbiAgICAgICAgfVxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZ3VyYXRpb24uaWdub3JlS2V5VXAgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb25maWcuaWdub3JlS2V5VXAgPSBkaWFsb2dDb25maWd1cmF0aW9uLmlnbm9yZUtleVVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5kYXRhICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSBkaWFsb2dDb25maWd1cmF0aW9uLmRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWd1cmF0aW9uLm5vUGFkZGluZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5ub1BhZGRpbmcgPSBkaWFsb2dDb25maWd1cmF0aW9uLm5vUGFkZGluZztcclxuICAgICAgICB9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5rZWVwQWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5rZWVwQWN0aXZlRWxlbWVudCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24ua2VlcEFjdGl2ZUVsZW1lbnQ7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5jb250YWluZXJDbGFzc2VzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmNvbnRhaW5lckNsYXNzZXMgPSBkaWFsb2dDb25maWd1cmF0aW9uLmNvbnRhaW5lckNsYXNzZXM7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5kaWFsb2dDbGFzc2VzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmRpYWxvZ0NsYXNzZXMgPSBkaWFsb2dDb25maWd1cmF0aW9uLmRpYWxvZ0NsYXNzZXM7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy50aXRsZSA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24udGl0bGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5jb250ZW50RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5jb250ZW50RWxlbWVudCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uY29udGVudEVsZW1lbnQ7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5zaW5nbGUgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuc2luZ2xlID0gZGlhbG9nQ29uZmlndXJhdGlvbi5zaW5nbGU7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy53aWR0aCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24ud2lkdGg7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuaGVpZ2h0ID0gZGlhbG9nQ29uZmlndXJhdGlvbi5oZWlnaHQ7XHJcblx0XHR9XHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ0NvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRUb0JvZHkoY29tcG9uZW50OiBUeXBlPGFueT4sIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnKTogRGlhbG9nUmVmIHtcclxuXHJcblx0XHRjb25zdCBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xyXG5cclxuICAgICAgICAvLyBDUkVBVEUgSU5KRUNUSU9OIFRPS0VOU1xyXG4gICAgICAgIGNvbnN0IHRva2VuczogV2Vha01hcDxhbnksIGFueT4gPSBuZXcgV2Vha01hcCgpO1xyXG5cclxuICAgICAgICAvLyBDUkVBVEUgRElBTE9HIENPTkZJR1VSQVRJT04gQ0xBU1NcclxuICAgICAgICB0b2tlbnMuc2V0KERpYWxvZ0NvbmZpZywgZGlhbG9nQ29uZmlnKTtcclxuXHJcbiAgICAgICAgLy8gQ1JFQVRFIERJQUxPRyBSRUZFUkVOQ0UgQ0xBU1NcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IERpYWxvZ1JlZiA9IG5ldyBEaWFsb2dSZWYoKTtcclxuICAgICAgICB0b2tlbnMuc2V0KERpYWxvZ1JlZiwgZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgLy8gTElTVEVOIE9OIERJQUxPRyBDTE9TRVxyXG4gICAgICAgIGNvbnN0IGNsb3NlU3ViOiBTdWJzY3JpcHRpb24gPSBkaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZyb21Cb2R5KGRpYWxvZ1JlZik7XHJcbiAgICAgICAgICAgIGNsb3NlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBDT01QT05FTlQgUkVGXHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcclxuXHRcdFx0ZW52aXJvbm1lbnRJbmplY3RvcjogYXBwUmVmLmluamVjdG9yLFxyXG5cdFx0XHRlbGVtZW50SW5qZWN0b3I6IG5ldyBEaWFsb2dJbmplY3Rvcih0aGlzLmluamVjdG9yLCB0b2tlbnMpXHJcblx0XHR9KTtcclxuXHJcbiAgICAgICAgLy8gQVRUQUNIIFZJRVcgVE8gQU5HVUxBUlxyXG4gICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBESUFMT0cgQ09OVEFJTkVSIEVMRU1FTlRcclxuICAgICAgICBjb25zdCBkaWFsb2dDb250YWluZXI6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgZGlhbG9nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2NmLWRpYWxvZy1jb250YWluZXInKTtcclxuXHRcdGlmIChkaWFsb2dDb25maWcuY29udGFpbmVyQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGRpYWxvZ0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKC4uLmRpYWxvZ0NvbmZpZy5jb250YWluZXJDbGFzc2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBUFBFTkQgRE9NIEVMRU1FTlQgVE8gRElBTE9HXHJcblx0XHRjb25zdCBjaGlsZERvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcblx0XHRjaGlsZERvbUVsZW0uY2xhc3NMaXN0LmFkZCgnY2YtZGlhbG9nJyk7XHJcblx0XHRcclxuXHRcdGlmIChkaWFsb2dDb25maWcud2lkdGggIT09IG51bGwpIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLnN0eWxlLndpZHRoID0gZGlhbG9nQ29uZmlnLndpZHRoO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy5oZWlnaHQgIT09IG51bGwpIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLnN0eWxlLmhlaWdodCA9IGRpYWxvZ0NvbmZpZy5oZWlnaHQ7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlnLm5vUGFkZGluZykge1xyXG4gICAgICAgICAgICBjaGlsZERvbUVsZW0uY2xhc3NMaXN0LmFkZCgnbm8tcGFkZGluZycpO1xyXG4gICAgICAgIH1cclxuXHRcdGlmIChkaWFsb2dDb25maWcuZGlhbG9nQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNoaWxkRG9tRWxlbS5jbGFzc0xpc3QuYWRkKC4uLmRpYWxvZ0NvbmZpZy5kaWFsb2dDbGFzc2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZGlhbG9nQ29uZmlnLmNvbnRlbnRFbGVtZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdGNoaWxkRG9tRWxlbS5hcHBlbmRDaGlsZChkaWFsb2dDb25maWcuY29udGVudEVsZW1lbnQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRpYWxvZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZERvbUVsZW0pO1xyXG5cclxuICAgICAgICAvLyBDTE9TRUFCTEU/IEFQUEVORCBCVVRUT05cclxuICAgICAgICBpZiAoZGlhbG9nQ29uZmlnLnNob3dDbG9zZUljb24pIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvc2VFbGVtZW50OiBIVE1MRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICBjbG9zZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5bJ2NmLWRpYWxvZy1jbG9zZScsICdyZW1peGljb24nLCAnY2xvc2UtbGluZSddKTtcclxuICAgICAgICAgICAgY2xvc2VFbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2hpbGREb21FbGVtLmFwcGVuZENoaWxkKGNsb3NlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBUFBFTkQgRElBTE9HIENPTlRBSU5FUiBUTyBCT0RZXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2dDb250YWluZXIpO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ3Muc2V0KGRpYWxvZ1JlZiwge1xyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYsXHJcbiAgICAgICAgICAgIGNvbnRhaW5lcjogZGlhbG9nQ29udGFpbmVyLFxyXG5cdFx0XHRvcGVuSW5kZXg6IHRoaXMub3BlbkluZGV4IFxyXG4gICAgICAgIH0pO1xyXG5cclxuXHRcdHRoaXMub3BlbkluZGV4Kys7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJvbUJvZHkoZGlhbG9nUmVmOiBEaWFsb2dSZWYpOiB2b2lkIHtcclxuXHJcblx0XHRjb25zdCBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmID0gdGhpcy5pbmplY3Rvci5nZXQoQXBwbGljYXRpb25SZWYpO1xyXG5cclxuICAgICAgICBpZiAoIWRpYWxvZ1JlZiB8fCAhdGhpcy5kaWFsb2dzLmhhcyhkaWFsb2dSZWYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyOiBEaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIgfCB1bmRlZmluZWQgPSB0aGlzLmRpYWxvZ3MuZ2V0KGRpYWxvZ1JlZik7XHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lciA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHRcdFxyXG4gICAgICAgIGFwcFJlZi5kZXRhY2hWaWV3KGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xyXG5cclxuICAgICAgICBpZiAoZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLmNvbnRhaW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIuY29udGFpbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ3MuZGVsZXRlKGRpYWxvZ1JlZik7XHJcblxyXG5cdFx0aWYgKHRoaXMuZGlhbG9ncy5zaXplID09PSAwKSB7XHJcblx0XHRcdHRoaXMub3BlbkluZGV4ID0gMTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXN0b3JlIHRpdGxlXHJcblx0XHRpZiAodGhpcy5kaWFsb2dzLnNpemUgPT09IDApIHtcclxuXHRcdFx0dGhpcy50aXRsZS5zZXRUaXRsZShkaWFsb2dSZWYuc2F2ZWRUaXRsZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbGF0ZXN0T3BlbmVkRGlhbG9nUmVmOiBEaWFsb2dSZWYgfCBudWxsID0gbnVsbDtcclxuXHRcdFx0dGhpcy5kaWFsb2dzLmZvckVhY2goKF8sIGRpYWxvZ1JlZjogRGlhbG9nUmVmKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxhdGVzdE9wZW5lZERpYWxvZ1JlZiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLm9wZW5lZCA8IGRpYWxvZ1JlZi5vcGVuZWQpIHtcclxuXHRcdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChsYXRlc3RPcGVuZWREaWFsb2dSZWYgIT09IG51bGwpIHtcclxuXHRcdFx0XHQvL3RoaXMudGl0bGUuc2V0VGl0bGUobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudGl0bGUuc2V0VGl0bGUoZGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG5cdGNvbmZpcm0oXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGNvbnN0IHByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbjogQ29uZmlybUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSB0aGlzLnByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbl07XHJcblx0XHRcdGlmIChwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBjb25maXJtIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvcjogJyArIGNvbmZpZ3VyYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbmZpZ3VyYXRpb24gPSBwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb247XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzLm9wZW4oY29tcG9uZW50LCB7XHJcblx0XHRcdFx0Li4uZGlhbG9nQ29uZmlndXJhdGlvbixcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpZ25vcmVLZXlVcDogdHJ1ZSxcclxuXHRcdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZVxyXG5cdFx0XHR9KS5vbkNsb3NlLnBpcGUoZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKS5zdWJzY3JpYmUoKGFjY2VwdGVkOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdGVkKSB7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWplY3QodHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgICBhc3luYyBjb25maXJtQXN5bmMoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybShjb25maWd1cmF0aW9uLCBkaWFsb2dDb25maWd1cmF0aW9uLCBjb21wb25lbnQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cdFxyXG5cdGNvbmZpcm1BY2NlcHQoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKS5jYXRjaCgoKSA9PiB7fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0XHJcblx0Y29uZmlybURlY2xpbmUoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiB7fSkuY2F0Y2goKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dMb2FkaW5nKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTG9hZGluZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZSxcclxuXHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2hvd0FsZXJ0KFxyXG5cdFx0Y29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9LFxyXG5cdFx0Y29tcG9uZW50OiBUeXBlPGFueT5cclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Y29uc3QgcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5wcmVkZWZpbmVkQWxlcnRDb25maWd1cmF0aW9uc1tjb25maWd1cmF0aW9uXTtcclxuXHRcdFx0aWYgKHByZWRlZmluZWRBbGVydENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBhbGVydCBjb25maWd1cmF0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBjb25maWd1cmF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25maWd1cmF0aW9uID0gcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHRcdC4uLmRpYWxvZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdFx0c2hvd0Nsb3NlSWNvbjogZmFsc2VcclxuXHRcdFx0fSkub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dNb2RhbFdpdGhCdXR0b25zKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTW9kYWxXaXRoQnV0dG9uc0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxjQUFjLEVBRWQsZUFBZSxFQUVmLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUNSLFdBQVcsRUFFZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFLN0MsTUFBTSxPQUFPLGFBQWE7SUFnQnRCO1FBZEssYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxvQ0FBK0IsR0FBMEMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEcsa0NBQTZCLEdBQXdDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xHLHNCQUFpQixHQUFzQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSwwQkFBcUIsR0FBa0IsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFaEYsVUFBSyxHQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixtQkFBYyxHQUFtQixNQUFNLENBQUMsY0FB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QW1DLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2SCxJQUFJLDRCQUE0QixLQUFLLFNBQVMsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsR0FBRyxhQUFhLENBQUMsQ0FBQzthQUNsRjtZQUNELGFBQWEsR0FBRyw0QkFBNEIsQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUMzQixHQUFHLG1CQUFtQjtnQkFDdEIsSUFBSSxFQUFFO29CQUNMLGFBQWE7aUJBQ2I7Z0JBQ0QsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxLQUFLO2FBQ3BCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDekIsT0FBTyxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUNuQixhQUE0QyxFQUM1QyxzQkFBMkMsRUFBRSxFQUM3QyxTQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNCLEdBQUcsbUJBQW1CO1lBQ3RCLElBQUksRUFBRTtnQkFDTCxhQUFhO2FBQ2I7U0FDRCxDQUFDLENBQUM7SUFDSixDQUFDOytHQXpZVyxhQUFhO21IQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgQ29tcG9uZW50UmVmLFxyXG4gICAgY3JlYXRlQ29tcG9uZW50LFxyXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxyXG4gICAgaW5qZWN0LFxyXG4gICAgSW5qZWN0YWJsZSxcclxuICAgIEluamVjdG9yLFxyXG4gICAgUExBVEZPUk1fSUQsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IGZpbHRlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFsZXJ0Q29uZmlndXJhdGlvbiwgRGlhbG9nQ29uZmlndXJhdGlvbiwgQ29uZmlybUNvbmZpZ3VyYXRpb24sIExvYWRpbmdDb25maWd1cmF0aW9uLCBNb2RhbFdpdGhCdXR0b25zQ29uZmlndXJhdGlvbiwgUHJlZGVmaW5lZERpYWxvZ3MsIERpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBEaWFsb2dDb25maWcsIERpYWxvZ0luamVjdG9yLCBEaWFsb2dSZWYgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQUxFUlRfQ09ORklHVVJBVElPTlMsIFBSRURFRklORURfRElBTE9HUywgQ09ORklSTV9DT05GSUdVUkFUSU9OUywgT1BFTkVEX0RJQUxPR19CT0RZX0NMQVNTIH0gZnJvbSAnLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2Uge1xyXG5cclxuXHRwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XHJcblx0cHJpdmF0ZSBwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb25zOiB7W2tleTogc3RyaW5nXTogQ29uZmlybUNvbmZpZ3VyYXRpb259ID0gaW5qZWN0KENPTkZJUk1fQ09ORklHVVJBVElPTlMpO1xyXG5cdHByaXZhdGUgcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbnM6IHtba2V5OiBzdHJpbmddOiBBbGVydENvbmZpZ3VyYXRpb259ID0gaW5qZWN0KEFMRVJUX0NPTkZJR1VSQVRJT05TKTtcclxuXHRwcml2YXRlIHByZWRlZmluZWREaWFsb2dzOiBQcmVkZWZpbmVkRGlhbG9ncyA9IGluamVjdChQUkVERUZJTkVEX0RJQUxPR1MpO1xyXG5cdHByaXZhdGUgb3BlbmVkRGlhbG9nQm9keUNsYXNzOiBzdHJpbmcgfCBudWxsID0gaW5qZWN0KE9QRU5FRF9ESUFMT0dfQk9EWV9DTEFTUyk7XHJcblxyXG5cdHRpdGxlOiBUaXRsZSA9IGluamVjdChUaXRsZSk7XHJcblx0bWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcclxuXHJcblx0ZGlhbG9nczogTWFwPERpYWxvZ1JlZiwgRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyPiA9IG5ldyBNYXAoKTtcclxuXHRkaWFsb2dDb3VudENoYW5nZWQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KCk7XHJcblx0b3BlbkluZGV4OiBudW1iZXIgPSAxO1xyXG5cdHBsYXRmb3JtSWQ6IE9iamVjdCA9IGluamVjdChQTEFURk9STV9JRCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblx0XHRpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuXHRcdFx0XHRpZiAoa2V5Ym9hcmRFdmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcclxuXHRcdFx0XHRcdGxldCBsYXN0T3BlbkluZGV4OiBudW1iZXIgPSAwO1xyXG5cdFx0XHRcdFx0bGV0IGxhc3RPcGVuZWREaWFsb2dSZWY6IERpYWxvZ1JlZiB8IG51bGwgPSBudWxsO1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbZGlhbG9nUmVmLCBjZkRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lcl0gb2YgdGhpcy5kaWFsb2dzLmVudHJpZXMoKSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoY2ZEaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIub3BlbkluZGV4ID4gbGFzdE9wZW5JbmRleCkge1xyXG5cdFx0XHRcdFx0XHRcdGxhc3RPcGVuSW5kZXggPSBjZkRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5vcGVuSW5kZXg7XHJcblx0XHRcdFx0XHRcdFx0bGFzdE9wZW5lZERpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFxyXG5cdFx0XHRcdFx0aWYgKGxhc3RPcGVuZWREaWFsb2dSZWYgIT09IG51bGwgJiYgbGFzdE9wZW5lZERpYWxvZ1JlZi5kaWFsb2dDb25maWcgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGxhc3RPcGVuZWREaWFsb2dSZWYuZGlhbG9nQ29uZmlnLmlnbm9yZUtleVVwIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHJcblx0XHRcdFx0XHRcdGxhc3RPcGVuZWREaWFsb2dSZWYuY2xvc2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5kaWFsb2dDb3VudENoYW5nZWQuc3Vic2NyaWJlKChzaXplOiBudW1iZXIpID0+IHtcclxuXHRcdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgdGhpcy5vcGVuZWREaWFsb2dCb2R5Q2xhc3MgIT09IG51bGwpIHtcclxuXHRcdFx0XHRpZiAoc2l6ZSA9PT0gMCkge1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMub3BlbmVkRGlhbG9nQm9keUNsYXNzKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKHRoaXMub3BlbmVkRGlhbG9nQm9keUNsYXNzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0gXHJcblxyXG5cdGFzeW5jIG9wZW5QcmVkZWZpbmVkPFQgPSBhbnk+KG5hbWU6IHN0cmluZywgZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9KTogUHJvbWlzZTxEaWFsb2dSZWY8VD4+IHtcclxuXHRcdGlmICh0aGlzLnByZWRlZmluZWREaWFsb2dzW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhyb3cgRXJyb3IoJ0RpYWxvZyB3aXRoIG5hbWUgXCInICsgbmFtZSArICdcIiBub3QgZm91bmQhJyk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwcmVkZWZpbmVkRGlhbG9nID0gdGhpcy5wcmVkZWZpbmVkRGlhbG9nc1tuYW1lXTtcclxuXHRcdGlmICh0eXBlb2YgcHJlZGVmaW5lZERpYWxvZyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcGVuSW1wb3J0KHByZWRlZmluZWREaWFsb2csIGRpYWxvZ0NvbmZpZ3VyYXRpb24pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMub3BlbkltcG9ydChwcmVkZWZpbmVkRGlhbG9nLmNvbXBvbmVudCwgey4uLnByZWRlZmluZWREaWFsb2cuY29uZmlndXJhdGlvbiwgLi4uZGlhbG9nQ29uZmlndXJhdGlvbn0pO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgb3BlbkltcG9ydDxUID0gYW55Pihjb21wb25lbnQ6ICgpID0+IFByb21pc2U8VHlwZTxhbnk+PiwgZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9KTogUHJvbWlzZTxEaWFsb2dSZWY8VD4+IHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHRyZXNvbHZlKHRoaXMub3BlbjxUPihhd2FpdCBjb21wb25lbnQoKSwgZGlhbG9nQ29uZmlndXJhdGlvbikpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuICAgIG9wZW48VCA9IGFueT4oY29tcG9uZW50OiBUeXBlPGFueT4sIGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSk6IERpYWxvZ1JlZjxUPiB7XHJcblxyXG5cdFx0Zm9yIChsZXQgZGlhbG9nIG9mIHRoaXMuZGlhbG9ncy5lbnRyaWVzKCkpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdChkaWFsb2dDb25maWd1cmF0aW9uLnNpbmdsZSAmJiBkaWFsb2dbMV0uY29tcG9uZW50UmVmLmNvbXBvbmVudFR5cGUubmFtZSA9PT0gY29tcG9uZW50Lm5hbWUpIHx8XHJcblx0XHRcdFx0KGRpYWxvZ1swXS5kaWFsb2dDb25maWcgIT09IG51bGwgJiYgZGlhbG9nWzBdLmRpYWxvZ0NvbmZpZy5zaW5nbGUgJiYgZGlhbG9nWzFdLmNvbXBvbmVudFJlZi5jb21wb25lbnRUeXBlLm5hbWUgPT09IGNvbXBvbmVudC5uYW1lKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXR1cm4gZGlhbG9nWzBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0gdGhpcy5jcmVhdGVEaWFsb2dDb25maWcoZGlhbG9nQ29uZmlndXJhdGlvbik7XHJcblxyXG5cdFx0aWYgKCFkaWFsb2dDb25maWcua2VlcEFjdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG5cdFx0XHRcdGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogRGlhbG9nUmVmPFQ+ID0gdGhpcy5hcHBlbmRUb0JvZHkoY29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xyXG5cdFx0ZGlhbG9nUmVmLm1lc3NhZ2VTZXJ2aWNlID0gdGhpcy5tZXNzYWdlU2VydmljZTtcclxuXHRcdGRpYWxvZ1JlZi5kaWFsb2dDb25maWcgPSBkaWFsb2dDb25maWc7XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VBbmRTdG9yZVRpdGxlKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG5cdGNoYW5nZUFuZFN0b3JlVGl0bGUoZGlhbG9nUmVmOiBEaWFsb2dSZWYpOiB2b2lkIHtcclxuXHRcdGRpYWxvZ1JlZi5zYXZlZFRpdGxlID0gdGhpcy50aXRsZS5nZXRUaXRsZSgpO1xyXG5cdFx0aWYgKGRpYWxvZ1JlZi5kaWFsb2dDb25maWcgIT09IG51bGwgJiYgZGlhbG9nUmVmLmRpYWxvZ0NvbmZpZy50aXRsZSAhPT0gbnVsbCkge1xyXG5cdFx0XHR0aGlzLnRpdGxlLnNldFRpdGxlKGRpYWxvZ1JlZi5kaWFsb2dDb25maWcudGl0bGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbiAgICBjcmVhdGVEaWFsb2dDb25maWcoZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbik6IERpYWxvZ0NvbmZpZyB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSBuZXcgRGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbmZpZ3VyYXRpb24uc2hvd0Nsb3NlSWNvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5zaG93Q2xvc2VJY29uID0gZGlhbG9nQ29uZmlndXJhdGlvbi5zaG93Q2xvc2VJY29uO1xyXG4gICAgICAgIH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmJlZm9yZUNsb3NlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmJlZm9yZUNsb3NlID0gZGlhbG9nQ29uZmlndXJhdGlvbi5iZWZvcmVDbG9zZTtcclxuICAgICAgICB9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlndXJhdGlvbi5pZ25vcmVLZXlVcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5pZ25vcmVLZXlVcCA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uaWdub3JlS2V5VXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YSA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbmZpZ3VyYXRpb24ubm9QYWRkaW5nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLm5vUGFkZGluZyA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24ubm9QYWRkaW5nO1xyXG4gICAgICAgIH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmtlZXBBY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmtlZXBBY3RpdmVFbGVtZW50ID0gZGlhbG9nQ29uZmlndXJhdGlvbi5rZWVwQWN0aXZlRWxlbWVudDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmNvbnRhaW5lckNsYXNzZXMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuY29udGFpbmVyQ2xhc3NlcyA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uY29udGFpbmVyQ2xhc3NlcztcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmRpYWxvZ0NsYXNzZXMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRkaWFsb2dDb25maWcuZGlhbG9nQ2xhc3NlcyA9IGRpYWxvZ0NvbmZpZ3VyYXRpb24uZGlhbG9nQ2xhc3NlcztcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLnRpdGxlID0gZGlhbG9nQ29uZmlndXJhdGlvbi50aXRsZTtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmNvbnRlbnRFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLmNvbnRlbnRFbGVtZW50ID0gZGlhbG9nQ29uZmlndXJhdGlvbi5jb250ZW50RWxlbWVudDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLnNpbmdsZSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5zaW5nbGUgPSBkaWFsb2dDb25maWd1cmF0aW9uLnNpbmdsZTtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLndpZHRoICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0ZGlhbG9nQ29uZmlnLndpZHRoID0gZGlhbG9nQ29uZmlndXJhdGlvbi53aWR0aDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWd1cmF0aW9uLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGRpYWxvZ0NvbmZpZy5oZWlnaHQgPSBkaWFsb2dDb25maWd1cmF0aW9uLmhlaWdodDtcclxuXHRcdH1cclxuICAgICAgICByZXR1cm4gZGlhbG9nQ29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZFRvQm9keShjb21wb25lbnQ6IFR5cGU8YW55PiwgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcpOiBEaWFsb2dSZWYge1xyXG5cclxuXHRcdGNvbnN0IGFwcFJlZjogQXBwbGljYXRpb25SZWYgPSB0aGlzLmluamVjdG9yLmdldChBcHBsaWNhdGlvblJlZik7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBJTkpFQ1RJT04gVE9LRU5TXHJcbiAgICAgICAgY29uc3QgdG9rZW5zOiBXZWFrTWFwPGFueSwgYW55PiA9IG5ldyBXZWFrTWFwKCk7XHJcblxyXG4gICAgICAgIC8vIENSRUFURSBESUFMT0cgQ09ORklHVVJBVElPTiBDTEFTU1xyXG4gICAgICAgIHRva2Vucy5zZXQoRGlhbG9nQ29uZmlnLCBkaWFsb2dDb25maWcpO1xyXG5cclxuICAgICAgICAvLyBDUkVBVEUgRElBTE9HIFJFRkVSRU5DRSBDTEFTU1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogRGlhbG9nUmVmID0gbmV3IERpYWxvZ1JlZigpO1xyXG4gICAgICAgIHRva2Vucy5zZXQoRGlhbG9nUmVmLCBkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICAvLyBMSVNURU4gT04gRElBTE9HIENMT1NFXHJcbiAgICAgICAgY29uc3QgY2xvc2VTdWI6IFN1YnNjcmlwdGlvbiA9IGRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbUJvZHkoZGlhbG9nUmVmKTtcclxuICAgICAgICAgICAgY2xvc2VTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ1JFQVRFIENPTVBPTkVOVCBSRUZcclxuICAgICAgICBjb25zdCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xyXG5cdFx0XHRlbnZpcm9ubWVudEluamVjdG9yOiBhcHBSZWYuaW5qZWN0b3IsXHJcblx0XHRcdGVsZW1lbnRJbmplY3RvcjogbmV3IERpYWxvZ0luamVjdG9yKHRoaXMuaW5qZWN0b3IsIHRva2VucylcclxuXHRcdH0pO1xyXG5cclxuICAgICAgICAvLyBBVFRBQ0ggVklFVyBUTyBBTkdVTEFSXHJcbiAgICAgICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICAgICAgLy8gQ1JFQVRFIERJQUxPRyBDT05UQUlORVIgRUxFTUVOVFxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBkaWFsb2dDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnY2YtZGlhbG9nLWNvbnRhaW5lcicpO1xyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy5jb250YWluZXJDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0ZGlhbG9nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoLi4uZGlhbG9nQ29uZmlnLmNvbnRhaW5lckNsYXNzZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFQUEVORCBET00gRUxFTUVOVCBUTyBESUFMT0dcclxuXHRcdGNvbnN0IGNoaWxkRG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcclxuXHRcdGNoaWxkRG9tRWxlbS5jbGFzc0xpc3QuYWRkKCdjZi1kaWFsb2cnKTtcclxuXHRcdFxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy53aWR0aCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjaGlsZERvbUVsZW0uc3R5bGUud2lkdGggPSBkaWFsb2dDb25maWcud2lkdGg7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlhbG9nQ29uZmlnLmhlaWdodCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjaGlsZERvbUVsZW0uc3R5bGUuaGVpZ2h0ID0gZGlhbG9nQ29uZmlnLmhlaWdodDtcclxuXHRcdH1cclxuXHRcdGlmIChkaWFsb2dDb25maWcubm9QYWRkaW5nKSB7XHJcbiAgICAgICAgICAgIGNoaWxkRG9tRWxlbS5jbGFzc0xpc3QuYWRkKCduby1wYWRkaW5nJyk7XHJcbiAgICAgICAgfVxyXG5cdFx0aWYgKGRpYWxvZ0NvbmZpZy5kaWFsb2dDbGFzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLmNsYXNzTGlzdC5hZGQoLi4uZGlhbG9nQ29uZmlnLmRpYWxvZ0NsYXNzZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChkaWFsb2dDb25maWcuY29udGVudEVsZW1lbnQgIT09IG51bGwpIHtcclxuXHRcdFx0Y2hpbGREb21FbGVtLmFwcGVuZENoaWxkKGRpYWxvZ0NvbmZpZy5jb250ZW50RWxlbWVudCk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGlhbG9nQ29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkRG9tRWxlbSk7XHJcblxyXG4gICAgICAgIC8vIENMT1NFQUJMRT8gQVBQRU5EIEJVVFRPTlxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWcuc2hvd0Nsb3NlSWNvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9zZUVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIGNsb3NlRWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLlsnY2YtZGlhbG9nLWNsb3NlJywgJ3JlbWl4aWNvbicsICdjbG9zZS1saW5lJ10pO1xyXG4gICAgICAgICAgICBjbG9zZUVsZW1lbnQub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjaGlsZERvbUVsZW0uYXBwZW5kQ2hpbGQoY2xvc2VFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFQUEVORCBESUFMT0cgQ09OVEFJTkVSIFRPIEJPRFlcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpYWxvZ0NvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9ncy5zZXQoZGlhbG9nUmVmLCB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZixcclxuICAgICAgICAgICAgY29udGFpbmVyOiBkaWFsb2dDb250YWluZXIsXHJcblx0XHRcdG9wZW5JbmRleDogdGhpcy5vcGVuSW5kZXggXHJcbiAgICAgICAgfSk7XHJcblx0XHR0aGlzLmRpYWxvZ0NvdW50Q2hhbmdlZC5uZXh0KHRoaXMuZGlhbG9ncy5zaXplKTtcclxuXHJcblx0XHR0aGlzLm9wZW5JbmRleCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyb21Cb2R5KGRpYWxvZ1JlZjogRGlhbG9nUmVmKTogdm9pZCB7XHJcblxyXG5cdFx0Y29uc3QgYXBwUmVmOiBBcHBsaWNhdGlvblJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uUmVmKTtcclxuXHJcbiAgICAgICAgaWYgKCFkaWFsb2dSZWYgfHwgIXRoaXMuZGlhbG9ncy5oYXMoZGlhbG9nUmVmKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lcjogRGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyIHwgdW5kZWZpbmVkID0gdGhpcy5kaWFsb2dzLmdldChkaWFsb2dSZWYpO1xyXG4gICAgICAgIGlmIChkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblx0XHRcclxuICAgICAgICBhcHBSZWYuZGV0YWNoVmlldyhkaWFsb2dDb21wb25lbnRSZWZDb250YWluZXIuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICAgICAgaWYgKGRpYWxvZ0NvbXBvbmVudFJlZkNvbnRhaW5lci5jb250YWluZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLmNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlhbG9nQ29tcG9uZW50UmVmQ29udGFpbmVyLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dzLmRlbGV0ZShkaWFsb2dSZWYpO1xyXG5cdFx0dGhpcy5kaWFsb2dDb3VudENoYW5nZWQubmV4dCh0aGlzLmRpYWxvZ3Muc2l6ZSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZGlhbG9ncy5zaXplID09PSAwKSB7XHJcblx0XHRcdHRoaXMub3BlbkluZGV4ID0gMTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXN0b3JlIHRpdGxlXHJcblx0XHRpZiAodGhpcy5kaWFsb2dzLnNpemUgPT09IDApIHtcclxuXHRcdFx0dGhpcy50aXRsZS5zZXRUaXRsZShkaWFsb2dSZWYuc2F2ZWRUaXRsZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbGF0ZXN0T3BlbmVkRGlhbG9nUmVmOiBEaWFsb2dSZWYgfCBudWxsID0gbnVsbDtcclxuXHRcdFx0dGhpcy5kaWFsb2dzLmZvckVhY2goKF8sIGRpYWxvZ1JlZjogRGlhbG9nUmVmKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxhdGVzdE9wZW5lZERpYWxvZ1JlZiA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLm9wZW5lZCA8IGRpYWxvZ1JlZi5vcGVuZWQpIHtcclxuXHRcdFx0XHRcdFx0bGF0ZXN0T3BlbmVkRGlhbG9nUmVmID0gZGlhbG9nUmVmO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChsYXRlc3RPcGVuZWREaWFsb2dSZWYgIT09IG51bGwpIHtcclxuXHRcdFx0XHQvL3RoaXMudGl0bGUuc2V0VGl0bGUobGF0ZXN0T3BlbmVkRGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudGl0bGUuc2V0VGl0bGUoZGlhbG9nUmVmLnNhdmVkVGl0bGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG5cdGNvbmZpcm0oXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdGNvbnN0IHByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbjogQ29uZmlybUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPSB0aGlzLnByZWRlZmluZWRDb25maXJtQ29uZmlndXJhdGlvbnNbY29uZmlndXJhdGlvbl07XHJcblx0XHRcdGlmIChwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBjb25maXJtIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kIGZvcjogJyArIGNvbmZpZ3VyYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbmZpZ3VyYXRpb24gPSBwcmVkZWZpbmVkQ29uZmlybUNvbmZpZ3VyYXRpb247XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHR0aGlzLm9wZW4oY29tcG9uZW50LCB7XHJcblx0XHRcdFx0Li4uZGlhbG9nQ29uZmlndXJhdGlvbixcclxuXHRcdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRpZ25vcmVLZXlVcDogdHJ1ZSxcclxuXHRcdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZVxyXG5cdFx0XHR9KS5vbkNsb3NlLnBpcGUoZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKS5zdWJzY3JpYmUoKGFjY2VwdGVkOiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdGVkKSB7XHJcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZWplY3QodHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgICBhc3luYyBjb25maXJtQXN5bmMoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybShjb25maWd1cmF0aW9uLCBkaWFsb2dDb25maWd1cmF0aW9uLCBjb21wb25lbnQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cdFxyXG5cdGNvbmZpcm1BY2NlcHQoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiByZXNvbHZlKHRydWUpKS5jYXRjaCgoKSA9PiB7fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0XHJcblx0Y29uZmlybURlY2xpbmUoXHJcblx0XHRjb25maWd1cmF0aW9uOiBDb25maXJtQ29uZmlndXJhdGlvbiB8IHN0cmluZyxcclxuXHRcdGRpYWxvZ0NvbmZpZ3VyYXRpb246IERpYWxvZ0NvbmZpZ3VyYXRpb24gPSB7fSxcclxuXHRcdGNvbXBvbmVudDogVHlwZTxhbnk+XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuXHRcdFx0dGhpcy5jb25maXJtKGNvbmZpZ3VyYXRpb24sIGRpYWxvZ0NvbmZpZ3VyYXRpb24sIGNvbXBvbmVudCkudGhlbigoKSA9PiB7fSkuY2F0Y2goKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dMb2FkaW5nKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTG9hZGluZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRzaG93Q2xvc2VJY29uOiBmYWxzZSxcclxuXHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRjb25maWd1cmF0aW9uXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2hvd0FsZXJ0KFxyXG5cdFx0Y29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlndXJhdGlvbjogRGlhbG9nQ29uZmlndXJhdGlvbiA9IHt9LFxyXG5cdFx0Y29tcG9uZW50OiBUeXBlPGFueT5cclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHRcdGlmICh0eXBlb2YgY29uZmlndXJhdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Y29uc3QgcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjogQWxlcnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5wcmVkZWZpbmVkQWxlcnRDb25maWd1cmF0aW9uc1tjb25maWd1cmF0aW9uXTtcclxuXHRcdFx0aWYgKHByZWRlZmluZWRBbGVydENvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlZGVmaW5lZCBhbGVydCBjb25maWd1cmF0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBjb25maWd1cmF0aW9uKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25maWd1cmF0aW9uID0gcHJlZGVmaW5lZEFsZXJ0Q29uZmlndXJhdGlvbjtcclxuXHRcdH1cclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHRcdC4uLmRpYWxvZ0NvbmZpZ3VyYXRpb24sXHJcblx0XHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0aWdub3JlS2V5VXA6IHRydWUsXHJcblx0XHRcdFx0c2hvd0Nsb3NlSWNvbjogZmFsc2VcclxuXHRcdFx0fSkub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRcdHJlc29sdmUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNob3dNb2RhbFdpdGhCdXR0b25zKFxyXG5cdFx0Y29uZmlndXJhdGlvbjogTW9kYWxXaXRoQnV0dG9uc0NvbmZpZ3VyYXRpb24sXHJcblx0XHRkaWFsb2dDb25maWd1cmF0aW9uOiBEaWFsb2dDb25maWd1cmF0aW9uID0ge30sXHJcblx0XHRjb21wb25lbnQ6IFR5cGU8YW55PlxyXG5cdCk6IERpYWxvZ1JlZiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuKGNvbXBvbmVudCwge1xyXG5cdFx0XHQuLi5kaWFsb2dDb25maWd1cmF0aW9uLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0Y29uZmlndXJhdGlvblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { inject, Injectable } from "@angular/core";
|
|
2
|
+
import { of, tap } from "rxjs";
|
|
3
|
+
import { InterceptorsService } from "./interceptors.service";
|
|
4
|
+
import { InterceptorType } from "../interfaces";
|
|
5
|
+
import { ApiService } from "./api.service";
|
|
6
|
+
import { GOOGLE_MAPS_API_KEY } from "../tokens";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class GoogleMapsService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.apiService = inject(ApiService);
|
|
11
|
+
this.interceptorsService = inject(InterceptorsService);
|
|
12
|
+
this.googleMapsApiKey = inject(GOOGLE_MAPS_API_KEY);
|
|
13
|
+
this.mapsJsLoaded = false;
|
|
14
|
+
}
|
|
15
|
+
load() {
|
|
16
|
+
if (this.googleMapsApiKey === null) {
|
|
17
|
+
throw new Error('Google maps api key is not set!');
|
|
18
|
+
}
|
|
19
|
+
if (this.mapsJsLoaded) {
|
|
20
|
+
return of(true);
|
|
21
|
+
}
|
|
22
|
+
this.interceptorsService.skip = [InterceptorType.TOKEN];
|
|
23
|
+
return this.apiService.httpClient.jsonp(`https://maps.googleapis.com/maps/api/js?key=${this.googleMapsApiKey}`, 'callback').pipe(tap(() => {
|
|
24
|
+
this.interceptorsService.skip = [];
|
|
25
|
+
this.mapsJsLoaded = true;
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
createMaps(element = null, config = {}) {
|
|
29
|
+
return this.load().pipe(tap(() => {
|
|
30
|
+
new window.google.maps.Map(element, config);
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GoogleMapsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
34
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GoogleMapsService, providedIn: 'root' }); }
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GoogleMapsService, decorators: [{
|
|
37
|
+
type: Injectable,
|
|
38
|
+
args: [{
|
|
39
|
+
providedIn: 'root'
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLm1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvZGVmb3hjb3JlL3NyYy9saWIvc2VydmljZXMvZ29vZ2xlLm1hcHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUtoRCxNQUFNLE9BQU8saUJBQWlCO0lBSDlCO1FBS0MsZUFBVSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkUscUJBQWdCLEdBQWtCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTlELGlCQUFZLEdBQVksS0FBSyxDQUFDO0tBc0I5QjtJQXBCQSxJQUFJO1FBQ0gsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsK0NBQStDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3pJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQTBCLElBQUksRUFBRSxTQUFjLEVBQUU7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSyxNQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQTFCVyxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZqQixNQUFNOzs0RkFFTixpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEludGVyY2VwdG9yc1NlcnZpY2UgfSBmcm9tIFwiLi9pbnRlcmNlcHRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJbnRlcmNlcHRvclR5cGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSBcIi4vYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgR09PR0xFX01BUFNfQVBJX0tFWSB9IGZyb20gXCIuLi90b2tlbnNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcHNTZXJ2aWNlIHtcclxuXHJcblx0YXBpU2VydmljZTogQXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcclxuXHRpbnRlcmNlcHRvcnNTZXJ2aWNlOiBJbnRlcmNlcHRvcnNTZXJ2aWNlID0gaW5qZWN0KEludGVyY2VwdG9yc1NlcnZpY2UpO1xyXG5cdGdvb2dsZU1hcHNBcGlLZXk6IHN0cmluZyB8IG51bGwgPSBpbmplY3QoR09PR0xFX01BUFNfQVBJX0tFWSk7XHJcblxyXG5cdG1hcHNKc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRsb2FkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRpZiAodGhpcy5nb29nbGVNYXBzQXBpS2V5ID09PSBudWxsKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignR29vZ2xlIG1hcHMgYXBpIGtleSBpcyBub3Qgc2V0IScpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubWFwc0pzTG9hZGVkKSB7XHJcblx0XHRcdHJldHVybiBvZih0cnVlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuaW50ZXJjZXB0b3JzU2VydmljZS5za2lwID0gW0ludGVyY2VwdG9yVHlwZS5UT0tFTl07XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmh0dHBDbGllbnQuanNvbnAoYGh0dHBzOi8vbWFwcy5nb29nbGVhcGlzLmNvbS9tYXBzL2FwaS9qcz9rZXk9JHt0aGlzLmdvb2dsZU1hcHNBcGlLZXl9YCwgJ2NhbGxiYWNrJykucGlwZSh0YXAoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmludGVyY2VwdG9yc1NlcnZpY2Uuc2tpcCA9IFtdO1xyXG5cdFx0XHR0aGlzLm1hcHNKc0xvYWRlZCA9IHRydWU7XHJcblx0XHR9KSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVNYXBzKGVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbCwgY29uZmlnOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2FkKCkucGlwZSh0YXAoKCkgPT4ge1xyXG5cdFx0XHRuZXcgKHdpbmRvdyBhcyBhbnkpLmdvb2dsZS5tYXBzLk1hcChlbGVtZW50LCBjb25maWcpO1xyXG5cdFx0fSkpO1xyXG5cdH1cclxuXHJcbn0iXX0=
|
|
@@ -4,4 +4,5 @@ export * from './api.service';
|
|
|
4
4
|
export * from './logger.service';
|
|
5
5
|
export * from './cookie.service';
|
|
6
6
|
export * from './token.service';
|
|
7
|
-
|
|
7
|
+
export * from './google.maps.service';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcGkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2VyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Nvb2tpZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi90b2tlbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9nb29nbGUubWFwcy5zZXJ2aWNlJztcclxuIl19
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { InjectionToken } from "@angular/core";
|
|
2
|
-
export const
|
|
2
|
+
export const PREDEFINED_DIALOGS = new InjectionToken('Predefined dialogs', {
|
|
3
3
|
factory: () => {
|
|
4
4
|
return {};
|
|
5
5
|
}
|
|
6
6
|
});
|
|
7
|
-
|
|
7
|
+
export const OPENED_DIALOG_BODY_CLASS = new InjectionToken('Opened dialog body class', {
|
|
8
|
+
factory: () => {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29kZWZveGNvcmUvc3JjL2xpYi90b2tlbnMvZGlhbG9nLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLElBQUksY0FBYyxDQUFDLG9CQUFvQixFQUFFO0lBQzFHLE9BQU8sRUFBRSxHQUFzQixFQUFFO1FBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFrQyxJQUFJLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtJQUNsSCxPQUFPLEVBQUUsR0FBa0IsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBQcmVkZWZpbmVkRGlhbG9ncyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgUFJFREVGSU5FRF9ESUFMT0dTOiBJbmplY3Rpb25Ub2tlbjxQcmVkZWZpbmVkRGlhbG9ncz4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1ByZWRlZmluZWQgZGlhbG9ncycsIHtcclxuICAgIGZhY3Rvcnk6ICgpOiBQcmVkZWZpbmVkRGlhbG9ncyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBjb25zdCBPUEVORURfRElBTE9HX0JPRFlfQ0xBU1M6IEluamVjdGlvblRva2VuPHN0cmluZyB8IG51bGw+ID0gbmV3IEluamVjdGlvblRva2VuKCdPcGVuZWQgZGlhbG9nIGJvZHkgY2xhc3MnLCB7XHJcbiAgICBmYWN0b3J5OiAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn0pO1xyXG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InjectionToken } from "@angular/core";
|
|
2
|
+
export const GOOGLE_MAPS_API_KEY = new InjectionToken('Google Maps Api Key', {
|
|
3
|
+
factory: () => {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
});
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLm1hcHMudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3Rva2Vucy9nb29nbGUubWFwcy50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFrQyxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtJQUN4RyxPQUFPLEVBQUUsR0FBa0IsRUFBRTtRQUN6QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IEdPT0dMRV9NQVBTX0FQSV9LRVk6IEluamVjdGlvblRva2VuPHN0cmluZyB8IG51bGw+ID0gbmV3IEluamVjdGlvblRva2VuKCdHb29nbGUgTWFwcyBBcGkgS2V5Jywge1xyXG4gICAgZmFjdG9yeTogKCk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59KTtcclxuIl19
|
|
@@ -3,4 +3,5 @@ export * from './dialog.token';
|
|
|
3
3
|
export * from './confirm.token';
|
|
4
4
|
export * from './message.token';
|
|
5
5
|
export * from './loglevel.token';
|
|
6
|
-
|
|
6
|
+
export * from './google.maps.token';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2RlZm94Y29yZS9zcmMvbGliL3Rva2Vucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FsZXJ0LnRva2VuJztcclxuZXhwb3J0ICogZnJvbSAnLi9kaWFsb2cudG9rZW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbmZpcm0udG9rZW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2UudG9rZW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xvZ2xldmVsLnRva2VuJztcclxuZXhwb3J0ICogZnJvbSAnLi9nb29nbGUubWFwcy50b2tlbic7XHJcbiJdfQ==
|