nuclear-module-registry
Version:
A nuclear module to register your nuclear modules.
92 lines (71 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createRegistry;
var _nuclearModule = require('nuclear-module');
var _nuclearRecord = require('nuclear-record');
var _immutable = require('immutable');
var _lodash = require('lodash.assign');
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Creates a module registry for given reactor.
*
* @public
* @param {NuclearModuleReactor} reactor
* @returns {EnhancdNuclearModuleRegistry}
*/
function createRegistry(reactor) {
var config = {
modules: (0, _immutable.Map)({})
};
var registry = (0, _nuclearRecord.createRecord)(config, 'NuclearModuleRegistry')(reactor);
return enhanceRegistry(registry, reactor);
}
/**
* Attaches functions to registry module.
*
* @public
* @param {NuclearModuleRegistry} registry
* @param {NuclearModuleReactor} reactor
* @returns {EnhancedNuclearModuleRegistry}
*/
function enhanceRegistry(registry, reactor) {
var enhancor = {
/**
* Register a module to registry.
*
* @public
* @param {NuclearModule} Module
*/
register: function register(Module) {
var pickModule = function pickModule(modules) {
return modules.filter(function (m) {
return m.name === Module.getName();
});
};
var modules = registry.getters.modules();
var registeredModules = pickModule(modules);
if (registeredModules.size) {
return registeredModules.toList().get(0);
}
var module = Module(reactor);
modules = modules.set(module.name, module);
registry.actions.set('modules', modules);
},
/**
* Resolve a module from registry.
*
* @public
* @param {String} name
* @returns {NuclearModule}
*/
make: function make(name) {
return registry.getters.modules(function (modules) {
return modules.get(name);
});
}
};
return (0, _lodash2.default)({}, registry, enhancor);
}