UNPKG

weak-event

Version:

C#-Style Typescript Events/Weak Events

39 lines 1.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WeakHandlerHolder = void 0; const errors_1 = require("./errors"); class WeakHandlerHolder { constructor(finalizer) { this._refs = []; try { this._finalizationRegistry = new FinalizationRegistry(finalizer); } catch (err) { const asRefErr = err; if (asRefErr.name === 'FinalizationRegistry') { throw new errors_1.FinalizationRegistryMissingError('FinalizationRegistry is not defined. Weak Events cannot be used. ' + ' Please consult ' + "'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry'" + ' for compatibility information'); } throw err; } } getWeakHandler(eventSource, handler) { const handlerRef = new WeakRef(handler); this._finalizationRegistry.register(handler, { eventSource, handlerRef }, handlerRef); this._refs.push(handlerRef); return handlerRef; } releaseWeakHandler(handler) { const existingRef = this._refs.find((ref) => (ref === null || ref === void 0 ? void 0 : ref.deref()) === handler); const refToUse = existingRef || new WeakRef(handler); this._finalizationRegistry.unregister(refToUse); return refToUse; } unregisterRef(ref) { this._finalizationRegistry.unregister(ref); } } exports.WeakHandlerHolder = WeakHandlerHolder; //# sourceMappingURL=weak-event-finalization.js.map