mobx-react-lite
Version:
Lightweight React bindings for MobX based on React 16.8+ and Hooks
96 lines • 3.72 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.UniversalFinalizationRegistry = exports.TimerBasedFinalizationRegistry = exports.REGISTRY_SWEEP_INTERVAL = exports.REGISTRY_FINALIZE_AFTER = void 0;
exports.REGISTRY_FINALIZE_AFTER = 10000;
exports.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 = exports.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, exports.REGISTRY_SWEEP_INTERVAL);
}
}
});
return TimerBasedFinalizationRegistry;
}());
exports.TimerBasedFinalizationRegistry = TimerBasedFinalizationRegistry;
exports.UniversalFinalizationRegistry = typeof FinalizationRegistry !== "undefined"
? FinalizationRegistry
: TimerBasedFinalizationRegistry;
//# sourceMappingURL=UniversalFinalizationRegistry.js.map
;