import { ILogger } from 'js-logger'; import { BaseListener, BaseObserver } from './BaseObserver.js'; export type DataStreamOptions = { mapLine?: (line: SourceData) => ParsedData; /** * Close the stream if any consumer throws an error */ closeOnError?: boolean; pressure?: { highWaterMark?: number; lowWaterMark?: number; }; logger?: ILogger; }; export type DataStreamCallback = (data: Data) => Promise; export interface DataStreamListener extends BaseListener { data: (data: Data) => Promise; closed: () => void; error: (error: Error) => void; highWater: () => Promise; lowWater: () => Promise; } export declare const DEFAULT_PRESSURE_LIMITS: { highWater: number; lowWater: number; }; /** * A very basic implementation of a data stream with backpressure support which does not use * native JS streams or async iterators. * This is handy for environments such as React Native which need polyfills for the above. */ export declare class DataStream extends BaseObserver> { protected options?: DataStreamOptions | undefined; dataQueue: SourceData[]; protected isClosed: boolean; protected processingPromise: Promise | null; protected notifyDataAdded: (() => void) | null; protected logger: ILogger; protected mapLine: (line: SourceData) => ParsedData; constructor(options?: DataStreamOptions | undefined); get highWatermark(): number; get lowWatermark(): number; get closed(): boolean; close(): Promise; /** * Enqueues data for the consumers to read */ enqueueData(data: SourceData): void; /** * Reads data once from the data stream * @returns a Data payload or Null if the stream closed. */ read(): Promise; /** * Executes a callback for each data item in the stream */ forEach(callback: DataStreamCallback): () => void; protected processQueue(): Promise | undefined; protected hasDataReader(): boolean; protected _processQueue(): Promise; protected iterateAsyncErrored(cb: (l: Partial>) => Promise): Promise; }