@techextensor/tab-sdk 0.0.4 → 0.0.6

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.
Files changed (43) hide show
  1. package/esm2022/lib/app/analytics.service.mjs +51 -0
  2. package/esm2022/lib/app/app.service.mjs +145 -0
  3. package/esm2022/lib/app/file.service.mjs +41 -0
  4. package/esm2022/lib/app/release.service.mjs +38 -0
  5. package/esm2022/lib/app/report.service.mjs +48 -0
  6. package/esm2022/lib/app/translator.service.mjs +77 -0
  7. package/esm2022/lib/crud/crud.service.mjs +161 -0
  8. package/esm2022/lib/enum/store.enum.mjs +6 -0
  9. package/esm2022/lib/enum/ui.enum.mjs +13 -0
  10. package/esm2022/lib/http/http.service.mjs +58 -0
  11. package/esm2022/lib/interface/http.interface.mjs +2 -0
  12. package/esm2022/lib/interface/ui.interface.mjs +2 -0
  13. package/esm2022/lib/store/store.service.mjs +719 -0
  14. package/esm2022/lib/tab-sdk.service.mjs +53 -5
  15. package/esm2022/lib/ui/form.service.mjs +79 -0
  16. package/esm2022/lib/ui/ui.service.mjs +176 -19
  17. package/esm2022/lib/util/util.service.mjs +53 -0
  18. package/esm2022/lib/workflow/transition.service.mjs +40 -0
  19. package/fesm2022/techextensor-tab-sdk.mjs +1687 -30
  20. package/fesm2022/techextensor-tab-sdk.mjs.map +1 -1
  21. package/lib/app/analytics.service.d.ts +28 -0
  22. package/lib/app/app.service.d.ts +81 -0
  23. package/lib/app/file.service.d.ts +22 -0
  24. package/lib/app/release.service.d.ts +23 -0
  25. package/lib/app/report.service.d.ts +28 -0
  26. package/lib/app/translator.service.d.ts +49 -0
  27. package/lib/crud/crud.service.d.ts +88 -0
  28. package/lib/enum/store.enum.d.ts +4 -0
  29. package/lib/enum/ui.enum.d.ts +10 -0
  30. package/lib/http/http.service.d.ts +35 -0
  31. package/lib/interface/http.interface.d.ts +8 -0
  32. package/lib/interface/ui.interface.d.ts +24 -0
  33. package/lib/store/store.service.d.ts +406 -0
  34. package/lib/tab-sdk.service.d.ts +23 -1
  35. package/lib/ui/form.service.d.ts +47 -0
  36. package/lib/ui/ui.service.d.ts +79 -5
  37. package/lib/util/util.service.d.ts +14 -0
  38. package/lib/workflow/transition.service.d.ts +21 -0
  39. package/package.json +2 -2
  40. package/esm2022/lib/enums/ui.enum.mjs +0 -16
  41. package/esm2022/lib/interfaces/ui.interface.mjs +0 -2
  42. package/lib/enums/ui.enum.d.ts +0 -13
  43. package/lib/interfaces/ui.interface.d.ts +0 -56
@@ -2,27 +2,75 @@ import { Injectable } from '@angular/core';
2
2
  import { MetadataHelper } from '@techextensor/tab-core-utility';
3
3
  import { UiService } from './ui/ui.service';
4
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';
5
17
  import * as i0 from "@angular/core";
6
18
  export class TabSdk {
19
+ static app;
7
20
  static auth;
8
21
  static ui;
22
+ static form;
23
+ static transition;
9
24
  static metadataUtils;
10
- static context;
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;
11
34
  /**
12
35
  * Initialize the SDK with necessary services
13
36
  */
14
37
  static init(injector, context) {
15
38
  // Expose to window for global access if needed
16
39
  window.TabSdk = TabSdk;
17
- // external services
18
- this.context = context;
19
40
  // Initialize services
41
+ this.app = injector.get(AppService);
20
42
  this.auth = injector.get(AuthUtilService);
21
43
  this.ui = injector.get(UiService);
44
+ this.form = injector.get(FormService);
45
+ this.transition = injector.get(TransitionService);
22
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);
23
58
  // Freeze the global object to prevent modifications
24
59
  Object.freeze(this);
25
- Object.freeze(this.context);
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);
26
74
  }
27
75
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabSdk, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
28
76
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabSdk, providedIn: 'root' });
@@ -33,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
33
81
  providedIn: 'root'
34
82
  }]
