@net7/boilerplate-common 4.9.7 → 5.0.0

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 (82) hide show
  1. package/{esm2020 → esm2022}/lib/components/container/container.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components/grid/grid.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/side-scroller/side-scroller.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/components/smart-pagination/smart-pagination.mjs +5 -5
  5. package/{esm2020 → esm2022}/lib/data-sources/footer.ds.mjs +1 -1
  6. package/esm2022/lib/data-sources/header.ds.mjs +72 -0
  7. package/esm2022/lib/data-sources/smart-pagination.ds.mjs +131 -0
  8. package/esm2022/lib/data-sources/subnav.ds.mjs +25 -0
  9. package/esm2022/lib/directives/click-outside.directive.mjs +31 -0
  10. package/esm2022/lib/event-handlers/breadcrumbs.eh.mjs +20 -0
  11. package/esm2022/lib/event-handlers/header.eh.mjs +29 -0
  12. package/esm2022/lib/event-handlers/smart-pagination.eh.mjs +19 -0
  13. package/{esm2020 → esm2022}/lib/event-handlers/subnav.eh.mjs +1 -1
  14. package/esm2022/lib/helpers.mjs +76 -0
  15. package/esm2022/lib/layouts/main-layout/main-layout.ds.mjs +86 -0
  16. package/esm2022/lib/layouts/main-layout/main-layout.eh.mjs +70 -0
  17. package/{esm2020 → esm2022}/lib/layouts/main-layout/main-layout.mjs +5 -5
  18. package/esm2022/lib/layouts/page404-layout/page404-layout.eh.mjs +36 -0
  19. package/{esm2020 → esm2022}/lib/layouts/page404-layout/page404-layout.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/n7-boilerplate-common.module.mjs +23 -23
  21. package/esm2022/lib/pipes/trans.pipe.mjs +47 -0
  22. package/esm2022/lib/services/communication-providers/apollo.provider.mjs +90 -0
  23. package/esm2022/lib/services/communication-providers/rest.provider.mjs +53 -0
  24. package/esm2022/lib/services/communication.service.mjs +78 -0
  25. package/{esm2020 → esm2022}/lib/services/configuration.service.mjs +4 -4
  26. package/esm2022/lib/services/json-config.service.mjs +63 -0
  27. package/esm2022/lib/services/layouts-configuration.service.mjs +27 -0
  28. package/esm2022/lib/services/local-config.service.mjs +46 -0
  29. package/{esm2020 → esm2022}/lib/services/main-state.service.mjs +4 -4
  30. package/{fesm2020 → fesm2022}/net7-boilerplate-common.mjs +88 -87
  31. package/fesm2022/net7-boilerplate-common.mjs.map +1 -0
  32. package/lib/components/container/container.d.ts +1 -1
  33. package/lib/components/grid/grid.d.ts +1 -1
  34. package/lib/components/side-scroller/side-scroller.d.ts +1 -1
  35. package/lib/components/smart-pagination/smart-pagination.d.ts +1 -1
  36. package/lib/config-types/common.d.ts +4 -4
  37. package/lib/directives/click-outside.directive.d.ts +1 -1
  38. package/lib/layouts/main-layout/main-layout.d.ts +1 -1
  39. package/lib/layouts/page404-layout/page404-layout.d.ts +1 -1
  40. package/lib/services/communication.service.d.ts +3 -3
  41. package/package.json +5 -11
  42. package/esm2020/lib/data-sources/header.ds.mjs +0 -72
  43. package/esm2020/lib/data-sources/smart-pagination.ds.mjs +0 -131
  44. package/esm2020/lib/data-sources/subnav.ds.mjs +0 -25
  45. package/esm2020/lib/directives/click-outside.directive.mjs +0 -31
  46. package/esm2020/lib/event-handlers/breadcrumbs.eh.mjs +0 -20
  47. package/esm2020/lib/event-handlers/header.eh.mjs +0 -29
  48. package/esm2020/lib/event-handlers/smart-pagination.eh.mjs +0 -19
  49. package/esm2020/lib/helpers.mjs +0 -76
  50. package/esm2020/lib/layouts/main-layout/main-layout.ds.mjs +0 -86
  51. package/esm2020/lib/layouts/main-layout/main-layout.eh.mjs +0 -70
  52. package/esm2020/lib/layouts/page404-layout/page404-layout.eh.mjs +0 -36
  53. package/esm2020/lib/pipes/trans.pipe.mjs +0 -47
  54. package/esm2020/lib/services/communication-providers/apollo.provider.mjs +0 -90
  55. package/esm2020/lib/services/communication-providers/rest.provider.mjs +0 -53
  56. package/esm2020/lib/services/communication.service.mjs +0 -78
  57. package/esm2020/lib/services/json-config.service.mjs +0 -63
  58. package/esm2020/lib/services/layouts-configuration.service.mjs +0 -27
  59. package/esm2020/lib/services/local-config.service.mjs +0 -46
  60. package/fesm2015/net7-boilerplate-common.mjs +0 -1348
  61. package/fesm2015/net7-boilerplate-common.mjs.map +0 -1
  62. package/fesm2020/net7-boilerplate-common.mjs.map +0 -1
  63. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/config-types/common.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/config-types/index.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/data-sources/breadcrumbs.ds.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/data-sources/facets.ds.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/data-sources/index.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/directives/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/event-handlers/footer.eh.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/event-handlers/index.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/layouts/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/layouts/main-layout/main-layout.config.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/layouts/page404-layout/page404-layout.config.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/layouts/page404-layout/page404-layout.ds.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/models/abstract-layout.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/pipes/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/services/communication-providers/communication-provider.interface.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  81. /package/{esm2020 → esm2022}/net7-boilerplate-common.mjs +0 -0
  82. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,78 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { catchError } from 'rxjs/operators';
