vike 0.4.217 → 0.4.218-commit-ed9b3d4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/cjs/__internal/index.js +9 -8
  2. package/dist/cjs/node/api/build.js +21 -12
  3. package/dist/cjs/node/api/context.js +5 -1
  4. package/dist/cjs/node/api/index.js +17 -7
  5. package/dist/cjs/node/api/prepareViteApiCall.js +128 -26
  6. package/dist/cjs/node/api/utils.js +2 -0
  7. package/dist/cjs/node/cli/entry.js +19 -7
  8. package/dist/cjs/node/plugin/index.js +6 -5
  9. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -4
  10. package/dist/cjs/node/plugin/plugins/baseUrls.js +20 -18
  11. package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
  12. package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +6 -6
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +2 -3
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +22 -111
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +189 -16
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +2 -1
  18. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
  19. package/dist/cjs/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  20. package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +17 -7
  21. package/dist/cjs/node/prerender/isPrerenderEnabled.js +8 -0
  22. package/dist/cjs/node/prerender/runPrerender.js +22 -35
  23. package/dist/cjs/node/runtime/globalContext.js +76 -29
  24. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
  25. package/dist/cjs/node/runtime/index-common.js +0 -15
  26. package/dist/cjs/node/runtime/onLoad.js +17 -3
  27. package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
  28. package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +2 -2
  29. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  30. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  31. package/dist/cjs/node/runtime/utils.js +1 -0
  32. package/dist/cjs/node/runtime-dev/index.js +17 -7
  33. package/dist/cjs/node/shared/resolveBase.js +2 -2
  34. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +3 -3
  35. package/dist/cjs/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +2 -3
  36. package/dist/cjs/shared/getPageFiles.js +3 -9
  37. package/dist/cjs/shared/hooks/getHook.js +3 -3
  38. package/dist/cjs/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +113 -81
  39. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +79 -54
  40. package/dist/cjs/shared/route/loadPageRoutes.js +3 -3
  41. package/dist/cjs/shared/utils.js +1 -0
  42. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  43. package/dist/cjs/utils/assert.js +4 -3
  44. package/dist/cjs/utils/debug.js +11 -6
  45. package/dist/cjs/utils/objectReplace.js +9 -0
  46. package/dist/esm/__internal/index.d.ts +3 -5
  47. package/dist/esm/__internal/index.js +4 -5
  48. package/dist/esm/client/client-routing-runtime/createPageContext.js +7 -1
  49. package/dist/esm/client/client-routing-runtime/entry.d.ts +1 -1
  50. package/dist/esm/client/client-routing-runtime/entry.js +0 -1
  51. package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
  52. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
  53. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
  54. package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
  55. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
  56. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  57. package/dist/esm/client/server-routing-runtime/entry.d.ts +1 -1
  58. package/dist/esm/client/server-routing-runtime/entry.js +0 -1
  59. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
  60. package/dist/esm/client/server-routing-runtime/getPageContext.js +8 -2
  61. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
  62. package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
  63. package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
  64. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  65. package/dist/esm/node/api/build.js +4 -5
  66. package/dist/esm/node/api/context.d.ts +3 -1
  67. package/dist/esm/node/api/context.js +6 -2
  68. package/dist/esm/node/api/prepareViteApiCall.d.ts +9 -3
  69. package/dist/esm/node/api/prepareViteApiCall.js +111 -22
  70. package/dist/esm/node/api/utils.d.ts +2 -0
  71. package/dist/esm/node/api/utils.js +2 -0
  72. package/dist/esm/node/cli/entry.js +2 -0
  73. package/dist/esm/node/cli/parseCli.d.ts +1 -1
  74. package/dist/esm/node/plugin/index.d.ts +1 -1
  75. package/dist/esm/node/plugin/index.js +6 -5
  76. package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -4
  77. package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -2
  78. package/dist/esm/node/plugin/plugins/baseUrls.js +21 -19
  79. package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
  80. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.d.ts +1 -1
  81. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.d.ts +2 -2
  82. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  83. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +7 -1
  84. package/dist/esm/node/plugin/plugins/commonConfig.js +2 -2
  85. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +1 -1
  86. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +1 -1
  87. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +2 -3
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +23 -112
  90. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +99 -1
  91. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +189 -16
  92. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +2 -1
  93. package/dist/esm/node/plugin/plugins/setGlobalContext.js +1 -1
  94. package/dist/esm/node/plugin/plugins/workaroundVite6HmrRegression.d.ts +3 -0
  95. package/dist/esm/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  96. package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +1 -1
  97. package/dist/esm/node/prerender/isPrerenderEnabled.d.ts +3 -0
  98. package/dist/esm/node/prerender/isPrerenderEnabled.js +6 -0
  99. package/dist/esm/node/prerender/runPrerender.d.ts +1 -2
  100. package/dist/esm/node/prerender/runPrerender.js +4 -27
  101. package/dist/esm/node/runtime/globalContext.d.ts +6 -4
  102. package/dist/esm/node/runtime/globalContext.js +76 -29
  103. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
  104. package/dist/esm/node/runtime/index-common.d.ts +0 -1
  105. package/dist/esm/node/runtime/index-common.js +0 -15
  106. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -0
  107. package/dist/esm/node/runtime/onLoad.js +16 -2
  108. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  109. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +1 -1
  110. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
  111. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
  112. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
  113. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  114. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +5 -5
  115. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  116. package/dist/esm/node/runtime/utils.d.ts +1 -0
  117. package/dist/esm/node/runtime/utils.js +1 -0
  118. package/dist/esm/node/shared/resolveBase.js +2 -2
  119. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
  120. package/dist/esm/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +2 -3
  121. package/dist/esm/shared/getPageFiles.d.ts +2 -5
  122. package/dist/esm/shared/getPageFiles.js +1 -4
  123. package/dist/esm/shared/hooks/getHook.d.ts +3 -3
  124. package/dist/esm/shared/hooks/getHook.js +1 -1
  125. package/dist/esm/shared/page-configs/Config.d.ts +8 -2
  126. package/dist/esm/shared/page-configs/PageConfig.d.ts +7 -3
  127. package/dist/esm/shared/{getPageFiles/getExports.d.ts → page-configs/getPageConfigUserFriendly.d.ts} +23 -12
  128. package/dist/esm/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +112 -80
  129. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +28 -4
  130. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +79 -54
  131. package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
  132. package/dist/esm/shared/route/loadPageRoutes.js +1 -1
  133. package/dist/esm/shared/types.d.ts +1 -1
  134. package/dist/esm/shared/utils.d.ts +1 -0
  135. package/dist/esm/shared/utils.js +1 -0
  136. package/dist/esm/types/index.d.ts +1 -1
  137. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  138. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  139. package/dist/esm/utils/assert.js +4 -3
  140. package/dist/esm/utils/debug.d.ts +1 -1
  141. package/dist/esm/utils/debug.js +11 -6
  142. package/dist/esm/utils/objectReplace.d.ts +1 -0
  143. package/dist/esm/utils/objectReplace.js +6 -0
  144. package/dist/esm/utils/projectInfo.d.ts +1 -1
  145. package/package.json +3 -22
  146. package/__internal/loadImportBuild.js +0 -3
  147. package/__internal/setup.js +0 -3
  148. package/dist/cjs/node/plugin/plugins/commonConfig/pluginName.js +0 -4
  149. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -128
  150. package/dist/cjs/node/runtime/globalContext/loadImportBuild.js +0 -25
  151. package/dist/cjs/node/runtime/page-files/getPageFilesExports.js +0 -22
  152. package/dist/cjs/node/runtime/page-files/setup.js +0 -5
  153. package/dist/esm/client/client-routing-runtime/pageFiles.d.ts +0 -1
  154. package/dist/esm/client/client-routing-runtime/pageFiles.js +0 -4
  155. package/dist/esm/client/server-routing-runtime/pageFiles.d.ts +0 -1
  156. package/dist/esm/client/server-routing-runtime/pageFiles.js +0 -4
  157. package/dist/esm/node/plugin/plugins/commonConfig/pluginName.d.ts +0 -1
  158. package/dist/esm/node/plugin/plugins/commonConfig/pluginName.js +0 -1
  159. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.d.ts +0 -104
  160. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -123
  161. package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +0 -3
  162. package/dist/esm/node/runtime/globalContext/loadImportBuild.d.ts +0 -18
  163. package/dist/esm/node/runtime/globalContext/loadImportBuild.js +0 -23
  164. package/dist/esm/node/runtime/page-files/getPageFilesExports.d.ts +0 -2
  165. package/dist/esm/node/runtime/page-files/getPageFilesExports.js +0 -20
  166. package/dist/esm/node/runtime/page-files/setup.d.ts +0 -1
  167. package/dist/esm/node/runtime/page-files/setup.js +0 -3
  168. package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  169. package/dist/cjs/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
  170. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  171. package/dist/esm/shared/getPageFiles/{setPageFiles.d.ts → getPageFiles.d.ts} +1 -1
  172. /package/dist/esm/shared/page-configs/{getConfigValue.d.ts → getConfigValueRuntime.d.ts} +0 -0
  173. /package/dist/esm/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
