matrix-react-sdk
Version:
SDK for matrix.org using React
58 lines (54 loc) • 5.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.EnhancedMap = void 0;
exports.mapDiff = mapDiff;
var _arrays = require("./arrays");
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/**
* Determines the keys added, changed, and removed between two Maps.
* For changes, simple triple equal comparisons are done, not in-depth tree checking.
* @param a The first Map. Must be defined.
* @param b The second Map. Must be defined.
* @returns The difference between the keys of each Map.
*/
function mapDiff(a, b) {
const aKeys = [...a.keys()];
const bKeys = [...b.keys()];
const keyDiff = (0, _arrays.arrayDiff)(aKeys, bKeys);
const possibleChanges = (0, _arrays.arrayIntersection)(aKeys, bKeys);
const changes = possibleChanges.filter(k => a.get(k) !== b.get(k));
return {
changed: changes,
added: keyDiff.added,
removed: keyDiff.removed
};
}
/**
* A Map<K, V> with added utility.
*/
class EnhancedMap extends Map {
constructor(entries) {
super(entries);
}
getOrCreate(key, def) {
if (this.has(key)) {
return this.get(key);
}
this.set(key, def);
return def;
}
remove(key) {
const v = this.get(key);
this.delete(key);
return v;
}
}
exports.EnhancedMap = EnhancedMap;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXJyYXlzIiwicmVxdWlyZSIsIm1hcERpZmYiLCJhIiwiYiIsImFLZXlzIiwia2V5cyIsImJLZXlzIiwia2V5RGlmZiIsImFycmF5RGlmZiIsInBvc3NpYmxlQ2hhbmdlcyIsImFycmF5SW50ZXJzZWN0aW9uIiwiY2hhbmdlcyIsImZpbHRlciIsImsiLCJnZXQiLCJjaGFuZ2VkIiwiYWRkZWQiLCJyZW1vdmVkIiwiRW5oYW5jZWRNYXAiLCJNYXAiLCJjb25zdHJ1Y3RvciIsImVudHJpZXMiLCJnZXRPckNyZWF0ZSIsImtleSIsImRlZiIsImhhcyIsInNldCIsInJlbW92ZSIsInYiLCJkZWxldGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21hcHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgYXJyYXlEaWZmLCBhcnJheUludGVyc2VjdGlvbiB9IGZyb20gXCIuL2FycmF5c1wiO1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGtleXMgYWRkZWQsIGNoYW5nZWQsIGFuZCByZW1vdmVkIGJldHdlZW4gdHdvIE1hcHMuXG4gKiBGb3IgY2hhbmdlcywgc2ltcGxlIHRyaXBsZSBlcXVhbCBjb21wYXJpc29ucyBhcmUgZG9uZSwgbm90IGluLWRlcHRoIHRyZWUgY2hlY2tpbmcuXG4gKiBAcGFyYW0gYSBUaGUgZmlyc3QgTWFwLiBNdXN0IGJlIGRlZmluZWQuXG4gKiBAcGFyYW0gYiBUaGUgc2Vjb25kIE1hcC4gTXVzdCBiZSBkZWZpbmVkLlxuICogQHJldHVybnMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUga2V5cyBvZiBlYWNoIE1hcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcERpZmY8SywgVj4oYTogTWFwPEssIFY+LCBiOiBNYXA8SywgVj4pOiB7IGNoYW5nZWQ6IEtbXTsgYWRkZWQ6IEtbXTsgcmVtb3ZlZDogS1tdIH0ge1xuICAgIGNvbnN0IGFLZXlzID0gWy4uLmEua2V5cygpXTtcbiAgICBjb25zdCBiS2V5cyA9IFsuLi5iLmtleXMoKV07XG4gICAgY29uc3Qga2V5RGlmZiA9IGFycmF5RGlmZihhS2V5cywgYktleXMpO1xuICAgIGNvbnN0IHBvc3NpYmxlQ2hhbmdlcyA9IGFycmF5SW50ZXJzZWN0aW9uKGFLZXlzLCBiS2V5cyk7XG4gICAgY29uc3QgY2hhbmdlcyA9IHBvc3NpYmxlQ2hhbmdlcy5maWx0ZXIoKGspID0+IGEuZ2V0KGspICE9PSBiLmdldChrKSk7XG5cbiAgICByZXR1cm4geyBjaGFuZ2VkOiBjaGFuZ2VzLCBhZGRlZDoga2V5RGlmZi5hZGRlZCwgcmVtb3ZlZDoga2V5RGlmZi5yZW1vdmVkIH07XG59XG5cbi8qKlxuICogQSBNYXA8SywgVj4gd2l0aCBhZGRlZCB1dGlsaXR5LlxuICovXG5leHBvcnQgY2xhc3MgRW5oYW5jZWRNYXA8SywgVj4gZXh0ZW5kcyBNYXA8SywgVj4ge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihlbnRyaWVzPzogSXRlcmFibGU8W0ssIFZdPikge1xuICAgICAgICBzdXBlcihlbnRyaWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JDcmVhdGUoa2V5OiBLLCBkZWY6IFYpOiBWIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChrZXkpITtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldChrZXksIGRlZik7XG4gICAgICAgIHJldHVybiBkZWY7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuZ2V0KGtleSk7XG4gICAgICAgIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBT0EsQ0FBT0MsQ0FBWSxFQUFFQyxDQUFZLEVBQThDO0VBQ2xHLE1BQU1DLEtBQUssR0FBRyxDQUFDLEdBQUdGLENBQUMsQ0FBQ0csSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMzQixNQUFNQyxLQUFLLEdBQUcsQ0FBQyxHQUFHSCxDQUFDLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDM0IsTUFBTUUsT0FBTyxHQUFHLElBQUFDLGlCQUFTLEVBQUNKLEtBQUssRUFBRUUsS0FBSyxDQUFDO0VBQ3ZDLE1BQU1HLGVBQWUsR0FBRyxJQUFBQyx5QkFBaUIsRUFBQ04sS0FBSyxFQUFFRSxLQUFLLENBQUM7RUFDdkQsTUFBTUssT0FBTyxHQUFHRixlQUFlLENBQUNHLE1BQU0sQ0FBRUMsQ0FBQyxJQUFLWCxDQUFDLENBQUNZLEdBQUcsQ0FBQ0QsQ0FBQyxDQUFDLEtBQUtWLENBQUMsQ0FBQ1csR0FBRyxDQUFDRCxDQUFDLENBQUMsQ0FBQztFQUVwRSxPQUFPO0lBQUVFLE9BQU8sRUFBRUosT0FBTztJQUFFSyxLQUFLLEVBQUVULE9BQU8sQ0FBQ1MsS0FBSztJQUFFQyxPQUFPLEVBQUVWLE9BQU8sQ0FBQ1U7RUFBUSxDQUFDO0FBQy9FOztBQUVBO0FBQ0E7QUFDQTtBQUNPLE1BQU1DLFdBQVcsU0FBZUMsR0FBRyxDQUFPO0VBQ3RDQyxXQUFXQSxDQUFDQyxPQUEwQixFQUFFO0lBQzNDLEtBQUssQ0FBQ0EsT0FBTyxDQUFDO0VBQ2xCO0VBRU9DLFdBQVdBLENBQUNDLEdBQU0sRUFBRUMsR0FBTSxFQUFLO0lBQ2xDLElBQUksSUFBSSxDQUFDQyxHQUFHLENBQUNGLEdBQUcsQ0FBQyxFQUFFO01BQ2YsT0FBTyxJQUFJLENBQUNULEdBQUcsQ0FBQ1MsR0FBRyxDQUFDO0lBQ3hCO0lBQ0EsSUFBSSxDQUFDRyxHQUFHLENBQUNILEdBQUcsRUFBRUMsR0FBRyxDQUFDO0lBQ2xCLE9BQU9BLEdBQUc7RUFDZDtFQUVPRyxNQUFNQSxDQUFDSixHQUFNLEVBQWlCO0lBQ2pDLE1BQU1LLENBQUMsR0FBRyxJQUFJLENBQUNkLEdBQUcsQ0FBQ1MsR0FBRyxDQUFDO0lBQ3ZCLElBQUksQ0FBQ00sTUFBTSxDQUFDTixHQUFHLENBQUM7SUFDaEIsT0FBT0ssQ0FBQztFQUNaO0FBQ0o7QUFBQ0UsT0FBQSxDQUFBWixXQUFBLEdBQUFBLFdBQUEiLCJpZ25vcmVMaXN0IjpbXX0=