UNPKG

vike

Version:

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

118 lines (117 loc) 6.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadPageConfigsLazyServerSideAndExecHook = loadPageConfigsLazyServerSideAndExecHook; const getPageFiles_js_1 = require("../../../shared/getPageFiles.js"); const resolveVikeConfigPublic_js_1 = require("../../../shared/page-configs/resolveVikeConfigPublic.js"); const analyzePageClientSide_js_1 = require("../../../shared/getPageFiles/analyzePageClientSide.js"); const utils_js_1 = require("../utils.js"); const getPageAssets_js_1 = require("./getPageAssets.js"); const debugPageFiles_js_1 = require("./debugPageFiles.js"); const findPageConfig_js_1 = require("../../../shared/page-configs/findPageConfig.js"); const analyzePage_js_1 = require("./analyzePage.js"); const loadConfigValues_js_1 = require("../../../shared/page-configs/loadConfigValues.js"); const execHookServer_js_1 = require("./execHookServer.js"); async function loadPageConfigsLazyServerSideAndExecHook(pageContext) { const pageContextAddendum = await loadPageConfigsLazyServerSide(pageContext); (0, utils_js_1.objectAssign)(pageContext, pageContextAddendum); await (0, execHookServer_js_1.execHookServer)('onCreatePageContext', pageContext); return pageContext; } async function loadPageConfigsLazyServerSide(pageContext) { const pageConfig = (0, findPageConfig_js_1.findPageConfig)(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ? const globalContext = pageContext._globalContext; const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([ loadPageUserFiles(pageContext._globalContext._pageFilesAll, pageConfig, globalContext._pageConfigGlobal, pageContext.pageId, !globalContext._isProduction), (0, analyzePageClientSide_js_1.analyzePageClientSideInit)(pageContext._globalContext._pageFilesAll, pageContext.pageId, { sharedPageFilesAlreadyLoaded: true, }), ]); const { isHtmlOnly, isClientRouting, clientEntries, clientDependencies, pageFilesClientSide, pageFilesServerSide } = await (0, analyzePage_js_1.analyzePage)(pageContext._globalContext._pageFilesAll, pageConfig, pageContext.pageId, globalContext); const isV1Design = !!pageConfig; const passToClient = []; const errMsg = ' should be an array of strings.'; if (!isV1Design) { pageContextExports.exportsAll.passToClient?.forEach((e) => { (0, utils_js_1.assertUsage)((0, utils_js_1.hasProp)(e, 'exportValue', 'string[]'), `${e.exportSource}${errMsg}`); passToClient.push(...e.exportValue); }); } else { pageContextExports.configEntries.passToClient?.forEach((e) => { const { configValue } = e; (0, utils_js_1.assert)((0, utils_js_1.isArray)(configValue)); const vals = configValue.flat(1); // TODO: improve error message by using (upcoming) new data structure instead of configEntries (0, utils_js_1.assertUsage)((0, utils_js_1.isArrayOfStrings)(vals), `${e.configDefinedAt}${errMsg}`); passToClient.push(...vals); }); } const pageContextAddendum = {}; (0, utils_js_1.objectAssign)(pageContextAddendum, pageContextExports); (0, utils_js_1.objectAssign)(pageContextAddendum, { Page: pageContextExports.exports.Page, _isHtmlOnly: isHtmlOnly, _passToClient: passToClient, _pageFilePathsLoaded: pageFilesLoaded.map((p) => p.filePath), }); (0, utils_js_1.objectAssign)(pageContextAddendum, { __getPageAssets: async () => { if ('_pageAssets' in pageContext) { return pageContext._pageAssets; } else { const pageAssets = await (0, getPageAssets_js_1.getPageAssets)(pageContext, clientDependencies, clientEntries); (0, utils_js_1.objectAssign)(pageContext, { _pageAssets: pageAssets }); return pageContext._pageAssets; } }, }); // TODO/v1-release: remove Object.assign(pageContextAddendum, { _getPageAssets: async () => { (0, utils_js_1.assertWarning)(false, 'pageContext._getPageAssets() deprecated, see https://vike.dev/preloading', { onlyOnce: true, showStackTrace: true, }); const pageAssetsOldFormat = []; (await pageContextAddendum.__getPageAssets()).forEach((p) => { if (p.assetType === 'script' && p.isEntry) { pageAssetsOldFormat.push({ src: p.src, preloadType: null, assetType: 'script', mediaType: p.mediaType, }); } pageAssetsOldFormat.push({ src: p.src, preloadType: p.assetType, assetType: p.assetType === 'style' ? 'style' : 'preload', mediaType: p.mediaType, }); }); return pageAssetsOldFormat; }, }); (0, debugPageFiles_js_1.debugPageFiles)({ pageContext, isHtmlOnly, isClientRouting, pageFilesLoaded, pageFilesClientSide, pageFilesServerSide, clientEntries, clientDependencies, }); return pageContextAddendum; } async function loadPageUserFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) { const pageFilesServerSide = (0, getPageFiles_js_1.getPageFilesServerSide)(pageFilesAll, pageId); const pageConfigLoaded = !pageConfig ? null : await (0, loadConfigValues_js_1.loadConfigValues)(pageConfig, isDev); await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.())); const pageContextExports = (0, resolveVikeConfigPublic_js_1.resolveVikeConfigPublicPageLazy)(pageFilesServerSide, pageConfigLoaded, pageConfigGlobal); return { pageContextExports, pageFilesLoaded: pageFilesServerSide, }; }