@@ -23,7 +23,8 @@ import { clearFilesEnvMap, resolveConfigEnvWithFileName, resolvePointerImportOfC
23
23
  import { getFilePathResolved } from '../../../shared/getFilePath.js';
24
24
  import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
25
25
  import { assertExtensionsPeerDependencies, assertExtensionsConventions } from './assertExtensions.js';
26
- import { resolveVikeConfigGlobal } from './getVikeConfig/resolveVikeConfigGlobal.js';
26
+ import { getPageConfigUserFriendlyNew } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
27
+ import { getConfigValuesBase } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
27
28
  assertIsNotProductionRuntime();
28
29
  let restartVite = false;
29
30
  let wasConfigInvalid = null;
@@ -78,6 +79,7 @@ async function getVikeConfig(config, { doNotRestartViteOnError } = {}) {
78
79
  return await getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError ?? false);
79
80
  }
80
81
  async function getVikeConfig2(userRootDir, isDev, vikeVitePluginOptions) {
82
+ assert(vikeVitePluginOptions);
81
83
  return await getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, false);
82
84
  }
83
85
  async function getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError) {
@@ -92,8 +94,8 @@ async function isV1Design(config) {
92
94
  const isV1Design = pageConfigs.length > 0;
93
95
  return isV1Design;
94
96
  }
95
- async function loadInterfaceFiles(userRootDir, crawlWithGit) {
96
- const plusFiles = await findPlusFiles(userRootDir, null, crawlWithGit);
97
+ async function loadInterfaceFiles(userRootDir) {
98
+ const plusFiles = await findPlusFiles(userRootDir, null);
97
99
  const configFiles = [];
98
100
  const valueFiles = [];
99
101
  plusFiles.forEach((f) => {
@@ -238,18 +240,19 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
238
240
  configDefinitions: {},
239
241
  configValueSources: {}
240
242
  },
241
- vikeConfigGlobal: resolveVikeConfigGlobal({}, {})
243
+ vikeConfigGlobal: resolveVikeConfigGlobal({}, {}),
244
+ vikeConfigNew: {
245
+ global: getPageConfigUserFriendlyNew({ configValues: {} })
246
+ }
242
247
  };
243
248
  return dummyData;
244
249
  }
245
250
  }
246
251
  }
