@kephas/angular
Version:
Provides integration capabilities with Angular.
60 lines • 7.56 kB
JavaScript
import 'reflect-metadata';
import { Requires } from '@kephas/core';
import { Injectable } from '@angular/core';
import { HttpClientAppServiceInfoRegistry } from '../../public-api';
/**
* Helper class for registering the services with the Angular injector.
*
* @export
*/
export class AngularAppServiceInfoRegistry {
/**
* Creates an instance of AngularAppServiceInfoRegistry.
*
* @param {AppServiceInfoRegistry} serviceRegistry The service registry.
*/
constructor(serviceRegistry) {
this.serviceRegistry = serviceRegistry;
Requires.HasValue(serviceRegistry, 'serviceRegistry');
}
/**
* Registers the application services to the Angular DI container.
*
* @param {...string[]} modules The modules to import to collect the service metadata.
*/
registerServices() {
for (const serviceMetadata of this.serviceRegistry.services) {
Injectable({ providedIn: 'root' })(serviceMetadata.serviceType);
}
}
/**
* Gets the providers for the root.
*
* @returns {StaticClassProvider[]}
*/
getRootProviders() {
const providers = [];
for (const c of this.serviceRegistry.serviceContracts) {
const serviceContract = c;
for (const m of serviceContract.services) {
const serviceMetadata = m;
providers.push({
provide: serviceContract.contractToken || serviceContract.contractType,
useClass: serviceMetadata.serviceType,
multi: serviceContract.allowMultiple,
deps: this.getDependencies(serviceMetadata.serviceType),
});
}
}
providers.push(...new HttpClientAppServiceInfoRegistry().getHttpClientProviders());
return providers;
}
getDependencies(serviceType) {
let deps = Reflect.getMetadata('design:paramtypes', serviceType);
if (!deps && serviceType.ctorParameters) {
deps = serviceType.ctorParameters();
}
return deps || [];
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhckFwcFNlcnZpY2VJbmZvUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYW5ndWxhckFwcFNlcnZpY2VJbmZvUmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ3FCLFFBQVEsRUFDbkMsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLFVBQVUsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyw2QkFBNkI7SUFFdEM7Ozs7T0FJRztJQUNILFlBQW9CLGVBQXVDO1FBQXZDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUN2RCxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCO1FBQ25CLEtBQUssTUFBTSxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDekQsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLFdBQVksQ0FBQyxDQUFDO1NBQ3BFO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0I7UUFDbkIsTUFBTSxTQUFTLEdBQTZCLEVBQUUsQ0FBQztRQUMvQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkQsTUFBTSxlQUFlLEdBQW1CLENBQUMsQ0FBQztZQUMxQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RDLE1BQU0sZUFBZSxHQUE0QixDQUFDLENBQUM7Z0JBQ25ELFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ1gsT0FBTyxFQUFFLGVBQWUsQ0FBQyxhQUFhLElBQUksZUFBZSxDQUFDLFlBQVk7b0JBQ3RFLFFBQVEsRUFBRSxlQUFlLENBQUMsV0FBWTtvQkFDdEMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxhQUFhO29CQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsV0FBWSxDQUFDO2lCQUMzRCxDQUFDLENBQUM7YUFDTjtTQUNKO1FBRUQsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksZ0NBQWdDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFFbkYsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxXQUFzQjtRQUMxQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUcsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUNwQyxJQUFJLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAncmVmbGVjdC1tZXRhZGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgICBBcHBTZXJ2aWNlSW5mb1JlZ2lzdHJ5LCBSZXF1aXJlcywgQXBwU2VydmljZUluZm8sIEFwcFNlcnZpY2VNZXRhZGF0YSwgVHlwZVxyXG59IGZyb20gJ0BrZXBoYXMvY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIFN0YXRpY0NsYXNzUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudEFwcFNlcnZpY2VJbmZvUmVnaXN0cnkgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHJlZ2lzdGVyaW5nIHRoZSBzZXJ2aWNlcyB3aXRoIHRoZSBBbmd1bGFyIGluamVjdG9yLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5ndWxhckFwcFNlcnZpY2VJbmZvUmVnaXN0cnkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBBbmd1bGFyQXBwU2VydmljZUluZm9SZWdpc3RyeS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlcnZpY2VJbmZvUmVnaXN0cnl9IHNlcnZpY2VSZWdpc3RyeSBUaGUgc2VydmljZSByZWdpc3RyeS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlUmVnaXN0cnk6IEFwcFNlcnZpY2VJbmZvUmVnaXN0cnkpIHtcclxuICAgICAgICBSZXF1aXJlcy5IYXNWYWx1ZShzZXJ2aWNlUmVnaXN0cnksICdzZXJ2aWNlUmVnaXN0cnknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyB0aGUgYXBwbGljYXRpb24gc2VydmljZXMgdG8gdGhlIEFuZ3VsYXIgREkgY29udGFpbmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nW119IG1vZHVsZXMgVGhlIG1vZHVsZXMgdG8gaW1wb3J0IHRvIGNvbGxlY3QgdGhlIHNlcnZpY2UgbWV0YWRhdGEuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3RlclNlcnZpY2VzKCkge1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZU1ldGFkYXRhIG9mIHRoaXMuc2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSkoc2VydmljZU1ldGFkYXRhLnNlcnZpY2VUeXBlISk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJvdmlkZXJzIGZvciB0aGUgcm9vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7U3RhdGljQ2xhc3NQcm92aWRlcltdfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Um9vdFByb3ZpZGVycygpOiAoU3RhdGljQ2xhc3NQcm92aWRlciApW10ge1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyczogKFN0YXRpY0NsYXNzUHJvdmlkZXIgKVtdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHRoaXMuc2VydmljZVJlZ2lzdHJ5LnNlcnZpY2VDb250cmFjdHMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvbnRyYWN0OiBBcHBTZXJ2aWNlSW5mbyA9IGM7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBzZXJ2aWNlQ29udHJhY3Quc2VydmljZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VNZXRhZGF0YTogQXBwU2VydmljZU1ldGFkYXRhPGFueT4gPSBtO1xyXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IHNlcnZpY2VDb250cmFjdC5jb250cmFjdFRva2VuIHx8IHNlcnZpY2VDb250cmFjdC5jb250cmFjdFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2xhc3M6IHNlcnZpY2VNZXRhZGF0YS5zZXJ2aWNlVHlwZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHNlcnZpY2VDb250cmFjdC5hbGxvd011bHRpcGxlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IHRoaXMuZ2V0RGVwZW5kZW5jaWVzKHNlcnZpY2VNZXRhZGF0YS5zZXJ2aWNlVHlwZSEpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByb3ZpZGVycy5wdXNoKC4uLm5ldyBIdHRwQ2xpZW50QXBwU2VydmljZUluZm9SZWdpc3RyeSgpLmdldEh0dHBDbGllbnRQcm92aWRlcnMoKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm92aWRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREZXBlbmRlbmNpZXMoc2VydmljZVR5cGU6IFR5cGU8YW55Pik6IGFueVtdIHtcclxuICAgICAgICBsZXQgZGVwcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjpwYXJhbXR5cGVzJywgc2VydmljZVR5cGUpO1xyXG4gICAgICAgIGlmKCFkZXBzICYmIHNlcnZpY2VUeXBlLmN0b3JQYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGRlcHMgPSBzZXJ2aWNlVHlwZS5jdG9yUGFyYW1ldGVycygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRlcHMgfHwgW107XHJcbiAgICB9XHJcbn1cclxuIl19