Skip to content

Commit

Permalink
feat: ability to register per request middlewares
Browse files Browse the repository at this point in the history
  • Loading branch information
Wroud committed Nov 27, 2024
1 parent b0eaaed commit 6f27c69
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 9 deletions.
4 changes: 2 additions & 2 deletions packages/@wroud/flow-middleware/src/FlowMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ export class FlowMiddleware<Data = Record<string, any>>
initialData: Data = {} as Data,
): IMiddlewareRequest<Data> {
return new MiddlewareRequest<Data>(
this.middlewares,
this.errorMiddlewares,
[...this.middlewares],
[...this.errorMiddlewares],
initialData,
this.logger,
);
Expand Down
10 changes: 10 additions & 0 deletions packages/@wroud/flow-middleware/src/MiddlewareRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@ export class MiddlewareRequest<Data = Record<string, any>>
this.isDisposed = false;
}

public use(...middleware: IMiddleware<Data>[]): this {
this.middlewares.push(...middleware);
return this;
}

public error(...errorMiddleware: IErrorMiddleware<Data>[]): this {
this.errorMiddlewares.push(...errorMiddleware);
return this;
}

public async execute(): Promise<void> {
if (this.isDisposed) {
throw new Error("Cannot execute a disposed request.");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import type { IErrorMiddleware } from "./IErrorMiddleware.js";
import type { IMiddleware } from "./IMiddleware.js";
import type { IMiddlewareContainer } from "./IMiddlewareContainer.js";
import type { IMiddlewareRequest } from "./IMiddlewareRequest.js";

export interface IFlowMiddleware<Data = Record<string, any>> {
use(...middleware: IMiddleware<Data>[]): this;
error(...errorMiddleware: IErrorMiddleware<Data>[]): this;

export interface IFlowMiddleware<Data = Record<string, any>>
extends IMiddlewareContainer<Data> {
createRequest(initialData?: Data): IMiddlewareRequest<Data>;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type { IErrorMiddleware } from "./IErrorMiddleware.js";
import type { IMiddleware } from "./IMiddleware.js";

export interface IMiddlewareContainer<Data = Record<string, any>> {
use(...middleware: IMiddleware<Data>[]): this;
error(...errorMiddleware: IErrorMiddleware<Data>[]): this;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
export interface IMiddlewareRequest<Data = Record<string, any>> {
import type { IMiddlewareContainer } from "./IMiddlewareContainer.js";

export interface IMiddlewareRequest<Data = Record<string, any>>
extends IMiddlewareContainer<Data> {
execute(): Promise<void>;
dispose(): void;
}

0 comments on commit 6f27c69

Please sign in to comment.