247
252
  async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
248
- const crawlWithGit = resolveVikeConfigGlobal(vikeVitePluginOptions, {}).crawl.git ?? null;
249
- const interfaceFilesByLocationId = await loadInterfaceFiles(userRootDir, crawlWithGit);
253
+ const interfaceFilesByLocationId = await loadInterfaceFiles(userRootDir);
250
254
  const importedFilesLoaded = {};
251
- const { pageConfigGlobal, pageConfigGlobalValues } = await getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded);
252
- const vikeConfigGlobal = resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues);
255
+ const { pageConfigGlobal, vikeConfigGlobal } = await getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded, vikeVitePluginOptions);
253
256
  const pageConfigs = await Promise.all(objectEntries(interfaceFilesByLocationId)
254
257
  .filter(([_pageId, interfaceFiles]) => isDefiningPage(interfaceFiles))
255
258
  .map(async ([locationId]) => {
@@ -299,7 +302,37 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
299
302
  return pageConfig;
300
303
  }));
301
304
  assertPageConfigs(pageConfigs);
302
- return { pageConfigs, pageConfigGlobal, vikeConfigGlobal };
305
+ const configValues = getConfigValues(pageConfigGlobal);
306
+ const global = getPageConfigUserFriendlyNew({ configValues });
307
+ return { pageConfigs, pageConfigGlobal, vikeConfigGlobal, vikeConfigNew: { global } };
308
+ }
309
+ function getConfigValues(pageConfig) {
310
+ const configValues = {};
311
+ getConfigValuesBase(pageConfig, (configEnv) => !!configEnv.config).forEach((entry) => {
312
+ if (entry.configValueBase.type === 'computed') {
313
+ assert('value' in entry); // Help TS
314
+ const { configValueBase, value, configName } = entry;
315
+ configValues[configName] = { ...configValueBase, value };
316
+ }
317
+ if (entry.configValueBase.type === 'standard') {
318
+ assert('sourceRelevant' in entry); // Help TS
319
+ const { configValueBase, sourceRelevant, configName } = entry;
320
+ assert('value' in sourceRelevant);
321
+ const { value } = sourceRelevant;
322
+ configValues[configName] = { ...configValueBase, value };
323
+ }
324
+ if (entry.configValueBase.type === 'cumulative') {
325
+ assert('sourcesRelevant' in entry); // Help TS
326
+ const { configValueBase, sourcesRelevant, configName } = entry;
327
+ const values = [];
328
+ sourcesRelevant.forEach((source) => {
329
+ assert('value' in source);
330
+ values.push(source.value);
331
+ });
332
+ configValues[configName] = { ...configValueBase, value: values };
333
+ }
334
+ });
335
+ return configValues;
303
336
  }
304
337
  // TODO/soon: refactor
305
338
  // - Dedupe: most of the assertUsageGlobalConfigs() code below is a copy-paste of the assertUsage() logic inside getGlobalConfigs()
@@ -377,7 +410,7 @@ function getInterfaceFilesRelevant(interfaceFilesByLocationId, locationIdPage) {
377
410
  .sort(([locationId1], [locationId2]) => sortAfterInheritanceOrder(locationId1, locationId2, locationIdPage)));
378
411
  return interfaceFilesRelevant;
379
412
  }
380
- async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded) {
413
+ async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded, vikeVitePluginOptions) {
381
414
  const locationIds = objectKeys(interfaceFilesByLocationId);
382
415
  const interfaceFilesGlobal = objectFromEntries(objectEntries(interfaceFilesByLocationId).filter(([locationId]) => {
383
416
  return isGlobalLocation(locationId, locationIds);
@@ -419,20 +452,42 @@ async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importe
419
452
  const configValueSource = sources[0];
420
453
  if (!configValueSource)
421
454
  return;
455
+ pageConfigGlobal.configValueSources[configName] = sources;
422
456
  if (configName === 'onBeforeRoute' || configName === 'onPrerenderStart') {
423
457
  assert(!('value' in configValueSource));
424
- pageConfigGlobal.configValueSources[configName] = [configValueSource];
425
458
  }
426
459
  else {
427
460
  assert('value' in configValueSource);
428
461
  if (configName === 'prerender' && typeof configValueSource.value === 'boolean')
429
462
  return;
430
- const { filePathToShowToUser } = configValueSource.definedAtFilePath;
431
- assertWarning(false, `Being able to define config ${pc.cyan(configName)} in ${filePathToShowToUser} is experimental and will likely be removed. Define the config ${pc.cyan(configName)} in Vike's Vite plugin options instead.`, { onlyOnce: true });
432
463
  pageConfigGlobalValues[configName] = configValueSource.value;
433
464
  }
434
465
  }));
435
- return { pageConfigGlobal, pageConfigGlobalValues };
466
+ const vikeConfigGlobal = resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues);
467
+ {
468
+ assert(isObject(vikeVitePluginOptions));
469
+ Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
470
+ if (pageConfigGlobal.configValueSources[configName])
471
+ return;
472
+ pageConfigGlobal.configValueSources[configName] = [];
473
+ pageConfigGlobal.configValueSources[configName].push({
474
+ value,
475
+ configEnv: { config: true },
476
+ definedAtFilePath: {
477
+ ...getFilePathResolved({
478
+ userRootDir,
479
+ filePathAbsoluteUserRootDir: '/vite.config.js'
480
+ }),
481
+ fileExportPathToShowToUser: null
482
+ },
483
+ locationId: '/',
484
+ isOverriden: false,
485
+ valueIsImportedAtRuntime: false,
486
+ valueIsDefinedByPlusFile: false
487
+ });
488
+ });
489
+ }
490
+ return { pageConfigGlobal, pageConfigGlobalValues, vikeConfigGlobal };
436
491
  }
