in packages/recoil/core/Recoil_FunctionalCore.js [32:80]
function initializeRetentionForNode(
store: Store,
nodeKey: NodeKey,
retainedBy: RetainedBy,
): () => void {
if (!gkx('recoil_memory_managament_2020')) {
return () => undefined;
}
const {nodesRetainedByZone} = store.getState().retention;
function addToZone(zone: RetentionZone) {
let set = nodesRetainedByZone.get(zone);
if (!set) {
nodesRetainedByZone.set(zone, (set = new Set()));
}
set.add(nodeKey);
}
if (retainedBy instanceof RetentionZone) {
addToZone(retainedBy);
} else if (Array.isArray(retainedBy)) {
for (const zone of retainedBy) {
addToZone(zone);
}
}
return () => {
if (!gkx('recoil_memory_managament_2020')) {
return;
}
const {retention} = store.getState();
function deleteFromZone(zone: RetentionZone) {
const set = retention.nodesRetainedByZone.get(zone);
set?.delete(nodeKey);
if (set && set.size === 0) {
retention.nodesRetainedByZone.delete(zone);
}
}
if (retainedBy instanceof RetentionZone) {
deleteFromZone(retainedBy);
} else if (Array.isArray(retainedBy)) {
for (const zone of retainedBy) {
deleteFromZone(zone);
}
}
};
}