respond-framework
Version:
create as fast you think
71 lines (70 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = addModule;
var _createEvents = require("./createEvents.js");
var _createReducers = require("./createReducers.js");
var _createSelectors = require("./createSelectors.js");
var _createModels = require("../db/createModels.js");
var _createBasename = require("./createBasename.js");
var _createPlugins = require("./createPlugins.js");
var _extractModuleAspects = require("./extractModuleAspects.js");
var _assignRenderingDependencies = require("./helpers/assignRenderingDependencies.js");
var _assignProto = require("../utils/assignProto.js");
var _reserved = require("./reserved.js");
function addModule(mod, Respond, moduleName = '', parent = {}, state = Object.create({})) {
const {
branch,
moduleKeys = [],
options = {},
components,
reduce,
ignoreParents
} = mod;
const respond = new Respond({
branch,
mod,
state,
moduleName,
moduleKeys,
options,
ignoreParents
});
const proto = (0, _assignProto.default)(state, {
...options.merge,
respond,
moduleKeys,
options,
components,
reduce,
[_reserved._parent]: parent
});
const props = respond.isTop ? {} : mod.props ?? {}; // props disabled on top focused module
const deps = {
respond,
mod,
parent,
proto,
state,
props,
branch,
moduleName
};
respond.branchLocatorsById[mod.id] = branch;
respond.branches[branch] = state;
(mod.build ?? props.build)?.(deps);
const [events, reducers, selectors] = (0, _extractModuleAspects.default)(mod, state);
const [propEvents, propReducers, propSelectors] = (0, _extractModuleAspects.default)(props, state);
(0, _createBasename.default)(deps);
(0, _createEvents.default)(deps, events, propEvents);
(0, _createReducers.default)(deps, reducers, propReducers);
(0, _createSelectors.default)(deps, selectors, propSelectors);
(0, _createModels.default)(deps);
(0, _createPlugins.default)(deps);
(0, _assignRenderingDependencies.default)(deps);
moduleKeys.forEach(k => addModule(mod[k], Respond, k, state)) // recurse
;
(mod.buildAfter ?? props.buildAfter)?.(deps);
return parent[moduleName] = state;
}