@hapiness/core
Version:
Project to have a HapiJS (https://hapijs.com/) based framework to create easier NodeJS back-end with some awesome features
46 lines • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const injection_js_1 = require("injection-js");
const logger_1 = require("./logger");
const rxjs_1 = require("rxjs");
class DependencyInjection {
/**
* Create a new DI and
* can inherits from a parent DI
*
* @param {Type<T>[]} providers
* @param {ReflectiveInjector} parent?
* @returns Observable<ReflectiveInjector>
*/
static createAndResolve(providers, parent) {
return rxjs_1.Observable
.of(parent)
.map(_ => !!_ ?
parent.resolveAndCreateChild(providers) :
injection_js_1.ReflectiveInjector.resolveAndCreate(providers))
.do(_ => this.logger.debug(`DI created, providers: ${providers.length}`));
}
/**
* Instantiate a component
* resolving its dependencies
* without inject the component
* into the DI
*
* @param {Type<T>} component
* @param {ReflectiveInjector} di
* @returns T
*/
static instantiateComponent(component, di) {
return rxjs_1.Observable
.from(injection_js_1.ReflectiveInjector.resolve([component]))
.reduce((a, x) => a.concat(x.resolvedFactories), [])
.map(_ => _.reduce((a, r) => a.concat(r.dependencies), []))
.map(_ => _.filter(__ => !!__))
.do(_ => this.logger.debug(`Component '${component.name}' deps: ${_.length}`))
.map(_ => _.map(d => di['_getByReflectiveDependency'](d)))
.map(_ => Reflect.construct(component, _));
}
}
DependencyInjection.logger = new logger_1.InternalLogger('di');
exports.DependencyInjection = DependencyInjection;
//# sourceMappingURL=di.js.map