35
83
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXNkay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3RhYi1zZGsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUt0RCxNQUFNLE9BQU8sTUFBTTtJQUNWLE1BQU0sQ0FBQyxJQUFJLENBQWtCO0lBQzdCLE1BQU0sQ0FBQyxFQUFFLENBQVk7SUFDckIsTUFBTSxDQUFDLGFBQWEsQ0FBaUI7SUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBTTtJQUUzQjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBa0IsRUFBRSxPQUFZO1FBQ2pELCtDQUErQztRQUM5QyxNQUFjLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVoQyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWxELG9EQUFvRDtRQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7d0dBeEJVLE1BQU07NEdBQU4sTUFBTSxjQUZMLE1BQU07OzRGQUVQLE1BQU07a0JBSGxCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGFkYXRhSGVscGVyIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcbmltcG9ydCB7IFVpU2VydmljZSB9IGZyb20gJy4vdWkvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoVXRpbFNlcnZpY2UgfSBmcm9tICcuL2F1dGgvYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGFiU2RrIHtcbiAgcHVibGljIHN0YXRpYyBhdXRoOiBBdXRoVXRpbFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgdWk6IFVpU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyBtZXRhZGF0YVV0aWxzOiBNZXRhZGF0YUhlbHBlcjtcbiAgcHVibGljIHN0YXRpYyBjb250ZXh0OiBhbnk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIFNESyB3aXRoIG5lY2Vzc2FyeSBzZXJ2aWNlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbml0KGluamVjdG9yOiBJbmplY3RvciwgY29udGV4dDogYW55KTogdm9pZCB7XG4gICAgLy8gRXhwb3NlIHRvIHdpbmRvdyBmb3IgZ2xvYmFsIGFjY2VzcyBpZiBuZWVkZWRcbiAgICAod2luZG93IGFzIGFueSkuVGFiU2RrID0gVGFiU2RrO1xuXG4gICAgLy8gZXh0ZXJuYWwgc2VydmljZXNcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzZXJ2aWNlc1xuICAgIHRoaXMuYXV0aCA9IGluamVjdG9yLmdldChBdXRoVXRpbFNlcnZpY2UpO1xuICAgIHRoaXMudWkgPSBpbmplY3Rvci5nZXQoVWlTZXJ2aWNlKTtcbiAgICB0aGlzLm1ldGFkYXRhVXRpbHMgPSBpbmplY3Rvci5nZXQoTWV0YWRhdGFIZWxwZXIpO1xuXG4gICAgLy8gRnJlZXplIHRoZSBnbG9iYWwgb2JqZWN0IHRvIHByZXZlbnQgbW9kaWZpY2F0aW9uc1xuICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNvbnRleHQpO1xuICB9XG59Il19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXNkay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3RhYi1zZGsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtsRCxNQUFNLE9BQU8sTUFBTTtJQUNWLE1BQU0sQ0FBQyxHQUFHLENBQWE7SUFDdkIsTUFBTSxD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QUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0E5RFUsTUFBTTs0R0FBTixNQUFNLGNBRkwsTUFBTTs7NEZBRVAsTUFBTTtrQkFIbEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YWRhdGFIZWxwZXIgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgVWlTZXJ2aWNlIH0gZnJvbSAnLi91aS91aS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhVdGlsU2VydmljZSB9IGZyb20gJy4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL3VpL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3cvdHJhbnNpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuL2FwcC9hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlU2VydmljZSB9IGZyb20gJy4vYXBwL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVsZWFzZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZWxlYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYXBwL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvdHJhbnNsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vaHR0cC9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yZS9zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi91dGlsL3V0aWwuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYlNkayB7XG4gIHB1YmxpYyBzdGF0aWMgYXBwOiBBcHBTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIGF1dGg6IEF1dGhVdGlsU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyB1aTogVWlTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIGZvcm06IEZvcm1TZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIHRyYW5zaXRpb246IFRyYW5zaXRpb25TZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIG1ldGFkYXRhVXRpbHM6IE1ldGFkYXRhSGVscGVyO1xuICBwdWJsaWMgc3RhdGljIGZpbGU6IEZpbGVTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIHJlcG9ydDogUmVwb3J0U2VydmljZTtcbiAgcHVibGljIHN0YXRpYyByZWxlYXNlOiBSZWxlYXNlU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyBhbmFseXRpY3M6IEFuYWx5dGljc1NlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNsYXRvcjogVHJhbnNsYXRvclNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgY3J1ZDogQ3J1ZFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgaHR0cDogSHR0cFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgc3RvcmU6IFN0b3JlU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyB1dGlsOiBhbnk7XG5cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgU0RLIHdpdGggbmVjZXNzYXJ5IHNlcnZpY2VzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGluaXQoaW5qZWN0b3I6IEluamVjdG9yLCBjb250ZXh0OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBFeHBvc2UgdG8gd2luZG93IGZvciBnbG9iYWwgYWNjZXNzIGlmIG5lZWRlZFxuICAgICh3aW5kb3cgYXMgYW55KS5UYWJTZGsgPSBUYWJTZGs7XG5cbiAgICAvLyBJbml0aWFsaXplIHNlcnZpY2VzXG4gICAgdGhpcy5hcHAgPSBpbmplY3Rvci5nZXQoQXBwU2VydmljZSk7XG4gICAgdGhpcy5hdXRoID0gaW5qZWN0b3IuZ2V0KEF1dGhVdGlsU2VydmljZSk7XG4gICAgdGhpcy51aSA9IGluamVjdG9yLmdldChVaVNlcnZpY2UpO1xuICAgIHRoaXMuZm9ybSA9IGluamVjdG9yLmdldChGb3JtU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2l0aW9uID0gaW5qZWN0b3IuZ2V0KFRyYW5zaXRpb25TZXJ2aWNlKTtcbiAgICB0aGlzLm1ldGFkYXRhVXRpbHMgPSBpbmplY3Rvci5nZXQoTWV0YWRhdGFIZWxwZXIpO1xuICAgIHRoaXMuZmlsZSA9IGluamVjdG9yLmdldChGaWxlU2VydmljZSk7XG4gICAgdGhpcy5yZXBvcnQgPSBpbmplY3Rvci5nZXQoUmVwb3J0U2VydmljZSk7XG4gICAgdGhpcy5yZWxlYXNlID0gaW5qZWN0b3IuZ2V0KFJlbGVhc2VTZXJ2aWNlKTtcbiAgICB0aGlzLmFuYWx5dGljcyA9IGluamVjdG9yLmdldChBbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRvclNlcnZpY2UpO1xuICAgIHRoaXMuY3J1ZCA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XG4gICAgdGhpcy5odHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBTZXJ2aWNlKTtcbiAgICB0aGlzLnN0b3JlID0gaW5qZWN0b3IuZ2V0KFN0b3JlU2VydmljZSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHV0aWwgc2VydmljZSB3aXRoIGNvbnRleHRcbiAgICBjb25zdCB1dGlsU2VydmljZSA9IGluamVjdG9yLmdldChVdGlsU2VydmljZSk7XG4gICAgdGhpcy51dGlsID0gdXRpbFNlcnZpY2UuaW5pdChjb250ZXh0KTtcblxuICAgIC8vIEZyZWV6ZSB0aGUgZ2xvYmFsIG9iamVjdCB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbnNcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgIFxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hcHApO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5hdXRoKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudWkpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5mb3JtKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNpdGlvbik7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmZpbGUpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZXBvcnQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZWxlYXNlKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuYW5hbHl0aWNzKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNsYXRvcik7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNydWQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5odHRwKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuc3RvcmUpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy51dGlsKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,79 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3VpL2Zvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXFGLGdCQUFnQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGlCQUFpQixHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxRTs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBd0I7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxjQUFtQjtRQUNyRCx1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBcUM7UUFDdEQsaUVBQWlFO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUN4RCxDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUE0QjtRQUN6RSwwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQ2xFLENBQUM7UUFFRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBb0MsRUFBRSxxQkFBcUIsR0FBRyxLQUFLO1FBQ25GLHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsQ0FDckYsQ0FBQztRQUVGLHVDQUF1QztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5GUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVpbGRGb3JtQ29tcG9uZW50VHlwZSwgQ29tbW9uQXBpUmVzcG9uc2UsIEdldFNjcmVlbkNvbmZpZywgUHJvY2Vzc1JlcXVlc3RQYXlsb2FkLCBUYWJGb3JtaW9TZXJ2aWNlLCBUZW1wbGF0ZUhlbHBlciwgVGVtcGxhdGVQYXJzZVBheWxvYWQgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFiRm9ybWlvU2VydmljZTogVGFiRm9ybWlvU2VydmljZSA9IGluamVjdChUYWJGb3JtaW9TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZW1wbGF0ZUhlbHBlcjogVGVtcGxhdGVIZWxwZXIgPSBpbmplY3QoVGVtcGxhdGVIZWxwZXIpO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgc2NyZWVuIGJ5IGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzY3JlZW5JZCBUaGUgSUQgb2YgdGhlIHNjcmVlbiB0byByZXRyaWV2ZS5cbiAgICAgKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTY3JlZW4oc2NyZWVuSWQ6IHN0cmluZywgY29uZmlnPzogR2V0U2NyZWVuQ29uZmlnKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5nZXRTY3JlZW4oc2NyZWVuSWQsIGNvbmZpZylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGF0YSBmb3IgYSBzY3JlZW4gYnkgaXRzIElELlxuICAgICAqXG4gICAgICogQHBhcmFtIHNjcmVlbklkIFRoZSBJRCBvZiB0aGUgc2NyZWVuIHRvIHJldHJpZXZlIHRoZSBkYXRhIGZvci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBheWxvYWQgVGhlIHJlcXVlc3QgcGF5bG9hZCB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2NyZWVuRGF0YShzY3JlZW5JZDogc3RyaW5nLCByZXF1ZXN0UGF5bG9hZDogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIGdldCB0aGUgcmVzcG9uc2UuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLl90YWJGb3JtaW9TZXJ2aWNlLmdldFNjcmVlbkRhdGEoc2NyZWVuSWQsIHJlcXVlc3RQYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgcmVxdWVzdCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZDogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHBheWxvYWQgdG8gdGhlIHNlcnZlciBhbmQgYXdhaXQgdGhlIHJlc3BvbnNlLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIEZvcm0uaW8gY29tcG9uZW50cyBmb3IgdGhlIHNwZWNpZmllZCBhcHAgb2JqZWN0IElEIGFuZCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE9iamVjdElkIFRoZSBJRCBvZiB0aGUgYXBwIG9iamVjdCB0byBidWlsZCB0aGUgY29tcG9uZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgY29tcG9uZW50cyB0byBidWlsZC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBidWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQ6IHN0cmluZywgdHlwZTogQnVpbGRGb3JtQ29tcG9uZW50VHlwZSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5idWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQsIHR5cGUpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSB0ZW1wbGF0ZSB1c2luZyB0aGUgcHJvdmlkZWQgcmVxdWVzdCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIHRvIGJlIHBhcnNlZC5cbiAgICAgKiBAcGFyYW0gb25GYWlsZWRQYXJzZU9uU2VydmVyIElmIHRoZSBwYXJzaW5nIHNob3VsZCBiZSBkb25lIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgYXN5bmMgcGFyc2VUZW1wbGF0ZShyZXF1ZXN0UGF5bG9hZDogVGVtcGxhdGVQYXJzZVBheWxvYWQsIG9uRmFpbGVkUGFyc2VPblNlcnZlciA9IGZhbHNlKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdG8gcGFyc2UgdGhlIHRlbXBsYXRlLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVIZWxwZXIudGVtcGxhdGVQYXJzZVVuaXZlcnNhbChyZXF1ZXN0UGF5bG9hZCwgb25GYWlsZWRQYXJzZU9uU2VydmVyKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxufSJdfQ==
@@ -1,11 +1,11 @@
1
- import { Injectable } from '@angular/core';
2
- import { NotificationType, ScreenDisplayMode } from '../enums/ui.enum';
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { NavigationType, ScreenDisplayMode } from '../enum/ui.enum';
3
3
  import { TabSdk } from '../tab-sdk.service';
