UNPKG

mobx-react-lite

Version:

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

38 lines 1.88 kB
import { createTrackingData } from "./reactionCleanupTrackingCommon"; /** * FinalizationRegistry-based uncommitted reaction cleanup */ export 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 = 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 } }; } //# sourceMappingURL=createReactionCleanupTrackingUsingFinalizationRegister.js.map