UNPKG

vike

Version:

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

39 lines (38 loc) 2.57 kB
import '../assertEnvClient.js'; import { assertServerRouting } from '../../utils/assertRoutingType.js'; assertServerRouting(); import { createPageContextClient } from './createPageContextClient.js'; import { execHookOnRenderClient } from '../shared/execHookOnRenderClient.js'; import { assertUsage } from '../../utils/assert.js'; import { assertSingleInstance_onClientEntryServerRouting } from '../../utils/assertSingleInstance.js'; import { objectAssign } from '../../utils/objectAssign.js'; import { removeFoucBuster } from '../shared/removeFoucBuster.js'; import { execHook } from '../../shared-server-client/hooks/execHook.js'; import { getPageContextPublicClient } from './getPageContextPublicClient.js'; import { setVirtualFileExportsGlobalEntry } from '../shared/getGlobalContextClientInternalShared.js'; // @ts-expect-error import * as virtualFileExportsGlobalEntry from 'virtual:vike:global-entry:client:server-routing'; import { loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js'; import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js'; import { getCurrentUrl } from '../shared/getCurrentUrl.js'; const urlFirst = getCurrentUrl({ withoutHash: true }); assertSingleInstance_onClientEntryServerRouting(import.meta.env.PROD); setVirtualFileExportsGlobalEntry(virtualFileExportsGlobalEntry); if (import.meta.env.DEV) removeFoucBuster(); hydrate(); async function hydrate() { const pageContext = await createPageContextClient(); objectAssign(pageContext, getPageContextSerializedInHtml()); // Sets pageContext.config using non-global configs — overrides the pageContext.config set using global configs at createPageContextClient() const pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal); objectAssign(pageContext, pageContextAddendum); await execHook('onCreatePageContext', pageContext, getPageContextPublicClient); assertPristineUrl(); await execHookOnRenderClient(pageContext, getPageContextPublicClient); await execHook('onHydrationEnd', pageContext, getPageContextPublicClient); } 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.`); }