4
+ import { ConfirmationService, NotificationService, NotificationType } from '@techextensor/tab-core-utility';
4
5
  import * as i0 from "@angular/core";
5
6
  export class UiService {
6
- _eventActionService = TabSdk.context?.EventActionService;
7
- _tabUtilsService = TabSdk.context?.TabUtilsService;
8
- _confirmationDialogService = TabSdk.context?.ConfirmationDialogService;
7
+ _notificationService = inject(NotificationService);
8
+ _confirmationService = inject(ConfirmationService);
9
9
  /**
10
10
  * Open a screen with the given options. The mode determines how the screen is
11
11
  * displayed.
@@ -22,11 +22,9 @@ export class UiService {
22
22
  this.showDialog({ screenId, reqtokens, submission, title, width, height, customClass });
23
23
  break;
24
24
  case ScreenDisplayMode.SameTab:
25
- case ScreenDisplayMode.NavigationInSameTab:
26
25
  this.navigateTo({ screenId, reqtokens });
27
26
  break;
28
27
  case ScreenDisplayMode.NewTab:
29
- case ScreenDisplayMode.NavigationInNewTab:
30
28
  this.openInNewTab({ screenId, reqtokens });
31
29
  break;
32
30
  }
@@ -43,7 +41,7 @@ export class UiService {
43
41
  ...(options.height && { height: options.height }),
44
42
  ...(options.customClass && { customClass: options.customClass })
45
43
  };
46
- this._eventActionService.openScreen(ScreenDisplayMode.Sidebar, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
44
+ TabSdk.util?.openScreen(ScreenDisplayMode.Sidebar, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
47
45
  }
48
46
  /**
49
47
  * Opens a screen in a popup dialog.
@@ -57,7 +55,7 @@ export class UiService {
57
55
  ...(options.height && { height: options.height }),
58
56
  ...(options.customClass && { customClass: options.customClass })
59
57
  };
60
- this._eventActionService.openScreen(ScreenDisplayMode.Popup, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
58
+ TabSdk.util?.openScreen(ScreenDisplayMode.Popup, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
61
59
  }
62
60
  /**
63
61
  * Navigates to a screen within the same tab.
@@ -65,7 +63,7 @@ export class UiService {
65
63
  * @param options - The options for navigation, including screenId and optional reqtokens.
66
64
  */
67
65
  navigateTo(options) {
68
- this._eventActionService.openScreen(ScreenDisplayMode.NavigationInSameTab, options.screenId, options.reqtokens || undefined);
66
+ TabSdk.util?.openScreen(ScreenDisplayMode.SameTab, options.screenId, options.reqtokens || undefined);
69
67
  }
70
68
  /**
71
69
  * Navigates to a screen in a new tab.
@@ -73,7 +71,7 @@ export class UiService {
73
71
  * @param options The options for navigation, including screenId and optional reqtokens.
74
72
  */
75
73
  openInNewTab(options) {
76
- this._eventActionService.openScreen(ScreenDisplayMode.NavigationInNewTab, options.screenId, options.reqtokens || undefined);
74
+ TabSdk.util?.openScreen(ScreenDisplayMode.NewTab, options.screenId, options.reqtokens || undefined);
77
75
  }
78
76
  /**
79
77
  * Navigates to the specified URL.
@@ -81,7 +79,10 @@ export class UiService {
81
79
  * @param url - The URL to navigate to.
82
80
  */
83
81
  navigateToUrl(url) {
84
- this._tabUtilsService.navigateToUrl({ Url: url });
82
+ TabSdk.util?.navigateToUrl({
83
+ url,
84
+ type: NavigationType.NavigateToUrl
85
+ });
85
86
  }
86
87
  /**
87
88
  * Navigates to a specified subdomain using the provided options.
@@ -89,7 +90,23 @@ export class UiService {
89
90
  * @param options - The options for navigation, including subDomain, appCode, and url.
90
91
  */
91
92
  navigateToSubdomain(options) {
92
- this._tabUtilsService.navigateToUrlWithSubdomain(options);
93
+ TabSdk.util?.navigateToUrl({
94
+ ...options,
95
+ type: NavigationType.NavigateToUrl
96
+ });
97
+ }
98
+ /**
99
+ * Retrieves the active screen ID from the current URL.
100
+ *
101
+ * @returns The screen ID if present in the URL, otherwise undefined.
102
+ */
103
+ getActiveUrlScreenId() {
104
+ // Split the URL pathname using the app name and '/screen/' as delimiters
105
+ const urlParts = window?.location?.pathname?.split(TabSdk.store.appName + '/screen/');
106
+ // Extract the screen ID part and remove any query parameters
107
+ const screenId = urlParts?.[1]?.split('?')[0];
108
+ // Return the screen ID or undefined if not found
109
+ return screenId;
93
110
  }
94
111
  /**
95
112
  * Show a notification to the user.
@@ -97,7 +114,12 @@ export class UiService {
97
114
  * @param options The options for the notification.
98
115
  */
99
116
  notify(options) {
100
- this._tabUtilsService.notify(options);
117
+ this._notificationService.notify({
118
+ type: options.type,
119
+ message: TabSdk.translator.translate(options.message),
120
+ ...(options?.title ? { title: TabSdk.translator.translate(options.title) } : {}),
121
+ ...(options?.configuration ? { configuration: options.configuration } : {}),
122
+ });
101
123
  }
102
124
  /**
103
125
  * Displays a success notification to the user.
@@ -105,7 +127,11 @@ export class UiService {
105
127
  * @param options - The options for the notification, including message, title, and configuration.
106
128
  */
107
129
  showSuccess(options) {
108
- this.notify({ ...options, type: NotificationType.Success });
130
+ this.notify({
131
+ ...options,
132
+ type: NotificationType.Success,
133
+ title: options?.title ?? 'Success'
134
+ });
109
135
  }
110
136
  /**
111
137
  * Displays a warning notification to the user.
@@ -113,7 +139,23 @@ export class UiService {
113
139
  * @param options - The options for the notification, including message, title, and configuration.
114
140
  */
115
141
  showWarning(options) {
116
- this.notify({ ...options, type: NotificationType.Warning });
142
+ this.notify({
143
+ ...options,
144
+ type: NotificationType.Warning,
145
+ title: options?.title ?? 'Warning'
146
+ });
147
+ }
148
+ /**
149
+ * Displays an info notification to the user.
150
+ *
151
+ * @param options - The options for the notification, including message, title, and configuration.
152
+ */
153
+ showInfo(options) {
154
+ this.notify({
155
+ ...options,
156
+ type: NotificationType.Info,
157
+ title: options?.title ?? 'Info'
158
+ });
117
159
  }
118
160
  /**
119
161
  * Displays an error notification to the user.
@@ -121,7 +163,11 @@ export class UiService {
121
163
  * @param options - The options for the notification, including message, title, and configuration.
122
164
  */
123
165
  showError(options) {
124
- this.notify({ ...options, type: NotificationType.Error });
166
+ this.notify({
167
+ ...options,
168
+ type: NotificationType.Error,
169
+ title: options?.title ?? 'Error'
170
+ });
125
171
  }
126
172
  /**
127
173
  * Displays a confirmation dialog to the user and returns a promise that resolves
@@ -133,12 +179,123 @@ export class UiService {
133
179
  */
134
180
  confirm(options) {
135
181
  return new Promise((resolve) => {
136
- this._confirmationDialogService.confirm(options)
182
+ this._confirmationService.confirm(options)
137
183
  ?.subscribe((isConfirmed) => {
138
184
  resolve(isConfirmed);
139
185
  });
140
186
  });
141
187
  }
188
+ /**
189
+ * Displays a confirmation dialog to the user with a title and message that indicates
190
+ * the user is about to delete an item. The confirmation dialog has a "Delete" and "Cancel"
191
+ * button.
192
+ *
193
+ * @param options - The options for the confirmation dialog, including the item name and
194
+ * optional message.
195
+ * @returns A promise that resolves to true if the user confirms, false otherwise.
196
+ */
197
+ confirmDelete(options) {
198
+ return this.confirm({
199
+ title: options?.title ?? `Are you sure you want to delete this record`,
200
+ message: options?.message ?? `You are about to delete the selected record. Are you sure you want to proceed?`,
201
+ primaryOption: 'Delete',
202
+ });
203
+ }
204
+ /**
205
+ * Displays a confirmation dialog to the user with a title and message that indicates
206
+ * the user is about to discard changes to an item. The confirmation dialog has a "Discard"
207
+ * and "Cancel" button.
208
+ *
209
+ * @param options - The options for the confirmation dialog, including the item name and
210
+ * optional message.
211
+ * @returns A promise that resolves to true if the user confirms, false otherwise.
212
+ */
213
+ confirmDiscard(options) {
214
+ return this.confirm({
215
+ title: `Are you sure you want to discard your changes`,
216
+ message: options?.message ?? `You are about to discard your changes. Are you sure you want to proceed?`,
217
+ primaryOption: 'Discard',
218
+ });
219
+ }
220
+ /**
221
+ * Closes the confirmation dialog.
222
+ *
223
+ * This method can be used to manually close the confirmation dialog.
224
+ */
225
+ closeConfirmationDialog() {
226
+ // Close the confirmation dialog
227
+ this._confirmationService.closeDialog();
228
+ }
229
+ /**
230
+ * Retrieves the confirmation emitter from the confirmation service.
231
+ *
232
+ * @returns The confirmation emitter used for emitting confirmation events.
233
+ */
234
+ getConformationEmitter() {
235
+ return this._confirmationService.getConformationEmitter();
236
+ }
237
+ /**
238
+ * Retrieves the dialog emitter from the confirmation service.
239
+ *
240
+ * The dialog emitter is an RxJS Subject that emits whenever a confirmation dialog is
241
+ * opened or closed. The value emitted is a boolean indicating whether a dialog is
242
+ * currently open.
243
+ *
244
+ * @returns The dialog emitter used for emitting confirmation dialog events.
245
+ */
246
+ getDialogEmitter() {
247
+ return this._confirmationService.getDialogEmitter();
248
+ }
249
+ /**
250
+ * Retrieves the remove emitter from the confirmation service.
251
+ *
252
+ * The remove emitter is an RxJS Subject that emits whenever a removal confirmation
253
+ * dialog is opened or closed. The value emitted is a boolean indicating whether a
254
+ * removal dialog is currently open.
255
+ *
256
+ * @returns The remove emitter used for emitting removal confirmation dialog events.
257
+ */
258
+ getRemoveEmitter() {
259
+ return this._confirmationService.getRemoveEmitter();
260
+ }
261
+ /**
262
+ * Copies the provided text to the clipboard and displays a success notification.
263
+ *
264
+ * @param text - The text to be copied to the clipboard.
265
+ */
266
+ copyToClipboard(text) {
267
+ // Create a temporary input element to hold the text
268
+ const tempInput = document.createElement("input");
269
+ // Set the input's value to the text to be copied
270
+ tempInput.value = text;
271
+ // Append the temporary input to the document body
272
+ document.body.appendChild(tempInput);
273
+ // Select the text in the input element
274
+ tempInput.select();
275
+ // Execute the copy command
276
+ document.execCommand("copy");
277
+ // Remove the temporary input from the document body
278
+ document.body.removeChild(tempInput);
279
+ // Show a success notification
280
+ this.showSuccess({
281
+ message: "",
282
+ title: "Copied to clipboard!",
283
+ configuration: {
284
+ timeOut: 1000,
285
+ positionClass: 'toast-top-center',
286
+ easing: 'ease-in',
287
+ easeTime: 300,
288
+ extendedTimeOut: 2000,
289
+ }
290
+ });
291
+ }
292
+ /**
293
+ * Copies the current URL to the clipboard and displays a success notification.
294
+ */
295
+ copyCurrentUrlToClipboard() {
296
+ // Use the copyToClipboard method to copy the current window URL
297
+ this.copyToClipboard(window.location.href);
298
+ }
142
299
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
143
300
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UiService, providedIn: 'root' });
144
301
  }
