import type { Computation } from "./Computation.js"; import { Queue } from "./Queue.js"; /** @internal */ export interface Group> { parent?: TSelf | undefined; } interface WorkResult, S extends Stream> { value: TValue; work?: Work | undefined; } /** @internal */ export interface Stream, S extends Stream> { queue: Queue>; } /** @internal */ export interface Work, S extends Stream> { groups?: ReadonlyArray; tasks?: ReadonlyArray>; streams?: ReadonlyArray; } interface NewWork, S extends Stream> { newGroups: ReadonlyArray; newStreams: ReadonlyArray; } /** @internal */ export interface WorkQueue, S extends Stream> { initialGroups: ReadonlyArray; initialStreams: ReadonlyArray; events: AsyncGenerator>, void, void>; } /** @internal */ export type StreamItem, S extends Stream> = WorkResult; /** @internal */ export type TaskResult, S extends Stream> = WorkResult; /** @internal */ export interface Task, S extends Stream> { groups: ReadonlyArray; computation: Computation>; } interface StreamSuccessEvent, S extends Stream> { kind: 'STREAM_SUCCESS'; stream: S; } interface StreamFailureEvent, S extends Stream> { kind: 'STREAM_FAILURE'; stream: S; error: unknown; } interface GroupValuesEvent, S extends Stream> { kind: 'GROUP_VALUES'; group: G; values: ReadonlyArray; } interface GroupSuccessEvent, S extends Stream> extends NewWork { kind: 'GROUP_SUCCESS'; group: G; } interface GroupFailureEvent> { kind: 'GROUP_FAILURE'; group: G; error: unknown; } interface StreamValuesEvent, S extends Stream> extends NewWork { kind: 'STREAM_VALUES'; stream: S; values: ReadonlyArray; } interface WorkQueueTerminationEvent { kind: 'WORK_QUEUE_TERMINATION'; } /** @internal */ export type WorkQueueEvent, S extends Stream> = GroupValuesEvent | GroupSuccessEvent | GroupFailureEvent | StreamValuesEvent | StreamSuccessEvent | StreamFailureEvent | WorkQueueTerminationEvent; /** @internal */ export declare function createWorkQueue, S extends Stream>(initialWork: Work | undefined): WorkQueue; export {};