UNPKG

deependency

Version:

Deependency is modular and extensible Inversion of Control container to easily introduce dependency injection in your NodeJS modules.

71 lines (42 loc) 1.74 kB
'use strict'; module.exports = function ModuleDefinitionProvider() { this.getServiceDefinition = function (registrationRequest) { var serviceModule = registrationRequest.module; if (!serviceModule) return null; if (!isFunction(serviceModule)) return null; var names = getNamesFromRegistrationRequest(registrationRequest); var dependencies = getDependenciesByServiceModule(serviceModule); var factoryMethod = createFactoryMethodByServiceModule(serviceModule); var serviceDefinition = { names: names, dependencies: dependencies, factoryMethod: factoryMethod, }; return serviceDefinition; }; var isFunction = function (target) { return (typeof target === 'function'); }; var getNamesFromRegistrationRequest = function (registrationRequest) { if (registrationRequest.module && registrationRequest.module.name) { return [registrationRequest.module.name]; } return []; }; var getDependenciesByServiceModule = function (serviceModule) { if (!serviceModule.prototype) return []; var serviceCode = serviceModule.prototype.constructor.toString(); var constructorArguments = serviceCode.substring( serviceCode.indexOf('(') + 1, serviceCode.indexOf(')')); var dependencies = constructorArguments .split(',') .map(dependency => dependency.trim()) .filter(dependency => !!dependency); return dependencies; }; var createFactoryMethodByServiceModule = function (serviceModule) { return (dependencies) => new (Function.prototype.bind.apply(serviceModule, [null].concat(dependencies))); }; };