3
+ import { EMPTY } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./configuration.service";
6
+ import * as i2 from "./communication-providers/apollo.provider";
7
+ import * as i3 from "./communication-providers/rest.provider";
8
+ export class CommunicationService {
9
+ constructor(config, apollo, rest) {
10
+ this.config = config;
11
+ this.apollo = apollo;
12
+ this.rest = rest;
13
+ try {
14
+ this.communicationConfig = this.config.get('communication');
15
+ this.defaultProvider = this.communicationConfig.defaultProvider;
16
+ }
17
+ catch (err) {
18
+ throw Error('No communications.defaultProvider setted in config');
19
+ }
20
+ }
21
+ request$(requestId, options, provider) {
22
+ const activeProvider = provider || this.defaultProvider;
23
+ const activeProviderConfig = this.communicationConfig.providers[activeProvider];
24
+ if (!activeProviderConfig) {
25
+ throw Error(`There is no config for "${activeProvider}" provider`);
26
+ }
27
+ // provider.type check for retrocompatibility
28
+ const activeProviderType = activeProviderConfig.type || activeProvider;
29
+ if (!this[activeProviderType]) {
30
+ throw Error(`There is no "${activeProviderType}" provider type`);
31
+ }
32
+ const requestOptions = options || {};
33
+ // adding query params
34
+ // to http client httpoptions params
35
+ if (requestOptions.queryParams) {
36
+ requestOptions.httpOptions = {
37
+ ...(requestOptions.httpOptions || {}),
38
+ params: requestOptions.queryParams
39
+ };
40
+ }
41
+ const { onError } = options || {};
42
+ return this[activeProviderType].request$(activeProviderConfig, requestId, requestOptions)
43
+ .pipe(catchError((error) => this.handleError(error, onError)));
44
+ }
45
+ handleError(error, onError) {
46
+ if (onError) {
47
+ onError(error);
48
+ }
49
+ else {
50
+ console.warn('No error handler for communication request', error);
51
+ }
52
+ return EMPTY;
53
+ }
54
+ getUrl(requestId, provider) {
55
+ const activeProvider = provider || this.defaultProvider;
56
+ const activeProviderConfig = this.communicationConfig.providers[activeProvider];
57
+ if (!activeProviderConfig) {
58
+ throw Error(`There is no config for "${activeProvider}" provider`);
59
+ }
60
+ const { baseUrl } = activeProviderConfig;
61
+ if (!requestId) {
62
+ return baseUrl;
63
+ }
64
+ if (!activeProviderConfig.config[requestId]) {
65
+ throw Error(`There is no config for "${requestId}"`);
66
+ }
67
+ return baseUrl + activeProviderConfig.config[requestId];
68
+ }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CommunicationService, deps: [{ token: i1.ConfigurationService }, { token: i2.ApolloProvider }, { token: i3.RestProvider }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CommunicationService, providedIn: 'root' }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: CommunicationService, decorators: [{
73
+ type: Injectable,
74
+ args: [{
75
+ providedIn: 'root',
76
+ }]
77
+ }], ctorParameters: () => [{ type: i1.ConfigurationService }, { type: i2.ApolloProvider }, { type: i3.RestProvider }] });
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXVuaWNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtY29tbW9uL3NyYy9saWIvc2VydmljZXMvY29tbXVuaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBb0N6QyxNQUFNLE9BQU8sb0JBQW9CO0lBSy9CLFlBQ1UsTUFBNEIsRUFDNUIsTUFBc0IsRUFDdEIsSUFBa0I7UUFGbEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBYztRQUUxQixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO1FBQ2xFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FDTixTQUFpQixFQUNqQixPQUFpQyxFQUNqQyxRQUFpQjtRQUVqQixNQUFNLGNBQWMsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUN4RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFaEYsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDMUIsTUFBTSxLQUFLLENBQUMsMkJBQTJCLGNBQWMsWUFBWSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLElBQUksSUFBSSxjQUFjLENBQUM7UUFFdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLGtCQUFrQixpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRXJDLHNCQUFzQjtRQUN0QixvQ0FBb0M7UUFDcEMsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsY0FBYyxDQUFDLFdBQVcsR0FBRztnQkFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsY0FBYyxDQUFDLFdBQVc7YUFDbkMsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsQ0FBSSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDO2FBQ3pGLElBQUksQ0FDSCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQ3hELENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVUsRUFBRSxRQUFTO1FBQzFCLE1BQU0sY0FBYyxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3hELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssQ0FBQywyQkFBMkIsY0FBYyxZQUFZLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLG9CQUFvQixDQUFDO1FBRXpDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsTUFBTSxLQUFLLENBQUMsMkJBQTJCLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sT0FBTyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDOytHQW5GVSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBcG9sbG9Qcm92aWRlciB9IGZyb20gJy4vY29tbXVuaWNhdGlvbi1wcm92aWRlcnMvYXBvbGxvLnByb3ZpZGVyJztcbmltcG9ydCB7IFJlc3RQcm92aWRlciB9IGZyb20gJy4vY29tbXVuaWNhdGlvbi1wcm92aWRlcnMvcmVzdC5wcm92aWRlcic7XG5pbXBvcnQgeyBDb25maWdDb21tb25Db21tdW5pY2F0aW9uIH0gZnJvbSAnLi4vY29uZmlnLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgQ29tbXVuaWNhdGlvblF1ZXJ5UGFyYW1zID0gSHR0cFBhcmFtcyB8IHtcbiAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbW11bmljYXRpb25IdHRwT3B0aW9ucyA9IHtcbiAgYm9keT86IGFueTtcbiAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICBwYXJhbXM/OiBDb21tdW5pY2F0aW9uUXVlcnlQYXJhbXM7XG4gIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbXVuaWNhdGlvbk9wdGlvbnM8VT4gPSB7XG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSc7XG4gIHBhcmFtcz86IFU7XG4gIHVybFBhcmFtcz86IHN0cmluZyB8IG9iamVjdDtcbiAgcXVlcnlQYXJhbXM/OiBDb21tdW5pY2F0aW9uUXVlcnlQYXJhbXM7XG4gIGh0dHBPcHRpb25zPzogQ29tbXVuaWNhdGlvbkh0dHBPcHRpb25zO1xuICBvbkVycm9yPzogKGVycikgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvbW11bmljYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZWZhdWx0UHJvdmlkZXI6IHN0cmluZztcblxuICBwcml2YXRlIGNvbW11bmljYXRpb25Db25maWc6IENvbmZpZ0NvbW1vbkNvbW11bmljYXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBvbGxvOiBBcG9sbG9Qcm92aWRlcixcbiAgICBwcml2YXRlIHJlc3Q6IFJlc3RQcm92aWRlcixcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY29tbXVuaWNhdGlvbkNvbmZpZyA9IHRoaXMuY29uZmlnLmdldCgnY29tbXVuaWNhdGlvbicpO1xuICAgICAgdGhpcy5kZWZhdWx0UHJvdmlkZXIgPSB0aGlzLmNvbW11bmljYXRpb25Db25maWcuZGVmYXVsdFByb3ZpZGVyO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgRXJyb3IoJ05vIGNvbW11bmljYXRpb25zLmRlZmF1bHRQcm92aWRlciBzZXR0ZWQgaW4gY29uZmlnJyk7XG4gICAgfVxuICB9XG5cbiAgcmVxdWVzdCQ8VCA9IGFueSwgVSA9IGFueT4oXG4gICAgcmVxdWVzdElkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvbW11bmljYXRpb25PcHRpb25zPFU+LFxuICAgIHByb3ZpZGVyPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGFjdGl2ZVByb3ZpZGVyID0gcHJvdmlkZXIgfHwgdGhpcy5kZWZhdWx0UHJvdmlkZXI7XG4gICAgY29uc3QgYWN0aXZlUHJvdmlkZXJDb25maWcgPSB0aGlzLmNvbW11bmljYXRpb25Db25maWcucHJvdmlkZXJzW2FjdGl2ZVByb3ZpZGVyXTtcblxuICAgIGlmICghYWN0aXZlUHJvdmlkZXJDb25maWcpIHtcbiAgICAgIHRocm93IEVycm9yKGBUaGVyZSBpcyBubyBjb25maWcgZm9yIFwiJHthY3RpdmVQcm92aWRlcn1cIiBwcm92aWRlcmApO1xuICAgIH1cblxuICAgIC8vIHByb3ZpZGVyLnR5cGUgY2hlY2sgZm9yIHJldHJvY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IGFjdGl2ZVByb3ZpZGVyVHlwZSA9IGFjdGl2ZVByb3ZpZGVyQ29uZmlnLnR5cGUgfHwgYWN0aXZlUHJvdmlkZXI7XG5cbiAgICBpZiAoIXRoaXNbYWN0aXZlUHJvdmlkZXJUeXBlXSkge1xuICAgICAgdGhyb3cgRXJyb3IoYFRoZXJlIGlzIG5vIFwiJHthY3RpdmVQcm92aWRlclR5cGV9XCIgcHJvdmlkZXIgdHlwZWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIGFkZGluZyBxdWVyeSBwYXJhbXNcbiAgICAvLyB0byBodHRwIGNsaWVudCBodHRwb3B0aW9ucyBwYXJhbXNcbiAgICBpZiAocmVxdWVzdE9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zLmh0dHBPcHRpb25zID0ge1xuICAgICAgICAuLi4ocmVxdWVzdE9wdGlvbnMuaHR0cE9wdGlvbnMgfHwge30pLFxuICAgICAgICBwYXJhbXM6IHJlcXVlc3RPcHRpb25zLnF1ZXJ5UGFyYW1zXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgb25FcnJvciB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gdGhpc1thY3RpdmVQcm92aWRlclR5cGVdLnJlcXVlc3QkPFQ+KGFjdGl2ZVByb3ZpZGVyQ29uZmlnLCByZXF1ZXN0SWQsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCBvbkVycm9yKSksXG4gICAgICApO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyb3IsIG9uRXJyb3I6IChlcnIpID0+IHZvaWQpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlcnJvciBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW9uIHJlcXVlc3QnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIEVNUFRZO1xuICB9XG5cbiAgZ2V0VXJsKHJlcXVlc3RJZD8sIHByb3ZpZGVyPykge1xuICAgIGNvbnN0IGFjdGl2ZVByb3ZpZGVyID0gcHJvdmlkZXIgfHwgdGhpcy5kZWZhdWx0UHJvdmlkZXI7XG4gICAgY29uc3QgYWN0aXZlUHJvdmlkZXJDb25maWcgPSB0aGlzLmNvbW11bmljYXRpb25Db25maWcucHJvdmlkZXJzW2FjdGl2ZVByb3ZpZGVyXTtcblxuICAgIGlmICghYWN0aXZlUHJvdmlkZXJDb25maWcpIHtcbiAgICAgIHRocm93IEVycm9yKGBUaGVyZSBpcyBubyBjb25maWcgZm9yIFwiJHthY3RpdmVQcm92aWRlcn1cIiBwcm92aWRlcmApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmFzZVVybCB9ID0gYWN0aXZlUHJvdmlkZXJDb25maWc7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmV0dXJuIGJhc2VVcmw7XG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVQcm92aWRlckNvbmZpZy5jb25maWdbcmVxdWVzdElkXSkge1xuICAgICAgdGhyb3cgRXJyb3IoYFRoZXJlIGlzIG5vIGNvbmZpZyBmb3IgXCIke3JlcXVlc3RJZH1cImApO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZVVybCArIGFjdGl2ZVByb3ZpZGVyQ29uZmlnLmNvbmZpZ1tyZXF1ZXN0SWRdO1xuICB9XG59XG4iXX0=
@@ -6,13 +6,13 @@ export class ConfigurationService {
6
6
  this.get = (key) => this.defaults[key];
7
7
  this.set = (key, value) => { this.defaults[key] = value; };
8
8
  }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