@@ -148,4 +305,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
148
305
  providedIn: 'root'
149
306
  }]
150
307
  }] });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUs1QyxNQUFNLE9BQU8sU0FBUztJQUNELG1CQUFtQixHQUFRLE1BQU0sQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUM7SUFDOUQsZ0JBQWdCLEdBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUM7SUFDeEQsMEJBQTBCLEdBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQztJQUU3Rjs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxPQUEwQjtRQUNqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUU3RixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ1gsS0FBSyxpQkFBaUIsQ0FBQyxPQUFPO2dCQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDekYsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdB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QU8sRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUM1QyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFdBQW9CLEVBQUUsRUFBRTtnQkFDakMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQTlLUSxTQUFTOzRHQUFULFNBQVMsY0FGTixNQUFNOzs0RkFFVCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgU2NyZWVuT3Blbk9wdGlvbnMsXG4gICAgTm90aWZpY2F0aW9uT3B0aW9ucyxcbiAgICBDb25maXJtYXRpb25EaWFsb2dPcHRpb25zLFxuICAgIE5hdmlnYXRpb25PcHRpb25zLFxuICAgIEJhc2VOb3RpZmljYXRpb25PcHRpb25zLFxuICAgIEJhc2VTY3JlZW5PcHRpb25zLFxuICAgIE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zXG59IGZyb20gJy4uL2ludGVyZmFjZXMvdWkuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblR5cGUsIFNjcmVlbkRpc3BsYXlNb2RlIH0gZnJvbSAnLi4vZW51bXMvdWkuZW51bSc7XG5pbXBvcnQgeyBUYWJTZGsgfSBmcm9tICcuLi90YWItc2RrLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFVpU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRBY3Rpb25TZXJ2aWNlOiBhbnkgPSBUYWJTZGsuY29udGV4dD8uRXZlbnRBY3Rpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYlV0aWxzU2VydmljZTogYW55ID0gVGFiU2RrLmNvbnRleHQ/LlRhYlV0aWxzU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25EaWFsb2dTZXJ2aWNlOiBhbnkgPSBUYWJTZGsuY29udGV4dD8uQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBzY3JlZW4gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gVGhlIG1vZGUgZGV0ZXJtaW5lcyBob3cgdGhlIHNjcmVlbiBpc1xuICAgICAqIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vZGUsIHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9ID0gb3B0aW9ucztcblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTaWRlYmFyKHsgc2NyZWVuSWQsIHJlcXRva2Vucywgc3VibWlzc2lvbiwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIGN1c3RvbUNsYXNzIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwOlxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZyh7IHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5TYW1lVGFiOlxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5OYXZpZ2F0aW9uSW5TYW1lVGFiOlxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHNjcmVlbklkLCByZXF0b2tlbnMgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuTmV3VGFiOlxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5OYXZpZ2F0aW9uSW5OZXdUYWI6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIoeyBzY3JlZW5JZCwgcmVxdG9rZW5zIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYSBzY3JlZW4gaW4gYSBzaWRlYmFyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNpZGViYXIuXG4gICAgICovXG4gICAgc2hvd1NpZGViYXIob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgLi4uKG9wdGlvbnMudGl0bGUgJiYgeyB0aXRsZTogb3B0aW9ucy50aXRsZSB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY3VzdG9tQ2xhc3MgJiYgeyBjdXN0b21DbGFzczogb3B0aW9ucy5jdXN0b21DbGFzcyB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2V2ZW50QWN0aW9uU2VydmljZS5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcHRpb25zLnN1Ym1pc3Npb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYSBzY3JlZW4gaW4gYSBwb3B1cCBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3Igb3BlbmluZyB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIHNob3dEaWFsb2cob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgLi4uKG9wdGlvbnMudGl0bGUgJiYgeyB0aXRsZTogb3B0aW9ucy50aXRsZSB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY3VzdG9tQ2xhc3MgJiYgeyBjdXN0b21DbGFzczogb3B0aW9ucy5jdXN0b21DbGFzcyB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2V2ZW50QWN0aW9uU2VydmljZS5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXAsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG90aGVyQ29uZmlndXJhdGlvbikubGVuZ3RoID4gMCA/IG90aGVyQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiB3aXRoaW4gdGhlIHNhbWUgdGFiLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHNjcmVlbklkIGFuZCBvcHRpb25hbCByZXF0b2tlbnMuXG4gICAgICovXG4gICAgbmF2aWdhdGVUbyhvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ldmVudEFjdGlvblNlcnZpY2Uub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLk5hdmlnYXRpb25JblNhbWVUYWIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc2NyZWVuIGluIGEgbmV3IHRhYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cbiAgICAgKi9cbiAgICBvcGVuSW5OZXdUYWIob3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRBY3Rpb25TZXJ2aWNlLm9wZW5TY3JlZW4oXG4gICAgICAgICAgICBTY3JlZW5EaXNwbGF5TW9kZS5OYXZpZ2F0aW9uSW5OZXdUYWIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gbmF2aWdhdGUgdG8uXG4gICAgICovXG4gICAgbmF2aWdhdGVUb1VybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJVdGlsc1NlcnZpY2UubmF2aWdhdGVUb1VybCh7IFVybDogdXJsIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBzdWJkb21haW4gdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc3ViRG9tYWluLCBhcHBDb2RlLCBhbmQgdXJsLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG9TdWJkb21haW4ob3B0aW9uczogTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFiVXRpbHNTZXJ2aWNlLm5hdmlnYXRlVG9VcmxXaXRoU3ViZG9tYWluKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgYSBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICAgKi9cbiAgICBub3RpZnkob3B0aW9uczogTm90aWZpY2F0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJVdGlsc1NlcnZpY2Uubm90aWZ5KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgc3VjY2VzcyBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHNob3dTdWNjZXNzKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHsgLi4ub3B0aW9ucywgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgd2FybmluZyBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHNob3dXYXJuaW5nKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHsgLi4ub3B0aW9ucywgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5XYXJuaW5nIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGFuIGVycm9yIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd0Vycm9yKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHsgLi4ub3B0aW9ucywgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5FcnJvciB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICAgKiB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aXRsZSwgbWVzc2FnZSxcbiAgICAgKiBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgYW5kIHZpc2liaWxpdHkgb2YgYnV0dG9ucy5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1zLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgY29uZmlybShvcHRpb25zOiBDb25maXJtYXRpb25EaWFsb2dPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlybWF0aW9uRGlhbG9nU2VydmljZS5jb25maXJtKG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgPy5zdWJzY3JpYmUoKGlzQ29uZmlybWVkOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaXNDb25maXJtZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59Il19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTdGLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLGlCQUFpQixDQUFDLE9BQU87Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNO1lBRVYsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFF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cnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgU2NyZWVuT3Blbk9wdGlvbnMsXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXG4gICAgQmFzZVNjcmVlbk9wdGlvbnMsXG4gICAgTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVHlwZSwgU2NyZWVuRGlzcGxheU1vZGUgfSBmcm9tICcuLi9lbnVtL3VpLmVudW0nO1xuaW1wb3J0IHsgVGFiU2RrIH0gZnJvbSAnLi4vdGFiLXNkay5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVaVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBzY3JlZW4gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gVGhlIG1vZGUgZGV0ZXJtaW5lcyBob3cgdGhlIHNjcmVlbiBpc1xuICAgICAqIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vZGUsIHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9ID0gb3B0aW9ucztcblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTaWRlYmFyKHsgc2NyZWVuSWQsIHJlcXRva2Vucywgc3VibWlzc2lvbiwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIGN1c3RvbUNsYXNzIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwOlxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZyh7IHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5TYW1lVGFiOlxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHNjcmVlbklkLCByZXF0b2tlbnMgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuTmV3VGFiOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHsgc2NyZWVuSWQsIHJlcXRva2VucyB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgc2lkZWJhci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzaWRlYmFyLlxuICAgICAqL1xuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSlcbiAgICAgICAgfTtcblxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG90aGVyQ29uZmlndXJhdGlvbikubGVuZ3RoID4gMCA/IG90aGVyQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgcG9wdXAgZGlhbG9nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBzaG93RGlhbG9nKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSlcbiAgICAgICAgfTtcblxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwLFxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3VibWlzc2lvbiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvdGhlckNvbmZpZ3VyYXRpb24pLmxlbmd0aCA+IDAgPyBvdGhlckNvbmZpZ3VyYXRpb24gOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gd2l0aGluIHRoZSBzYW1lIHRhYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG8ob3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXG4gICAgICAgICAgICBTY3JlZW5EaXNwbGF5TW9kZS5TYW1lVGFiLFxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiBpbiBhIG5ldyB0YWIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHNjcmVlbklkIGFuZCBvcHRpb25hbCByZXF0b2tlbnMuXG4gICAgICovXG4gICAgb3BlbkluTmV3VGFiKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuTmV3VGFiLFxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIHRvIG5hdmlnYXRlIHRvLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG9VcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm5hdmlnYXRlVG9Vcmwoe1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgdHlwZTogTmF2aWdhdGlvblR5cGUuTmF2aWdhdGVUb1VybFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBzdWJkb21haW4gdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc3ViRG9tYWluLCBhcHBDb2RlLCBhbmQgdXJsLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG9TdWJkb21haW4ob3B0aW9uczogTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm5hdmlnYXRlVG9Vcmwoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5hdmlnYXRpb25UeXBlLk5hdmlnYXRlVG9VcmxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc2NyZWVuIElEIGlmIHByZXNlbnQgaW4gdGhlIFVSTCwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVVcmxTY3JlZW5JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAvLyBTcGxpdCB0aGUgVVJMIHBhdGhuYW1lIHVzaW5nIHRoZSBhcHAgbmFtZSBhbmQgJy9zY3JlZW4vJyBhcyBkZWxpbWl0ZXJzXG4gICAgICAgIGNvbnN0IHVybFBhcnRzID0gd2luZG93Py5sb2NhdGlvbj8ucGF0aG5hbWU/LnNwbGl0KFRhYlNkay5zdG9yZS5hcHBOYW1lICsgJy9zY3JlZW4vJyk7XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNjcmVlbiBJRCBwYXJ0IGFuZCByZW1vdmUgYW55IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8uWzFdPy5zcGxpdCgnPycpWzBdO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHNjcmVlbiBJRCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAgICAgIHJldHVybiBzY3JlZW5JZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGEgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgbm90aWZ5KG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogVGFiU2RrLnRyYW5zbGF0b3IudHJhbnNsYXRlKG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8udGl0bGUgPyB7IHRpdGxlOiBUYWJTZGsudHJhbnNsYXRvci50cmFuc2xhdGUob3B0aW9ucy50aXRsZSkgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5jb25maWd1cmF0aW9uID8geyBjb25maWd1cmF0aW9uOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1N1Y2Nlc3Mob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2VzcyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnU3VjY2VzcydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB3YXJuaW5nIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1dhcm5pbmcob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuV2FybmluZyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnV2FybmluZydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYW4gaW5mbyBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHNob3dJbmZvKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkluZm8sXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ0luZm8nXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGFuIGVycm9yIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd0Vycm9yKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdFcnJvcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gICAgICogdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdXNlciBjb25maXJtZWQgdGhlIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGl0bGUsIG1lc3NhZ2UsXG4gICAgICogY29uZmlybVRleHQsIGNhbmNlbFRleHQsIGFuZCB2aXNpYmlsaXR5IG9mIGJ1dHRvbnMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm0ob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0ob3B0aW9ucylcbiAgICAgICAgICAgICAgICA/LnN1YnNjcmliZSgoaXNDb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpc0NvbmZpcm1lZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB0byB0aGUgdXNlciB3aXRoIGEgdGl0bGUgYW5kIG1lc3NhZ2UgdGhhdCBpbmRpY2F0ZXNcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkZWxldGUgYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEZWxldGVcIiBhbmQgXCJDYW5jZWxcIlxuICAgICAqIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtRGVsZXRlKG9wdGlvbnM/OiBDb25maXJtYXRpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCByZWNvcmQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICBwcmltYXJ5T3B0aW9uOiAnRGVsZXRlJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIHdpdGggYSB0aXRsZSBhbmQgbWVzc2FnZSB0aGF0IGluZGljYXRlc1xuICAgICAqIHRoZSB1c2VyIGlzIGFib3V0IHRvIGRpc2NhcmQgY2hhbmdlcyB0byBhbiBpdGVtLiBUaGUgY29uZmlybWF0aW9uIGRpYWxvZyBoYXMgYSBcIkRpc2NhcmRcIlxuICAgICAqIGFuZCBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtRGlzY2FyZChvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtKHtcbiAgICAgICAgICAgIHRpdGxlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgeW91ciBjaGFuZ2VzYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICBwcmltYXJ5T3B0aW9uOiAnRGlzY2FyZCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGNsb3NlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuICAgICAqL1xuICAgIGNsb3NlQ29uZmlybWF0aW9uRGlhbG9nKCkge1xuICAgICAgICAvLyBDbG9zZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb25maXJtYXRpb24gZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uZmlybWF0aW9uIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXRDb25mb3JtYXRpb25FbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRDb25mb3JtYXRpb25FbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBkaWFsb2cgZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaWFsb2cgZW1pdHRlciBpcyBhbiBSeEpTIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuZXZlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgaXNcbiAgICAgKiBvcGVuZWQgb3IgY2xvc2VkLiBUaGUgdmFsdWUgZW1pdHRlZCBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgZGlhbG9nIGlzXG4gICAgICogY3VycmVudGx5IG9wZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgZGlhbG9nIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGRpYWxvZyBldmVudHMuXG4gICAgICovXG4gICAgZ2V0RGlhbG9nRW1pdHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuZ2V0RGlhbG9nRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVtb3ZlIGVtaXR0ZXIgZnJvbSB0aGUgY29uZmlybWF0aW9uIHNlcnZpY2UuXG4gICAgICogXG4gICAgICogVGhlIHJlbW92ZSBlbWl0dGVyIGlzIGFuIFJ4SlMgU3ViamVjdCB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgcmVtb3ZhbCBjb25maXJtYXRpb25cbiAgICAgKiBkaWFsb2cgaXMgb3BlbmVkIG9yIGNsb3NlZC4gVGhlIHZhbHVlIGVtaXR0ZWQgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhXG4gICAgICogcmVtb3ZhbCBkaWFsb2cgaXMgY3VycmVudGx5IG9wZW4uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZSBlbWl0dGVyIHVzZWQgZm9yIGVtaXR0aW5nIHJlbW92YWwgY29uZmlybWF0aW9uIGRpYWxvZyBldmVudHMuXG4gICAgICovXG4gICAgZ2V0UmVtb3ZlRW1pdHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuZ2V0UmVtb3ZlRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgcHJvdmlkZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC5cbiAgICAgKi9cbiAgICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBpbnB1dCBlbGVtZW50IHRvIGhvbGQgdGhlIHRleHRcbiAgICAgICAgY29uc3QgdGVtcElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaW5wdXQncyB2YWx1ZSB0byB0aGUgdGV4dCB0byBiZSBjb3BpZWRcbiAgICAgICAgdGVtcElucHV0LnZhbHVlID0gdGV4dDtcblxuICAgICAgICAvLyBBcHBlbmQgdGhlIHRlbXBvcmFyeSBpbnB1dCB0byB0aGUgZG9jdW1lbnQgYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBJbnB1dCk7XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSB0ZXh0IGluIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgIHRlbXBJbnB1dC5zZWxlY3QoKTtcblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb3B5IGNvbW1hbmRcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGlucHV0IGZyb20gdGhlIGRvY3VtZW50IGJvZHlcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wSW5wdXQpO1xuXG4gICAgICAgIC8vIFNob3cgYSBzdWNjZXNzIG5vdGlmaWNhdGlvblxuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJDb3BpZWQgdG8gY2xpcGJvYXJkIVwiLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHRpbWVPdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DbGFzczogJ3RvYXN0LXRvcC1jZW50ZXInLFxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4nLFxuICAgICAgICAgICAgICAgIGVhc2VUaW1lOiAzMDAsXG4gICAgICAgICAgICAgICAgZXh0ZW5kZWRUaW1lT3V0OiAyMDAwLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgdGhlIGN1cnJlbnQgVVJMIHRvIHRoZSBjbGlwYm9hcmQgYW5kIGRpc3BsYXlzIGEgc3VjY2VzcyBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgY29weUN1cnJlbnRVcmxUb0NsaXBib2FyZCgpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBjb3B5VG9DbGlwYm9hcmQgbWV0aG9kIHRvIGNvcHkgdGhlIGN1cnJlbnQgd2luZG93IFVSTFxuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgfVxufSJdfQ==
