From 47f28a0cf0ea535969b02d776a69b3324de70bc1 Mon Sep 17 00:00:00 2001 From: Romuald Brillout Date: Tue, 28 Jan 2025 10:17:52 +0100 Subject: [PATCH] fix: inspect `configValuesLoaded===undefined` bug (#2092) --- .../v1-design/getVirtualFilePageConfigs.ts | 5 +++-- vike/shared/page-configs/PageConfig.ts | 9 ++++++--- vike/shared/page-configs/loadConfigValues.ts | 7 +++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/vike/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.ts b/vike/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.ts index 45c1eee3e67..3e7bcd3f581 100644 --- a/vike/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.ts +++ b/vike/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.ts @@ -57,12 +57,13 @@ function getCodePageConfigsSerialized( pageConfigs.forEach((pageConfig) => { const { pageId, routeFilesystem, isErrorPage } = pageConfig - const virtualFileIdPageConfigValuesAll = getVirtualFileIdPageConfigValuesAll(pageId, isForClientSide) lines.push(` {`) lines.push(` pageId: ${JSON.stringify(pageId)},`) lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`) lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`) - lines.push(` loadConfigValuesAll: () => import(${JSON.stringify(virtualFileIdPageConfigValuesAll)}),`) + const virtualFileId = JSON.stringify(getVirtualFileIdPageConfigValuesAll(pageId, isForClientSide)) + const load = `() => ({ moduleId: ${virtualFileId}, moduleExports: import(${virtualFileId}) })` + lines.push(` loadConfigValuesAll: ${load},`) lines.push(` configValuesSerialized: {`) lines.push( ...serializeConfigValues( diff --git a/vike/shared/page-configs/PageConfig.ts b/vike/shared/page-configs/PageConfig.ts index 2ee038ef104..1129e5efef6 100644 --- a/vike/shared/page-configs/PageConfig.ts +++ b/vike/shared/page-configs/PageConfig.ts @@ -35,9 +35,12 @@ type PageConfigBase = { type PageConfigRuntime = PageConfigBase & { configValues: ConfigValues /** Load config values that are lazily loaded such as config.Page */ - loadConfigValuesAll: () => Promise<{ - configValuesSerialized: Record - }> + loadConfigValuesAll: () => { + moduleId: string + moduleExports: Promise<{ + configValuesSerialized: Record + }> + } } /** Same as PageConfigRuntime but also contains all lazily loaded config values such as config.Page */ type PageConfigRuntimeLoaded = PageConfigRuntime & { diff --git a/vike/shared/page-configs/loadConfigValues.ts b/vike/shared/page-configs/loadConfigValues.ts index e47a0c0b353..a500eb8bd06 100644 --- a/vike/shared/page-configs/loadConfigValues.ts +++ b/vike/shared/page-configs/loadConfigValues.ts @@ -1,6 +1,6 @@ export { loadConfigValues } -import { objectAssign } from '../utils.js' +import { assert, objectAssign } from '../utils.js' import type { PageConfigRuntime, PageConfigRuntimeLoaded } from './PageConfig.js' import { parseConfigValuesSerialized } from './serialize/parsePageConfigs.js' @@ -12,7 +12,10 @@ async function loadConfigValues(pageConfig: PageConfigRuntime, isDev: boolean): ) { return pageConfig as PageConfigRuntimeLoaded } - const configValuesLoaded = await pageConfig.loadConfigValuesAll() + const { moduleId, moduleExports } = pageConfig.loadConfigValuesAll() + const configValuesLoaded = await moduleExports + // `configValuesLoaded` is sometimes `undefined` https://github.com/vikejs/vike/discussions/2092 + assert(configValuesLoaded, { moduleId }) const configValues = parseConfigValuesSerialized(configValuesLoaded.configValuesSerialized) Object.assign(pageConfig.configValues, configValues) objectAssign(pageConfig, { isAllLoaded: true as const })