10
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ConfigurationService, providedIn: 'root' }); }
9
11
  }
10
- ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11
- ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ConfigurationService, providedIn: 'root' });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ConfigurationService, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ConfigurationService, decorators: [{
13
13
  type: Injectable,
14
14
  args: [{
15
15
  providedIn: 'root',
16
16
  }]
17
17
  }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtY29tbW9uL3NyYy9saWIvc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFJVSxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBRXBCLFFBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQyxRQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUM3RDs7a0hBTlksb0JBQW9CO3NIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRzOiBhbnkgPSB7fTtcblxuICBwdWJsaWMgZ2V0ID0gKGtleSkgPT4gdGhpcy5kZWZhdWx0c1trZXldO1xuXG4gIHB1YmxpYyBzZXQgPSAoa2V5LCB2YWx1ZSkgPT4geyB0aGlzLmRlZmF1bHRzW2tleV0gPSB2YWx1ZTsgfVxufVxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtY29tbW9uL3NyYy9saWIvc2VydmljZXMvY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxvQkFBb0I7SUFIakM7UUFJVSxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBRXBCLFFBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQyxRQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUM3RDsrR0FOWSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRzOiBhbnkgPSB7fTtcblxuICBwdWJsaWMgZ2V0ID0gKGtleSkgPT4gdGhpcy5kZWZhdWx0c1trZXldO1xuXG4gIHB1YmxpYyBzZXQgPSAoa2V5LCB2YWx1ZSkgPT4geyB0aGlzLmRlZmF1bHRzW2tleV0gPSB2YWx1ZTsgfVxufVxuIl19
@@ -0,0 +1,63 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { tap, catchError } from 'rxjs/operators';
3
+ import { of } from 'rxjs';
4
+ import { isObject, merge } from 'lodash';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ import * as i2 from "./configuration.service";
8
+ export class JsonConfigService {
9
+ constructor(http, config) {
10
+ this.http = http;
11
+ this.config = config;
12
+ }
13
+ load(path) {
14
+ return this.http.get(path).pipe(catchError(() => of({})), tap((response) => this._handleResponse(response))).toPromise();
15
+ }
16
+ _handleResponse(response) {
17
+ // set loaded json config
18
+ if (response) {
19
+ // merge config
20
+ Object.keys(response).forEach((key) => {
21
+ const oldValue = this.config.get(key);
22
+ const newValue = response[key];
23
+ const mergeValue = this.mergeConfigKey(oldValue, newValue);
24
+ this.config.set(key, mergeValue);
25
+ });
26
+ // config keys colors
27
+ if (response['config-keys']) {
28
+ const headTag = document.querySelector('head');
29
+ const styleElement = document.createElement('style');
30
+ const styles = [];
31
+ Object.keys(response['config-keys']).forEach((key) => {
32
+ const configKey = response['config-keys'][key] || {};
33
+ const className = configKey['class-name'];
34
+ if (configKey.color && configKey.color.hex) {
35
+ // add css class
36
+ styles.push(`--color-${className}: ${configKey.color.hex};`);
37
+ }
38
+ });
39
+ if (styles.length) {
40
+ styles.unshift(':root {');
41
+ styles.push('}');
42
+ styleElement.appendChild(document.createTextNode(styles.join('\n')));
43
+ headTag.appendChild(styleElement);
44
+ }
45
+ }
46
+ }
47
+ }
48
+ mergeConfigKey(oldValue, newValue) {
49
+ if (isObject(oldValue) && isObject(newValue)) {
50
+ return merge(oldValue, newValue);
51
+ }
52
+ return newValue || oldValue;
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: JsonConfigService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
55
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: JsonConfigService, providedIn: 'root' }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: JsonConfigService, decorators: [{
58
+ type: Injectable,
59
+ args: [{
60
+ providedIn: 'root',
61
+ }]
62
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigurationService }] });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL243LWJvaWxlcnBsYXRlLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL2pzb24tY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7QUFNekMsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUNVLElBQWdCLEVBQ2hCLE1BQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7SUFDbkMsQ0FBQztJQUVKLElBQUksQ0FBQyxJQUFJO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDeEIsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ2xELENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFRO1FBQzlCLHlCQUF5QjtRQUN6QixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsZUFBZTtZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxxQkFBcUI7WUFDckIsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFckQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUVsQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNuRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBRTFDLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUMzQyxnQkFBZ0I7d0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxTQUFTLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUMvRCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JFLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVE7UUFDdEMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUM7SUFDOUIsQ0FBQzsrR0F4RFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNPYmplY3QsIG1lcmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSnNvbkNvbmZpZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICApIHt9XG5cbiAgbG9hZChwYXRoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChwYXRoKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih7fSkpLFxuICAgICAgdGFwKChyZXNwb25zZSkgPT4gdGhpcy5faGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpKSxcbiAgICApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAvLyBzZXQgbG9hZGVkIGpzb24gY29uZmlnXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAvLyBtZXJnZSBjb25maWdcbiAgICAgIE9iamVjdC5rZXlzKHJlc3BvbnNlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmNvbmZpZy5nZXQoa2V5KTtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSByZXNwb25zZVtrZXldO1xuICAgICAgICBjb25zdCBtZXJnZVZhbHVlID0gdGhpcy5tZXJnZUNvbmZpZ0tleShvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICB0aGlzLmNvbmZpZy5zZXQoa2V5LCBtZXJnZVZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBjb25maWcga2V5cyBjb2xvcnNcbiAgICAgIGlmIChyZXNwb25zZVsnY29uZmlnLWtleXMnXSkge1xuICAgICAgICBjb25zdCBoZWFkVGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IFtdO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3BvbnNlWydjb25maWcta2V5cyddKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb25maWdLZXkgPSByZXNwb25zZVsnY29uZmlnLWtleXMnXVtrZXldIHx8IHt9O1xuICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGNvbmZpZ0tleVsnY2xhc3MtbmFtZSddO1xuXG4gICAgICAgICAgaWYgKGNvbmZpZ0tleS5jb2xvciAmJiBjb25maWdLZXkuY29sb3IuaGV4KSB7XG4gICAgICAgICAgICAvLyBhZGQgY3NzIGNsYXNzXG4gICAgICAgICAgICBzdHlsZXMucHVzaChgLS1jb2xvci0ke2NsYXNzTmFtZX06ICR7Y29uZmlnS2V5LmNvbG9yLmhleH07YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc3R5bGVzLmxlbmd0aCkge1xuICAgICAgICAgIHN0eWxlcy51bnNoaWZ0KCc6cm9vdCB7Jyk7XG4gICAgICAgICAgc3R5bGVzLnB1c2goJ30nKTtcbiAgICAgICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5bGVzLmpvaW4oJ1xcbicpKSk7XG4gICAgICAgICAgaGVhZFRhZy5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1lcmdlQ29uZmlnS2V5KG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgIGlmIChpc09iamVjdChvbGRWYWx1ZSkgJiYgaXNPYmplY3QobmV3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gbWVyZ2Uob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlIHx8IG9sZFZhbHVlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LayoutsConfigurationService {
4
+ constructor(config) {
5
+ this.config = config;
6
+ this.defaults = {};
7
+ this.get = (key) => this.defaults[key];
8
+ this.set = (key, value) => { this.defaults[key] = value; };
9
+ if (this.config?.layouts) {
10
+ Object.keys(this.config.layouts).forEach((key) => {
11
+ this.set(key, this.config.layouts[key]);
12
+ });
13
+ }
14
+ }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LayoutsConfigurationService, deps: [{ token: 'config' }], target: i0.ɵɵFactoryTarget.Injectable }); }
16
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LayoutsConfigurationService, providedIn: 'root' }); }
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LayoutsConfigurationService, decorators: [{
19
+ type: Injectable,
20
+ args: [{
21
+ providedIn: 'root',
22
+ }]
23
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
24
+ type: Inject,
25
+ args: ['config']
26
+ }] }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0cy1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9sYXlvdXRzLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLDJCQUEyQjtJQUd0QyxZQUFzQyxNQUFXO1FBQVgsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQUZ6QyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBVXBCLFFBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQyxRQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQVQxRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7K0dBVFUsMkJBQTJCLGtCQUdsQixRQUFRO21IQUhqQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBSWMsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMYXlvdXRzQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRzOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjb25maWcnKSBwcml2YXRlIGNvbmZpZzogYW55KSB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5sYXlvdXRzKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5sYXlvdXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgdGhpcy5zZXQoa2V5LCB0aGlzLmNvbmZpZy5sYXlvdXRzW2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCA9IChrZXkpID0+IHRoaXMuZGVmYXVsdHNba2V5XTtcblxuICBwdWJsaWMgc2V0ID0gKGtleSwgdmFsdWUpID0+IHsgdGhpcy5kZWZhdWx0c1trZXldID0gdmFsdWU7IH1cbn1cbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { tap } from 'rxjs/operators';
3
+ import { of } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./configuration.service";
6
+ export class LocalConfigService {
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ load(config) {
11
+ return of(true).pipe(tap(() => {
12
+ if (config) {
13
+ Object.keys(config).forEach((key) => this.config.set(key, config[key]));
14
+ // config keys colors
15
+ if (config['config-keys']) {
16
+ const headTag = document.querySelector('head');
17
+ const styleElement = document.createElement('style');
18
+ const styles = [];
19
+ Object.keys(config['config-keys']).forEach((key) => {
20
+ const configKey = config['config-keys'][key] || {};
21
+ const className = configKey['class-name'];
22
+ if (configKey.color && configKey.color.hex) {
23
+ // add css class
24
+ styles.push(`--color-${className}: ${configKey.color.hex};`);
25
+ }
26
+ });
27
+ if (styles.length) {
28
+ styles.unshift(':root {');
29
+ styles.push('}');
30
+ styleElement.appendChild(document.createTextNode(styles.join('\n')));
31
+ headTag.appendChild(styleElement);
32
+ }
33
+ }
34
+ }
35
+ })).toPromise();
36
+ }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LocalConfigService, deps: [{ token: i1.ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LocalConfigService, providedIn: 'root' }); }
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: LocalConfigService, decorators: [{
41
+ type: Injectable,
42
+ args: [{
43
+ providedIn: 'root',
44
+ }]
45
+ }], ctorParameters: () => [{ type: i1.ConfigurationService }] });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uNy1ib2lsZXJwbGF0ZS1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFNMUIsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNVLE1BQTRCO1FBQTVCLFdBQU0sR0FBTixNQUFNLENBQXNCO0lBQ25DLENBQUM7SUFFSixJQUFJLENBQUMsTUFBTTtRQUNULE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDbEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV4RSxxQkFBcUI7Z0JBQ3JCLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRXJELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFFbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDakQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDbkQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUUxQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDM0MsZ0JBQWdCOzRCQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDL0QsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDakIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNoQixDQUFDOytHQXRDVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxDb25maWdTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICApIHt9XG5cbiAgbG9hZChjb25maWcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBvZih0cnVlKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZykge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgoa2V5KSA9PiB0aGlzLmNvbmZpZy5zZXQoa2V5LCBjb25maWdba2V5XSkpO1xuXG4gICAgICAgICAgLy8gY29uZmlnIGtleXMgY29sb3JzXG4gICAgICAgICAgaWYgKGNvbmZpZ1snY29uZmlnLWtleXMnXSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZFRhZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IFtdO1xuXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25maWdbJ2NvbmZpZy1rZXlzJ10pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb25maWdLZXkgPSBjb25maWdbJ2NvbmZpZy1rZXlzJ11ba2V5XSB8fCB7fTtcbiAgICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gY29uZmlnS2V5WydjbGFzcy1uYW1lJ107XG5cbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ0tleS5jb2xvciAmJiBjb25maWdLZXkuY29sb3IuaGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGNzcyBjbGFzc1xuICAgICAgICAgICAgICAgIHN0eWxlcy5wdXNoKGAtLWNvbG9yLSR7Y2xhc3NOYW1lfTogJHtjb25maWdLZXkuY29sb3IuaGV4fTtgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN0eWxlcy51bnNoaWZ0KCc6cm9vdCB7Jyk7XG4gICAgICAgICAgICAgIHN0eWxlcy5wdXNoKCd9Jyk7XG4gICAgICAgICAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZXMuam9pbignXFxuJykpKTtcbiAgICAgICAgICAgICAgaGVhZFRhZy5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKS50b1Byb21pc2UoKTtcbiAgfVxufVxuIl19
@@ -43,13 +43,13 @@ export class MainStateService {
43
43
  throw Error(`${type} stream ${key} does not exists!`);
44
44
  return this[type][key];
45
45
  }
