mediateur
Version:
A simple library allowing the implementation of the Mediator design pattern
23 lines (22 loc) • 1.17 kB
TypeScript
import { Message } from './message';
import { MessageHandler } from './messageHandler';
import { MessageResult } from './messageResult';
export type Middleware<TMessage extends Message = Message> = (message: TMessage, next: () => Promise<MessageResult<TMessage>>) => Promise<MessageResult<TMessage>>;
type AddMessageMiddlewaresOptions<TMessage extends Message> = {
messageType: TMessage['type'] | Array<TMessage['type']>;
middlewares: ReadonlyArray<Middleware<TMessage>>;
};
type AddHandlerMiddlewaresOptions<TMessage extends Message> = {
handler: MessageHandler<TMessage>;
middlewares: ReadonlyArray<Middleware<TMessage>>;
};
type AddGlobalMiddlewaresOptions = {
middlewares: ReadonlyArray<Middleware>;
};
export type AddOptions<TMessage extends Message> = AddMessageMiddlewaresOptions<TMessage> | AddHandlerMiddlewaresOptions<TMessage> | AddGlobalMiddlewaresOptions;
export declare const middlewares: {
add: <TMessage extends Message>(options: AddOptions<TMessage>) => void;
apply: <TMessage extends Message>(messageType: TMessage["type"], handler: MessageHandler<TMessage>) => MessageHandler<TMessage>;
clear: () => void;
};
export {};