UNPKG

mobx-react-lite

Version:

Lightweight React bindings for MobX based on React 16.8+ and Hooks

93 lines 3.45 kB
export var REGISTRY_FINALIZE_AFTER = 10000; export var REGISTRY_SWEEP_INTERVAL = 10000; var TimerBasedFinalizationRegistry = /** @class */ (function () { function TimerBasedFinalizationRegistry(finalize) { var _this = this; Object.defineProperty(this, "finalize", { enumerable: true, configurable: true, writable: true, value: finalize }); Object.defineProperty(this, "registrations", { enumerable: true, configurable: true, writable: true, value: new Map() }); Object.defineProperty(this, "sweepTimeout", { enumerable: true, configurable: true, writable: true, value: void 0 }); // Bound so it can be used directly as setTimeout callback. Object.defineProperty(this, "sweep", { enumerable: true, configurable: true, writable: true, value: function (maxAge) { if (maxAge === void 0) { maxAge = REGISTRY_FINALIZE_AFTER; } // cancel timeout so we can force sweep anytime clearTimeout(_this.sweepTimeout); _this.sweepTimeout = undefined; var now = Date.now(); _this.registrations.forEach(function (registration, token) { if (now - registration.registeredAt >= maxAge) { _this.finalize(registration.value); _this.registrations.delete(token); } }); if (_this.registrations.size > 0) { _this.scheduleSweep(); } } }); // Bound so it can be exported directly as clearTimers test utility. Object.defineProperty(this, "finalizeAllImmediately", { enumerable: true, configurable: true, writable: true, value: function () { _this.sweep(0); } }); } // Token is actually required with this impl Object.defineProperty(TimerBasedFinalizationRegistry.prototype, "register", { enumerable: false, configurable: true, writable: true, value: function (target, value, token) { this.registrations.set(token, { value: value, registeredAt: Date.now() }); this.scheduleSweep(); } }); Object.defineProperty(TimerBasedFinalizationRegistry.prototype, "unregister", { enumerable: false, configurable: true, writable: true, value: function (token) { this.registrations.delete(token); } }); Object.defineProperty(TimerBasedFinalizationRegistry.prototype, "scheduleSweep", { enumerable: false, configurable: true, writable: true, value: function () { if (this.sweepTimeout === undefined) { this.sweepTimeout = setTimeout(this.sweep, REGISTRY_SWEEP_INTERVAL); } } }); return TimerBasedFinalizationRegistry; }()); export { TimerBasedFinalizationRegistry }; export var UniversalFinalizationRegistry = typeof FinalizationRegistry !== "undefined" ? FinalizationRegistry : TimerBasedFinalizationRegistry; //# sourceMappingURL=UniversalFinalizationRegistry.js.map