46
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MainStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
47
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MainStateService, providedIn: 'root' }); }
46
48
  }
47
- MainStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MainStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
48
- MainStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MainStateService, providedIn: 'root' });
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MainStateService, decorators: [{
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MainStateService, decorators: [{
50
50
  type: Injectable,
51
51
  args: [{
52
52
  providedIn: 'root',
53
53
  }]
54
54
  }] });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtY29tbW9uL3NyYy9saWIvc2VydmljZXMvbWFpbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLckMsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlFLGlCQUFpQjtRQUNULFdBQU0sR0FBUSxFQUFFLENBQUM7UUFFekIsa0JBQWtCO1FBQ1YsWUFBTyxHQVVYO1lBQ0EsU0FBUyxFQUFFLElBQUksYUFBYSxFQUFFO1lBQzlCLFNBQVMsRUFBRSxJQUFJLGFBQWEsRUFBRTtZQUM5QixNQUFNLEVBQUUsSUFBSSxhQUFhLEVBQUU7WUFDM0IsV0FBVyxFQUFFLElBQUksYUFBYSxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLGFBQWEsRUFBRTtZQUM1QixNQUFNLEVBQUUsSUFBSSxhQUFhLEVBQUU7WUFDM0IsWUFBWSxFQUFFLElBQUksYUFBYSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxJQUFJLGFBQWEsRUFBRTtZQUMzQixZQUFZLEVBQUUsSUFBSSxhQUFhLEVBQUU7U0FDbEMsQ0FBQztRQUVHLFNBQUksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEQsZUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV2RCxXQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFaEYsaUJBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVyRixRQUFHLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLGNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FxQnhEO0lBbkJRLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBMkI7UUFDdkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBWSxFQUFFLEdBQVcsRUFBRSxRQUFhO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sSUFBSSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUM7UUFFNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7OEdBekRVLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWFpblN0YXRlU2VydmljZSB7XG4gIC8vIGN1c3RvbSBzdHJlYW1zXG4gIHByaXZhdGUgY3VzdG9tOiBhbnkgPSB7fTtcblxuICAvLyBkZWZhdWx0IHN0cmVhbXNcbiAgcHJpdmF0ZSBkZWZhdWx0OiB7XG4gICAgaGVhZFRpdGxlOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgcGFnZVRpdGxlOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgc3VibmF2OiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgYnJlYWRjcnVtYnM6IFJlcGxheVN1YmplY3Q8YW55PjtcbiAgICBmaWx0ZXJzOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgaGVhZGVyOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgaGVhZGVyRXZlbnRzOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgZm9vdGVyOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgZm9vdGVyRXZlbnRzOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gIH0gPSB7XG4gICAgICBoZWFkVGl0bGU6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBwYWdlVGl0bGU6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBzdWJuYXY6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBicmVhZGNydW1iczogbmV3IFJlcGxheVN1YmplY3QoKSxcbiAgICAgIGZpbHRlcnM6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBoZWFkZXI6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBoZWFkZXJFdmVudHM6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBmb290ZXI6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBmb290ZXJFdmVudHM6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgfTtcblxuICBwdWJsaWMgZ2V0JCA9IChrZXk6IHN0cmluZykgPT4gdGhpcy5fZ2V0KCdkZWZhdWx0Jywga2V5KTtcblxuICBwdWJsaWMgZ2V0Q3VzdG9tJCA9IChrZXk6IHN0cmluZykgPT4gdGhpcy5fZ2V0KCdjdXN0b20nLCBrZXkpO1xuXG4gIHB1YmxpYyB1cGRhdGUgPSAoa2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHRoaXMuX3VwZGF0ZSgnZGVmYXVsdCcsIGtleSwgbmV3VmFsdWUpO1xuXG4gIHB1YmxpYyB1cGRhdGVDdXN0b20gPSAoa2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHRoaXMuX3VwZGF0ZSgnY3VzdG9tJywga2V5LCBuZXdWYWx1ZSk7XG5cbiAgcHVibGljIGhhcyA9IChrZXk6IHN0cmluZykgPT4gISF0aGlzLmRlZmF1bHRba2V5XTtcblxuICBwdWJsaWMgaGFzQ3VzdG9tID0gKGtleTogc3RyaW5nKSA9PiAhIXRoaXMuY3VzdG9tW2tleV07XG5cbiAgcHVibGljIGFkZEN1c3RvbShrZXk6IHN0cmluZywgc3RyZWFtJDogUmVwbGF5U3ViamVjdDxhbnk+KSB7XG4gICAgaWYgKHRoaXMuY3VzdG9tW2tleV0pIHRocm93IEVycm9yKGBjdXN0b20gc3RyZWFtICR7a2V5fSBleGlzdHMhYCk7XG5cbiAgICB0aGlzLmN1c3RvbVtrZXldID0gc3RyZWFtJDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZSh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzW3R5cGVdKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gZ3JvdXAgZG9lcyBub3QgZXhpc3RzIWApO1xuICAgIGlmICghdGhpc1t0eXBlXVtrZXldKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gJHtrZXl9IGRvZXMgbm90IGV4aXN0cyFgKTtcblxuICAgIHRoaXNbdHlwZV1ba2V5XS5uZXh0KG5ld1ZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldCh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzW3R5cGVdKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gZ3JvdXAgZG9lcyBub3QgZXhpc3RzIWApO1xuICAgIGlmICghdGhpc1t0eXBlXVtrZXldKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gJHtrZXl9IGRvZXMgbm90IGV4aXN0cyFgKTtcblxuICAgIHJldHVybiB0aGlzW3R5cGVdW2tleV07XG4gIH1cbn1cbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbjctYm9pbGVycGxhdGUtY29tbW9uL3NyYy9saWIvc2VydmljZXMvbWFpbi1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLckMsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlFLGlCQUFpQjtRQUNULFdBQU0sR0FBUSxFQUFFLENBQUM7UUFFekIsa0JBQWtCO1FBQ1YsWUFBTyxHQVVYO1lBQ0EsU0FBUyxFQUFFLElBQUksYUFBYSxFQUFFO1lBQzlCLFNBQVMsRUFBRSxJQUFJLGFBQWEsRUFBRTtZQUM5QixNQUFNLEVBQUUsSUFBSSxhQUFhLEVBQUU7WUFDM0IsV0FBVyxFQUFFLElBQUksYUFBYSxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLGFBQWEsRUFBRTtZQUM1QixNQUFNLEVBQUUsSUFBSSxhQUFhLEVBQUU7WUFDM0IsWUFBWSxFQUFFLElBQUksYUFBYSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxJQUFJLGFBQWEsRUFBRTtZQUMzQixZQUFZLEVBQUUsSUFBSSxhQUFhLEVBQUU7U0FDbEMsQ0FBQztRQUVHLFNBQUksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEQsZUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV2RCxXQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFaEYsaUJBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVyRixRQUFHLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLGNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FxQnhEO0lBbkJRLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBMkI7UUFDdkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBWSxFQUFFLEdBQVcsRUFBRSxRQUFhO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sSUFBSSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLGdDQUFnQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUM7UUFFNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzsrR0F6RFUsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWFpblN0YXRlU2VydmljZSB7XG4gIC8vIGN1c3RvbSBzdHJlYW1zXG4gIHByaXZhdGUgY3VzdG9tOiBhbnkgPSB7fTtcblxuICAvLyBkZWZhdWx0IHN0cmVhbXNcbiAgcHJpdmF0ZSBkZWZhdWx0OiB7XG4gICAgaGVhZFRpdGxlOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgcGFnZVRpdGxlOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgc3VibmF2OiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgYnJlYWRjcnVtYnM6IFJlcGxheVN1YmplY3Q8YW55PjtcbiAgICBmaWx0ZXJzOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgaGVhZGVyOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgaGVhZGVyRXZlbnRzOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgZm9vdGVyOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gICAgZm9vdGVyRXZlbnRzOiBSZXBsYXlTdWJqZWN0PGFueT47XG4gIH0gPSB7XG4gICAgICBoZWFkVGl0bGU6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBwYWdlVGl0bGU6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBzdWJuYXY6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBicmVhZGNydW1iczogbmV3IFJlcGxheVN1YmplY3QoKSxcbiAgICAgIGZpbHRlcnM6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBoZWFkZXI6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBoZWFkZXJFdmVudHM6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBmb290ZXI6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgICBmb290ZXJFdmVudHM6IG5ldyBSZXBsYXlTdWJqZWN0KCksXG4gICAgfTtcblxuICBwdWJsaWMgZ2V0JCA9IChrZXk6IHN0cmluZykgPT4gdGhpcy5fZ2V0KCdkZWZhdWx0Jywga2V5KTtcblxuICBwdWJsaWMgZ2V0Q3VzdG9tJCA9IChrZXk6IHN0cmluZykgPT4gdGhpcy5fZ2V0KCdjdXN0b20nLCBrZXkpO1xuXG4gIHB1YmxpYyB1cGRhdGUgPSAoa2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHRoaXMuX3VwZGF0ZSgnZGVmYXVsdCcsIGtleSwgbmV3VmFsdWUpO1xuXG4gIHB1YmxpYyB1cGRhdGVDdXN0b20gPSAoa2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpID0+IHRoaXMuX3VwZGF0ZSgnY3VzdG9tJywga2V5LCBuZXdWYWx1ZSk7XG5cbiAgcHVibGljIGhhcyA9IChrZXk6IHN0cmluZykgPT4gISF0aGlzLmRlZmF1bHRba2V5XTtcblxuICBwdWJsaWMgaGFzQ3VzdG9tID0gKGtleTogc3RyaW5nKSA9PiAhIXRoaXMuY3VzdG9tW2tleV07XG5cbiAgcHVibGljIGFkZEN1c3RvbShrZXk6IHN0cmluZywgc3RyZWFtJDogUmVwbGF5U3ViamVjdDxhbnk+KSB7XG4gICAgaWYgKHRoaXMuY3VzdG9tW2tleV0pIHRocm93IEVycm9yKGBjdXN0b20gc3RyZWFtICR7a2V5fSBleGlzdHMhYCk7XG5cbiAgICB0aGlzLmN1c3RvbVtrZXldID0gc3RyZWFtJDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZSh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzW3R5cGVdKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gZ3JvdXAgZG9lcyBub3QgZXhpc3RzIWApO1xuICAgIGlmICghdGhpc1t0eXBlXVtrZXldKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gJHtrZXl9IGRvZXMgbm90IGV4aXN0cyFgKTtcblxuICAgIHRoaXNbdHlwZV1ba2V5XS5uZXh0KG5ld1ZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldCh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzW3R5cGVdKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gZ3JvdXAgZG9lcyBub3QgZXhpc3RzIWApO1xuICAgIGlmICghdGhpc1t0eXBlXVtrZXldKSB0aHJvdyBFcnJvcihgJHt0eXBlfSBzdHJlYW0gJHtrZXl9IGRvZXMgbm90IGV4aXN0cyFgKTtcblxuICAgIHJldHVybiB0aGlzW3R5cGVdW2tleV07XG4gIH1cbn1cbiJdfQ==