@electric-sql/d2ts
Version:
D2TS is a TypeScript implementation of Differential Dataflow.
69 lines (68 loc) • 3 kB
TypeScript
import { MultiSet, MultiSetArray } from './multiset.js';
import { Version, Antichain } from './order.js';
import { Message, IOperator, IDifferenceStreamReader, IDifferenceStreamWriter } from './types.js';
/**
* A read handle to a dataflow edge that receives data and frontier updates from a writer.
*
* The data received over this edge are pairs of (version, MultiSet) and the frontier
* updates are either integers (in the one dimensional case) or Antichains (in the general
* case).
*/
export declare class DifferenceStreamReader<T> implements IDifferenceStreamReader<T> {
#private;
constructor(queue: Message<T>[]);
drain(): Message<T>[];
isEmpty(): boolean;
probeFrontierLessThan(frontier: Antichain): boolean;
}
/**
* A write handle to a dataflow edge that is allowed to publish data and send
* frontier updates.
*/
export declare class DifferenceStreamWriter<T> implements IDifferenceStreamWriter<T> {
#private;
frontier: Antichain | null;
sendData(version: Version | number | number[], collection: MultiSet<T> | MultiSetArray<T>): void;
sendFrontier(frontier: Antichain | Version | number | number[]): void;
newReader(): DifferenceStreamReader<T>;
}
/**
* A generic implementation of a dataflow operator (node) that has multiple incoming edges (read handles) and
* one outgoing edge (write handle).
*/
export declare abstract class Operator<T> implements IOperator<T> {
id: number;
protected inputs: DifferenceStreamReader<T>[];
protected output: DifferenceStreamWriter<T>;
protected inputFrontiers: Antichain[];
protected outputFrontier: Antichain;
constructor(id: number, inputs: DifferenceStreamReader<T>[], output: DifferenceStreamWriter<T>, initialFrontier: Antichain);
abstract run(): void;
hasPendingWork(): boolean;
frontiers(): [Antichain[], Antichain];
}
/**
* A convenience implementation of a dataflow operator that has a handle to one
* incoming stream of data, and one handle to an outgoing stream of data.
*/
export declare abstract class UnaryOperator<T> extends Operator<T> {
id: number;
constructor(id: number, inputA: DifferenceStreamReader<T>, output: DifferenceStreamWriter<T>, initialFrontier: Antichain);
inputMessages(): Message<T>[];
inputFrontier(): Antichain;
setInputFrontier(frontier: Antichain): void;
}
/**
* A convenience implementation of a dataflow operator that has a handle to two
* incoming streams of data, and one handle to an outgoing stream of data.
*/
export declare abstract class BinaryOperator<T> extends Operator<T> {
id: number;
constructor(id: number, inputA: DifferenceStreamReader<T>, inputB: DifferenceStreamReader<T>, output: DifferenceStreamWriter<T>, initialFrontier: Antichain);
inputAMessages(): Message<T>[];
inputAFrontier(): Antichain;
setInputAFrontier(frontier: Antichain): void;
inputBMessages(): Message<T>[];
inputBFrontier(): Antichain;
setInputBFrontier(frontier: Antichain): void;
}