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; } 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; }