@@ -0,0 +1,53 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class UtilService {
4
+ // Will store the services from context
5
+ _context = null;
6
+ _initialized = false;
7
+ /**
8
+ * Initializes the UtilService with context that contains service references
9
+ *
10
+ * @param context The context object containing service references
11
+ * @returns A proxy that intercepts and delegates method calls to the appropriate service
12
+ */
13
+ init(context) {
14
+ if (this._initialized) {
15
+ return this;
16
+ }
17
+ this._context = context;
18
+ this._initialized = true;
19
+ // Return a proxy that will intercept method calls
20
+ return new Proxy(this, {
21
+ get: (target, prop) => {
22
+ // First check if the property exists directly on UtilService
23
+ if (prop in target) {
24
+ return target[prop];
25
+ }
26
+ // Convert symbol to string if needed
27
+ const propName = prop.toString();
28
+ // Check context services first
29
+ if (this._context && Object.keys(this._context).length > 0) {
30
+ // Loop through each service in the context
31
+ for (const serviceName of Object.keys(this._context)) {
32
+ const service = this._context[serviceName];
33
+ if (service && typeof service === 'object' && propName in service && typeof service[propName] === 'function') {
34
+ // Return the bound function from the service
35
+ return service[propName].bind(service);
36
+ }
37
+ }
38
+ }
39
+ // If property not found anywhere, return undefined
40
+ return undefined;
41
+ }
42
+ });
43
+ }
44
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
45
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UtilService, providedIn: 'root' });
46
+ }
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UtilService, decorators: [{
48
+ type: Injectable,
49
+ args: [{
50
+ providedIn: 'root'
51
+ }]
52
+ }] });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3V0aWwvdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLHVDQUF1QztJQUMvQixRQUFRLEdBQVEsSUFBSSxDQUFDO0lBQ3JCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFN0I7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsT0FBWTtRQUNiLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixrREFBa0Q7UUFDbEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDbkIsR0FBRyxFQUFFLENBQUMsTUFBVyxFQUFFLElBQXFCLEVBQUUsRUFBRTtnQkFDeEMsNkRBQTZEO2dCQUM3RCxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDakIsT0FBUSxNQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7Z0JBRUQscUNBQXFDO2dCQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWpDLCtCQUErQjtnQkFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsMkNBQTJDO29CQUMzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzNDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUMzRyw2Q0FBNkM7NEJBQzdDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsbURBQW1EO2dCQUNuRCxPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt3R0E5Q1EsV0FBVzs0R0FBWCxXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXRpbFNlcnZpY2Uge1xuICAgIC8vIFdpbGwgc3RvcmUgdGhlIHNlcnZpY2VzIGZyb20gY29udGV4dFxuICAgIHByaXZhdGUgX2NvbnRleHQ6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBVdGlsU2VydmljZSB3aXRoIGNvbnRleHQgdGhhdCBjb250YWlucyBzZXJ2aWNlIHJlZmVyZW5jZXNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvYmplY3QgY29udGFpbmluZyBzZXJ2aWNlIHJlZmVyZW5jZXNcbiAgICAgKiBAcmV0dXJucyBBIHByb3h5IHRoYXQgaW50ZXJjZXB0cyBhbmQgZGVsZWdhdGVzIG1ldGhvZCBjYWxscyB0byB0aGUgYXBwcm9wcmlhdGUgc2VydmljZVxuICAgICAqL1xuICAgIGluaXQoY29udGV4dDogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgcHJveHkgdGhhdCB3aWxsIGludGVyY2VwdCBtZXRob2QgY2FsbHNcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0aGlzLCB7XG4gICAgICAgICAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIHByb3BlcnR5IGV4aXN0cyBkaXJlY3RseSBvbiBVdGlsU2VydmljZVxuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgc3ltYm9sIHRvIHN0cmluZyBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGNvbnRleHQgc2VydmljZXMgZmlyc3RcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dCAmJiBPYmplY3Qua2V5cyh0aGlzLl9jb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHNlcnZpY2UgaW4gdGhlIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlTmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLl9jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2NvbnRleHRbc2VydmljZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UgJiYgdHlwZW9mIHNlcnZpY2UgPT09ICdvYmplY3QnICYmIHByb3BOYW1lIGluIHNlcnZpY2UgJiYgdHlwZW9mIHNlcnZpY2VbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBib3VuZCBmdW5jdGlvbiBmcm9tIHRoZSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VbcHJvcE5hbWVdLmJpbmQoc2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9wZXJ0eSBub3QgZm91bmQgYW55d2hlcmUsIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59Il19