weak-event
Version:
C#-Style Typescript Events/Weak Events
39 lines • 1.61 kB
JavaScript
;
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