@techextensor/tab-sdk 0.0.40 → 0.0.42
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/techextensor-tab-sdk.mjs +770 -48
- package/fesm2022/techextensor-tab-sdk.mjs.map +1 -1
- package/lib/interface/state.interface.d.ts +151 -0
- package/lib/model/component-state.model.d.ts +63 -0
- package/lib/model/query-state.model.d.ts +37 -0
- package/lib/model/screen-state.model.d.ts +56 -0
- package/lib/model/script-state.model.d.ts +21 -0
- package/lib/state/state.service.d.ts +101 -0
- package/lib/tab-sdk.service.d.ts +4 -0
- package/lib/ui/ui.service.d.ts +5 -5
- package/lib/workflow/workflow.service.d.ts +8 -0
- package/package.json +5 -7
- package/public-api.d.ts +1 -0
- package/esm2022/lib/app/analytics.service.mjs +0 -51
- package/esm2022/lib/app/app.service.mjs +0 -175
- package/esm2022/lib/app/file.service.mjs +0 -84
- package/esm2022/lib/app/release.service.mjs +0 -38
- package/esm2022/lib/app/report.service.mjs +0 -48
- package/esm2022/lib/app/translator.service.mjs +0 -77
- package/esm2022/lib/auth/auth.service.mjs +0 -95
- package/esm2022/lib/crud/crud.service.mjs +0 -191
- package/esm2022/lib/enum/store.enum.mjs +0 -6
- package/esm2022/lib/enum/ui.enum.mjs +0 -13
- package/esm2022/lib/http/http.service.mjs +0 -58
- package/esm2022/lib/interface/http.interface.mjs +0 -2
- package/esm2022/lib/interface/ui.interface.mjs +0 -2
- package/esm2022/lib/store/store.service.mjs +0 -829
- package/esm2022/lib/tab-sdk.service.mjs +0 -84
- package/esm2022/lib/ui/form.service.mjs +0 -79
- package/esm2022/lib/ui/ui.service.mjs +0 -344
- package/esm2022/lib/util/util.service.mjs +0 -54
- package/esm2022/lib/workflow/transition.service.mjs +0 -40
- package/esm2022/public-api.mjs +0 -9
- package/esm2022/techextensor-tab-sdk.mjs +0 -5
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { MetadataHelper } from '@techextensor/tab-core-utility';
|
|
3
|
-
import { UiService } from './ui/ui.service';
|
|
4
|
-
import { AuthUtilService } from './auth/auth.service';
|
|
5
|
-
import { FormService } from './ui/form.service';
|
|
6
|
-
import { TransitionService } from './workflow/transition.service';
|
|
7
|
-
import { AppService } from './app/app.service';
|
|
8
|
-
import { FileService } from './app/file.service';
|
|
9
|
-
import { ReportService } from './app/report.service';
|
|
10
|
-
import { ReleaseService } from './app/release.service';
|
|
11
|
-
import { AnalyticsService } from './app/analytics.service';
|
|
12
|
-
import { TranslatorService } from './app/translator.service';
|
|
13
|
-
import { CrudService } from './crud/crud.service';
|
|
14
|
-
import { HttpService } from './http/http.service';
|
|
15
|
-
import { StoreService } from './store/store.service';
|
|
16
|
-
import { UtilService } from './util/util.service';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
export class TabSdk {
|
|
19
|
-
static app;
|
|
20
|
-
static auth;
|
|
21
|
-
static ui;
|
|
22
|
-
static form;
|
|
23
|
-
static transition;
|
|
24
|
-
static metadataUtils;
|
|
25
|
-
static file;
|
|
26
|
-
static report;
|
|
27
|
-
static release;
|
|
28
|
-
static analytics;
|
|
29
|
-
static translator;
|
|
30
|
-
static crud;
|
|
31
|
-
static http;
|
|
32
|
-
static store;
|
|
33
|
-
static util;
|
|
34
|
-
/**
|
|
35
|
-
* Initialize the SDK with necessary services
|
|
36
|
-
*/
|
|
37
|
-
static init(injector, context) {
|
|
38
|
-
// Expose to window for global access if needed
|
|
39
|
-
window.TabSdk = TabSdk;
|
|
40
|
-
// Initialize services
|
|
41
|
-
this.app = injector.get(AppService);
|
|
42
|
-
this.auth = injector.get(AuthUtilService);
|
|
43
|
-
this.ui = injector.get(UiService);
|
|
44
|
-
this.form = injector.get(FormService);
|
|
45
|
-
this.transition = injector.get(TransitionService);
|
|
46
|
-
this.metadataUtils = injector.get(MetadataHelper);
|
|
47
|
-
this.file = injector.get(FileService);
|
|
48
|
-
this.report = injector.get(ReportService);
|
|
49
|
-
this.release = injector.get(ReleaseService);
|
|
50
|
-
this.analytics = injector.get(AnalyticsService);
|
|
51
|
-
this.translator = injector.get(TranslatorService);
|
|
52
|
-
this.crud = injector.get(CrudService);
|
|
53
|
-
this.http = injector.get(HttpService);
|
|
54
|
-
this.store = injector.get(StoreService);
|
|
55
|
-
// Initialize util service with context
|
|
56
|
-
const utilService = injector.get(UtilService);
|
|
57
|
-
this.util = utilService.init(context);
|
|
58
|
-
// Freeze the global object to prevent modifications
|
|
59
|
-
Object.freeze(this);
|
|
60
|
-
Object.freeze(this.app);
|
|
61
|
-
Object.freeze(this.auth);
|
|
62
|
-
Object.freeze(this.ui);
|
|
63
|
-
Object.freeze(this.form);
|
|
64
|
-
Object.freeze(this.transition);
|
|
65
|
-
Object.freeze(this.file);
|
|
66
|
-
Object.freeze(this.report);
|
|
67
|
-
Object.freeze(this.release);
|
|
68
|
-
Object.freeze(this.analytics);
|
|
69
|
-
Object.freeze(this.translator);
|
|
70
|
-
Object.freeze(this.crud);
|
|
71
|
-
Object.freeze(this.http);
|
|
72
|
-
Object.freeze(this.store);
|
|
73
|
-
Object.freeze(this.util);
|
|
74
|
-
}
|
|
75
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabSdk, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
76
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabSdk, providedIn: 'root' });
|
|
77
|
-
}
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabSdk, decorators: [{
|
|
79
|
-
type: Injectable,
|
|
80
|
-
args: [{
|
|
81
|
-
providedIn: 'root'
|
|
82
|
-
}]
|
|
83
|
-
}] });
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXNkay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3RhYi1zZGsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtsRCxNQUFNLE9BQU8sTUFBTTtJQUNWLE1BQU0sQ0FBQyxHQUFHLENBQWE7SUFDdkIsTUFBTSxD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QUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0E5RFUsTUFBTTs0R0FBTixNQUFNLGNBRkwsTUFBTTs7NEZBRVAsTUFBTTtrQkFIbEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YUhlbHBlciB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IFVpU2VydmljZSB9IGZyb20gJy4vdWkvdWkuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhVdGlsU2VydmljZSB9IGZyb20gJy4vYXV0aC9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vdWkvZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNpdGlvblNlcnZpY2UgfSBmcm9tICcuL3dvcmtmbG93L3RyYW5zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuL2FwcC9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4vYXBwL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVsZWFzZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZWxlYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdG9yU2VydmljZSB9IGZyb20gJy4vYXBwL3RyYW5zbGF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9odHRwL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4vc3RvcmUvc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi91dGlsL3V0aWwuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJTZGsge1xyXG4gIHB1YmxpYyBzdGF0aWMgYXBwOiBBcHBTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgYXV0aDogQXV0aFV0aWxTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgdWk6IFVpU2VydmljZTtcclxuICBwdWJsaWMgc3RhdGljIGZvcm06IEZvcm1TZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyBtZXRhZGF0YVV0aWxzOiBNZXRhZGF0YUhlbHBlcjtcclxuICBwdWJsaWMgc3RhdGljIGZpbGU6IEZpbGVTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVwb3J0OiBSZXBvcnRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVsZWFzZTogUmVsZWFzZVNlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyBhbmFseXRpY3M6IEFuYWx5dGljc1NlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyB0cmFuc2xhdG9yOiBUcmFuc2xhdG9yU2VydmljZTtcclxuICBwdWJsaWMgc3RhdGljIGNydWQ6IENydWRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgaHR0cDogSHR0cFNlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyBzdG9yZTogU3RvcmVTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgdXRpbDogYW55O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgU0RLIHdpdGggbmVjZXNzYXJ5IHNlcnZpY2VzXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBpbml0KGluamVjdG9yOiBJbmplY3RvciwgY29udGV4dDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBFeHBvc2UgdG8gd2luZG93IGZvciBnbG9iYWwgYWNjZXNzIGlmIG5lZWRlZFxyXG4gICAgKHdpbmRvdyBhcyBhbnkpLlRhYlNkayA9IFRhYlNkaztcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHNlcnZpY2VzXHJcbiAgICB0aGlzLmFwcCA9IGluamVjdG9yLmdldChBcHBTZXJ2aWNlKTtcclxuICAgIHRoaXMuYXV0aCA9IGluamVjdG9yLmdldChBdXRoVXRpbFNlcnZpY2UpO1xyXG4gICAgdGhpcy51aSA9IGluamVjdG9yLmdldChVaVNlcnZpY2UpO1xyXG4gICAgdGhpcy5mb3JtID0gaW5qZWN0b3IuZ2V0KEZvcm1TZXJ2aWNlKTtcclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IGluamVjdG9yLmdldChUcmFuc2l0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLm1ldGFkYXRhVXRpbHMgPSBpbmplY3Rvci5nZXQoTWV0YWRhdGFIZWxwZXIpO1xyXG4gICAgdGhpcy5maWxlID0gaW5qZWN0b3IuZ2V0KEZpbGVTZXJ2aWNlKTtcclxuICAgIHRoaXMucmVwb3J0ID0gaW5qZWN0b3IuZ2V0KFJlcG9ydFNlcnZpY2UpO1xyXG4gICAgdGhpcy5yZWxlYXNlID0gaW5qZWN0b3IuZ2V0KFJlbGVhc2VTZXJ2aWNlKTtcclxuICAgIHRoaXMuYW5hbHl0aWNzID0gaW5qZWN0b3IuZ2V0KEFuYWx5dGljc1NlcnZpY2UpO1xyXG4gICAgdGhpcy50cmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0b3JTZXJ2aWNlKTtcclxuICAgIHRoaXMuY3J1ZCA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XHJcbiAgICB0aGlzLmh0dHAgPSBpbmplY3Rvci5nZXQoSHR0cFNlcnZpY2UpO1xyXG4gICAgdGhpcy5zdG9yZSA9IGluamVjdG9yLmdldChTdG9yZVNlcnZpY2UpO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgdXRpbCBzZXJ2aWNlIHdpdGggY29udGV4dFxyXG4gICAgY29uc3QgdXRpbFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVXRpbFNlcnZpY2UpO1xyXG4gICAgdGhpcy51dGlsID0gdXRpbFNlcnZpY2UuaW5pdChjb250ZXh0KTtcclxuXHJcbiAgICAvLyBGcmVlemUgdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBtb2RpZmljYXRpb25zXHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xyXG4gICAgXHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuYXBwKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hdXRoKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy51aSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuZm9ybSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNpdGlvbik7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuZmlsZSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMucmVwb3J0KTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZWxlYXNlKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hbmFseXRpY3MpO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLnRyYW5zbGF0b3IpO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNydWQpO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmh0dHApO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLnN0b3JlKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy51dGlsKTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable } from '@angular/core';
|
|
2
|
-
import { TabFormioService, TemplateHelper } from '@techextensor/tab-core-utility';
|
|
3
|
-
import { firstValueFrom } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class FormService {
|
|
6
|
-
_tabFormioService = inject(TabFormioService);
|
|
7
|
-
_templateHelper = inject(TemplateHelper);
|
|
8
|
-
/**
|
|
9
|
-
* Retrieves a screen by its ID.
|
|
10
|
-
*
|
|
11
|
-
* @param screenId The ID of the screen to retrieve.
|
|
12
|
-
* @param config Optional configuration object for the request.
|
|
13
|
-
* @returns A promise of the response from the server.
|
|
14
|
-
*/
|
|
15
|
-
async getScreen(screenId, config) {
|
|
16
|
-
const response = await firstValueFrom(this._tabFormioService.getScreen(screenId, config));
|
|
17
|
-
return response;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Retrieves the data for a screen by its ID.
|
|
21
|
-
*
|
|
22
|
-
* @param screenId The ID of the screen to retrieve the data for.
|
|
23
|
-
* @param requestPayload The request payload to send to the server.
|
|
24
|
-
* @returns A promise of the response from the server.
|
|
25
|
-
*/
|
|
26
|
-
async getScreenData(screenId, requestPayload) {
|
|
27
|
-
// Send the request to the server and get the response.
|
|
28
|
-
const response = await firstValueFrom(this._tabFormioService.getScreenData(screenId, requestPayload));
|
|
29
|
-
// Return the response from the server.
|
|
30
|
-
return response;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Processes a request using the provided request payload.
|
|
34
|
-
*
|
|
35
|
-
* @param requestPayload The payload to be processed.
|
|
36
|
-
* @returns A promise of the response from the server.
|
|
37
|
-
*/
|
|
38
|
-
async processRequest(requestPayload) {
|
|
39
|
-
// Send the request payload to the server and await the response.
|
|
40
|
-
const response = await firstValueFrom(this._tabFormioService.processRequest(requestPayload));
|
|
41
|
-
// Return the server's response.
|
|
42
|
-
return response;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Builds Form.io components for the specified app object ID and type.
|
|
46
|
-
*
|
|
47
|
-
* @param appObjectId The ID of the app object to build the components for.
|
|
48
|
-
* @param type The type of components to build.
|
|
49
|
-
* @returns A promise of the response from the server.
|
|
50
|
-
*/
|
|
51
|
-
async buildFormIOComponents(appObjectId, type) {
|
|
52
|
-
// Send the request to the server to build the components.
|
|
53
|
-
const response = await firstValueFrom(this._tabFormioService.buildFormIOComponents(appObjectId, type));
|
|
54
|
-
// Return the response from the server.
|
|
55
|
-
return response;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Parses a template using the provided request payload.
|
|
59
|
-
*
|
|
60
|
-
* @param requestPayload The payload containing the template to be parsed.
|
|
61
|
-
* @param onFailedParseOnServer If the parsing should be done on the server.
|
|
62
|
-
* @returns A promise of the response from the server.
|
|
63
|
-
*/
|
|
64
|
-
async parseTemplate(requestPayload, onFailedParseOnServer = false) {
|
|
65
|
-
// Send the request to the server to parse the template.
|
|
66
|
-
const response = await firstValueFrom(this._templateHelper.templateParseUniversal(requestPayload, onFailedParseOnServer));
|
|
67
|
-
// Return the response from the server.
|
|
68
|
-
return response;
|
|
69
|
-
}
|
|
70
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
71
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormService, providedIn: 'root' });
|
|
72
|
-
}
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormService, decorators: [{
|
|
74
|
-
type: Injectable,
|
|
75
|
-
args: [{
|
|
76
|
-
providedIn: 'root'
|
|
77
|
-
}]
|
|
78
|
-
}] });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3VpL2Zvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXFGLGdCQUFnQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGlCQUFpQixHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxRTs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBd0I7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxjQUFtQjtRQUNyRCx1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBcUM7UUFDdEQsaUVBQWlFO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUN4RCxDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUE0QjtRQUN6RSwwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQ2xFLENBQUM7UUFFRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBb0MsRUFBRSxxQkFBcUIsR0FBRyxLQUFLO1FBQ25GLHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsQ0FDckYsQ0FBQztRQUVGLHVDQUF1QztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5GUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCdWlsZEZvcm1Db21wb25lbnRUeXBlLCBDb21tb25BcGlSZXNwb25zZSwgR2V0U2NyZWVuQ29uZmlnLCBQcm9jZXNzUmVxdWVzdFBheWxvYWQsIFRhYkZvcm1pb1NlcnZpY2UsIFRlbXBsYXRlSGVscGVyLCBUZW1wbGF0ZVBhcnNlUGF5bG9hZCB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1TZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYkZvcm1pb1NlcnZpY2U6IFRhYkZvcm1pb1NlcnZpY2UgPSBpbmplY3QoVGFiRm9ybWlvU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZW1wbGF0ZUhlbHBlcjogVGVtcGxhdGVIZWxwZXIgPSBpbmplY3QoVGVtcGxhdGVIZWxwZXIpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGEgc2NyZWVuIGJ5IGl0cyBJRC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2NyZWVuSWQgVGhlIElEIG9mIHRoZSBzY3JlZW4gdG8gcmV0cmlldmUuXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgcmVxdWVzdC5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRTY3JlZW4oc2NyZWVuSWQ6IHN0cmluZywgY29uZmlnPzogR2V0U2NyZWVuQ29uZmlnKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuX3RhYkZvcm1pb1NlcnZpY2UuZ2V0U2NyZWVuKHNjcmVlbklkLCBjb25maWcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRhdGEgZm9yIGEgc2NyZWVuIGJ5IGl0cyBJRC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2NyZWVuSWQgVGhlIElEIG9mIHRoZSBzY3JlZW4gdG8gcmV0cmlldmUgdGhlIGRhdGEgZm9yLlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSByZXF1ZXN0IHBheWxvYWQgdG8gc2VuZCB0byB0aGUgc2VydmVyLlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldFNjcmVlbkRhdGEoc2NyZWVuSWQ6IHN0cmluZywgcmVxdWVzdFBheWxvYWQ6IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcclxuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIGdldCB0aGUgcmVzcG9uc2UuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5nZXRTY3JlZW5EYXRhKHNjcmVlbklkLCByZXF1ZXN0UGF5bG9hZClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSByZXF1ZXN0IHVzaW5nIHRoZSBwcm92aWRlZCByZXF1ZXN0IHBheWxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZC5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZDogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgICAgIC8vIFNlbmQgdGhlIHJlcXVlc3QgcGF5bG9hZCB0byB0aGUgc2VydmVyIGFuZCBhd2FpdCB0aGUgcmVzcG9uc2UuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBGb3JtLmlvIGNvbXBvbmVudHMgZm9yIHRoZSBzcGVjaWZpZWQgYXBwIG9iamVjdCBJRCBhbmQgdHlwZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXBwT2JqZWN0SWQgVGhlIElEIG9mIHRoZSBhcHAgb2JqZWN0IHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzIGZvci5cclxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGNvbXBvbmVudHMgdG8gYnVpbGQuXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYnVpbGRGb3JtSU9Db21wb25lbnRzKGFwcE9iamVjdElkOiBzdHJpbmcsIHR5cGU6IEJ1aWxkRm9ybUNvbXBvbmVudFR5cGUpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XHJcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzLlxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuX3RhYkZvcm1pb1NlcnZpY2UuYnVpbGRGb3JtSU9Db21wb25lbnRzKGFwcE9iamVjdElkLCB0eXBlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHRlbXBsYXRlIHVzaW5nIHRoZSBwcm92aWRlZCByZXF1ZXN0IHBheWxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIHRvIGJlIHBhcnNlZC5cclxuICAgICAqIEBwYXJhbSBvbkZhaWxlZFBhcnNlT25TZXJ2ZXIgSWYgdGhlIHBhcnNpbmcgc2hvdWxkIGJlIGRvbmUgb24gdGhlIHNlcnZlci5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXJzZVRlbXBsYXRlKHJlcXVlc3RQYXlsb2FkOiBUZW1wbGF0ZVBhcnNlUGF5bG9hZCwgb25GYWlsZWRQYXJzZU9uU2VydmVyID0gZmFsc2UpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XHJcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIHBhcnNlIHRoZSB0ZW1wbGF0ZS5cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZUhlbHBlci50ZW1wbGF0ZVBhcnNlVW5pdmVyc2FsKHJlcXVlc3RQYXlsb2FkLCBvbkZhaWxlZFBhcnNlT25TZXJ2ZXIpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG59Il19
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable } from '@angular/core';
|
|
2
|
-
import { NavigationType, ScreenDisplayMode } from '../enum/ui.enum';
|
|
3
|
-
import { TabSdk } from '../tab-sdk.service';
|
|
4
|
-
import { ConfirmationService, NotificationService, NotificationType } from '@techextensor/tab-core-utility';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class UiService {
|
|
7
|
-
_notificationService = inject(NotificationService);
|
|
8
|
-
_confirmationService = inject(ConfirmationService);
|
|
9
|
-
/**
|
|
10
|
-
* Open a screen with the given options. The mode determines how the screen is
|
|
11
|
-
* displayed.
|
|
12
|
-
*
|
|
13
|
-
* @param options The options for opening the screen.
|
|
14
|
-
*/
|
|
15
|
-
openScreen(options) {
|
|
16
|
-
const { mode, ...otherOptions } = options;
|
|
17
|
-
switch (mode) {
|
|
18
|
-
case ScreenDisplayMode.Sidebar:
|
|
19
|
-
this.showSidebar(otherOptions);
|
|
20
|
-
break;
|
|
21
|
-
case ScreenDisplayMode.Popup:
|
|
22
|
-
this.showDialog(otherOptions);
|
|
23
|
-
break;
|
|
24
|
-
case ScreenDisplayMode.SameTab:
|
|
25
|
-
this.navigateTo(otherOptions);
|
|
26
|
-
break;
|
|
27
|
-
case ScreenDisplayMode.NewTab:
|
|
28
|
-
this.openInNewTab(otherOptions);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Opens a screen in a sidebar.
|
|
34
|
-
*
|
|
35
|
-
* @param options The options for opening the sidebar.
|
|
36
|
-
*/
|
|
37
|
-
showSidebar(options) {
|
|
38
|
-
const otherConfiguration = {
|
|
39
|
-
...(options.title && { title: options.title }),
|
|
40
|
-
...(options.width && { width: options.width }),
|
|
41
|
-
...(options.height && { height: options.height }),
|
|
42
|
-
...(options.customClass && { customClass: options.customClass }),
|
|
43
|
-
...(options.refresher && { refresher: options.refresher }),
|
|
44
|
-
...(options.closer && { closer: options.closer })
|
|
45
|
-
};
|
|
46
|
-
TabSdk.util?.openScreen(ScreenDisplayMode.Sidebar, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Opens a screen in a popup dialog.
|
|
50
|
-
*
|
|
51
|
-
* @param options The options for opening the dialog.
|
|
52
|
-
*/
|
|
53
|
-
showDialog(options) {
|
|
54
|
-
const otherConfiguration = {
|
|
55
|
-
...(options.title && { title: options.title }),
|
|
56
|
-
...(options.width && { width: options.width }),
|
|
57
|
-
...(options.height && { height: options.height }),
|
|
58
|
-
...(options.customClass && { customClass: options.customClass }),
|
|
59
|
-
...(options.refresher && { refresher: options.refresher }),
|
|
60
|
-
...(options.closer && { closer: options.closer })
|
|
61
|
-
};
|
|
62
|
-
TabSdk.util?.openScreen(ScreenDisplayMode.Popup, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Navigates to a screen within the same tab.
|
|
66
|
-
*
|
|
67
|
-
* @param options - The options for navigation, including screenId and optional reqtokens.
|
|
68
|
-
*/
|
|
69
|
-
navigateTo(options) {
|
|
70
|
-
TabSdk.util?.openScreen(ScreenDisplayMode.SameTab, options.screenId, options.reqtokens || undefined);
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Navigates to a screen in a new tab.
|
|
74
|
-
*
|
|
75
|
-
* @param options The options for navigation, including screenId and optional reqtokens.
|
|
76
|
-
*/
|
|
77
|
-
openInNewTab(options) {
|
|
78
|
-
TabSdk.util?.openScreen(ScreenDisplayMode.NewTab, options.screenId, options.reqtokens || undefined);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Navigates to the specified URL.
|
|
82
|
-
*
|
|
83
|
-
* @param url - The URL to navigate to.
|
|
84
|
-
*/
|
|
85
|
-
navigateToUrl(params) {
|
|
86
|
-
TabSdk.util?.navigateTo({
|
|
87
|
-
...params,
|
|
88
|
-
type: NavigationType.NavigateToUrl
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Navigates to a specified subdomain using the provided options.
|
|
93
|
-
*
|
|
94
|
-
* @param options - The options for navigation, including subDomain, appCode, and url.
|
|
95
|
-
*/
|
|
96
|
-
navigateToSubdomain(options) {
|
|
97
|
-
TabSdk.util?.navigateTo({
|
|
98
|
-
...options,
|
|
99
|
-
type: NavigationType.NavigateToSubdomain
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Retrieves the active screen ID from the current URL.
|
|
104
|
-
*
|
|
105
|
-
* @returns The screen ID if present in the URL, otherwise undefined.
|
|
106
|
-
*/
|
|
107
|
-
getActiveUrlScreenId() {
|
|
108
|
-
// Split the URL pathname into parts using the '/' character as a delimiter
|
|
109
|
-
const urlParts = window?.location?.pathname?.split('/');
|
|
110
|
-
// Extract the screen ID part and remove any query parameters
|
|
111
|
-
const screenId = urlParts?.length > 1 ? urlParts?.[urlParts?.length - 1]?.split('?')[0] : undefined;
|
|
112
|
-
// Return the screen ID or undefined if not found
|
|
113
|
-
return screenId;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Retrieves the active redirect URL by combining the active screen ID and any query parameters.
|
|
117
|
-
*
|
|
118
|
-
* @returns The constructed redirect URL or undefined if no screen ID is present.
|
|
119
|
-
*/
|
|
120
|
-
getActiveRedirectUrl() {
|
|
121
|
-
// Get the active screen ID from the current URL
|
|
122
|
-
const screenId = this.getActiveUrlScreenId();
|
|
123
|
-
let redirectURL;
|
|
124
|
-
// Check if the current URL contains a screen ID
|
|
125
|
-
if (screenId) {
|
|
126
|
-
// Initialize the redirect URL with the screen ID
|
|
127
|
-
redirectURL = screenId;
|
|
128
|
-
// Parse the current URL's query parameters
|
|
129
|
-
const queryParams = new URLSearchParams(window.location.search);
|
|
130
|
-
// If there are query parameters, append them to the redirect URL
|
|
131
|
-
if (queryParams.toString()) {
|
|
132
|
-
redirectURL += `&${queryParams.toString()}`;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
// Return the constructed redirect URL or undefined
|
|
136
|
-
return redirectURL;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Show a notification to the user.
|
|
140
|
-
*
|
|
141
|
-
* @param options The options for the notification.
|
|
142
|
-
*/
|
|
143
|
-
notify(options) {
|
|
144
|
-
return this._notificationService.notify({
|
|
145
|
-
type: options.type,
|
|
146
|
-
message: TabSdk.translator.translate(options.message),
|
|
147
|
-
...(options?.title ? { title: TabSdk.translator.translate(options.title) } : {}),
|
|
148
|
-
...(options?.configuration ? { configuration: options.configuration } : {}),
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Displays a success notification to the user.
|
|
153
|
-
*
|
|
154
|
-
* @param options - The options for the notification, including message, title, and configuration.
|
|
155
|
-
*/
|
|
156
|
-
showSuccess(options) {
|
|
157
|
-
return this.notify({
|
|
158
|
-
...options,
|
|
159
|
-
type: NotificationType.Success,
|
|
160
|
-
title: options?.title ?? 'Success'
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Displays a warning notification to the user.
|
|
165
|
-
*
|
|
166
|
-
* @param options - The options for the notification, including message, title, and configuration.
|
|
167
|
-
*/
|
|
168
|
-
showWarning(options) {
|
|
169
|
-
return this.notify({
|
|
170
|
-
...options,
|
|
171
|
-
type: NotificationType.Warning,
|
|
172
|
-
title: options?.title ?? 'Warning'
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Displays an info notification to the user.
|
|
177
|
-
*
|
|
178
|
-
* @param options - The options for the notification, including message, title, and configuration.
|
|
179
|
-
*/
|
|
180
|
-
showInfo(options) {
|
|
181
|
-
return this.notify({
|
|
182
|
-
...options,
|
|
183
|
-
type: NotificationType.Info,
|
|
184
|
-
title: options?.title ?? 'Info'
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Displays an error notification to the user.
|
|
189
|
-
*
|
|
190
|
-
* @param options - The options for the notification, including message, title, and configuration.
|
|
191
|
-
*/
|
|
192
|
-
showError(options) {
|
|
193
|
-
return this.notify({
|
|
194
|
-
...options,
|
|
195
|
-
type: NotificationType.Error,
|
|
196
|
-
title: options?.title ?? 'Error'
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Clears a notification by ID.
|
|
201
|
-
*
|
|
202
|
-
* @param notificationId - The ID of the notification to clear.
|
|
203
|
-
* @returns The cleared notification, or null if the notification doesn't exist.
|
|
204
|
-
*/
|
|
205
|
-
clearNotification(notificationId) {
|
|
206
|
-
return this._notificationService.clearNotification(notificationId);
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Displays a confirmation dialog to the user and returns a promise that resolves
|
|
210
|
-
* to a boolean indicating whether the user confirmed the action.
|
|
211
|
-
*
|
|
212
|
-
* @param options - The options for the confirmation dialog, including title, message,
|
|
213
|
-
* confirmText, cancelText, and visibility of buttons.
|
|
214
|
-
* @returns A promise that resolves to true if the user confirms, false otherwise.
|
|
215
|
-
*/
|
|
216
|
-
confirm(options) {
|
|
217
|
-
return new Promise((resolve) => {
|
|
218
|
-
this._confirmationService.confirm(options)
|
|
219
|
-
?.subscribe((isConfirmed) => {
|
|
220
|
-
resolve(isConfirmed);
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Displays a confirmation dialog to the user with a title and message that indicates
|
|
226
|
-
* the user is about to delete an item. The confirmation dialog has a "Delete" and "Cancel"
|
|
227
|
-
* button.
|
|
228
|
-
*
|
|
229
|
-
* @param options - The options for the confirmation dialog, including the item name and
|
|
230
|
-
* optional message.
|
|
231
|
-
* @returns A promise that resolves to true if the user confirms, false otherwise.
|
|
232
|
-
*/
|
|
233
|
-
confirmDelete(options) {
|
|
234
|
-
return this.confirm({
|
|
235
|
-
title: options?.title ?? `Are you sure you want to delete this record`,
|
|
236
|
-
message: options?.message ?? `You are about to delete the selected record. Are you sure you want to proceed?`,
|
|
237
|
-
primaryOption: 'Delete',
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Displays a confirmation dialog to the user with a title and message that indicates
|
|
242
|
-
* the user is about to discard changes to an item. The confirmation dialog has a "Discard"
|
|
243
|
-
* and "Cancel" button.
|
|
244
|
-
*
|
|
245
|
-
* @param options - The options for the confirmation dialog, including the item name and
|
|
246
|
-
* optional message.
|
|
247
|
-
* @returns A promise that resolves to true if the user confirms, false otherwise.
|
|
248
|
-
*/
|
|
249
|
-
confirmDiscard(options) {
|
|
250
|
-
return this.confirm({
|
|
251
|
-
title: `Are you sure you want to discard your changes`,
|
|
252
|
-
message: options?.message ?? `You are about to discard your changes. Are you sure you want to proceed?`,
|
|
253
|
-
primaryOption: 'Discard',
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Closes the confirmation dialog.
|
|
258
|
-
*
|
|
259
|
-
* This method can be used to manually close the confirmation dialog.
|
|
260
|
-
*/
|
|
261
|
-
closeConfirmationDialog() {
|
|
262
|
-
// Close the confirmation dialog
|
|
263
|
-
this._confirmationService.closeDialog();
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Retrieves the confirmation emitter from the confirmation service.
|
|
267
|
-
*
|
|
268
|
-
* @returns The confirmation emitter used for emitting confirmation events.
|
|
269
|
-
*/
|
|
270
|
-
getConformationEmitter() {
|
|
271
|
-
return this._confirmationService.getConformationEmitter();
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Retrieves the dialog emitter from the confirmation service.
|
|
275
|
-
*
|
|
276
|
-
* The dialog emitter is an RxJS Subject that emits whenever a confirmation dialog is
|
|
277
|
-
* opened or closed. The value emitted is a boolean indicating whether a dialog is
|
|
278
|
-
* currently open.
|
|
279
|
-
*
|
|
280
|
-
* @returns The dialog emitter used for emitting confirmation dialog events.
|
|
281
|
-
*/
|
|
282
|
-
getDialogEmitter() {
|
|
283
|
-
return this._confirmationService.getDialogEmitter();
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Retrieves the remove emitter from the confirmation service.
|
|
287
|
-
*
|
|
288
|
-
* The remove emitter is an RxJS Subject that emits whenever a removal confirmation
|
|
289
|
-
* dialog is opened or closed. The value emitted is a boolean indicating whether a
|
|
290
|
-
* removal dialog is currently open.
|
|
291
|
-
*
|
|
292
|
-
* @returns The remove emitter used for emitting removal confirmation dialog events.
|
|
293
|
-
*/
|
|
294
|
-
getRemoveEmitter() {
|
|
295
|
-
return this._confirmationService.getRemoveEmitter();
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Copies the provided text to the clipboard and displays a success notification.
|
|
299
|
-
*
|
|
300
|
-
* @param text - The text to be copied to the clipboard.
|
|
301
|
-
*/
|
|
302
|
-
copyToClipboard(text) {
|
|
303
|
-
// Create a temporary input element to hold the text
|
|
304
|
-
const tempInput = document.createElement("input");
|
|
305
|
-
// Set the input's value to the text to be copied
|
|
306
|
-
tempInput.value = text;
|
|
307
|
-
// Append the temporary input to the document body
|
|
308
|
-
document.body.appendChild(tempInput);
|
|
309
|
-
// Select the text in the input element
|
|
310
|
-
tempInput.select();
|
|
311
|
-
// Execute the copy command
|
|
312
|
-
document.execCommand("copy");
|
|
313
|
-
// Remove the temporary input from the document body
|
|
314
|
-
document.body.removeChild(tempInput);
|
|
315
|
-
// Show a success notification
|
|
316
|
-
this.showSuccess({
|
|
317
|
-
message: "",
|
|
318
|
-
title: "Copied to clipboard!",
|
|
319
|
-
configuration: {
|
|
320
|
-
timeOut: 1000,
|
|
321
|
-
positionClass: 'toast-top-center',
|
|
322
|
-
easing: 'ease-in',
|
|
323
|
-
easeTime: 300,
|
|
324
|
-
extendedTimeOut: 2000,
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Copies the current URL to the clipboard and displays a success notification.
|
|
330
|
-
*/
|
|
331
|
-
copyCurrentUrlToClipboard() {
|
|
332
|
-
// Use the copyToClipboard method to copy the current window URL
|
|
333
|
-
this.copyToClipboard(window.location.href);
|
|
334
|
-
}
|
|
335
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
336
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UiService, providedIn: 'root' });
|
|
337
|
-
}
|
|
338
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UiService, decorators: [{
|
|
339
|
-
type: Injectable,
|
|
340
|
-
args: [{
|
|
341
|
-
providedIn: 'root'
|
|
342
|
-
}]
|
|
343
|
-
}] });
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFMUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxPQUEwQjtRQUNsQyxNQUFNLGtCQUFrQixHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pELEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BELENBQUM7UUFFRixNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FDbkIsaUJBQWlCLENBQUMsT0FBTyxFQUN6QixPQUFPLENBQUMsUUFBUSxFQUNoQixPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFDOUIsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUM5RSxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsT0FBMEI7UUFDakMsTUFBTSxrQkFBa0IsR0FBRztZQUN2QixHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwRCxDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQ25CLGlCQUFpQixDQUFDLEtBQUssRUFDdkIsT0FBTyxDQUFDLFFBQVEsRUFDaEIsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQzlCLE9BQU8sQ0FBQyxVQUFVLElBQUksU0FBUyxFQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDOUUsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUNuQixpQkFBaUIsQ0FBQyxPQUFPLEVBQ3pCLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsT0FBMEI7UUFDbkMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQ25CLGlCQUFpQixDQUFDLE1BQU0sRUFDeEIsT0FBTyxDQUFDLFFBQVEsRUFDaEIsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQ2pDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxNQUEyRDtRQUNyRSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUNwQixHQUFHLE1BQU07WUFDVCxJQUFJLEVBQUUsY0FBYyxDQUFDLGFBQWE7U0FDckMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRCxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUNwQixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsY0FBYyxDQUFDLG1CQUFtQjtTQUMzQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQjtRQUNoQiwyRUFBMkU7UUFDM0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELDZEQUE2RDtRQUM3RCxNQUFNLFFBQVEsR0FBRyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNwRyxpREFBaUQ7UUFDakQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0I7UUFDaEIsZ0RBQWdEO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzdDLElBQUksV0FBVyxDQUFDO1FBRWhCLGdEQUFnRDtRQUNoRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsaURBQWlEO1lBQ2pELFdBQVcsR0FBRyxRQUFRLENBQUM7WUFFdkIsMkNBQTJDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFaEUsaUVBQWlFO1lBQ2pFLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLFdBQVcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2hELENBQUM7UUFDTCxDQUFDO1FBRUQsbURBQW1EO1FBQ25ELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQTRCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckQsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEYsR0FBRyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzlFLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE9BQWdDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNmLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPO1lBQzlCLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVM7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsT0FBZ0M7UUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2YsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE9BQU87WUFDOUIsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUztTQUNyQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxPQUFnQztRQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNO1NBQ2xDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE9BQWdDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNmLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQzVCLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLE9BQU87U0FDbkMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUMsY0FBc0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFPLENBQUMsT0FBNkI7UUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFdBQW9CLEVBQUUsRUFBRTtnQkFDakMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxhQUFhLENBQUMsT0FBNkI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLDZDQUE2QztZQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxnRkFBZ0Y7WUFDN0csYUFBYSxFQUFFLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsY0FBYyxDQUFDLE9BQTZCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNoQixLQUFLLEVBQUUsK0NBQStDO1lBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLDBFQUEwRTtZQUN2RyxhQUFhLEVBQUUsU0FBUztTQUMzQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHVCQUF1QjtRQUNuQixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLElBQVk7UUFDeEIsb0RBQW9EO1FBQ3BELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEQsaURBQWlEO1FBQ2pELFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGtEQUFrRDtRQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyx1Q0FBdUM7UUFDdkMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5CLDJCQUEyQjtRQUMzQixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdCLG9EQUFvRDtRQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixhQUFhLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLGVBQWUsRUFBRSxJQUFJO2FBQ3hCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3JCLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt3R0FwWVEsU0FBUzs0R0FBVCxTQUFTLGNBRk4sTUFBTTs7NEZBRVQsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIFNjcmVlbk9wZW5PcHRpb25zLFxyXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXHJcbiAgICBCYXNlU2NyZWVuT3B0aW9ucyxcclxuICAgIE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25UeXBlLCBTY3JlZW5EaXNwbGF5TW9kZSB9IGZyb20gJy4uL2VudW0vdWkuZW51bSc7XHJcbmltcG9ydCB7IFRhYlNkayB9IGZyb20gJy4uL3RhYi1zZGsuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlID0gaW5qZWN0KENvbmZpcm1hdGlvblNlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIHNjcmVlbiB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLiBUaGUgbW9kZSBkZXRlcm1pbmVzIGhvdyB0aGUgc2NyZWVuIGlzXHJcbiAgICAgKiBkaXNwbGF5ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNjcmVlbi5cclxuICAgICAqL1xyXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW9kZSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5TaWRlYmFyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2lkZWJhcihvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nKG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYjpcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyhvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYjpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVucyBhIHNjcmVlbiBpbiBhIHNpZGViYXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNpZGViYXIuXHJcbiAgICAgKi9cclxuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy50aXRsZSAmJiB7IHRpdGxlOiBvcHRpb25zLnRpdGxlIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jdXN0b21DbGFzcyAmJiB7IGN1c3RvbUNsYXNzOiBvcHRpb25zLmN1c3RvbUNsYXNzIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWZyZXNoZXIgJiYgeyByZWZyZXNoZXI6IG9wdGlvbnMucmVmcmVzaGVyIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jbG9zZXIgJiYgeyBjbG9zZXI6IG9wdGlvbnMuY2xvc2VyIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgcG9wdXAgZGlhbG9nLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHNob3dEaWFsb2cob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvdGhlckNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmhlaWdodCAmJiB7IGhlaWdodDogb3B0aW9ucy5oZWlnaHQgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZnJlc2hlciAmJiB7IHJlZnJlc2hlcjogb3B0aW9ucy5yZWZyZXNoZXIgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmNsb3NlciAmJiB7IGNsb3Nlcjogb3B0aW9ucy5jbG9zZXIgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcclxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiB3aXRoaW4gdGhlIHNhbWUgdGFiLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxyXG4gICAgICovXHJcbiAgICBuYXZpZ2F0ZVRvKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNhbWVUYWIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gaW4gYSBuZXcgdGFiLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cclxuICAgICAqL1xyXG4gICAgb3BlbkluTmV3VGFiKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYixcclxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBuYXZpZ2F0ZSB0by5cclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVUb1VybChwYXJhbXM6IHsgdXJsOiBzdHJpbmcsIGV4dHJhcz86IGFueSwgcmVwbGFjZVVybD86IGJvb2xlYW4gfSk6IHZvaWQge1xyXG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgICAgICB0eXBlOiBOYXZpZ2F0aW9uVHlwZS5OYXZpZ2F0ZVRvVXJsXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBzdWJkb21haW4gdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHN1YkRvbWFpbiwgYXBwQ29kZSwgYW5kIHVybC5cclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVUb1N1YmRvbWFpbihvcHRpb25zOiBOYXZpZ2F0ZVRvU3ViZG9tYWluT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTmF2aWdhdGlvblR5cGUuTmF2aWdhdGVUb1N1YmRvbWFpblxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVGhlIHNjcmVlbiBJRCBpZiBwcmVzZW50IGluIHRoZSBVUkwsIG90aGVyd2lzZSB1bmRlZmluZWQuXHJcbiAgICAgKi9cclxuICAgIGdldEFjdGl2ZVVybFNjcmVlbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgLy8gU3BsaXQgdGhlIFVSTCBwYXRobmFtZSBpbnRvIHBhcnRzIHVzaW5nIHRoZSAnLycgY2hhcmFjdGVyIGFzIGEgZGVsaW1pdGVyXHJcbiAgICAgICAgY29uc3QgdXJsUGFydHMgPSB3aW5kb3c/LmxvY2F0aW9uPy5wYXRobmFtZT8uc3BsaXQoJy8nKTtcclxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBzY3JlZW4gSUQgcGFydCBhbmQgcmVtb3ZlIGFueSBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8ubGVuZ3RoID4gMSA/IHVybFBhcnRzPy5bdXJsUGFydHM/Lmxlbmd0aCAtIDFdPy5zcGxpdCgnPycpWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIFJldHVybiB0aGUgc2NyZWVuIElEIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcclxuICAgICAgICByZXR1cm4gc2NyZWVuSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSByZWRpcmVjdCBVUkwgYnkgY29tYmluaW5nIHRoZSBhY3RpdmUgc2NyZWVuIElEIGFuZCBhbnkgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgcmVkaXJlY3QgVVJMIG9yIHVuZGVmaW5lZCBpZiBubyBzY3JlZW4gSUQgaXMgcHJlc2VudC5cclxuICAgICAqL1xyXG4gICAgZ2V0QWN0aXZlUmVkaXJlY3RVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICAvLyBHZXQgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkxcclxuICAgICAgICBjb25zdCBzY3JlZW5JZCA9IHRoaXMuZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTtcclxuICAgICAgICBsZXQgcmVkaXJlY3RVUkw7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IFVSTCBjb250YWlucyBhIHNjcmVlbiBJRFxyXG4gICAgICAgIGlmIChzY3JlZW5JZCkge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSByZWRpcmVjdCBVUkwgd2l0aCB0aGUgc2NyZWVuIElEXHJcbiAgICAgICAgICAgIHJlZGlyZWN0VVJMID0gc2NyZWVuSWQ7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCBVUkwncyBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBxdWVyeSBwYXJhbWV0ZXJzLCBhcHBlbmQgdGhlbSB0byB0aGUgcmVkaXJlY3QgVVJMXHJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVSTCArPSBgJiR7cXVlcnlQYXJhbXMudG9TdHJpbmcoKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbnN0cnVjdGVkIHJlZGlyZWN0IFVSTCBvciB1bmRlZmluZWRcclxuICAgICAgICByZXR1cm4gcmVkaXJlY3RVUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBub3RpZnkob3B0aW9uczogTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogVGFiU2RrLnRyYW5zbGF0b3IudHJhbnNsYXRlKG9wdGlvbnMubWVzc2FnZSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy50aXRsZSA/IHsgdGl0bGU6IFRhYlNkay50cmFuc2xhdG9yLnRyYW5zbGF0ZShvcHRpb25zLnRpdGxlKSB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8uY29uZmlndXJhdGlvbiA/IHsgY29uZmlndXJhdGlvbjogb3B0aW9ucy5jb25maWd1cmF0aW9uIH0gOiB7fSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dTdWNjZXNzKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzLFxyXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1N1Y2Nlc3MnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIHdhcm5pbmcgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dXYXJuaW5nKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5XYXJuaW5nLFxyXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1dhcm5pbmcnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhbiBpbmZvIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzaG93SW5mbyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcclxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdJbmZvJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgYW4gZXJyb3Igbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dFcnJvcihvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXHJcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnRXJyb3InXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYSBub3RpZmljYXRpb24gYnkgSUQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY2xlYXJlZCBub3RpZmljYXRpb24sIG9yIG51bGwgaWYgdGhlIG5vdGlmaWNhdGlvbiBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAgICAgKiB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGl0bGUsIG1lc3NhZ2UsXHJcbiAgICAgKiBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgYW5kIHZpc2liaWxpdHkgb2YgYnV0dG9ucy5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgY29uZmlybShvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0ob3B0aW9ucylcclxuICAgICAgICAgICAgICAgID8uc3Vic2NyaWJlKChpc0NvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaXNDb25maXJtZWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXHJcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkZWxldGUgYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEZWxldGVcIiBhbmQgXCJDYW5jZWxcIlxyXG4gICAgICogYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcclxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1zLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGNvbmZpcm1EZWxldGUob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtKHtcclxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkYCxcclxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHJlY29yZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcclxuICAgICAgICAgICAgcHJpbWFyeU9wdGlvbjogJ0RlbGV0ZScsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXHJcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkaXNjYXJkIGNoYW5nZXMgdG8gYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEaXNjYXJkXCJcclxuICAgICAqIGFuZCBcIkNhbmNlbFwiIGJ1dHRvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgY29uZmlybWF0aW9uIGRpYWxvZywgaW5jbHVkaW5nIHRoZSBpdGVtIG5hbWUgYW5kXHJcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBjb25maXJtRGlzY2FyZChvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xyXG4gICAgICAgICAgICB0aXRsZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHlvdXIgY2hhbmdlc2AsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXHJcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEaXNjYXJkJyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlcyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBtYW51YWxseSBjbG9zZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgY2xvc2VDb25maXJtYXRpb25EaWFsb2coKSB7XHJcbiAgICAgICAgLy8gQ2xvc2UgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2dcclxuICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpcm1hdGlvbiBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uZmlybWF0aW9uIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZm9ybWF0aW9uRW1pdHRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRDb25mb3JtYXRpb25FbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRpYWxvZyBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkaWFsb2cgZW1pdHRlciBpcyBhbiBSeEpTIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuZXZlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgaXNcclxuICAgICAqIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBkaWFsb2cgaXNcclxuICAgICAqIGN1cnJlbnRseSBvcGVuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRoZSBkaWFsb2cgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlhbG9nRW1pdHRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXREaWFsb2dFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHJlbW92ZSBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVtb3ZlIGVtaXR0ZXIgaXMgYW4gUnhKUyBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbmV2ZXIgYSByZW1vdmFsIGNvbmZpcm1hdGlvblxyXG4gICAgICogZGlhbG9nIGlzIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYVxyXG4gICAgICogcmVtb3ZhbCBkaWFsb2cgaXMgY3VycmVudGx5IG9wZW4uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSByZW1vdmUgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyByZW1vdmFsIGNvbmZpcm1hdGlvbiBkaWFsb2cgZXZlbnRzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZW1vdmVFbWl0dGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmdldFJlbW92ZUVtaXR0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcGllcyB0aGUgcHJvdmlkZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuXHJcbiAgICAgKi9cclxuICAgIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgaW5wdXQgZWxlbWVudCB0byBob2xkIHRoZSB0ZXh0XHJcbiAgICAgICAgY29uc3QgdGVtcElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIGlucHV0J3MgdmFsdWUgdG8gdGhlIHRleHQgdG8gYmUgY29waWVkXHJcbiAgICAgICAgdGVtcElucHV0LnZhbHVlID0gdGV4dDtcclxuXHJcbiAgICAgICAgLy8gQXBwZW5kIHRoZSB0ZW1wb3JhcnkgaW5wdXQgdG8gdGhlIGRvY3VtZW50IGJvZHlcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBJbnB1dCk7XHJcblxyXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgdGV4dCBpbiB0aGUgaW5wdXQgZWxlbWVudFxyXG4gICAgICAgIHRlbXBJbnB1dC5zZWxlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29weSBjb21tYW5kXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBpbnB1dCBmcm9tIHRoZSBkb2N1bWVudCBib2R5XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wSW5wdXQpO1xyXG5cclxuICAgICAgICAvLyBTaG93IGEgc3VjY2VzcyBub3RpZmljYXRpb25cclxuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ29waWVkIHRvIGNsaXBib2FyZCFcIixcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgdGltZU91dDogMTAwMCxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2xhc3M6ICd0b2FzdC10b3AtY2VudGVyJyxcclxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4nLFxyXG4gICAgICAgICAgICAgICAgZWFzZVRpbWU6IDMwMCxcclxuICAgICAgICAgICAgICAgIGV4dGVuZGVkVGltZU91dDogMjAwMCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBjdXJyZW50IFVSTCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBjb3B5Q3VycmVudFVybFRvQ2xpcGJvYXJkKCkge1xyXG4gICAgICAgIC8vIFVzZSB0aGUgY29weVRvQ2xpcGJvYXJkIG1ldGhvZCB0byBjb3B5IHRoZSBjdXJyZW50IHdpbmRvdyBVUkxcclxuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICB9XHJcbn0iXX0=
|