clean-architecture
Version:
Utilities for implementing clean architecture using Redux
57 lines • 2.42 kB
JavaScript
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCore = void 0;
var assert_1 = require("tsafe/assert");
var id_1 = require("tsafe/id");
var createStore_1 = require("./createStore");
var usecasesToEvts_1 = require("./usecasesToEvts");
var usecasesToStates_1 = require("./usecasesToStates");
var usecasesToFunctions_1 = require("./usecasesToFunctions");
function createCore(params) {
var context = params.context, usecases = params.usecases;
Object.entries(usecases).forEach(function (_a) {
var _b = __read(_a, 2), key = _b[0], usecase = _b[1];
(0, assert_1.assert)(key === usecase.name, "You should reconcile the name of the usecase (".concat(usecase.name, ") and the key it's assigned to in the usecases object (").concat(key, ")"));
});
var usecasesArr = Object.values(usecases);
var store = (0, createStore_1.createStore)({ context: context, usecasesArr: usecasesArr });
(0, assert_1.assert)((0, assert_1.is)(context));
var states = (0, usecasesToStates_1.usecasesToStates)({ usecasesArr: usecasesArr, store: store }).states;
var evts = (0, usecasesToEvts_1.usecasesToEvts)({ usecasesArr: usecasesArr, store: store, rootContext: context }).evts;
var functions = (0, usecasesToFunctions_1.usecasesToFunctions)({ usecasesArr: usecasesArr, store: store }).functions;
var evtStateUpdated = store.evtAction.pipe(function () { return [(0, id_1.id)(undefined)]; });
evtStateUpdated.setMaxHandlers(Infinity);
var core = {
evtStateUpdated: evtStateUpdated,
states: states,
evts: evts,
functions: functions,
types: null
};
//@ts-expect-error
delete core.types;
return {
core: core,
"dispatch": store.dispatch,
"getState": store.getState,
"evtAction": store.evtAction
};
}
exports.createCore = createCore;
//# sourceMappingURL=createCore.js.map
;