UNPKG

noot

Version:

High quality, well tested, lightweight object oriented toolset for Node.js

103 lines (90 loc) 1.92 kB
/** * Dependencies */ var _ = require('lodash'); var changeCase = require('change-case'); var DependenciesManager = { IRREGULAR_PROPERTY_NAMES: [ { reg: /^api$/i, name: 'API' }, { reg: /^http$/i, name: 'HTTP' } ], /** * * * @returns {Object} */ require: function() { var ret = {}; this._getArguments .apply(this, arguments) .map(this._resolve.bind(this)) .forEach(function(resolved) { ret = _.merge(ret, resolved); }); return ret; }, /** * * * @param {String} moduleName * @returns {Object} * @private */ _require: function(moduleName) { return require('../' + moduleName); }, /** * * * @param {String} name * @returns {Object} * @private */ _resolve: function(name) { var mainOnly = name.split('/')[0].split('.')[0]; var ret = {}; ret[this._resolvePropertyName(mainOnly)] = this._require(changeCase.param(mainOnly)); return ret; }, /** * * * @param {String} name * @returns {String} * @private */ _resolvePropertyName: function(name) { return this._resolveIrregularPropertyName(name) || changeCase.pascal(name); }, /** * * * @param {String} name * @returns {String} * @private */ _resolveIrregularPropertyName: function(name) { for (var i = 0; i < this.IRREGULAR_PROPERTY_NAMES.length; i++) { var item = this.IRREGULAR_PROPERTY_NAMES[i]; if (item.reg.test(name)) return item.name; } return null; }, /** * * * @returns {Array} * @private */ _getArguments: function() { var self = this; var ret = []; Array.prototype.slice.call(arguments, 0).forEach(function(arg) { if (!Array.isArray(arg)) ret.push(arg); else ret = ret.concat(self._getArguments.apply(self, arg)); }); return ret; } }; /** * @exports */ module.exports = DependenciesManager;