swr-store
Version:
SWR stores for data-fetching
8 lines (7 loc) • 28.7 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/index.ts", "../../../src/global.ts", "../../../src/cache/reactive-cache.ts", "../../../src/cache/mutation-cache.ts", "../../../src/cache/revalidation-cache.ts", "../../../src/default-config.ts", "../../../src/is-client.ts", "../../../src/retry.ts", "../../../src/create-swr-store.ts"],
"sourcesContent": ["export { mutate, trigger, subscribe } from './global';\nexport { default as createSWRStore } from './create-swr-store';\nexport * from './types';\nexport {\n MutationPending,\n MutationSuccess,\n MutationFailure,\n MutationResult,\n} from './cache/mutation-cache';\n", "import { dequal } from 'dequal/lite';\nimport {\n getMutation,\n MutationListener,\n MutationResult,\n setMutation,\n subscribeMutation,\n} from './cache/mutation-cache';\nimport {\n setRevalidation,\n} from './cache/revalidation-cache';\n\nexport function trigger(\n key: string,\n shouldRevalidate = true,\n): void {\n setRevalidation(key, shouldRevalidate);\n}\n\nexport function mutate<T>(\n key: string,\n data: MutationResult<T>,\n shouldRevalidate = true,\n compare: (a: T, b: T) => boolean = dequal,\n): void {\n setRevalidation(key, shouldRevalidate);\n\n const current = getMutation<T>(key);\n\n if (\n current\n && current.result.status === 'success' && data.status === 'success'\n && compare(current.result.data, data.data)\n ) {\n current.timestamp = Date.now();\n return;\n }\n\n setMutation(key, {\n result: data,\n timestamp: Date.now(),\n isValidating: false,\n });\n}\n\nexport function subscribe<T>(\n key: string,\n listener: MutationListener<T>,\n): () => void {\n const wrappedListener: MutationListener<T> = (value) => {\n listener(value);\n };\n return subscribeMutation(key, wrappedListener);\n}\n", "export type ReactiveCacheListener<T> = (value: T) => void;\nexport interface ReactiveCacheRef<T> {\n value: T;\n}\n\nexport interface ReactiveCache<T> {\n cache: Map<string, ReactiveCacheRef<T>>;\n subscribers: Map<string, Set<ReactiveCacheListener<T>>>;\n}\n\nexport function createReactiveCache<T>(): ReactiveCache<T> {\n return {\n cache: new Map(),\n subscribers: new Map(),\n };\n}\n\nexport function createReactiveCacheRef<T>(\n cache: ReactiveCache<T>,\n key: string,\n value: T,\n): ReactiveCacheRef<T> {\n const currentRef = cache.cache.get(key);\n if (currentRef) {\n return currentRef;\n }\n const newRef: ReactiveCacheRef<T> = {\n value,\n };\n cache.cache.set(key, newRef);\n return newRef;\n}\n\nexport function subscribeReactiveCache<T>(\n cache: ReactiveCache<T>,\n key: string,\n listener: ReactiveCacheListener<T>,\n): () => void {\n let subscribers = cache.subscribers.get(key);\n if (!subscribers) {\n subscribers = new Set();\n cache.subscribers.set(key, subscribers);\n }\n subscribers.add(listener);\n\n return () => {\n if (subscribers) {\n subscribers.delete(listener);\n }\n };\n}\n\nexport function setReactiveCacheValue<T>(\n cache: ReactiveCache<T>,\n key: string,\n value: T,\n notify = true,\n): void {\n const currentRef = createReactiveCacheRef(cache, key, value);\n currentRef.value = value;\n\n if (notify) {\n let subscribers = cache.subscribers.get(key);\n if (!subscribers) {\n subscribers = new Set();\n cache.subscribers.set(key, subscribers);\n }\n for (const listener of subscribers.keys()) {\n listener(value);\n }\n }\n}\n\nexport function getReactiveCacheListenerSize<T>(\n cache: ReactiveCache<T>,\n key: string,\n): number {\n const result = cache.subscribers.get(key);\n if (result) {\n return result.size;\n }\n return 0;\n}\n", "import {\n createReactiveCache,\n getReactiveCacheListenerSize,\n ReactiveCacheListener,\n setReactiveCacheValue,\n subscribeReactiveCache,\n} from './reactive-cache';\n\nexport interface MutationPending<T> {\n data: Promise<T>;\n status: 'pending';\n}\nexport interface MutationSuccess<T> {\n data: T;\n status: 'success';\n}\nexport interface MutationFailure {\n data: any;\n status: 'failure';\n}\nexport type MutationResult<T> =\n | MutationPending<T>\n | MutationSuccess<T>\n | MutationFailure;\n\nexport interface Mutation<T> {\n result: MutationResult<T>;\n timestamp: number;\n isValidating: boolean;\n}\n\nexport const MUTATION_CACHE = createReactiveCache<Mutation<any>>();\n\nexport type MutationListener<T> = ReactiveCacheListener<Mutation<T>>;\n\nexport function subscribeMutation<T>(\n key: string,\n listener: MutationListener<T>,\n): () => void {\n return subscribeReactiveCache(MUTATION_CACHE, key, listener);\n}\n\nexport function setMutation<T>(\n key: string,\n value: Mutation<T>,\n): void {\n setReactiveCacheValue(MUTATION_CACHE, key, value);\n}\n\nexport function getMutation<T>(\n key: string,\n): Mutation<T> | undefined {\n const result = MUTATION_CACHE.cache.get(key);\n if (result) {\n return result.value;\n }\n return undefined;\n}\n\nexport function getMutationListenerSize(\n key: string,\n): number {\n return getReactiveCacheListenerSize(MUTATION_CACHE, key);\n}\n", "import {\n createReactiveCache,\n ReactiveCacheListener,\n setReactiveCacheValue,\n subscribeReactiveCache,\n} from './reactive-cache';\n\nexport const REVALIDATION_CACHE = createReactiveCache<boolean>();\n\nexport type RevalidationListener = ReactiveCacheListener<boolean>;\n\nexport function subscribeRevalidation(\n key: string,\n listener: RevalidationListener,\n): () => void {\n return subscribeReactiveCache(REVALIDATION_CACHE, key, listener);\n}\n\nexport function setRevalidation(\n key: string,\n value: boolean,\n notify = true,\n): void {\n setReactiveCacheValue(REVALIDATION_CACHE, key, value, notify);\n}\n\nexport function getRevalidation(\n key: string,\n): boolean | undefined {\n const result = REVALIDATION_CACHE.cache.get(key);\n if (result) {\n return result.value;\n }\n return undefined;\n}\n", "import { dequal } from 'dequal/lite';\nimport { SWRStoreExtendedOptions } from './types';\n\nfunction defaultKey<P extends any[] = []>(...args: P): string {\n return JSON.stringify(args);\n}\n\nconst DEFAULT_CONFIG: SWRStoreExtendedOptions<any, any> = {\n revalidateOnFocus: false,\n revalidateOnNetwork: false,\n revalidateOnVisibility: false,\n refreshWhenHidden: false,\n refreshWhenBlurred: false,\n refreshWhenOffline: false,\n freshAge: 2000,\n staleAge: 30000,\n key: defaultKey,\n compare: dequal,\n maxRetryInterval: 5000,\n};\n\nexport default DEFAULT_CONFIG;\n", "const IS_CLIENT = typeof window !== 'undefined'\n && typeof window.document !== 'undefined'\n && typeof window.document.createElement !== 'undefined';\n\nexport default IS_CLIENT;\n", "interface RetryOptions {\n count?: number;\n interval: number;\n}\n\ninterface Resolvable<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (reason: any) => void;\n}\n\nexport interface Retry<T> {\n resolvable: Resolvable<T>;\n cancel: () => void;\n}\n\nfunction createResolvable<T>(): Resolvable<T> {\n let resolve: Resolvable<T>['resolve'] = () => {\n //\n };\n let reject: Resolvable<T>['reject'] = () => {\n //\n };\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n promise,\n resolve,\n reject,\n };\n}\n\nexport default function retry<T>(supplier: () => Promise<T>, options: RetryOptions): Retry<T> {\n let alive = true;\n let schedule: number;\n\n const resolvable = createResolvable<T>();\n\n const backoff = (timeout = 10, count = 0) => {\n const handle = (reason: any) => {\n if (!alive || (typeof options.count === 'number' && options.count <= count)) {\n resolvable.reject(reason);\n } else {\n schedule = window.setTimeout(() => {\n backoff(Math.max(10, Math.min(options.interval, timeout * 2)), count + 1);\n }, timeout);\n }\n };\n\n try {\n supplier().then(resolvable.resolve, handle);\n } catch (reason) {\n handle(reason);\n }\n };\n\n backoff();\n\n return {\n resolvable,\n cancel: () => {\n if (schedule) {\n clearTimeout(schedule);\n }\n alive = false;\n },\n };\n}\n", "import {\n getMutation,\n getMutationListenerSize,\n MutationPending,\n MutationResult,\n setMutation,\n} from './cache/mutation-cache';\nimport {\n setRevalidation,\n subscribeRevalidation,\n} from './cache/revalidation-cache';\nimport DEFAULT_CONFIG from './default-config';\nimport {\n mutate,\n subscribe,\n trigger,\n} from './global';\nimport IS_CLIENT from './is-client';\nimport retry, { Retry } from './retry';\nimport {\n SWRFullOptions,\n SWRGetOptions,\n SWRStore,\n SWRStoreOptions,\n} from './types';\n\nlet index = 0;\n\nfunction getIndex() {\n const current = index;\n index += 1;\n return current;\n}\n\nconst retries = new Map<string, Retry<any>>();\n\nconst { assign } = Object;\n\nfunction revalidate<T, P extends any[] = []>(\n fullOpts: SWRFullOptions<T, P>,\n args: P,\n opts?: SWRGetOptions<T>,\n): MutationResult<T> {\n const defaultRevalidateOptions: SWRGetOptions<T> = {\n shouldRevalidate: true,\n initialData: fullOpts.initialData,\n hydrate: false,\n };\n const revalidateOptions: SWRGetOptions<T> = assign(\n {},\n defaultRevalidateOptions,\n opts,\n );\n // Parse key\n const generatedKey = fullOpts.key(...args);\n\n // Capture timestamp\n const timestamp = Date.now();\n\n // Get current mutation\n let currentMutation = getMutation<T>(generatedKey);\n\n // Hydrate mutation\n if (!currentMutation && revalidateOptions.initialData) {\n currentMutation = {\n result: {\n data: revalidateOptions.initialData,\n status: 'success',\n },\n timestamp,\n isValidating: false,\n };\n\n if (revalidateOptions.hydrate) {\n setMutation(generatedKey, currentMutation);\n }\n }\n\n if (currentMutation) {\n if (!revalidateOptions.shouldRevalidate) {\n return currentMutation.result;\n }\n // If mutation is still fresh, return mutation\n if (currentMutation.timestamp + fullOpts.freshAge > timestamp) {\n return currentMutation.result;\n }\n\n // We have to assume that if the request is no longer fresh\n // and the request is still pending, we need to cancel it\n // specially if it's retrying.\n if (currentMutation.result.status === 'pending') {\n const previousRetry = retries.get(generatedKey);\n\n if (previousRetry) {\n previousRetry.cancel();\n }\n }\n }\n\n // Perform fetch\n const pendingRetry = retry(() => fullOpts.get(...args), {\n count: fullOpts.maxRetryCount,\n interval: fullOpts.maxRetryInterval,\n });\n\n // Set current retry\n retries.set(generatedKey, pendingRetry);\n\n const pendingData = pendingRetry.resolvable.promise;\n\n // Capture result\n const result: MutationPending<T> = {\n data: pendingData,\n status: 'pending',\n };\n\n // Watch for promise resolutions\n // to update cache data\n pendingData.then(\n (data) => {\n const mutation = getMutation<T>(generatedKey);\n\n const shouldUpdate = (): boolean => {\n // Case 1: There's no mutation\n if (mutation == null) {\n return true;\n }\n\n // Case 2: Timestamp expired\n if (mutation.timestamp > timestamp) {\n return false;\n }\n\n // Case 3: There's a stale data\n if (mutation.result.status === 'success') {\n // Deep compare stale data\n return !fullOpts.compare(\n mutation.result.data,\n data,\n );\n }\n\n // Always update\n return true;\n };\n\n if (shouldUpdate()) {\n setMutation(generatedKey, {\n result: {\n data,\n status: 'success',\n },\n timestamp: (mutation && mutation.timestamp) ? mutation.timestamp : Date.now(),\n isValidating: false,\n });\n }\n },\n (data) => {\n const mutation = getMutation<T>(generatedKey);\n\n const shouldUpdate = (): boolean => {\n // Case 1: There's no mutation\n if (mutation == null) {\n return true;\n }\n\n // Case 2: Timestamp expired\n if (mutation.timestamp > timestamp) {\n return false;\n }\n\n // Always update\n return true;\n };\n\n if (shouldUpdate()) {\n setMutation(generatedKey, {\n result: {\n data,\n status: 'failure',\n },\n timestamp: (mutation && mutation.timestamp) ? mutation.timestamp : Date.now(),\n isValidating: false,\n });\n }\n },\n );\n\n // If there's an existing mutation\n // and mutation is stale\n // update timestamp and return\n if (\n currentMutation\n && currentMutation.timestamp + fullOpts.freshAge + fullOpts.staleAge > timestamp\n ) {\n // Updating this means that the freshness or the staleness\n // of a mutation resets\n currentMutation.timestamp = timestamp;\n currentMutation.isValidating = true;\n return currentMutation.result;\n }\n\n // Otherwise, set the new mutation\n setMutation(generatedKey, {\n result,\n timestamp,\n isValidating: true,\n });\n\n return result;\n}\n\ntype Cleanup = () => void;\ntype Cleanups = Cleanup[];\ntype Subscribe = () => Cleanup;\n\n\n// This lazy registration allows manageable\n// global source subscriptions by performing\n// reference-counting.\nfunction lazyRegister<T, P extends any[] = []>(\n cleanups: Map<string, Cleanups>,\n generatedKey: string,\n fullOpts: SWRFullOptions<T, P>,\n args: P,\n) {\n // If there are listeners, it means\n // that the store has already made subscriptions\n if (getMutationListenerSize(generatedKey) > 0) {\n return;\n }\n\n // Create cleanup stack\n const currentCleanups: Cleanups = [];\n\n const subscription = (sub: Subscribe) => {\n currentCleanups.push(sub());\n };\n\n const onRevalidate = () => {\n setRevalidation(generatedKey, true);\n };\n subscription(() => {\n const innerRevalidate = (flag: boolean) => {\n revalidate(fullOpts, args, {\n shouldRevalidate: flag,\n });\n };\n return subscribeRevalidation(generatedKey, innerRevalidate);\n });\n\n // Only register on client-side\n if (IS_CLIENT) {\n // Register polling interval\n if (fullOpts.refreshInterval != null) {\n if (fullOpts.refreshWhenBlurred) {\n subscription(() => {\n let interval: undefined | number;\n\n const enter = () => {\n window.clearInterval(interval);\n interval = window.setInterval(onRevalidate, fullOpts.refreshInterval);\n };\n const exit = () => {\n window.clearInterval(interval);\n interval = undefined;\n };\n\n window.addEventListener('blur', enter, false);\n window.addEventListener('focus', exit, false);\n\n return () => {\n window.removeEventListener('blur', enter, false);\n window.removeEventListener('focus', exit, false);\n window.clearInterval(interval);\n };\n });\n }\n if (fullOpts.refreshWhenOffline) {\n subscription(() => {\n let interval: undefined | number;\n\n const enter = () => {\n window.clearInterval(interval);\n interval = window.setInterval(onRevalidate, fullOpts.refreshInterval);\n };\n const exit = () => {\n window.clearInterval(interval);\n interval = undefined;\n };\n\n window.addEventListener('offline', enter, false);\n window.addEventListener('online', exit, false);\n\n return () => {\n window.removeEventListener('offline', enter, false);\n window.removeEventListener('online', exit, false);\n window.clearInterval(interval);\n };\n });\n }\n if (fullOpts.refreshWhenHidden) {\n subscription(() => {\n let interval: undefined | number;\n\n const onVisibility = () => {\n window.clearInterval(interval);\n if (document.visibilityState === 'visible') {\n interval = undefined;\n } else {\n interval = window.setInterval(onRevalidate, fullOpts.refreshInterval);\n }\n };\n\n document.addEventListener('visibilitychange', onVisibility, false);\n\n return () => {\n document.removeEventListener('visibilitychange', onVisibility, false);\n window.clearInterval(interval);\n };\n });\n }\n if (\n !(fullOpts.refreshWhenHidden\n || fullOpts.refreshWhenBlurred\n || fullOpts.refreshWhenOffline)\n ) {\n subscription(() => {\n const interval = window.setInterval(onRevalidate, fullOpts.refreshInterval);\n\n return () => {\n window.clearInterval(interval);\n };\n });\n }\n }\n\n // Registers a focus event for revalidation.\n if (fullOpts.revalidateOnFocus) {\n subscription(() => {\n window.addEventListener('focus', onRevalidate, false);\n\n return () => {\n window.removeEventListener('focus', onRevalidate, false);\n };\n });\n }\n\n // Registers a online event for revalidation.\n if (fullOpts.revalidateOnNetwork) {\n subscription(() => {\n window.addEventListener('online', onRevalidate, false);\n\n return () => {\n window.removeEventListener('online', onRevalidate, false);\n };\n });\n }\n\n // Registers a visibility change event for revalidation.\n if (fullOpts.revalidateOnVisibility) {\n subscription(() => {\n const onVisible = () => {\n if (document.visibilityState === 'visible') {\n onRevalidate();\n }\n };\n\n window.addEventListener('visibilitychange', onVisible, false);\n\n return () => {\n window.removeEventListener('visibilitychange', onVisible, false);\n };\n });\n }\n }\n\n cleanups.set(generatedKey, currentCleanups);\n}\n\nfunction lazyUnregister(\n cleanups: Map<string, Cleanups>,\n generatedKey: string,\n) {\n if (getMutationListenerSize(generatedKey) === 0) {\n const actualCleanups = cleanups.get(generatedKey);\n if (actualCleanups) {\n for (let i = 0, len = actualCleanups.length; i < len; i += 1) {\n actualCleanups[i]();\n }\n cleanups.delete(generatedKey);\n }\n }\n}\n\nexport default function createSWRStore<T, P extends any[] = []>(\n options: SWRStoreOptions<T, P>,\n): SWRStore<T, P> {\n const fullOpts: SWRFullOptions<T, P> = assign({}, DEFAULT_CONFIG, options);\n const cleanups = new Map<string, Cleanups>();\n\n return {\n id: `SWRStore-${getIndex()}`,\n trigger: (args, shouldRevalidate = true) => {\n const generatedKey = fullOpts.key(...args);\n trigger(generatedKey, shouldRevalidate);\n },\n mutate: (args, data, shouldRevalidate = true, compare = fullOpts.compare) => {\n const generatedKey = fullOpts.key(...args);\n mutate(generatedKey, data, shouldRevalidate, compare);\n },\n // This function revalidates the mutation cache\n // through reactive process\n get: (args, opts) => revalidate(fullOpts, args, opts),\n subscribe: (args, listener) => {\n const generatedKey = fullOpts.key(...args);\n\n // Setup lazy global registration\n lazyRegister(cleanups, generatedKey, fullOpts, args);\n\n const unsubscribe = subscribe(generatedKey, listener);\n return () => {\n unsubscribe();\n // Attempt lazy unregistration\n lazyUnregister(cleanups, generatedKey);\n };\n },\n };\n}\n"],
"mappings": "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",
"names": ["import_lite"]
}