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.

77 lines (76 loc) 3.24 kB
"use strict"; 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 _IterableWeakSet_weakMap, _IterableWeakSet_set, _IterableWeakSet_registry; Object.defineProperty(exports, "__esModule", { value: true }); exports.IterableWeakSet = void 0; class IterableWeakSet { constructor(iterable = null) { _IterableWeakSet_weakMap.set(this, new WeakMap()); _IterableWeakSet_set.set(this, new Set()); _IterableWeakSet_registry.set(this, new FinalizationRegistry(__classPrivateFieldGet(this, _IterableWeakSet_set, "f").delete.bind(__classPrivateFieldGet(this, _IterableWeakSet_set, "f")))); for (const value of iterable ?? []) { this.add(value); } } get size() { return __classPrivateFieldGet(this, _IterableWeakSet_set, "f").size; } add(value) { if (this.has(value)) { return this; } const ref = new WeakRef(value); __classPrivateFieldGet(this, _IterableWeakSet_weakMap, "f").set(value, ref); __classPrivateFieldGet(this, _IterableWeakSet_set, "f").add(ref); __classPrivateFieldGet(this, _IterableWeakSet_registry, "f").register(value, ref, ref); return this; } clear() { for (const value of __classPrivateFieldGet(this, _IterableWeakSet_set, "f")) { this.delete(value.deref()); } } delete(value) { const ref = __classPrivateFieldGet(this, _IterableWeakSet_weakMap, "f").get(value); if (ref) { __classPrivateFieldGet(this, _IterableWeakSet_set, "f").delete(ref); __classPrivateFieldGet(this, _IterableWeakSet_weakMap, "f").delete(value); __classPrivateFieldGet(this, _IterableWeakSet_registry, "f").unregister(ref); return true; } return false; } has(value) { return __classPrivateFieldGet(this, _IterableWeakSet_weakMap, "f").has(value); } forEach(callbackfn, thisArg) { for (const tuple of this.entries()) { callbackfn.call(thisArg, tuple[0], tuple[1], this); } } get [(_IterableWeakSet_weakMap = new WeakMap(), _IterableWeakSet_set = new WeakMap(), _IterableWeakSet_registry = new WeakMap(), Symbol.toStringTag)]() { return "IterableWeakSet"; } *[Symbol.iterator]() { for (const ref of __classPrivateFieldGet(this, _IterableWeakSet_set, "f")) { yield ref.deref(); } } *entries() { for (const ref of __classPrivateFieldGet(this, _IterableWeakSet_set, "f")) { const value = ref.deref(); yield [value, value]; } } keys() { return this[Symbol.iterator](); } values() { return this[Symbol.iterator](); } } exports.IterableWeakSet = IterableWeakSet;