@jupri-lab/store-core
Version:
A lightweight, easy-to-integrate, and type-safe state management library
29 lines (22 loc) • 729 B
text/typescript
import type { TAction, TMiddleware } from "./types";
export default class MiddlewareManager {
private middlewareFns: Set<TMiddleware>;
constructor(middlewares: TMiddleware[]) {
this.middlewareFns = new Set(middlewares);
}
apply(params: {
action: TAction<any>;
actionName: string;
payload: any;
state: any;
}) {
const middlewareArray = Array.from(this.middlewareFns);
if (middlewareArray.length === 0) return true;
const middlewareResults = middlewareArray.map((middleware) => {
const next = () => true;
const result = middleware(params, next);
return !result ? false : true;
});
return middlewareResults.every((x) => x);
}
}