UNPKG

nuclear-module-registry

Version:

A nuclear module to register your nuclear modules.

92 lines (71 loc) 2.09 kB
'use strict'; 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); }