UNPKG

1.88 kBJavaScriptView Raw
1import { createTrackingData } from "./reactionCleanupTrackingCommon";
2/**
3 * FinalizationRegistry-based uncommitted reaction cleanup
4 */
5export function createReactionCleanupTrackingUsingFinalizationRegister(FinalizationRegistry) {
6 var cleanupTokenToReactionTrackingMap = new Map();
7 var globalCleanupTokensCounter = 1;
8 var registry = new FinalizationRegistry(function cleanupFunction(token) {
9 var trackedReaction = cleanupTokenToReactionTrackingMap.get(token);
10 if (trackedReaction) {
11 trackedReaction.reaction.dispose();
12 cleanupTokenToReactionTrackingMap.delete(token);
13 }
14 });
15 return {
16 addReactionToTrack: function (reactionTrackingRef, reaction, objectRetainedByReact) {
17 var token = globalCleanupTokensCounter++;
18 registry.register(objectRetainedByReact, token, reactionTrackingRef);
19 reactionTrackingRef.current = createTrackingData(reaction);
20 reactionTrackingRef.current.finalizationRegistryCleanupToken = token;
21 cleanupTokenToReactionTrackingMap.set(token, reactionTrackingRef.current);
22 return reactionTrackingRef.current;
23 },
24 recordReactionAsCommitted: function (reactionRef) {
25 registry.unregister(reactionRef);
26 if (reactionRef.current && reactionRef.current.finalizationRegistryCleanupToken) {
27 cleanupTokenToReactionTrackingMap.delete(reactionRef.current.finalizationRegistryCleanupToken);
28 }
29 },
30 forceCleanupTimerToRunNowForTests: function () {
31 // When FinalizationRegistry in use, this this is no-op
32 },
33 resetCleanupScheduleForTests: function () {
34 // When FinalizationRegistry in use, this this is no-op
35 }
36 };
37}
38//# sourceMappingURL=createReactionCleanupTrackingUsingFinalizationRegister.js.map
\No newline at end of file