@electric-sql/d2mini
Version:
D2Mini is a minimal implementation of Differential Dataflow for performing in-memory incremental view maintenance.
38 lines • 1.32 kB
JavaScript
import { DifferenceStreamWriter, UnaryOperator } from '../graph.js';
import { StreamBuilder } from '../d2.js';
import { MultiSet } from '../multiset.js';
/**
* Operator that consolidates collections
*/
export class ConsolidateOperator extends UnaryOperator {
run() {
const messages = this.inputMessages();
if (messages.length === 0) {
return;
}
// Combine all messages into a single MultiSet
const combined = new MultiSet();
for (const message of messages) {
combined.extend(message);
}
// Consolidate the combined MultiSet
const consolidated = combined.consolidate();
// Only send if there are results
if (consolidated.getInner().length > 0) {
this.output.sendData(consolidated);
}
}
}
/**
* Consolidates the elements in the stream
*/
export function consolidate() {
return (stream) => {
const output = new StreamBuilder(stream.graph, new DifferenceStreamWriter());
const operator = new ConsolidateOperator(stream.graph.getNextOperatorId(), stream.connectReader(), output.writer);
stream.graph.addOperator(operator);
stream.graph.addStream(output.connectReader());
return output;
};
}
//# sourceMappingURL=consolidate.js.map