declare module 'mongoose' { import stream = require('stream'); type CursorFlag = 'tailable' | 'oplogReplay' | 'noCursorTimeout' | 'awaitData' | 'partial'; interface EachAsyncOptions { parallel?: number; batchSize?: number; continueOnError?: boolean; } class Cursor extends stream.Readable { [Symbol.asyncIterator](): AsyncIterableIterator; /** * Adds a [cursor flag](https://mongodb.github.io/node-mongodb-native/4.9/classes/FindCursor.html#addCursorFlag). * Useful for setting the `noCursorTimeout` and `tailable` flags. */ addCursorFlag(flag: CursorFlag, value: boolean): this; /** * Marks this cursor as closed. Will stop streaming and subsequent calls to * `next()` will error. */ close(callback: CallbackWithoutResult): void; close(): Promise; /** * Execute `fn` for every document(s) in the cursor. If batchSize is provided * `fn` will be executed for each batch of documents. If `fn` returns a promise, * will wait for the promise to resolve before iterating on to the next one. * Returns a promise that resolves when done. */ eachAsync(fn: (doc: DocType[]) => any, options: EachAsyncOptions & { batchSize: number }, callback: CallbackWithoutResult): void; eachAsync(fn: (doc: DocType) => any, options: EachAsyncOptions, callback: CallbackWithoutResult): void; eachAsync(fn: (doc: DocType[]) => any, options: EachAsyncOptions & { batchSize: number }): Promise; eachAsync(fn: (doc: DocType) => any, options?: EachAsyncOptions): Promise; /** * Registers a transform function which subsequently maps documents retrieved * via the streams interface or `.next()` */ map(fn: (res: DocType) => ResultType): Cursor; /** * Get the next document from this cursor. Will return `null` when there are * no documents left. */ next(callback: Callback): void; next(): Promise; options: Options; } }