vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
72 lines (71 loc) • 3.66 kB
JavaScript
export { createPageContextServerSide };
export { createPageContextServerSideWithoutGlobalContext };
import { assert, assertUsage, assertWarning, augmentType, normalizeHeaders, objectAssign } from '../utils.js';
import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
import { createPageContextShared } from '../../../shared/createPageContextShared.js';
async function createPageContextServerSide(pageContextInit, globalContext, globalObject_public, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
urlHandler: null,
isClientSideNavigation: false
} }) {
assert(pageContextInit.urlOriginal);
const pageContextCreated = createPageContext(pageContextInit, isPrerendering);
objectAssign(pageContextCreated, {
/* Don't spread globalContext for now? Or never spread it as it leads to confusion? The convenience isn't worth the added confusion?
// We must use Flatten<T> otherwise TypeScript complains upon assigning types
...(globalContext as Flatten<typeof globalContext>), // least precedence
*/
globalContext: globalObject_public,
_globalContext: globalContext,
// The following is defined on `pageContext` because we can eventually make these non-global
_baseServer: globalContext.baseServer,
_baseAssets: globalContext.baseAssets,
// TODO/now: add meta.default
_includeAssetsImportedByServer: globalContext.config.includeAssetsImportedByServer ?? true,
// TODO/soon: use GloablContext instead
_pageFilesAll: globalContext._pageFilesAll,
_pageConfigs: globalContext._pageConfigs,
_pageConfigGlobal: globalContext._pageConfigGlobal,
_allPageIds: globalContext._allPageIds,
_pageRoutes: globalContext._pageRoutes,
_onBeforeRouteHook: globalContext._onBeforeRouteHook,
_pageContextInit: pageContextInit,
_urlRewrite: null,
_urlHandler: urlHandler,
isClientSideNavigation
});
// pageContext.urlParsed
const pageContextUrlComputed = getPageContextUrlComputed(pageContextCreated);
objectAssign(pageContextCreated, pageContextUrlComputed);
// pageContext.headers
{
let headers;
if (pageContextInit.headersOriginal) {
headers = normalizeHeaders(pageContextInit.headersOriginal);
assertUsage(!('headers' in pageContextInit), "You're defining pageContextInit.headersOriginal as well as pageContextInit.headers but you should only define pageContextInit.headersOriginal instead, see https://vike.dev/headers");
}
else if (pageContextInit.headers) {
headers = pageContextInit.headers;
// TODO/next-major-release: remove
assertWarning(false, 'Setting pageContextInit.headers is deprecated: set pageContextInit.headersOriginal instead, see https://vike.dev/headers', { onlyOnce: true });
}
else {
headers = null;
}
objectAssign(pageContextCreated, { headers });
}
const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal);
augmentType(pageContextCreated, pageContextAugmented);
return pageContextCreated;
}
function createPageContextServerSideWithoutGlobalContext(pageContextInit) {
const pageContext = createPageContext(pageContextInit, false);
return pageContext;
}
function createPageContext(pageContextInit, isPrerendering) {
const pageContext = {
isClientSide: false,
isPrerendering
};
objectAssign(pageContext, pageContextInit);
return pageContext;
}