@drift-labs/common
Version:
Common functions for Drift
24 lines • 1.21 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.dedupeSubject = void 0;
const operators_1 = require("rxjs/operators");
const UniqueCircularBuffer_1 = require("./CircularBuffers/UniqueCircularBuffer");
/**
* Deduplicated subject, using UniqueCircularBuffer to dedupe the input subject.
*
* The windowSize defines the amount of unique elements to keep in memory for the sake of deduplicating. Any incoming duplicate objects will NOT be added to the buffer so won't take up space.
* @param inputSubject
* @param windowSize maximum size of recent unique objects which will be stored to use for deduplication
* @param uniquenessKeyGenerator function that generates a unique key for an object
* @returns
*/
function dedupeSubject(inputSubject, windowSize, uniquenessKeyGenerator) {
const buffer = new UniqueCircularBuffer_1.UniqueCircularBuffer(windowSize, uniquenessKeyGenerator);
const dedupedObservable = inputSubject.pipe((0, operators_1.filter)((value) => {
const added = buffer.add(value);
return added;
}), (0, operators_1.share)());
return dedupedObservable;
}
exports.dedupeSubject = dedupeSubject;
//# sourceMappingURL=rxjs.js.map
;