vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
31 lines (30 loc) • 1.58 kB
JavaScript
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);
}
}