UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

41 lines (40 loc) 2.56 kB
export { createPageContextClientSide }; import { assertUsage, augmentType, objectAssign } from './utils.js'; import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js'; import { loadPageConfigsLazyClientSide, } from '../shared/loadPageConfigsLazyClientSide.js'; import { getCurrentUrl } from '../shared/getCurrentUrl.js'; import { createPageContextObject, createPageContextShared } from '../../shared/createPageContextShared.js'; import { getGlobalContextClientInternal } from './globalContext.js'; import { preparePageContextForPublicUsageClient, } from './preparePageContextForPublicUsageClient.js'; import { execHook } from '../../shared/hooks/execHook.js'; const urlFirst = getCurrentUrl({ withoutHash: true }); async function createPageContextClientSide() { const globalContext = await getGlobalContextClientInternal(); const pageContextCreated = createPageContextObject(); objectAssign(pageContextCreated, { isClientSide: true, isPrerendering: false, isHydration: true, _globalContext: globalContext, _pageFilesAll: globalContext._pageFilesAll, // TODO/v1-release: remove isBackwardNavigation: null, _hasPageContextFromServer: true, }); objectAssign(pageContextCreated, getPageContextSerializedInHtml()); // Sets pageContext.config to global configs augmentType(pageContextCreated, await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal)); // Sets pageContext.config to local configs (overrides the pageContext.config set above) augmentType(pageContextCreated, await loadPageConfigsLazyClientSideAndExecHook(pageContextCreated)); assertPristineUrl(); return pageContextCreated; } function assertPristineUrl() { const urlCurrent = getCurrentUrl({ withoutHash: true }); assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`); } async function loadPageConfigsLazyClientSideAndExecHook(pageContext) { const pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal); objectAssign(pageContext, pageContextAddendum); await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient); return pageContext; }