UNPKG

@electric-sql/d2mini

Version:

D2Mini is a minimal implementation of Differential Dataflow for performing in-memory incremental view maintenance.

37 lines 1.39 kB
import { DifferenceStreamWriter } from '../graph.js'; import { StreamBuilder } from '../d2.js'; import { ReduceOperator } from './reduce.js'; import { hash } from '../utils.js'; /** * Operator that removes duplicates by key (version-free) */ export class DistinctOperator extends ReduceOperator { constructor(id, inputA, output) { const distinctInner = (vals) => { const consolidated = new Map(); const values = new Map(); for (const [val, diff] of vals) { const key = hash(val); consolidated.set(key, (consolidated.get(key) || 0) + diff); values.set(key, val); } return Array.from(consolidated.entries()) .filter(([_, count]) => count > 0) .map(([key, _]) => [values.get(key), 1]); }; super(id, inputA, output, distinctInner); } } /** * Removes duplicates by key (version-free) */ export function distinct() { return (stream) => { const output = new StreamBuilder(stream.graph, new DifferenceStreamWriter()); const operator = new DistinctOperator(stream.graph.getNextOperatorId(), stream.connectReader(), output.writer); stream.graph.addOperator(operator); stream.graph.addStream(output.connectReader()); return output; }; } //# sourceMappingURL=distinct.js.map