mobx-react-lite
Version:
Lightweight React bindings for MobX based on React 16.8+ and Hooks
42 lines • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createReactionCleanupTrackingUsingFinalizationRegister = void 0;
var reactionCleanupTrackingCommon_1 = require("./reactionCleanupTrackingCommon");
/**
* FinalizationRegistry-based uncommitted reaction cleanup
*/
function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
var cleanupTokenToReactionTrackingMap = new Map();
var globalCleanupTokensCounter = 1;
var registry = new FinalizationRegistry(function cleanupFunction(token) {
var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
if (trackedReaction) {
trackedReaction.reaction.dispose();
cleanupTokenToReactionTrackingMap.delete(token);
}
});
return {
addReactionToTrack: function (reactionTrackingRef, reaction, objectRetainedByReact) {
var token = globalCleanupTokensCounter++;
registry.register(objectRetainedByReact, token, reactionTrackingRef);
reactionTrackingRef.current = (0, reactionCleanupTrackingCommon_1.createTrackingData)(reaction);
reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
return reactionTrackingRef.current;
},
recordReactionAsCommitted: function (reactionRef) {
registry.unregister(reactionRef);
if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
cleanupTokenToReactionTrackingMap.delete(reactionRef.current.finalizationRegistryCleanupToken);
}
},
forceCleanupTimerToRunNowForTests: function () {
// When FinalizationRegistry in use, this this is no-op
},
resetCleanupScheduleForTests: function () {
// When FinalizationRegistry in use, this this is no-op
}
};
}
exports.createReactionCleanupTrackingUsingFinalizationRegister = createReactionCleanupTrackingUsingFinalizationRegister;
//# sourceMappingURL=createReactionCleanupTrackingUsingFinalizationRegister.js.map