UNPKG

@apollo/client

Version:

A fully-featured caching GraphQL client.

65 lines 1.97 kB
import { dep } from "optimism"; import { Slot } from "@wry/context"; export var cacheSlot = new Slot(); var cacheInfoMap = new WeakMap(); function getCacheInfo(cache) { var info = cacheInfoMap.get(cache); if (!info) { cacheInfoMap.set(cache, info = { vars: new Set, dep: dep(), }); } return info; } export function forgetCache(cache) { getCacheInfo(cache).vars.forEach(function (rv) { return rv.forgetCache(cache); }); } export function recallCache(cache) { getCacheInfo(cache).vars.forEach(function (rv) { return rv.attachCache(cache); }); } export function makeVar(value) { var caches = new Set(); var listeners = new Set(); var rv = function (newValue) { if (arguments.length > 0) { if (value !== newValue) { value = newValue; caches.forEach(function (cache) { getCacheInfo(cache).dep.dirty(rv); broadcast(cache); }); var oldListeners = Array.from(listeners); listeners.clear(); oldListeners.forEach(function (listener) { return listener(value); }); } } else { var cache = cacheSlot.getValue(); if (cache) { attach(cache); getCacheInfo(cache).dep(rv); } } return value; }; rv.onNextChange = function (listener) { listeners.add(listener); return function () { listeners.delete(listener); }; }; var attach = rv.attachCache = function (cache) { caches.add(cache); getCacheInfo(cache).vars.add(rv); return rv; }; rv.forgetCache = function (cache) { return caches.delete(cache); }; return rv; } function broadcast(cache) { if (cache.broadcastWatches) { cache.broadcastWatches(); } } //# sourceMappingURL=reactiveVars.js.map