UNPKG

clean-architecture

Version:

Utilities for implementing clean architecture using Redux

150 lines 6.13 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; 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; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createMiddlewareEvtAction = void 0; var evt_1 = require("evt"); var exclude_1 = require("tsafe/exclude"); var typeGuard_1 = require("tsafe/typeGuard"); var symToStr_1 = require("tsafe/symToStr"); /* NOTE: Do not remove! See ./createCore.ts export type UsecaseToEvent<Usecase extends UsecaseLike> = { [Key in Extract<Usecase, { actions: unknown }>["name"]]: Usecase extends Extract< Usecase, { name: Key; actions: unknown } > ? { [K in keyof Usecase["actions"]]: Usecase["actions"][K] extends ActionCreatorWithoutPayload<any> ? { usecaseName: Key; actionName: K; } : { usecaseName: Key; actionName: K; payload: Usecase["actions"][K] extends ActionCreatorWithPayload<infer U> ? U : never; }; }[keyof { [K in keyof Usecase["actions"]]: Usecase["actions"][K] extends ActionCreatorWithoutPayload<any> ? { usecaseName: Key; actionName: K; } : { usecaseName: Key; actionName: K; payload: Usecase["actions"][K] extends ActionCreatorWithPayload<infer U> ? U : never; }; }] : never; }[keyof { [Key in Extract<Usecase, { actions: unknown }>["name"]]: Usecase extends Extract< Usecase, { name: Key; actions: unknown } > ? { [K in keyof Usecase["actions"]]: Usecase["actions"][K] extends ActionCreatorWithoutPayload<any> ? { usecaseName: Key; actionName: K; } : { usecaseName: Key; actionName: K; payload: Usecase["actions"][K] extends ActionCreatorWithPayload<infer U> ? U : never; }; }[keyof { [K in keyof Usecase["actions"]]: Usecase["actions"][K] extends ActionCreatorWithoutPayload<any> ? { usecaseName: Key; actionName: K; } : { usecaseName: Key; actionName: K; payload: Usecase["actions"][K] extends ActionCreatorWithPayload<infer U> ? U : never; }; }] : never; }]; */ function createMiddlewareEvtAction(usecasesArr) { var actionTypes = new Set(usecasesArr .map(function (usecase) { return (0, typeGuard_1.typeGuard)(usecase, "reducer" in usecase && usecase.reducer !== null) ? usecase : undefined; }) .filter((0, exclude_1.exclude)(undefined)) .map(function (_a) { var name = _a.name, actions = _a.actions; return Object.keys(actions).map(function (actionName) { return "".concat(name, "/").concat(actionName); }); }) .reduce(function (prev, curr) { return __spreadArray(__spreadArray([], __read(prev), false), __read(curr), false); }, [])); var evtAction = evt_1.Evt.create(); var middlewareEvtAction = function () { return function (next) { return function (action) { if (!actionTypes.has(action.type) && !["pending", "rejected", "fulfilled"].find(function (lifecycleStage) { return action.type.endsWith("/".concat(lifecycleStage)); })) { console.warn([ "Unknown action type ".concat(action.type, "."), "".concat((0, symToStr_1.symToStr)({ middlewareEvtAction: middlewareEvtAction }), " is misconfigured") ].join(" ")); return next(action); } var _a = __read(action.type.split("/")), usecaseName = _a[0], actionName = _a[1], lifecycleStage = _a.slice(2); var out = next(action); evtAction.post(__assign(__assign({ usecaseName: usecaseName, actionName: actionName }, (lifecycleStage.length === 0 ? {} : { "lifecycleStage": lifecycleStage.join("/") })), { "payload": action.payload })); return out; }; }; }; return { "evtAction": evtAction, middlewareEvtAction: middlewareEvtAction }; } exports.createMiddlewareEvtAction = createMiddlewareEvtAction; //# sourceMappingURL=middlewareEvtAction.js.map