437
492
  async function resolveConfigValueSources(configName, configDef, interfaceFilesRelevant, userRootDir, importedFilesLoaded) {
438
493
  const sourcesInfo = [];
@@ -793,8 +848,8 @@ function getComputed(configValueSources, configDefinitions) {
793
848
  });
794
849
  return configValuesComputed;
795
850
  }
796
- async function findPlusFiles(userRootDir, outDirRoot, crawlWithGit) {
797
- const files = await crawlPlusFiles(userRootDir, outDirRoot, crawlWithGit);
851
+ async function findPlusFiles(userRootDir, outDirRoot) {
852
+ const files = await crawlPlusFiles(userRootDir, outDirRoot);
798
853
  const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir }));
799
854
  return plusFiles;
800
855
  }
@@ -1010,3 +1065,121 @@ function sortConfigValueSources(configValueSources, locationIdPage) {
1010
1065
  function getConfigValueInterfaceFile(interfaceFile, configName) {
1011
1066
  return interfaceFile.fileExportsByConfigName[configName]?.configValue;
1012
1067
  }
1068
+ // TODO: refactor code below
1069
+ function resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues) {
1070
+ // TODO/v1-release: remove
1071
+ assertVikeConfigGlobal(vikeVitePluginOptions, ({ prop, errMsg }) => `vite.config.js > vike option ${prop} ${errMsg}`);
1072
+ const configs = [vikeVitePluginOptions];
1073
+ assertVikeConfigGlobal(pageConfigGlobalValues, ({ prop, errMsg }) => {
1074
+ // Can we add the config file path ?
1075
+ return `config ${pc.cyan(prop)} ${errMsg}`;
1076
+ });
1077
+ configs.push(pageConfigGlobalValues);
1078
+ const vikeConfigGlobal = {
1079
+ disableAutoFullBuild: pickFirst(configs.map((c) => c.disableAutoFullBuild)) ?? null,
1080
+ prerender: resolvePrerenderOptions(configs),
1081
+ includeAssetsImportedByServer: pickFirst(configs.map((c) => c.includeAssetsImportedByServer)) ?? true,
1082
+ baseServer: pickFirst(configs.map((c) => c.baseServer)) ?? null,
1083
+ baseAssets: pickFirst(configs.map((c) => c.baseAssets)) ?? null,
1084
+ redirects: merge(configs.map((c) => c.redirects)) ?? {},
1085
+ disableUrlNormalization: pickFirst(configs.map((c) => c.disableUrlNormalization)) ?? false,
1086
+ trailingSlash: pickFirst(configs.map((c) => c.trailingSlash)) ?? false
1087
+ };
1088
+ return vikeConfigGlobal;
1089
+ }
1090
+ function resolvePrerenderOptions(configs) {
1091
+ if (!configs.some((c) => c.prerender)) {
1092
+ return false;
1093
+ }
1094
+ const configsPrerender = configs.map((c) => c.prerender).filter(isObject2);
1095
+ return {
1096
+ partial: pickFirst(configsPrerender.map((c) => c.partial)) ?? false,
1097
+ noExtraDir: pickFirst(configsPrerender.map((c) => c.noExtraDir)) ?? false,
1098
+ parallel: pickFirst(configsPrerender.map((c) => c.parallel)) ?? true,
1099
+ disableAutoRun: pickFirst(configsPrerender.map((c) => c.disableAutoRun)) ?? false
1100
+ };
1101
+ }
1102
+ function isObject2(p) {
1103
+ return typeof p === 'object';
1104
+ }
1105
+ function merge(objs) {
1106
+ const obj = {};
1107
+ objs.forEach((e) => {
1108
+ Object.assign(obj, e);
1109
+ });
1110
+ return obj;
1111
+ }
1112
+ function pickFirst(arr) {
1113
+ return arr.filter((v) => v !== undefined)[0];
1114
+ }
1115
+ function assertVikeConfigGlobal(vikeConfigGlobal, wrongUsageMsg) {
1116
+ const wrongUsageError = check(vikeConfigGlobal);
1117
+ if (wrongUsageError) {
1118
+ assertUsage(false, wrongUsageMsg(wrongUsageError));
1119
+ }
1120
+ }
1121
+ function check(vikeConfigGlobal) {
1122
+ assert(isObject(vikeConfigGlobal));
1123
+ {
1124
+ const prop = 'disableUrlNormalization';
1125
+ if (!hasProp(vikeConfigGlobal, prop, 'boolean') && !hasProp(vikeConfigGlobal, prop, 'undefined'))
1126
+ return { prop, errMsg: 'should be a boolean' };
1127
+ }
1128
+ {
1129
+ const prop = 'trailingSlash';
1130
+ if (!hasProp(vikeConfigGlobal, prop, 'boolean') && !hasProp(vikeConfigGlobal, prop, 'undefined'))
1131
+ return { prop, errMsg: 'should be a boolean' };
1132
+ }
1133
+ {
1134
+ const prop = 'redirects';
1135
+ const { redirects } = vikeConfigGlobal;
1136
+ if (!(redirects === undefined ||
1137
+ (isObject(redirects) && Object.values(redirects).every((v) => typeof v === 'string'))))
1138
+ return { prop, errMsg: 'should be an object of strings' };
1139
+ }
1140
+ {
1141
+ const prop = 'disableAutoFullBuild';
1142
+ if (!hasProp(vikeConfigGlobal, prop, 'boolean') &&
1143
+ !hasProp(vikeConfigGlobal, prop, 'undefined') &&
1144
+ !(vikeConfigGlobal[prop] === 'prerender'))
1145
+ return { prop, errMsg: "should be a boolean or 'prerender'" };
1146
+ }
1147
+ {
1148
+ const prop = 'includeAssetsImportedByServer';
1149
+ if (!hasProp(vikeConfigGlobal, prop, 'boolean') && !hasProp(vikeConfigGlobal, prop, 'undefined'))
1150
+ return { prop, errMsg: 'should be a boolean' };
1151
+ }
1152
+ {
1153
+ const prop = 'prerender';
1154
+ if (!hasProp(vikeConfigGlobal, prop, 'object') &&
1155
+ !hasProp(vikeConfigGlobal, prop, 'boolean') &&
1156
+ !hasProp(vikeConfigGlobal, prop, 'undefined'))
1157
+ return { prop, errMsg: 'should be an object or a boolean' };
1158
+ }
1159
+ const configVikePrerender = vikeConfigGlobal.prerender;
1160
+ if (typeof configVikePrerender === 'object') {
1161
+ {
1162
+ const p = 'partial';
1163
+ if (!hasProp(configVikePrerender, p, 'boolean') && !hasProp(configVikePrerender, p, 'undefined'))
1164
+ return { prop: `prerender.${p}`, errMsg: 'should be a boolean' };
1165
+ }
1166
+ {
1167
+ const p = 'noExtraDir';
1168
+ if (!hasProp(configVikePrerender, p, 'boolean') && !hasProp(configVikePrerender, p, 'undefined'))
1169
+ return { prop: `prerender.${p}`, errMsg: 'should be a boolean' };
1170
+ }
1171
+ {
1172
+ const p = 'disableAutoRun';
1173
+ if (!hasProp(configVikePrerender, p, 'boolean') && !hasProp(configVikePrerender, p, 'undefined'))
1174
+ return { prop: `prerender.${p}`, errMsg: 'should be a boolean' };
1175
+ }
1176
+ {
1177
+ const p = 'parallel';
1178
+ if (!hasProp(configVikePrerender, p, 'boolean') &&
1179
+ !hasProp(configVikePrerender, p, 'number') &&
1180
+ !hasProp(configVikePrerender, p, 'undefined'))
1181
+ return { prop: `prerender.${p}`, errMsg: 'should be a boolean or a number' };
1182
+ }
1183
+ }
1184
+ return null;
1185
+ }
@@ -5,7 +5,8 @@ import { getVikeConfig } from './getVikeConfig.js';
5
5
  import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
