import { MiddlewareContextInterface } from './middleware-context.interface'; import { MiddlewareLikeType } from './middleware-like.type'; import { MonoidInterface } from './monoid.interface'; /** * Middleware pipeline descriptor. * * @interface PipelineInterface> * @extends MonoidInterface * * @type {TIntermediate} describes the middleware context intermediate. Defaults to `{}`. * @type {TContext} describes the middleware context itself. It overrides the TIntermediate type and is useful in * cases where not only the ctx.intermediate is amended. Defaults to `MiddlewareContextInterface`. */ export interface PipelineInterface> extends MonoidInterface { /** * Pipeline has no middleware flag. */ isEmpty: boolean; /** * Iterator done flag. */ done: boolean; /** * Array of internally stored middleware. */ middleware: Array>; /** * Sequentially process middleware stored in current Pipeline beginning with the leftmost Middleware item. * * @param {TContext} ctx * @returns {Promise} */ process(ctx: TContext): Promise; /** * Concat current middleware with argument pipeline of the same generic type. * * @param {PipelineInterface} x * @returns {PipelineInterface} */ concat(x: PipelineInterface): PipelineInterface; }