UNPKG

@tanstack/db-ivm

Version:

Incremental View Maintenance for TanStack DB based on Differential Dataflow

84 lines (83 loc) 3.02 kB
"use strict"; var __typeError = (msg) => { throw TypeError(msg); }; var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); var _inner; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const utils = require("./utils.cjs"); const hash = require("./hashing/hash.cjs"); class HashIndex { constructor() { __privateAdd(this, _inner); __privateSet(this, _inner, new utils.DefaultMap( () => new utils.DefaultMap(() => [void 0, 0]) )); } toString(indent = false) { return `HashIndex(${JSON.stringify( [...__privateGet(this, _inner)].map(([k, valueMap]) => [k, [...valueMap]]), void 0, indent ? 2 : void 0 )})`; } get(key) { const valueMap = __privateGet(this, _inner).get(key); return [...valueMap.values()]; } getMultiplicity(key, value) { const valueMap = __privateGet(this, _inner).get(key); const valueHash = hash.hash(value); const [, multiplicity] = valueMap.get(valueHash); return multiplicity; } entries() { return __privateGet(this, _inner).entries(); } *entriesIterator() { for (const [key, valueMap] of __privateGet(this, _inner).entries()) { for (const [_valueHash, [value, multiplicity]] of valueMap.entries()) { yield [key, [value, multiplicity]]; } } } has(key) { return __privateGet(this, _inner).has(key); } delete(key) { __privateGet(this, _inner).delete(key); } get size() { return __privateGet(this, _inner).size; } /** * Adds a value to the index and does not return anything * except if the addition caused the value to be removed * and the key to be left with only a single value. * In that case, we return the single remaining value. */ addValue(key, value) { const [val, multiplicity] = value; const valueMap = __privateGet(this, _inner).get(key); const valueHash = hash.hash(val); const [, existingMultiplicity] = valueMap.get(valueHash); const newMultiplicity = existingMultiplicity + multiplicity; if (multiplicity !== 0) { if (newMultiplicity === 0) { valueMap.delete(valueHash); if (valueMap.size === 1) { return valueMap.entries().next().value[1]; } } else { valueMap.set(valueHash, [val, newMultiplicity]); } } __privateGet(this, _inner).set(key, valueMap); } } _inner = new WeakMap(); exports.HashIndex = HashIndex; //# sourceMappingURL=hashIndex.cjs.map