import { AsyncIterableLike } from "../async-like"; export interface Hooks, O extends Iterator> { preIterator?(iterable: I): void; iterator?(iterable: I): O; postIterator?(iterator: O, iterable: I): void; preNext?(iterator: O, iterable: I): void; next?(iterator: O, iterable: I): IteratorResult; postNext?(result: IteratorResult, iterator: O, iterable: I): void; preYield?(value: T, iterator: O, iterable: I): void; yield?(value: T, iterator: O, iterable: I): T; postYield?(value: T, returned: any, iterator: O, iterable: I): void; done?(finalValue: T, finalReturned: any, iterator: O, iterable: I): void; } export interface AsyncHooks, O extends AsyncIterator> { preIterator?(iterable: I): void | Promise; iterator?(iterable: I): O; postIterator?(iterator: O, iterable: I): void | Promise; preNext?(iterator: O, iterable: I): void | Promise; next?(iterator: O, iterable: I): Promise>; postNext?(result: IteratorResult, iterator: O, iterable: I): void | Promise; preYield?(value: T, iterator: O, iterable: I): void | Promise; yield?(value: T, iterator: O, iterable: I): T | Promise; postYield?(value: T, returned: any, iterator: O, iterable: I): void | Promise; done?(finalValue: T, finalReturned: any, iterator: O, iterable: I): void | Promise; } export type Hook> = (iterable: I) => IterableIterator; export type AsyncHook> = (iterable: I) => AsyncIterableIterator; export declare function hooks, O extends Iterator>(options: Hooks): Hook; export declare function asyncHooks, O extends AsyncIterator>(options: AsyncHooks): AsyncHook;