1 | import { createTrackingData } from "./reactionCleanupTrackingCommon";
|
2 |
|
3 |
|
4 |
|
5 | export 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 |
|
32 | },
|
33 | resetCleanupScheduleForTests: function () {
|
34 |
|
35 | }
|
36 | };
|
37 | }
|
38 |
|
\ | No newline at end of file |