UNPKG

next

Version:

The React Framework

78 lines (77 loc) 3.74 kB
import type { ResponseCacheEntry, ResponseGenerator, ResponseCacheBase, IncrementalResponseCacheEntry, IncrementalResponseCache } from './types'; import type { RouteKind } from '../route-kind'; export * from './types'; export default class ResponseCache implements ResponseCacheBase { private readonly getBatcher; private readonly revalidateBatcher; /** * LRU cache for minimal mode using compound keys (pathname + invocationID). * This allows multiple invocations to cache the same pathname without * overwriting each other's entries. */ private readonly cache; /** * Set of invocation IDs that have had cache entries evicted. * Used to detect when the cache size may be too small. * Bounded to prevent memory growth. */ private readonly evictedInvocationIDs; /** * The configured max size, stored for logging. */ private readonly maxSize; /** * The configured TTL for cache entries in milliseconds. */ private readonly ttl; private minimal_mode?; constructor(minimal_mode: boolean, maxSize?: number, ttl?: number); /** * Gets the response cache entry for the given key. * * @param key - The key to get the response cache entry for. * @param responseGenerator - The response generator to use to generate the response cache entry. * @param context - The context for the get request. * @returns The response cache entry. */ get(key: string | null, responseGenerator: ResponseGenerator, context: { routeKind: RouteKind; isOnDemandRevalidate?: boolean; isPrefetch?: boolean; incrementalCache: IncrementalResponseCache; isRoutePPREnabled?: boolean; isFallback?: boolean; waitUntil?: (prom: Promise<any>) => void; /** * The invocation ID from the infrastructure. Used to scope the * in-memory cache to a single revalidation request in minimal mode. */ invocationID?: string; }): Promise<ResponseCacheEntry | null>; /** * Handles the get request for the response cache. * * @param key - The key to get the response cache entry for. * @param responseGenerator - The response generator to use to generate the response cache entry. * @param context - The context for the get request. * @param resolve - The resolve function to use to resolve the response cache entry. * @returns The response cache entry. */ private handleGet; /** * Revalidates the cache entry for the given key. * * @param key - The key to revalidate the cache entry for. * @param incrementalCache - The incremental cache to use to revalidate the cache entry. * @param isRoutePPREnabled - Whether the route is PPR enabled. * @param isFallback - Whether the route is a fallback. * @param responseGenerator - The response generator to use to generate the response cache entry. * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry. * @param hasResolved - Whether the response has been resolved. * @param waitUntil - Optional function to register background work. * @param invocationID - The invocation ID for cache key scoping. * @returns The revalidated cache entry. */ revalidate(key: string, incrementalCache: IncrementalResponseCache, isRoutePPREnabled: boolean, isFallback: boolean, responseGenerator: ResponseGenerator, previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null, hasResolved: boolean, waitUntil?: (prom: Promise<any>) => void, invocationID?: string): Promise<IncrementalResponseCacheEntry | null>; private handleRevalidate; }