6
6
  import { serializeConfigValues } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
7
7
  async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
8
- const { pageConfigs, pageConfigGlobal } = await getVikeConfig(config, { doNotRestartViteOnError: true });
8
+ const vikeConfig = await getVikeConfig(config, { doNotRestartViteOnError: true });
9
+ const { pageConfigs, pageConfigGlobal } = vikeConfig;
9
10
  return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
10
11
  }
11
12
  function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
@@ -33,7 +33,7 @@ function setGlobalContext() {
33
33
  order: 'post',
34
34
  async handler(config) {
35
35
  const { outDirRoot } = getOutDirs(config);
36
- assertFilePathAbsoluteFilesystem(outDirRoot); // Needed for loadImportBuild(outDir) of @brillout/vite-plugin-server-entry
36
+ assertFilePathAbsoluteFilesystem(outDirRoot); // Needed for `importServerProductionEntry({ outDir })` of @brillout/vite-plugin-server-entry
37
37
  setGlobalContext_viteConfig(config, outDirRoot);
38
38
  const vikeConfig = await getVikeConfig(config);
39
39
  setGlobalContext_vikeConfig(vikeConfig);
@@ -0,0 +1,3 @@
1
+ export { workaroundVite6HmrRegression };
2
+ import type { Plugin } from 'vite';
3
+ declare function workaroundVite6HmrRegression(): Plugin;
@@ -1,11 +1,11 @@
1
- export { vite6HmrRegressionWorkaround };
1
+ export { workaroundVite6HmrRegression };
2
2
  // https://vite.dev/guide/migration (will be 404 after vite@7 release) > search for `hmrReload()`
3
3
  // https://v6.vite.dev/guide/migration (will exist after vite@7 release) > search for `hmrReload()`
4
4
  // Workaround seems to work for docs page /banner (which is HTML-only)
5
5
  // But doesn't seem to work for /examples/render-modes/ (see https://github.com/vikejs/vike/pull/2069 commit `renable HMR test for HTML-only`)
6
- function vite6HmrRegressionWorkaround() {
6
+ function workaroundVite6HmrRegression() {
7
7
  return {
8
- name: 'vike:vite6HmrRegressionWorkaround',
8
+ name: 'vike:workaroundVite6HmrRegression',
9
9
  enforce: 'post',
10
10
  hotUpdate: {
11
11
  order: 'post',
@@ -1,2 +1,2 @@
1
1
  export { getEnvVarObject };
2
- declare function getEnvVarObject(envVarName: 'VITE_CONFIG'): null | Record<string, unknown>;
2
+ declare function getEnvVarObject(envVarName: 'VITE_CONFIG' | 'VIKE_CRAWL'): null | Record<string, unknown>;
@@ -0,0 +1,3 @@
1
+ export { isPrerenderEnabled };
2
+ import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
3
+ declare function isPrerenderEnabled(vikeConfigGlobal: VikeConfigGlobal): boolean;
@@ -0,0 +1,6 @@
1
+ export { isPrerenderEnabled };
2
+ function isPrerenderEnabled(vikeConfigGlobal) {
3
+ return (vikeConfigGlobal.prerender &&
4
+ !vikeConfigGlobal.prerender.disableAutoRun &&
5
+ vikeConfigGlobal.disableAutoFullBuild !== 'prerender');
6
+ }
@@ -3,7 +3,6 @@ export { runPrerenderFromCLIPrerenderCommand };
3
3
  export { runPrerenderFromAutoRun };
4
4
  export { runPrerender_forceExit };
5
5
  export type { PrerenderOptions };
6
- import '../runtime/page-files/setup.js';
7
6
  import type { InlineConfig, ResolvedConfig } from 'vite';
8
7
  import type { APIOptions } from '../api/types.js';
9
8
  type PrerenderOptions = APIOptions & {
@@ -30,5 +29,5 @@ declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<{
30
29
  viteConfig: ResolvedConfig;
31
30
  }>;
32
31
  declare function runPrerenderFromCLIPrerenderCommand(): Promise<void>;
33
- declare function runPrerenderFromAutoRun(viteConfig: InlineConfig, forceExit: boolean): Promise<void>;
32
+ declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<void>;
34
33
  declare function runPrerender_forceExit(): void;
@@ -2,7 +2,6 @@ export { runPrerenderFromAPI };
2
2
  export { runPrerenderFromCLIPrerenderCommand };
3
3
  export { runPrerenderFromAutoRun };
4
4
  export { runPrerender_forceExit };
5
- import '../runtime/page-files/setup.js';
6
5
  import path from 'path';
7
6
  import { route } from '../../shared/route/index.js';
8
7
  import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender } from './utils.js';
@@ -15,7 +14,7 @@ import { getPageFilesServerSide } from '../../shared/getPageFiles.js';
15
14
  import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
16
15
  import { getUrlFromRouteString } from '../../shared/route/resolveRouteString.js';
17
16
  import { getConfigValueFilePathToShowToUser } from '../../shared/page-configs/helpers.js';
18
- import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValue.js';
17
+ import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValueRuntime.js';
19
18
  import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
20
19
  import { isErrorPage } from '../../shared/error-page.js';
21
20
  import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
@@ -46,7 +45,7 @@ async function runPrerenderFromCLIPrerenderCommand() {
46
45
  }
47
46
  runPrerender_forceExit();
48
47
  }
49
- async function runPrerenderFromAutoRun(viteConfig, forceExit) {
48
+ async function runPrerenderFromAutoRun(viteConfig) {
50
49
  try {
51
50
  await runPrerender({ viteConfig });
52
51
  }
@@ -55,8 +54,6 @@ async function runPrerenderFromAutoRun(viteConfig, forceExit) {
55
54
  logErrorHint(err);
56
55
  process.exit(1);
57
56
  }
58
- if (forceExit)
59
- runPrerender_forceExit();
60
57
  }
61
58
  async function runPrerender(options = {}, standaloneTrigger) {
62
59
  checkOutdatedOptions(options);
@@ -68,8 +65,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
68
65
  console.log(`${pc.cyan(`vike v${projectInfo.projectVersion}`)} ${pc.green('pre-rendering HTML...')}`);
69
66
  }
70
67
  await disableReactStreaming();
71
- const viteConfig = await resolveConfig(options.viteConfig || {}, 'vike pre-rendering', 'production');
72
- assertLoadedConfig(viteConfig, options);
68
+ const viteConfig = await resolveConfig(options.viteConfig || {}, 'build', 'production');
73
69
  const vikeConfig = await getVikeConfig(viteConfig);
74
70
  const { outDirClient } = getOutDirs(viteConfig);
75
71
  const { root } = viteConfig;
@@ -481,7 +477,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
481
477
  usesClientRouter = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
482
478
  }
483
479
  else {
484
- usesClientRouter = globalContext.pluginManifest.usesClientRouter;
480
+ usesClientRouter = globalContext.usesClientRouter;
485
481
  }
486
482
  }
487
483
  objectAssign(pageContext, {
@@ -672,25 +668,6 @@ async function disableReactStreaming() {
672
668
  const { disable } = mod;
673
669
  disable();
674
670
  }
675
- function assertLoadedConfig(viteConfig, options) {
676
- if (viteConfig.plugins.some((p) => p.name.startsWith('vike'))) {
677
- return;
678
- }
679
- const { configFile } = viteConfig;
680
- if (configFile) {
681
- assertUsage(false, `${configFile} doesn't install the vike plugin`);
682
- }
683
- else {
684
- if (!options.viteConfig) {
685
- assertUsage(false, `[prerender()] No vite.config.js file found at ${process.cwd()}. Use the option ${pc.cyan('prerender({ viteConfig })')}.`, { showStackTrace: true });
686
- }
687
- else {
688
- assertUsage(false, `[prerender()] The Vite config ${pc.cyan('prerender({ viteConfig })')} is missing the vike plugin.`, {
689
- showStackTrace: true
690
- });
691
- }
692
- }
693
- }
694
671
  function isSameUrl(url1, url2) {
695
672
  return normalizeUrl(url1) === normalizeUrl(url2);
696
673
  }
@@ -12,10 +12,11 @@ export { setGlobalContext_viteConfig };
12
12
  export { setGlobalContext_vikeConfig };
13
13
  export { setGlobalContext_isViteDev };
14
14
  export { setGlobalContext_isPrerendering };
15
+ export { setGlobalContext_buildEntry };
16
+ export { clearGlobalContext };
15
17
  import type { ViteManifest } from '../shared/ViteManifest.js';
16
18
  import type { ResolvedConfig, ViteDevServer } from 'vite';
17
- import { PluginManifest } from '../shared/assertPluginManifest.js';
18
- import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js';
19
+ import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
19
20
  import { type RuntimeManifest } from '../shared/assertRuntimeManifest.js';
20
21
  import type { VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
21
22
  type GlobalContextPublic = {
@@ -35,17 +36,16 @@ type GlobalContext = {
35
36
  vikeConfig: VikeConfigObject;
36
37
  viteDevServer: ViteDevServer;
37
38
  assetsManifest: null;
38
- pluginManifest: null;
39
39
  } | ({
40
40
  isProduction: true;
41
41
  assetsManifest: ViteManifest;
42
- pluginManifest: PluginManifest;
43
42
  viteDevServer: null;
44
43
  } & ({
45
44
  isPrerendering: false;
46
45
  viteConfig: null;
47
46
  } | {
48
47
  isPrerendering: true;
48
+ usesClientRouter: boolean;
49
49
  viteConfig: ResolvedConfig;
50
50
  })));
51
51
  declare function getGlobalContext(): GlobalContext;
@@ -64,3 +64,5 @@ declare function initGlobalContext_renderPage(): Promise<void>;
64
64
  declare function initGlobalContext_runPrerender(): Promise<void>;
65
65
  declare function initGlobalContext_getGlobalContextAsync(isProduction: boolean): Promise<void>;
66
66
  declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
67
+ declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
68
+ declare function clearGlobalContext(): void;
@@ -14,23 +14,24 @@ export { setGlobalContext_viteConfig };
14
14
  export { setGlobalContext_vikeConfig };
15
15
  export { setGlobalContext_isViteDev };
16
16
  export { setGlobalContext_isPrerendering };
17
- import { assert, onSetupRuntime, assertUsage, assertWarning, getGlobalObject, isPlainObject, objectAssign, objectKeys, genPromise } from './utils.js';
18
- import { loadImportBuild } from './globalContext/loadImportBuild.js';
19
- import { setPageFiles } from '../../shared/getPageFiles.js';
17
+ export { setGlobalContext_buildEntry };
18
+ export { clearGlobalContext };
19
+ import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, objectKeys, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger } from './utils.js';
20
+ import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
21
+ import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
22
+ import { setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
20
23
  import { assertPluginManifest } from '../shared/assertPluginManifest.js';
21
24
  import { assertRuntimeManifest } from '../shared/assertRuntimeManifest.js';
22
25
  import pc from '@brillout/picocolors';
23
- import { getPageFilesExports } from './page-files/getPageFilesExports.js';
24
26
  import { resolveBaseFromResolvedConfig } from '../shared/resolveBase.js';
25
- const globalObject = getGlobalObject('globalContext.ts', (() => {
26
- const { promise: viteDevServerPromise, resolve: viteDevServerPromiseResolve } = genPromise();
27
- return {
28
- viteDevServerPromise,
29
- viteDevServerPromiseResolve
30
- };
31
- })());
27
+ const debug = createDebugger('vike:globalContext');
28
+ const globalObject = getGlobalObject('globalContext.ts', getInitialGlobalContext());
29
+ initDevEntry();
32
30
  function getGlobalContext() {
33
- assert(globalObject.globalContext);
31
+ if (!globalObject.globalContext) {
32
+ debug('getGlobalContext()', new Error().stack);
33
+ assert(false);
34
+ }
34
35
  return globalObject.globalContext;
35
36
  }
36
37
  /** @experimental https://vike.dev/getGlobalContext */
@@ -109,9 +110,11 @@ function getViteConfig() {
109
110
  return globalObject.viteConfig ?? null;
110
111
  }
111
112
  async function initGlobalContext_renderPage() {
113
+ debug('initGlobalContext_renderPage()');
112
114
  await initGlobalContext(!globalObject.isViteDev);
113
115
  }
114
116
  async function initGlobalContext_runPrerender() {
117
+ debug('initGlobalContext_runPrerender()');
115
118
  if (globalObject.initGlobalContext_runPrerender_alreadyCalled)
116
119
  return;
117
120
  globalObject.initGlobalContext_runPrerender_alreadyCalled = true;
@@ -125,6 +128,7 @@ async function initGlobalContext_runPrerender() {
125
128
  await initGlobalContext(true);
126
129
  }
127
130
  async function initGlobalContext_getGlobalContextAsync(isProduction) {
131
+ debug('initGlobalContext_getGlobalContextAsync()');
128
132
  if (!isProduction) {
129
133
  const waitFor = 20;
130
134
  const timeout = setTimeout(() => {
@@ -152,13 +156,11 @@ async function initGlobalContext(isProduction) {
152
156
  assert(vikeConfig);
153
157
  assert(viteDevServer);
154
158
  assert(!isPrerendering);
155
- const vikeConfigGlobal = vikeConfig.vikeConfigGlobal;
156
- const pluginManifest = getRuntimeManifest(vikeConfigGlobal, viteConfig);
159
+ const pluginManifest = getRuntimeManifest(vikeConfig.vikeConfigGlobal, viteConfig);
157
160
  globalObject.globalContext = {
158
161
  isProduction: false,
159
162
  isPrerendering: false,
160
163
  assetsManifest: null,
161
- pluginManifest: null,
162
164
  viteDevServer,
163
165
  viteConfig,
164
166
  vikeConfig,
@@ -171,22 +173,21 @@ async function initGlobalContext(isProduction) {
171
173
  };
172
174
  }
173
175
  else {
174
- const buildEntries = await loadImportBuild(globalObject.outDirRoot);
175
- assertBuildEntries(buildEntries, isPrerendering ?? false);
176
- const { pageFiles, assetsManifest, pluginManifest } = buildEntries;
177
- setPageFiles(pageFiles);
176
+ const buildEntry = await getBuildEntry(globalObject.outDirRoot);
177
+ const { assetsManifest, pluginManifest } = buildEntry;
178
+ setPageFiles(buildEntry.pageFiles);
178
179
  assertViteManifest(assetsManifest);
179
180
  assertPluginManifest(pluginManifest);
180
181
  const globalContext = {
181
182
  isProduction: true,
182
183
  assetsManifest,
183
- pluginManifest,
184
184
  viteDevServer: null,
185
185
  baseServer: pluginManifest.baseServer,
186
186
  baseAssets: pluginManifest.baseAssets,
187
187
  includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
188
188
  redirects: pluginManifest.redirects,
189
189
  trailingSlash: pluginManifest.trailingSlash,
190
+ usesClientRouter: pluginManifest.usesClientRouter,
190
191
  disableUrlNormalization: pluginManifest.disableUrlNormalization
191
192
  };
192
193
  if (isPrerendering) {
@@ -220,15 +221,6 @@ function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
220
221
  assertRuntimeManifest(manifest);
221
222
  return manifest;
222
223
  }
223
- function assertBuildEntries(buildEntries, isPreRendering) {
224
- const errMsg = [
225
- `You are tyring to run`,
226
- isPreRendering ? 'pre-rendering' : 'the server for production',
227
- `but your app isn't built yet. Run ${pc.cyan('$ vike build')} before `,
228
- isPreRendering ? 'pre-rendering.' : 'running the server.'
229
- ].join(' ');
230
- assertUsage(buildEntries, errMsg);
231
- }
232
224
  function assertViteManifest(manifest) {
233
225
  assert(isPlainObject(manifest));
234
226
  /* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
@@ -247,3 +239,58 @@ function eagerlyLoadUserFiles() {
247
239
  // We call it as early as possible here for better performance.
248
240
  getPageFilesExports();
249
241
  }
242
+ async function getBuildEntry(outDir) {
243
+ debug('getBuildEntry()');
244
+ if (!globalObject.buildEntry) {
245
+ debug('importServerProductionEntry()');
246
+ await importServerProductionEntry({ outDir });
247
+ if (!globalObject.buildEntry) {
248
+ debug('globalObject.buildEntryPrevious');
249
+ // Needed, for example, when calling the API prerender() then preview() because both trigger a importServerProductionEntry() call but only the first only is applied because of the import() cache. (A proper implementation would be to clear the import() cache, but it probably isn't possible on platforms such as Cloudflare Workers.)
250
+ globalObject.buildEntry = globalObject.buildEntryPrevious;
251
+ }
252
+ assert(globalObject.buildEntry);
253
+ }
254
+ const { buildEntry } = globalObject;
255
+ assert(isObject(buildEntry));
256
+ assert(hasProp(buildEntry, 'pageFiles', 'object'));
257
+ assert(hasProp(buildEntry, 'assetsManifest', 'object'));
258
+ assert(hasProp(buildEntry, 'pluginManifest', 'object'));
259
+ return buildEntry;
260
+ }
261
+ function setGlobalContext_buildEntry(buildEntry) {
262
+ debug('setGlobalContext_buildEntry()');
263
+ globalObject.buildEntry = buildEntry;
264
+ globalObject.buildEntryPrevious = buildEntry;
265
+ }
266
+ function initDevEntry() {
267
+ setPageFilesAsync(getPageFilesExports);
268
+ }
269
+ async function getPageFilesExports() {
270
+ const viteDevServer = getViteDevServer();
271
+ assert(viteDevServer);
272
+ let moduleExports;
273
+ try {
274
+ moduleExports = await viteDevServer.ssrLoadModule(virtualFileIdImportUserCodeServer);
275
+ }
276
+ catch (err) {
277
+ debugGlob(`Glob error: ${virtualFileIdImportUserCodeServer} transpile error: `, err);
278
+ throw err;
279
+ }
280
+ moduleExports = moduleExports.default || moduleExports;
281
+ debugGlob('Glob result: ', moduleExports);
282
+ assert(isObject(moduleExports));
283
+ return moduleExports;
284
+ }
285
+ function clearGlobalContext() {
286
+ debug('clearGlobalContext()');
287
+ objectReplace(globalObject, getInitialGlobalContext(), ['buildEntryPrevious']);
288
+ }
289
+ function getInitialGlobalContext() {
290
+ debug('getInitialGlobalContext()');
291
+ const { promise: viteDevServerPromise, resolve: viteDevServerPromiseResolve } = genPromise();
292
+ return {
293
+ viteDevServerPromise,
294
+ viteDevServerPromiseResolve
295
+ };
296
+ }
@@ -5,7 +5,7 @@ import { sanitizeJson } from './sanitizeJson.js';
5
5
  import { inferAssetTag, inferPreloadTag } from './inferHtmlTags.js';
6
6
  import { mergeScriptTags } from './mergeScriptTags.js';
7
7
  import { getPageConfig } from '../../../../shared/page-configs/helpers.js';
8
- import { getConfigValueRuntime } from '../../../../shared/page-configs/getConfigValue.js';
8
+ import { getConfigValueRuntime } from '../../../../shared/page-configs/getConfigValueRuntime.js';
9
9
  import { getGlobalContext } from '../../globalContext.js';
10
10
  import pc from '@brillout/picocolors';
11
11
  import { getConfigDefinedAt } from '../../../../shared/page-configs/getConfigDefinedAt.js';