import { type Result } from 'neverthrow'; import { createLinkedListQueue } from '../queue/linked-list-queue.js'; import type { Queue } from '../queue/queue.js'; import { createRingBufferQueue } from '../queue/ring-buffer-queue.js'; export { createLinkedListQueue, createRingBufferQueue, type Queue }; export type CreateBufferFn = (size: number) => Result, Error>; export type MapOptions = { concurrency?: number | AsyncChannel; delay?: number | AsyncChannel; } & QueueOptions; export type QueueOptions = { buffer?: Queue; size?: number; }; export type ChunkOptions = { timeout?: number; } & QueueOptions; export type AsyncChannel = { send: (value: T) => Promise>; then: (onFulfilled: (value: Result) => void) => void; close: (e?: Error) => E | undefined; clearAndClose: (e?: Error) => void; isClosed: boolean; error: Error | undefined; [Symbol.asyncIterator](): AsyncIterator; toArray: () => T[]; size: number; bufferedCount: number; pendingSends: number; pendingReceives: number; toString: () => string; map: (fn: (value: T, options: { signal?: AbortSignal; }) => U, options?: MapOptions, E>) => AsyncChannel, E>; chunk: (size: number, options?: ChunkOptions) => AsyncChannel; filter: (fn: (value: T, options: { signal?: AbortSignal; }) => boolean | Promise, options?: QueueOptions) => AsyncChannel; forEach: (fn: (value: T, options: { signal?: AbortSignal; }) => Promise | void, options?: { concurrency?: number | AsyncChannel; delay?: number | AsyncChannel; signal?: AbortSignal; }) => Promise>; }; export declare class AsyncChannelClosedError extends Error { constructor(cause: Error | undefined); } type SizeOrUnbounded = { unbounded: true; size?: undefined; } | { unbounded?: false; size?: number; }; type CreateAsyncChannelInput = { signal?: AbortSignal; values?: Iterable; generator?: (input?: { signal?: AbortSignal; }) => AsyncGenerator; } & SizeOrUnbounded; type _CreateAsyncChannelInput = CreateAsyncChannelInput & { buffer: Queue; }; export declare function createChannelWithQueue(input: _CreateAsyncChannelInput): AsyncChannel; export declare function createUnboundedChannel(options?: Omit, 'size'>): AsyncChannel; export declare function createChannel(options?: Omit, 'unbounded'>): AsyncChannel;