UNPKG

next

Version:

The React Framework

76 lines (75 loc) 3.43 kB
import { AfterContext } from '../after/after-context'; import { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'; import { createLazyResult } from '../lib/lazy-result'; import { getCacheHandlerEntries } from '../use-cache/handlers'; export function createWorkStore({ page, fallbackRouteParams, renderOpts, requestEndedState, isPrefetchRequest, buildId, previouslyRevalidatedTags }) { /** * Rules of Static & Dynamic HTML: * * 1.) We must generate static HTML unless the caller explicitly opts * in to dynamic HTML support. * * 2.) If dynamic HTML support is requested, we must honor that request * or throw an error. It is the sole responsibility of the caller to * ensure they aren't e.g. requesting dynamic HTML for an AMP page. * * 3.) If the request is in draft mode, we must generate dynamic HTML. * * 4.) If the request is a server action, we must generate dynamic HTML. * * These rules help ensure that other existing features like request caching, * coalescing, and ISR continue working as intended. */ const isStaticGeneration = !renderOpts.shouldWaitOnAllReady && !renderOpts.supportsDynamicResponse && !renderOpts.isDraftMode && !renderOpts.isPossibleServerAction; const store = { isStaticGeneration, page, fallbackRouteParams, route: normalizeAppPath(page), incrementalCache: // we fallback to a global incremental cache for edge-runtime locally // so that it can access the fs cache without mocks renderOpts.incrementalCache || globalThis.__incrementalCache, cacheLifeProfiles: renderOpts.cacheLifeProfiles, isRevalidate: renderOpts.isRevalidate, isPrerendering: renderOpts.nextExport, fetchCache: renderOpts.fetchCache, isOnDemandRevalidate: renderOpts.isOnDemandRevalidate, isDraftMode: renderOpts.isDraftMode, requestEndedState, isPrefetchRequest, buildId, reactLoadableManifest: (renderOpts == null ? void 0 : renderOpts.reactLoadableManifest) || {}, assetPrefix: (renderOpts == null ? void 0 : renderOpts.assetPrefix) || '', afterContext: createAfterContext(renderOpts), dynamicIOEnabled: renderOpts.experimental.dynamicIO, dev: renderOpts.dev ?? false, previouslyRevalidatedTags, refreshTagsByCacheKind: createRefreshTagsByCacheKind() }; // TODO: remove this when we resolve accessing the store outside the execution context renderOpts.store = store; return store; } function createAfterContext(renderOpts) { const { waitUntil, onClose, onAfterTaskError } = renderOpts; return new AfterContext({ waitUntil, onClose, onTaskError: onAfterTaskError }); } /** * Creates a map with lazy results that refresh tags for the respective cache * kind when they're awaited for the first time. */ function createRefreshTagsByCacheKind() { const refreshTagsByCacheKind = new Map(); const cacheHandlers = getCacheHandlerEntries(); if (cacheHandlers) { for (const [kind, cacheHandler] of cacheHandlers){ if ('refreshTags' in cacheHandler) { refreshTagsByCacheKind.set(kind, createLazyResult(async ()=>cacheHandler.refreshTags())); } } } return refreshTagsByCacheKind; } //# sourceMappingURL=work-store.js.map