import { MiddlewareContextInterface, MiddlewareLikeType, PipelineInterface } from './interfaces'; /** * Shared pipeline code. * * @implements IterableIterator * @implements PipelineInterface */ export declare abstract class BasePipeline> implements PipelineInterface { /** * Internally stored array of middleware. * * @type MiddlewareLikeType[] * @protected */ protected readonly _middleware: Array>; /** * Current iteration index. * * @type {number} * @protected */ protected _index: number; /** * Iterator done flag. * * @type {boolean} * @protected */ protected _done: boolean; /** * @constructor * @param {MiddlewareLikeType[]} middleware */ protected constructor(middleware: Array>); /** * Transform Pipeline to array of middleware. * * @returns {MiddlewareLikeType[]} */ toArray(): Array>; /** * Concat current middleware with argument pipeline of the same generic type. * * @param {PipelineInterface} x * @returns {PipelineInterface} */ concat(x: PipelineInterface): PipelineInterface; /** * Create a pipeline that has no middleware. * * @returns {Pipeline} */ empty(): PipelineInterface; /** * Sequentially process middleware internally stored in the pipeline. * * If the middleware currently being executed returns a Promise, the Promise will be resolved before moving on to * the next middleware. Pipeline does not block the event loop. To avoid resolving the Promise, assign it to a key * of the middleware context and return void. * * @param {TContext} ctx * @returns {Promise} */ abstract process(ctx: TContext): any; /** * @returns {IterableIterator} */ [Symbol.iterator](): IterableIterator>; /** * @param {MiddlewareLikeType} value * @returns {IteratorResult>} */ next(value?: MiddlewareLikeType): IteratorResult>; /** * Getter for _isEmpty. * * @returns {boolean} */ readonly isEmpty: boolean; /** * Getter for _done. * * @returns {boolean} */ readonly done: boolean; /** * Getter for _middleware. * * @returns {Array>} */ readonly middleware: Array>; }