export type Nextable = Generator | AsyncGenerator; export type Middleware = AsyncGeneratorFunction | GeneratorFunction | ((...data: any[]) => any | Promise); export default class OnionStack { length: number; [index: number]: Middleware; constructor(...list: Middleware[]); use(middleware: Middleware): this; [Symbol.iterator]: () => IterableIterator; mount(stack: OnionStack): this; execute(...data: any[]): Promise; }