From 6f27c698d39efaac3edf275cdba68e605027bd06 Mon Sep 17 00:00:00 2001 From: Aleksei Potsetsuev Date: Wed, 27 Nov 2024 14:50:19 +0800 Subject: [PATCH] feat: ability to register per request middlewares --- packages/@wroud/flow-middleware/src/FlowMiddleware.ts | 4 ++-- .../@wroud/flow-middleware/src/MiddlewareRequest.ts | 10 ++++++++++ .../flow-middleware/src/interfaces/IFlowMiddleware.ts | 9 +++------ .../src/interfaces/IMiddlewareContainer.ts | 7 +++++++ .../src/interfaces/IMiddlewareRequest.ts | 5 ++++- 5 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 packages/@wroud/flow-middleware/src/interfaces/IMiddlewareContainer.ts diff --git a/packages/@wroud/flow-middleware/src/FlowMiddleware.ts b/packages/@wroud/flow-middleware/src/FlowMiddleware.ts index cd70354..cb9ea0c 100644 --- a/packages/@wroud/flow-middleware/src/FlowMiddleware.ts +++ b/packages/@wroud/flow-middleware/src/FlowMiddleware.ts @@ -30,8 +30,8 @@ export class FlowMiddleware> initialData: Data = {} as Data, ): IMiddlewareRequest { return new MiddlewareRequest( - this.middlewares, - this.errorMiddlewares, + [...this.middlewares], + [...this.errorMiddlewares], initialData, this.logger, ); diff --git a/packages/@wroud/flow-middleware/src/MiddlewareRequest.ts b/packages/@wroud/flow-middleware/src/MiddlewareRequest.ts index 0d6b38e..73c5704 100644 --- a/packages/@wroud/flow-middleware/src/MiddlewareRequest.ts +++ b/packages/@wroud/flow-middleware/src/MiddlewareRequest.ts @@ -36,6 +36,16 @@ export class MiddlewareRequest> this.isDisposed = false; } + public use(...middleware: IMiddleware[]): this { + this.middlewares.push(...middleware); + return this; + } + + public error(...errorMiddleware: IErrorMiddleware[]): this { + this.errorMiddlewares.push(...errorMiddleware); + return this; + } + public async execute(): Promise { if (this.isDisposed) { throw new Error("Cannot execute a disposed request."); diff --git a/packages/@wroud/flow-middleware/src/interfaces/IFlowMiddleware.ts b/packages/@wroud/flow-middleware/src/interfaces/IFlowMiddleware.ts index 4b07b71..b1dc24d 100644 --- a/packages/@wroud/flow-middleware/src/interfaces/IFlowMiddleware.ts +++ b/packages/@wroud/flow-middleware/src/interfaces/IFlowMiddleware.ts @@ -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> { - use(...middleware: IMiddleware[]): this; - error(...errorMiddleware: IErrorMiddleware[]): this; - +export interface IFlowMiddleware> + extends IMiddlewareContainer { createRequest(initialData?: Data): IMiddlewareRequest; } diff --git a/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareContainer.ts b/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareContainer.ts new file mode 100644 index 0000000..6164346 --- /dev/null +++ b/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareContainer.ts @@ -0,0 +1,7 @@ +import type { IErrorMiddleware } from "./IErrorMiddleware.js"; +import type { IMiddleware } from "./IMiddleware.js"; + +export interface IMiddlewareContainer> { + use(...middleware: IMiddleware[]): this; + error(...errorMiddleware: IErrorMiddleware[]): this; +} diff --git a/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareRequest.ts b/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareRequest.ts index 25ed41f..287c645 100644 --- a/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareRequest.ts +++ b/packages/@wroud/flow-middleware/src/interfaces/IMiddlewareRequest.ts @@ -1,4 +1,7 @@ -export interface IMiddlewareRequest> { +import type { IMiddlewareContainer } from "./IMiddlewareContainer.js"; + +export interface IMiddlewareRequest> + extends IMiddlewareContainer { execute(): Promise; dispose(): void; }