import type { Readable, Transform, Writable } from 'node:stream' import type { CommonLogger, CommonLogLevel } from '@naturalcycles/js-lib/log' import type { Promisable } from '@naturalcycles/js-lib/types' export interface ReadableSignalOptions { /** allows destroying the stream if the signal is aborted. */ signal?: AbortSignal } export interface ReadableArrayOptions { /** the maximum concurrent invocations of `fn` to call on the stream at once. **Default: 1**. */ concurrency?: number /** allows destroying the stream if the signal is aborted. */ signal?: AbortSignal } export type ReadableMapper = ( data: IN, opt?: ReadableSignalOptions, ) => Promisable export type ReadableFlatMapper = ( data: IN, opt?: ReadableSignalOptions, ) => Promisable export type ReadableVoidMapper = (data: IN, opt?: ReadableSignalOptions) => void | Promise export type ReadablePredicate = ( data: IN, opt?: ReadableSignalOptions, ) => boolean | Promise export interface ReadableTyped extends Readable { toArray: (opt?: ReadableSignalOptions) => Promise map: (mapper: ReadableMapper, opt?: ReadableArrayOptions) => ReadableTyped flatMap: ( mapper: ReadableFlatMapper, opt?: ReadableArrayOptions, ) => ReadableTyped filter: (predicate: ReadablePredicate, opt?: ReadableArrayOptions) => ReadableTyped forEach: (mapper: ReadableVoidMapper, opt?: ReadableArrayOptions) => Promise take: (limit: number, opt?: ReadableSignalOptions) => ReadableTyped drop: (limit: number, opt?: ReadableSignalOptions) => ReadableTyped } // oxlint-disable no-unused-vars export interface WritableTyped<_T> extends Writable {} export interface TransformTyped<_IN = unknown, _OUT = unknown> extends Transform {} export interface TransformOptions { /** * @default true */ objectMode?: boolean /** * @default 16 */ highWaterMark?: number /** * Defaults to `console`. */ logger?: CommonLogger /** * Not every Transform implements it. * Can be one of: * debug - most verbose, when debugging is needed * log - default level * error - logs errors and warnings only * * Default is 'log'. * */ logLevel?: CommonLogLevel }