UNPKG

nuclear-module

Version:

An opiniated way of writing nuclear-js modules.

83 lines (57 loc) 2.73 kB
'use strict'; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = NuclearModule; var _nuclearJs = require('nuclear-js'); var _lodash = require('lodash.omit'); var _lodash2 = _interopRequireDefault(_lodash); var _lodash3 = require('lodash.isarray'); var _lodash4 = _interopRequireDefault(_lodash3); var _lodash5 = require('lodash.foreach'); var _lodash6 = _interopRequireDefault(_lodash5); var _lodash7 = require('lodash.reduce'); var _lodash8 = _interopRequireDefault(_lodash7); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function NuclearModule(_ref) { var _ref$stores = _ref.stores; var stores = _ref$stores === undefined ? {} : _ref$stores; var _ref$actions = _ref.actions; var actions = _ref$actions === undefined ? {} : _ref$actions; var _ref$getters = _ref.getters; var getters = _ref$getters === undefined ? {} : _ref$getters; var ModuleFactory = function ModuleFactory(reactor) { var StoreFactory = arguments.length <= 1 || arguments[1] === undefined ? _nuclearJs.Store : arguments[1]; var _stores = (0, _lodash8.default)(stores, function (acc, storeDefinition, storeName) { if (reactor.evaluate([storeName])) { // TODO: Show a warning unless `debug/dev` mode. return; } var handlers = storeDefinition.handlers || {}; storeDefinition = _extends({}, (0, _lodash2.default)(storeDefinition, 'handlers'), { initialize: function initialize() { var _this = this; (0, _lodash6.default)(handlers, function (_ref2) { var type = _ref2.type; var handler = _ref2.handler; _this.on(type, handler); }); } }); return _extends({}, acc, _defineProperty({}, storeName, StoreFactory(storeDefinition))); }, {}); reactor.registerStores(_stores); return { actions: createActions(reactor, actions) }; }; ModuleFactory.getters = getters; return ModuleFactory; } function createActions(reactor, actions) { return (0, _lodash8.default)(actions, function (result, action, actionName) { return _extends({}, result, _defineProperty({}, actionName, action.bind(null, reactor))); }, {}); }