UNPKG

weakref

Version:

Extend built-in collections with weak references for efficient garbage collection and optimal performance in memory-intensive applications with IterableWeakSet, IterableWeakMap, and WeakValueMap.

69 lines (68 loc) 2.79 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _WeakValueMap_map, _WeakValueMap_registry; export class WeakValueMap { constructor(iterable) { _WeakValueMap_map.set(this, new Map()); _WeakValueMap_registry.set(this, new FinalizationRegistry(__classPrivateFieldGet(this, _WeakValueMap_map, "f").delete.bind(__classPrivateFieldGet(this, _WeakValueMap_map, "f")))); for (const [key, value] of iterable ?? []) { this.set(key, value); } } get size() { return __classPrivateFieldGet(this, _WeakValueMap_map, "f").size; } clear() { for (const key of __classPrivateFieldGet(this, _WeakValueMap_map, "f").keys()) { this.delete(key); } } delete(key) { const ref = __classPrivateFieldGet(this, _WeakValueMap_map, "f").get(key); if (ref) { __classPrivateFieldGet(this, _WeakValueMap_map, "f").delete(key); __classPrivateFieldGet(this, _WeakValueMap_registry, "f").unregister(ref); return true; } return false; } get(key) { return __classPrivateFieldGet(this, _WeakValueMap_map, "f").get(key)?.deref(); } has(key) { return __classPrivateFieldGet(this, _WeakValueMap_map, "f").has(key); } set(key, value) { const ref = new WeakRef(value); __classPrivateFieldGet(this, _WeakValueMap_map, "f").set(key, ref); __classPrivateFieldGet(this, _WeakValueMap_registry, "f").register(value, key, ref); return this; } get [(_WeakValueMap_map = new WeakMap(), _WeakValueMap_registry = new WeakMap(), Symbol.toStringTag)]() { return "WeakValueMap"; } forEach(callbackfn, thisArg) { for (const [key, value] of this[Symbol.iterator]()) { callbackfn.call(thisArg, value, key, this); } } *[Symbol.iterator]() { for (const [key, ref] of __classPrivateFieldGet(this, _WeakValueMap_map, "f")) { yield [key, ref.deref()]; } } entries() { return this[Symbol.iterator](); } keys() { return __classPrivateFieldGet(this, _WeakValueMap_map, "f").keys(); } *values() { for (const ref of __classPrivateFieldGet(this, _WeakValueMap_map, "f").values()) { yield ref.deref(); } } }