Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
83 lines
No EOL
3.9 KiB
Text
83 lines
No EOL
3.9 KiB
Text
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';
|
|
import { createSnapshot } from '../app-render/async-local-storage';
|
|
export function createWorkStore({ page, renderOpts, isPrefetchRequest, buildId, previouslyRevalidatedTags, nonce }) {
|
|
/**
|
|
* 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 a static 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 isDevelopment = renderOpts.dev ?? false;
|
|
const shouldTrackFetchMetrics = isDevelopment || // The only times we want to track fetch metrics outside of development is
|
|
// when we are performing a static generation and we either are in debug
|
|
// mode, or tracking fetch metrics was specifically opted into.
|
|
isStaticGeneration && (!!process.env.NEXT_DEBUG_BUILD || process.env.NEXT_SSG_FETCH_METRICS === '1');
|
|
const store = {
|
|
isStaticGeneration,
|
|
page,
|
|
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,
|
|
isBuildTimePrerendering: renderOpts.nextExport,
|
|
hasReadableErrorStacks: renderOpts.hasReadableErrorStacks,
|
|
fetchCache: renderOpts.fetchCache,
|
|
isOnDemandRevalidate: renderOpts.isOnDemandRevalidate,
|
|
isDraftMode: renderOpts.isDraftMode,
|
|
isPrefetchRequest,
|
|
buildId,
|
|
reactLoadableManifest: (renderOpts == null ? void 0 : renderOpts.reactLoadableManifest) || {},
|
|
assetPrefix: (renderOpts == null ? void 0 : renderOpts.assetPrefix) || '',
|
|
nonce,
|
|
afterContext: createAfterContext(renderOpts),
|
|
cacheComponentsEnabled: renderOpts.cacheComponents,
|
|
dev: isDevelopment,
|
|
previouslyRevalidatedTags,
|
|
refreshTagsByCacheKind: createRefreshTagsByCacheKind(),
|
|
runInCleanSnapshot: createSnapshot(),
|
|
shouldTrackFetchMetrics
|
|
};
|
|
// 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 |