UNPKG

vike

Version:

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

31 lines (30 loc) 1.58 kB
export { executeOnBeforeRenderAndDataHooks }; import { getHookFromPageContext } from '../../../shared/hooks/getHook.js'; import { preparePageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js'; import { assertOnBeforeRenderHookReturn } from '../../../shared/assertOnBeforeRenderHookReturn.js'; import { executeHook } from '../../../shared/hooks/executeHook.js'; async function executeOnBeforeRenderAndDataHooks(pageContext) { if (pageContext._pageContextAlreadyProvidedByOnPrerenderHook) { return; } const dataHook = getHookFromPageContext(pageContext, 'data'); const onBeforeRenderHook = getHookFromPageContext(pageContext, 'onBeforeRender'); if (!dataHook && !onBeforeRenderHook) { return; } preparePageContextForUserConsumptionServerSide(pageContext); if (dataHook) { const hookResult = await executeHook(() => dataHook.hookFn(pageContext), dataHook, pageContext); // Note: hookResult can be anything (e.g. an object) and is to be assigned to pageContext.data const pageContextFromHook = { data: hookResult }; Object.assign(pageContext, pageContextFromHook); } if (onBeforeRenderHook) { const hookResult = await executeHook(() => onBeforeRenderHook.hookFn(pageContext), onBeforeRenderHook, pageContext); assertOnBeforeRenderHookReturn(hookResult, onBeforeRenderHook.hookFilePath); const pageContextFromHook = hookResult?.pageContext; Object.assign(pageContext, pageContextFromHook); } }