@c8y/ngx-components 1019.10.1 → 1019.12.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.
@@ -38,6 +38,7 @@ export * from './outlet.directive';
38
38
  export * from './permissions.service';
39
39
  export * from './progress-bar.component';
40
40
  export * from './retry-with-delay.operator';
41
+ export * from './service-registry.service';
41
42
  export * from './shorten-user-name.pipe';
42
43
  export * from './should-show-mo.pipe';
43
44
  export * from './show-if-filter.pipe';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mDAAmD,CAAC;AAClE,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AACjE,cAAc,qDAAqD,CAAC;AACpE,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mDAAmD,CAAC;AAClE,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iDAAiD,CAAC;AAChE,cAAc,kDAAkD,CAAC;AACjE,cAAc,qDAAqD,CAAC;AACpE,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { Injector, Type } from '@angular/core';
2
+ import { PluginsResolveService } from '../plugins';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Global namespace declaration to enhance type safety for extension keys and associated service types.
6
+ * Extend the `ExtensionKeys` interface within this namespace to declare new extension keys and their service types.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Extending the CumulocityServiceRegistry with a new service
11
+ * declare global {
12
+ * namespace CumulocityServiceRegistry {
13
+ * interface ExtensionKeys {
14
+ * layersServiceKey: TestService;
15
+ * }
16
+ *
17
+ * interface TestService {
18
+ * getLayers(): Promise<string[]>;
19
+ * }
20
+ * }
21
+ * }
22
+ * ```
23
+ */
24
+ declare global {
25
+ /**
26
+ * Global namespace declaration to enhance type safety for extension keys and associated service types of the `ServiceRegistry`.
27
+ */
28
+ namespace CumulocityServiceRegistry {
29
+ /**
30
+ * Holds the association between extension keys and their corresponding service types.
31
+ * Extend this interface to declare new extension keys and their service types.
32
+ */
33
+ interface ExtensionKeys {
34
+ [key: string]: unknown;
35
+ }
36
+ }
37
+ }
38
+ /**
39
+ * Registers a service using a specified extension key.
40
+ * This function facilitates dynamic service registration, enabling services
41
+ * to be retrieved and used throughout the application based on their extension key.
42
+ *
43
+ * @param extensionKey The unique identifier for the service, defined within the ExtensionKeys interface.
44
+ * @param service The class type of the service to register.
45
+ * @returns A provider configuration for Angular's dependency injection, allowing the service to be injected where needed.
46
+ *
47
+ * * @example
48
+ * ```typescript
49
+ * hookService('layersServiceKey', TestService);
50
+ * ```
51
+ */
52
+ export declare function hookService<T extends keyof CumulocityServiceRegistry.ExtensionKeys>(extensionKey: T, service: Type<CumulocityServiceRegistry.ExtensionKeys[T]>): import("@angular/core").ValueProvider | import("@angular/core").ClassProvider | import("@angular/core").ExistingProvider;
53
+ /**
54
+ * Service for managing and retrieving dynamically registered services within the application.
55
+ * It leverages a map of InjectionTokens to associate services with unique extension keys.
56
+ */
57
+ export declare class ServiceRegistry {
58
+ protected injectors: Injector[];
59
+ constructor(rootInjector: Injector, pluginService: PluginsResolveService);
60
+ /**
61
+ * Retrieves instances of services registered under a specified extension key.
62
+ *
63
+ * @param key - The extension key associated with the desired service.
64
+ * @returns An array of service instances registered under the given key.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * // Retrieving instances of Service example
69
+ * const layersServices = serviceRegistry.get('layersServiceKey');
70
+ * layersServices.forEach(service => service.get().then(layer => console.log(layer)));
71
+ * ```
72
+ */
73
+ get<T extends keyof CumulocityServiceRegistry.ExtensionKeys, R = CumulocityServiceRegistry.ExtensionKeys[T]>(key: T): R[];
74
+ /**
75
+ * Allows to retrieve all registered extension keys.
76
+ *
77
+ * @returns An array of extension keys that have been registered.
78
+ */
79
+ getRegisteredExtensionKeys(): Array<keyof CumulocityServiceRegistry.ExtensionKeys>;
80
+ static ɵfac: i0.ɵɵFactoryDeclaration<ServiceRegistry, never>;
81
+ static ɵprov: i0.ɵɵInjectableDeclaration<ServiceRegistry>;
82
+ }
83
+ //# sourceMappingURL=service-registry.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-registry.service.d.ts","sourceRoot":"","sources":["../../../core/common/service-registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;;AAGnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,CAAC,MAAM,CAAC;IACb;;OAEG;IAEH,UAAU,yBAAyB,CAAC;QAClC;;;WAGG;QACH,UAAU,aAAa;YACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;SACxB;KACF;CACF;AAOD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,yBAAyB,CAAC,aAAa,EACjF,YAAY,EAAE,CAAC,EACf,OAAO,EAAE,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,4HAU1D;AAED;;;GAGG;AACH,qBAGa,eAAe;IAC1B,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;gBAEpB,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,qBAAqB;IAKxE;;;;;;;;;;;;OAYG;IACH,GAAG,CACD,CAAC,SAAS,MAAM,yBAAyB,CAAC,aAAa,EACvD,CAAC,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,EAC9C,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;IAUd;;;;OAIG;IACH,0BAA0B,IAAI,KAAK,CAAC,MAAM,yBAAyB,CAAC,aAAa,CAAC;yCAvCvE,eAAe;6CAAf,eAAe;CA0C3B"}
@@ -37,6 +37,7 @@ export * from './outlet.directive';
37
37
  export * from './permissions.service';
