clean-architecture
Version:
Utilities for implementing clean architecture using Redux
150 lines • 6.13 kB
JavaScript
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
;