38
38
  export * from './progress-bar.component';
39
39
  export * from './retry-with-delay.operator';
40
+ export * from './service-registry.service';
40
41
  export * from './shorten-user-name.pipe';
41
42
  export * from './should-show-mo.pipe';
42
43
  export * from './show-if-filter.pipe';
@@ -59,4 +60,4 @@ export * from './virtual-scroll/virtual-scroll-window.directive';
59
60
  export * from './virtual-scroll/virtual-scroller-wrapper.component';
60
61
  export * from './zip.service';
61
62
  export * from './asset-link.pipe';
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQXBwbGljYXRpb25PcHRpb25zIH0gZnJvbSAnQGM4eS9kZXZraXQvb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2J5dGVzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uLmNvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnQtb3V0bGV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RldmljZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJvcGRvd24tZGlyZWN0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2V4dGVuc2lvbi1ob29rcyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JPZi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JPZi5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyaWMtZmlsZS1pY29uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW8uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1ncm91cC1pY29uLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9nbG9iYWwtY29uZmlnLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cC1mcmFnbWVudC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9odW1hbml6ZS1hcHAtbmFtZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2h1bWFuaXplLWFwcC1uYW1lLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odW1hbml6ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vaWNvbi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9pZi1hbGxvd2VkLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkLW1vcmUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21hbmFnZWQtb2JqZWN0LXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXAtZnVuY3Rpb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21hcmtkb3duLXRvLWh0bWwucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21lbW9pemUuZGVjb3JhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbW8tbmFtZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbnVtYmVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tcmVzdWx0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL29wdGlvbnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL291dGxldC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JldHJ5LXdpdGgtZGVsYXkub3BlcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9zaG9ydGVuLXVzZXItbmFtZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hvdWxkLXNob3ctbW8ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nob3ctaWYtZmlsdGVyLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9za2lwLWxpbmsuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUtc2VydmljZS5hYnN0cmFjdCc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3N0cmluZ2lmeS1vYmplY3QucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYnNldC1hcmlhLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC11aS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dGFyZWEtYXV0b3Jlc2l6ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90aHJvdHRsZS5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi91aS1zdGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1uYW1lLWluaXRpYWxzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy1zdG9yYWdlLWxvY2FsJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLXN0b3JlLWludmVudG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwtd2luZG93LXN0cmF0ZWd5JztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwtd2luZG93LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi96aXAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Fzc2V0LWxpbmsucGlwZSc7XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBcHBsaWNhdGlvbk9wdGlvbnMgfSBmcm9tICdAYzh5L2RldmtpdC9vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vYnl0ZXMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24uY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC1vdXRsZXQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZGV2aWNlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kcm9wZG93bi1kaXJlY3Rpb24uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZXh0ZW5zaW9uLWhvb2tzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvck9mLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvck9mLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZ2VuZXJpYy1maWxlLWljb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dlby5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWdyb3VwLWljb24ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2dsb2JhbC1jb25maWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLWZyYWdtZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JvdXAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2h1bWFuaXplLWFwcC1uYW1lLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vaHVtYW5pemUtYXBwLW5hbWUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2h1bWFuaXplLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2lmLWFsbG93ZWQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWQtbW9yZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWRpbmcuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbWFuYWdlZC1vYmplY3QtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL21hcC1mdW5jdGlvbi5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbWFya2Rvd24tdG8taHRtbC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbWVtb2l6ZS5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9tby1uYW1lLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9udW1iZXIucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1yZXN1bHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vb3B0aW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vb3V0bGV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcmV0cnktd2l0aC1kZWxheS5vcGVyYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UtcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nob3J0ZW4tdXNlci1uYW1lLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zaG91bGQtc2hvdy1tby5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hvdy1pZi1maWx0ZXIucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NraXAtbGluay5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0ZS1zZXJ2aWNlLmFic3RyYWN0JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5naWZ5LW9iamVjdC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFic2V0LWFyaWEuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVuYW50LXVpLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0YXJlYS1hdXRvcmVzaXplLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rocm90dGxlLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL3VpLXN0YXRlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLW5hbWUtaW5pdGlhbHMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLXN0b3JhZ2UtbG9jYWwnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZXMtc3RvcmUtaW52ZW50b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbC13aW5kb3ctc3RyYXRlZ3knO1xuZXhwb3J0ICogZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbC13aW5kb3cuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ppcC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXNzZXQtbGluay5waXBlJztcbiJdfQ==
@@ -0,0 +1,77 @@
1
+ import { Injectable, InjectionToken, Injector } from '@angular/core';
2
+ import { PluginsResolveService } from '../plugins';
3
+ import { hookGeneric } from './extension-hooks';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../plugins";
6
+ const SERVICE_HOOK_TOKENS = new Map();
7
+ /**
8
+ * Registers a service using a specified extension key.
9
+ * This function facilitates dynamic service registration, enabling services
10
+ * to be retrieved and used throughout the application based on their extension key.
11
+ *
12
+ * @param extensionKey The unique identifier for the service, defined within the ExtensionKeys interface.
13
+ * @param service The class type of the service to register.
14
+ * @returns A provider configuration for Angular's dependency injection, allowing the service to be injected where needed.
15
+ *
16
+ * * @example
17
+ * ```typescript
18
+ * hookService('layersServiceKey', TestService);
19
+ * ```
20
+ */
21
+ export function hookService(extensionKey, service) {
22
+ let token = SERVICE_HOOK_TOKENS.get(extensionKey);
23
+ if (!token) {
24
+ token = new InjectionToken(extensionKey);
25
+ SERVICE_HOOK_TOKENS.set(extensionKey, token);
26
+ }
27
+ return hookGeneric(service, token);
28
+ }
29
+ /**
30
+ * Service for managing and retrieving dynamically registered services within the application.
31
+ * It leverages a map of InjectionTokens to associate services with unique extension keys.
32
+ */
33
+ export class ServiceRegistry {
34
+ constructor(rootInjector, pluginService) {
35
+ this.injectors = [rootInjector];
36
+ pluginService.injectors$.subscribe(injector => this.injectors.push(injector));
37
+ }
38
+ /**
39
+ * Retrieves instances of services registered under a specified extension key.
40
+ *
41
+ * @param key - The extension key associated with the desired service.
42
+ * @returns An array of service instances registered under the given key.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // Retrieving instances of Service example
47
+ * const layersServices = serviceRegistry.get('layersServiceKey');
48
+ * layersServices.forEach(service => service.get().then(layer => console.log(layer)));
49
+ * ```
50
+ */
51
+ get(key) {
52
+ const token = SERVICE_HOOK_TOKENS.get(key);
53
+ if (!token) {
54
+ return [];
55
+ }
56
+ return this.injectors
57
+ .map(injector => injector.get(token, [], { self: true, optional: true }))
58
+ .flat();
59
+ }
60
+ /**
61
+ * Allows to retrieve all registered extension keys.
62
+ *
63
+ * @returns An array of extension keys that have been registered.
64
+ */
65
+ getRegisteredExtensionKeys() {
66
+ return Array.from(SERVICE_HOOK_TOKENS.keys());
67
+ }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceRegistry, deps: [{ token: i0.Injector }, { token: i1.PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); }
69
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceRegistry, providedIn: 'root' }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServiceRegistry, decorators: [{
72
+ type: Injectable,
73
+ args: [{
74
+ providedIn: 'root'
75
+ }]
76
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.PluginsResolveService }]; } });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1yZWdpc3RyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vc2VydmljZS1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFzQ2hELE1BQU0sbUJBQW1CLEdBR3JCLElBQUksR0FBRyxFQUFFLENBQUM7QUFFZDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsWUFBZSxFQUNmLE9BQXlEO0lBRXpELElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUVsRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsS0FBSyxHQUFHLElBQUksY0FBYyxDQUFpQixZQUFzQixDQUFDLENBQUM7UUFDbkUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztLQUM5QztJQUVELE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFBWSxZQUFzQixFQUFFLGFBQW9DO1FBQ3RFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEdBQUcsQ0FHRCxHQUFNO1FBQ04sTUFBTSxLQUFLLEdBQXdCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVM7YUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN4RSxJQUFJLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMEJBQTBCO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7K0dBekNVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UgfSBmcm9tICcuLi9wbHVnaW5zJztcbmltcG9ydCB7IGhvb2tHZW5lcmljIH0gZnJvbSAnLi9leHRlbnNpb24taG9va3MnO1xuXG4vKipcbiAqIEdsb2JhbCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG8gZW5oYW5jZSB0eXBlIHNhZmV0eSBmb3IgZXh0ZW5zaW9uIGtleXMgYW5kIGFzc29jaWF0ZWQgc2VydmljZSB0eXBlcy5cbiAqIEV4dGVuZCB0aGUgYEV4dGVuc2lvbktleXNgIGludGVyZmFjZSB3aXRoaW4gdGhpcyBuYW1lc3BhY2UgdG8gZGVjbGFyZSBuZXcgZXh0ZW5zaW9uIGtleXMgYW5kIHRoZWlyIHNlcnZpY2UgdHlwZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEV4dGVuZGluZyB0aGUgQ3VtdWxvY2l0eVNlcnZpY2VSZWdpc3RyeSB3aXRoIGEgbmV3IHNlcnZpY2VcbiAqIGRlY2xhcmUgZ2xvYmFsIHtcbiAqICAgbmFtZXNwYWNlIEN1bXVsb2NpdHlTZXJ2aWNlUmVnaXN0cnkge1xuICogICAgIGludGVyZmFjZSBFeHRlbnNpb25LZXlzIHtcbiAqICAgICAgIGxheWVyc1NlcnZpY2VLZXk6IFRlc3RTZXJ2aWNlO1xuICogICAgIH1cbiAqXG4gKiAgICAgaW50ZXJmYWNlIFRlc3RTZXJ2aWNlIHtcbiAqICAgICAgIGdldExheWVycygpOiBQcm9taXNlPHN0cmluZ1tdPjtcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8qKlxuICAgKiBHbG9iYWwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRvIGVuaGFuY2UgdHlwZSBzYWZldHkgZm9yIGV4dGVuc2lvbiBrZXlzIGFuZCBhc3NvY2lhdGVkIHNlcnZpY2UgdHlwZXMgb2YgdGhlIGBTZXJ2aWNlUmVnaXN0cnlgLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgbmFtZXNwYWNlIEN1bXVsb2NpdHlTZXJ2aWNlUmVnaXN0cnkge1xuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIGV4dGVuc2lvbiBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHNlcnZpY2UgdHlwZXMuXG4gICAgICogRXh0ZW5kIHRoaXMgaW50ZXJmYWNlIHRvIGRlY2xhcmUgbmV3IGV4dGVuc2lvbiBrZXlzIGFuZCB0aGVpciBzZXJ2aWNlIHR5cGVzLlxuICAgICAqL1xuICAgIGludGVyZmFjZSBFeHRlbnNpb25LZXlzIHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IFNFUlZJQ0VfSE9PS19UT0tFTlM6IE1hcDxcbiAga2V5b2YgQ3VtdWxvY2l0eVNlcnZpY2VSZWdpc3RyeS5FeHRlbnNpb25LZXlzLFxuICBJbmplY3Rpb25Ub2tlbjxhbnk+XG4+ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIHNlcnZpY2UgdXNpbmcgYSBzcGVjaWZpZWQgZXh0ZW5zaW9uIGtleS5cbiAqIFRoaXMgZnVuY3Rpb24gZmFjaWxpdGF0ZXMgZHluYW1pYyBzZXJ2aWNlIHJlZ2lzdHJhdGlvbiwgZW5hYmxpbmcgc2VydmljZXNcbiAqIHRvIGJlIHJldHJpZXZlZCBhbmQgdXNlZCB0aHJvdWdob3V0IHRoZSBhcHBsaWNhdGlvbiBiYXNlZCBvbiB0aGVpciBleHRlbnNpb24ga2V5LlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25LZXkgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2VydmljZSwgZGVmaW5lZCB3aXRoaW4gdGhlIEV4dGVuc2lvbktleXMgaW50ZXJmYWNlLlxuICogQHBhcmFtIHNlcnZpY2UgVGhlIGNsYXNzIHR5cGUgb2YgdGhlIHNlcnZpY2UgdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJucyBBIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gZm9yIEFuZ3VsYXIncyBkZXBlbmRlbmN5IGluamVjdGlvbiwgYWxsb3dpbmcgdGhlIHNlcnZpY2UgdG8gYmUgaW5qZWN0ZWQgd2hlcmUgbmVlZGVkLlxuICpcbiAqICAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBob29rU2VydmljZSgnbGF5ZXJzU2VydmljZUtleScsIFRlc3RTZXJ2aWNlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va1NlcnZpY2U8VCBleHRlbmRzIGtleW9mIEN1bXVsb2NpdHlTZXJ2aWNlUmVnaXN0cnkuRXh0ZW5zaW9uS2V5cz4oXG4gIGV4dGVuc2lvbktleTogVCxcbiAgc2VydmljZTogVHlwZTxDdW11bG9jaXR5U2VydmljZVJlZ2lzdHJ5LkV4dGVuc2lvbktleXNbVF0+XG4pIHtcbiAgbGV0IHRva2VuID0gU0VSVklDRV9IT09LX1RPS0VOUy5nZXQoZXh0ZW5zaW9uS2V5KTtcblxuICBpZiAoIXRva2VuKSB7XG4gICAgdG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48dHlwZW9mIHNlcnZpY2U+KGV4dGVuc2lvbktleSBhcyBzdHJpbmcpO1xuICAgIFNFUlZJQ0VfSE9PS19UT0tFTlMuc2V0KGV4dGVuc2lvbktleSwgdG9rZW4pO1xuICB9XG5cbiAgcmV0dXJuIGhvb2tHZW5lcmljKHNlcnZpY2UsIHRva2VuKTtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBhbmQgcmV0cmlldmluZyBkeW5hbWljYWxseSByZWdpc3RlcmVkIHNlcnZpY2VzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKiBJdCBsZXZlcmFnZXMgYSBtYXAgb2YgSW5qZWN0aW9uVG9rZW5zIHRvIGFzc29jaWF0ZSBzZXJ2aWNlcyB3aXRoIHVuaXF1ZSBleHRlbnNpb24ga2V5cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VydmljZVJlZ2lzdHJ5IHtcbiAgcHJvdGVjdGVkIGluamVjdG9yczogSW5qZWN0b3JbXTtcblxuICBjb25zdHJ1Y3Rvcihyb290SW5qZWN0b3I6IEluamVjdG9yLCBwbHVnaW5TZXJ2aWNlOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UpIHtcbiAgICB0aGlzLmluamVjdG9ycyA9IFtyb290SW5qZWN0b3JdO1xuICAgIHBsdWdpblNlcnZpY2UuaW5qZWN0b3JzJC5zdWJzY3JpYmUoaW5qZWN0b3IgPT4gdGhpcy5pbmplY3RvcnMucHVzaChpbmplY3RvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBpbnN0YW5jZXMgb2Ygc2VydmljZXMgcmVnaXN0ZXJlZCB1bmRlciBhIHNwZWNpZmllZCBleHRlbnNpb24ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGV4dGVuc2lvbiBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNpcmVkIHNlcnZpY2UuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlcnZpY2UgaW5zdGFuY2VzIHJlZ2lzdGVyZWQgdW5kZXIgdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBSZXRyaWV2aW5nIGluc3RhbmNlcyBvZiBTZXJ2aWNlIGV4YW1wbGVcbiAgICogY29uc3QgbGF5ZXJzU2VydmljZXMgPSBzZXJ2aWNlUmVnaXN0cnkuZ2V0KCdsYXllcnNTZXJ2aWNlS2V5Jyk7XG4gICAqIGxheWVyc1NlcnZpY2VzLmZvckVhY2goc2VydmljZSA9PiBzZXJ2aWNlLmdldCgpLnRoZW4obGF5ZXIgPT4gY29uc29sZS5sb2cobGF5ZXIpKSk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0PFxuICAgIFQgZXh0ZW5kcyBrZXlvZiBDdW11bG9jaXR5U2VydmljZVJlZ2lzdHJ5LkV4dGVuc2lvbktleXMsXG4gICAgUiA9IEN1bXVsb2NpdHlTZXJ2aWNlUmVnaXN0cnkuRXh0ZW5zaW9uS2V5c1tUXVxuICA+KGtleTogVCk6IFJbXSB7XG4gICAgY29uc3QgdG9rZW46IEluamVjdGlvblRva2VuPFJbXT4gPSBTRVJWSUNFX0hPT0tfVE9LRU5TLmdldChrZXkpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3JzXG4gICAgICAubWFwKGluamVjdG9yID0+IGluamVjdG9yLmdldCh0b2tlbiwgW10sIHsgc2VsZjogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSkpXG4gICAgICAuZmxhdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0byByZXRyaWV2ZSBhbGwgcmVnaXN0ZXJlZCBleHRlbnNpb24ga2V5cy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZXh0ZW5zaW9uIGtleXMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC5cbiAgICovXG4gIGdldFJlZ2lzdGVyZWRFeHRlbnNpb25LZXlzKCk6IEFycmF5PGtleW9mIEN1bXVsb2NpdHlTZXJ2aWNlUmVnaXN0cnkuRXh0ZW5zaW9uS2V5cz4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFNFUlZJQ0VfSE9PS19UT0tFTlMua2V5cygpKTtcbiAgfVxufVxuIl19