vike 0.4.218 → 0.4.220

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 (184) hide show
  1. package/dist/cjs/__internal/index.js +11 -11
  2. package/dist/cjs/node/api/build.js +20 -11
  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 +39 -11
  6. package/dist/cjs/node/cli/entry.js +19 -7
  7. package/dist/cjs/node/plugin/index.js +5 -5
  8. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -4
  9. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -10
  10. package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
  11. package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  12. package/dist/cjs/node/plugin/plugins/commonConfig.js +39 -4
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +26 -23
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +171 -68
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
  17. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
  18. package/dist/cjs/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  19. package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +17 -7
  20. package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +16 -0
  21. package/dist/cjs/node/prerender/runPrerender.js +94 -66
  22. package/dist/cjs/node/prerender/utils.js +1 -0
  23. package/dist/cjs/node/runtime/globalContext.js +108 -34
  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/page-files/setup.js +2 -4
  28. package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
  29. package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +2 -2
  30. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  31. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  32. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +9 -1
  33. package/dist/cjs/node/runtime/renderPage.js +21 -22
  34. package/dist/cjs/node/runtime/utils.js +1 -0
  35. package/dist/cjs/node/runtime-dev/index.js +17 -7
  36. package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -2
  37. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +3 -3
  38. package/dist/cjs/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
  39. package/dist/cjs/shared/getPageFiles.js +3 -9
  40. package/dist/cjs/shared/hooks/getHook.js +3 -3
  41. package/dist/cjs/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +113 -81
  42. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +80 -55
  43. package/dist/cjs/shared/route/loadPageRoutes.js +3 -3
  44. package/dist/cjs/shared/utils.js +1 -0
  45. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  46. package/dist/cjs/utils/assert.js +4 -3
  47. package/dist/cjs/utils/assertSetup.js +47 -16
  48. package/dist/cjs/utils/debug.js +11 -6
  49. package/dist/cjs/utils/getGlobalObject.js +1 -2
  50. package/dist/cjs/utils/objectReplace.js +9 -0
  51. package/dist/esm/__internal/index.d.ts +3 -5
  52. package/dist/esm/__internal/index.js +6 -8
  53. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -1
  54. package/dist/esm/client/client-routing-runtime/entry.d.ts +1 -1
  55. package/dist/esm/client/client-routing-runtime/entry.js +0 -1
  56. package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
  57. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
  58. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
  59. package/dist/esm/client/client-routing-runtime/initOnLinkClick.d.ts +4 -0
  60. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +13 -3
  61. package/dist/esm/client/client-routing-runtime/initOnPopState.js +8 -0
  62. package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
  63. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
  64. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  65. package/dist/esm/client/client-routing-runtime/skipLink.d.ts +2 -0
  66. package/dist/esm/client/client-routing-runtime/skipLink.js +1 -0
  67. package/dist/esm/client/server-routing-runtime/entry.d.ts +1 -1
  68. package/dist/esm/client/server-routing-runtime/entry.js +0 -1
  69. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
  70. package/dist/esm/client/server-routing-runtime/getPageContext.js +5 -2
  71. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
  72. package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
  73. package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
  74. package/dist/esm/client/shared/normalizeClientSideUrl.js +2 -3
  75. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  76. package/dist/esm/node/api/build.js +3 -4
  77. package/dist/esm/node/api/context.d.ts +3 -1
  78. package/dist/esm/node/api/context.js +6 -2
  79. package/dist/esm/node/api/prepareViteApiCall.d.ts +1 -1
  80. package/dist/esm/node/api/prepareViteApiCall.js +25 -7
  81. package/dist/esm/node/cli/entry.js +2 -0
  82. package/dist/esm/node/cli/parseCli.d.ts +1 -1
  83. package/dist/esm/node/plugin/index.d.ts +1 -1
  84. package/dist/esm/node/plugin/index.js +5 -5
  85. package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -4
  86. package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -1
  87. package/dist/esm/node/plugin/plugins/baseUrls.js +4 -11
  88. package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
  89. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.d.ts +1 -1
  90. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.d.ts +2 -2
  91. package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
  92. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +3 -0
  93. package/dist/esm/node/plugin/plugins/commonConfig.js +40 -5
  94. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +1 -1
  95. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +6 -9
  96. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +25 -22
  97. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +96 -1
  98. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +167 -64
  99. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +1 -1
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +4 -3
  101. package/dist/esm/node/plugin/plugins/setGlobalContext.js +1 -1
  102. package/dist/esm/node/plugin/plugins/workaroundVite6HmrRegression.d.ts +3 -0
  103. package/dist/esm/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
  104. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +5 -0
  105. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +14 -0
  106. package/dist/esm/node/prerender/runPrerender.d.ts +1 -2
  107. package/dist/esm/node/prerender/runPrerender.js +78 -60
  108. package/dist/esm/node/prerender/utils.d.ts +1 -0
  109. package/dist/esm/node/prerender/utils.js +1 -0
  110. package/dist/esm/node/runtime/globalContext.d.ts +23 -7
  111. package/dist/esm/node/runtime/globalContext.js +108 -34
  112. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
  113. package/dist/esm/node/runtime/index-common.d.ts +0 -1
  114. package/dist/esm/node/runtime/index-common.js +0 -15
  115. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -0
  116. package/dist/esm/node/runtime/onLoad.js +16 -2
  117. package/dist/esm/node/runtime/page-files/setup.js +3 -3
  118. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  119. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +1 -1
  120. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
  121. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
  122. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
  123. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
  124. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +31 -46
  125. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -33
  126. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +1 -1
  127. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +9 -1
  128. package/dist/esm/node/runtime/renderPage.js +22 -23
  129. package/dist/esm/node/runtime/utils.d.ts +1 -0
  130. package/dist/esm/node/runtime/utils.js +1 -0
  131. package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -1
  132. package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -1
  133. package/dist/esm/node/shared/assertRuntimeManifest.js +1 -3
  134. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
  135. package/dist/esm/shared/getPageFiles/{setPageFiles.d.ts → getPageFiles.d.ts} +3 -1
  136. package/dist/esm/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +8 -6
  137. package/dist/esm/shared/getPageFiles.d.ts +2 -5
  138. package/dist/esm/shared/getPageFiles.js +1 -4
  139. package/dist/esm/shared/hooks/getHook.d.ts +3 -3
  140. package/dist/esm/shared/hooks/getHook.js +1 -1
  141. package/dist/esm/shared/page-configs/Config/PageContextConfig.d.ts +9 -5
  142. package/dist/esm/shared/page-configs/Config.d.ts +20 -2
  143. package/dist/esm/shared/page-configs/PageConfig.d.ts +7 -3
  144. package/dist/esm/shared/{getPageFiles/getExports.d.ts → page-configs/getPageConfigUserFriendly.d.ts} +26 -12
  145. package/dist/esm/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +112 -80
  146. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +26 -6
  147. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +80 -55
  148. package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
  149. package/dist/esm/shared/route/loadPageRoutes.js +1 -1
  150. package/dist/esm/shared/types.d.ts +1 -1
  151. package/dist/esm/shared/utils.d.ts +1 -0
  152. package/dist/esm/shared/utils.js +1 -0
  153. package/dist/esm/types/index.d.ts +1 -1
  154. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  155. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  156. package/dist/esm/utils/assert.js +4 -3
  157. package/dist/esm/utils/assertSetup.js +47 -16
  158. package/dist/esm/utils/debug.d.ts +1 -1
  159. package/dist/esm/utils/debug.js +11 -6
  160. package/dist/esm/utils/getGlobalObject.js +1 -2
  161. package/dist/esm/utils/objectReplace.d.ts +1 -0
  162. package/dist/esm/utils/objectReplace.js +6 -0
  163. package/dist/esm/utils/projectInfo.d.ts +1 -1
  164. package/package.json +4 -13
  165. package/__internal/loadImportBuild.js +0 -3
  166. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -128
  167. package/dist/cjs/node/runtime/globalContext/loadImportBuild.js +0 -25
  168. package/dist/cjs/node/runtime/page-files/getPageFilesExports.js +0 -22
  169. package/dist/esm/client/client-routing-runtime/pageFiles.d.ts +0 -1
  170. package/dist/esm/client/client-routing-runtime/pageFiles.js +0 -4
  171. package/dist/esm/client/server-routing-runtime/pageFiles.d.ts +0 -1
  172. package/dist/esm/client/server-routing-runtime/pageFiles.js +0 -4
  173. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.d.ts +0 -104
  174. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -123
  175. package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +0 -3
  176. package/dist/esm/node/runtime/globalContext/loadImportBuild.d.ts +0 -18
  177. package/dist/esm/node/runtime/globalContext/loadImportBuild.js +0 -23
  178. package/dist/esm/node/runtime/page-files/getPageFilesExports.d.ts +0 -2
  179. package/dist/esm/node/runtime/page-files/getPageFilesExports.js +0 -20
  180. /package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  181. /package/dist/cjs/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
  182. /package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
  183. /package/dist/esm/shared/page-configs/{getConfigValue.d.ts → getConfigValueRuntime.d.ts} +0 -0
  184. /package/dist/esm/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
@@ -2,11 +2,10 @@ 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
- import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender } from './utils.js';
9
- import { prerenderPage, prerender404Page, getRenderContext, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
7
+ import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender, isObject } from './utils.js';
8
+ import { prerenderPage, prerender404Page, getPageContextInitEnhanced } from '../runtime/renderPage/renderPageAlreadyRouted.js';
10
9
  import pc from '@brillout/picocolors';
11
10
  import { cpus } from 'os';
12
11
  import { getGlobalContext, initGlobalContext_runPrerender, setGlobalContext_isPrerendering } from '../runtime/globalContext.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);
@@ -69,11 +66,11 @@ async function runPrerender(options = {}, standaloneTrigger) {
69
66
  }
70
67
  await disableReactStreaming();
71
68
  const viteConfig = await resolveConfig(options.viteConfig || {}, 'build', 'production');
72
- assertLoadedConfig(viteConfig, options);
73
69
  const vikeConfig = await getVikeConfig(viteConfig);
74
70
  const { outDirClient } = getOutDirs(viteConfig);
75
71
  const { root } = viteConfig;
76
72
  const prerenderConfig = vikeConfig.vikeConfigGlobal.prerender;
73
+ validatePrerenderConfig(prerenderConfig);
77
74
  if (!prerenderConfig) {
78
75
  assert(standaloneTrigger);
79
76
  assertWarning(prerenderConfig, `You're executing ${pc.cyan(standaloneTrigger)} but the config ${pc.cyan('prerender')} isn't set to true`, {
@@ -83,8 +80,8 @@ async function runPrerender(options = {}, standaloneTrigger) {
83
80
  const { partial = false, noExtraDir = false, parallel = true } = prerenderConfig || {};
84
81
  const concurrencyLimit = pLimit(parallel === false || parallel === 0 ? 1 : parallel === true || parallel === undefined ? cpus().length : parallel);
85
82
  await initGlobalContext_runPrerender();
86
- const renderContext = await getRenderContext();
87
- renderContext.pageFilesAll.forEach(assertExportNames);
83
+ const globalContext = getGlobalContext();
84
+ globalContext.pageFilesAll.forEach(assertExportNames);
88
85
  const prerenderContext = {};
89
86
  objectAssign(prerenderContext, {
90
87
  _urlHandler: null,
@@ -93,10 +90,10 @@ async function runPrerender(options = {}, standaloneTrigger) {
93
90
  pageContextInit: options.pageContextInit ?? null
94
91
  });
95
92
  const doNotPrerenderList = [];
96
- await collectDoNoPrerenderList(renderContext, vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
97
- await callOnBeforePrerenderStartHooks(prerenderContext, renderContext, concurrencyLimit, doNotPrerenderList);
98
- await handlePagesWithStaticRoutes(prerenderContext, renderContext, doNotPrerenderList, concurrencyLimit);
99
- await callOnPrerenderStartHook(prerenderContext, renderContext);
93
+ await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit);
94
+ await callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList);
95
+ await handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit);
96
+ await callOnPrerenderStartHook(prerenderContext);
100
97
  const prerenderedPageContexts = {};
101
98
  let prerenderedCount = 0;
102
99
  const onComplete = async (htmlFile) => {
@@ -108,14 +105,14 @@ async function runPrerender(options = {}, standaloneTrigger) {
108
105
  };
109
106
  await routeAndPrerender(prerenderContext, concurrencyLimit, onComplete);
110
107
  warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerenderList);
111
- await prerender404(prerenderedPageContexts, renderContext, prerenderContext, onComplete);
108
+ await prerender404(prerenderedPageContexts, prerenderContext, onComplete);
112
109
  if (logLevel === 'info') {
113
110
  console.log(`${pc.green(`✓`)} ${prerenderedCount} HTML documents pre-rendered.`);
114
111
  }
115
- warnMissingPages(prerenderedPageContexts, doNotPrerenderList, renderContext, partial);
112
+ warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial);
116
113
  return { viteConfig };
117
114
  }
118
- async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerenderList, concurrencyLimit) {
115
+ async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurrencyLimit) {
119
116
  // V1 design
120
117
  pageConfigs.forEach((pageConfig) => {
121
118
  const configName = 'prerender';
@@ -133,7 +130,8 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
133
130
  });
134
131
  // Old design
135
132
  // TODO/v1-release: remove
136
- await Promise.all(renderContext.pageFilesAll
133
+ const globalContext = getGlobalContext();
134
+ await Promise.all(globalContext.pageFilesAll
137
135
  .filter((p) => {
138
136
  assertExportNames(p);
139
137
  if (!p.exportNames?.includes('doNotPrerender'))
@@ -145,8 +143,8 @@ async function collectDoNoPrerenderList(renderContext, pageConfigs, doNotPrerend
145
143
  assert(p.loadFile);
146
144
  await p.loadFile();
147
145
  })));
148
- renderContext.allPageIds.forEach((pageId) => {
149
- const pageFilesServerSide = getPageFilesServerSide(renderContext.pageFilesAll, pageId);
146
+ globalContext.allPageIds.forEach((pageId) => {
147
+ const pageFilesServerSide = getPageFilesServerSide(globalContext.pageFilesAll, pageId);
150
148
  for (const p of pageFilesServerSide) {
151
149
  if (!p.exportNames?.includes('doNotPrerender'))
152
150
  continue;
@@ -175,10 +173,11 @@ function assertExportNames(pageFile) {
175
173
  const { exportNames, fileType } = pageFile;
176
174
  assert(exportNames || fileType === '.page.route' || fileType === '.css', pageFile.filePath);
177
175
  }
178
- async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext, concurrencyLimit, doNotPrerenderList) {
176
+ async function callOnBeforePrerenderStartHooks(prerenderContext, concurrencyLimit, doNotPrerenderList) {
179
177
  const onBeforePrerenderStartHooks = [];
178
+ const globalContext = getGlobalContext();
180
179
  // V1 design
181
- await Promise.all(renderContext.pageConfigs.map((pageConfig) => concurrencyLimit(async () => {
180
+ await Promise.all(globalContext.pageConfigs.map((pageConfig) => concurrencyLimit(async () => {
182
181
  const hookName = 'onBeforePrerenderStart';
183
182
  const pageConfigLoaded = await loadConfigValues(pageConfig, false);
184
183
  const hook = getHookFromPageConfig(pageConfigLoaded, hookName);
@@ -194,7 +193,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
194
193
  });
195
194
  })));
196
195
  // 0.4 design
197
- await Promise.all(renderContext.pageFilesAll
196
+ await Promise.all(globalContext.pageFilesAll
198
197
  .filter((p) => {
199
198
  assertExportNames(p);
200
199
  if (!p.exportNames?.includes('prerender'))
@@ -235,7 +234,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
235
234
  assertUsage(false, `URL ${pc.cyan(url)} provided ${providedTwice}. Make sure to provide the URL only once instead.`);
236
235
  }
237
236
  }
238
- const pageContextNew = createPageContext(url, renderContext, prerenderContext);
237
+ const pageContextNew = createPageContext(url, prerenderContext);
239
238
  objectAssign(pageContextNew, {
240
239
  _providedByHook: {
241
240
  hookFilePath,
@@ -252,9 +251,10 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, renderContext,
252
251
  });
253
252
  })));
254
253
  }
255
- async function handlePagesWithStaticRoutes(prerenderContext, renderContext, doNotPrerenderList, concurrencyLimit) {
254
+ async function handlePagesWithStaticRoutes(prerenderContext, doNotPrerenderList, concurrencyLimit) {
256
255
  // Pre-render pages with a static route
257
- await Promise.all(renderContext.pageRoutes.map((pageRoute) => concurrencyLimit(async () => {
256
+ const globalContext = getGlobalContext();
257
+ await Promise.all(globalContext.pageRoutes.map((pageRoute) => concurrencyLimit(async () => {
258
258
  const { pageId } = pageRoute;
259
259
  if (doNotPrerenderList.find((p) => p.pageId === pageId)) {
260
260
  return;
@@ -279,7 +279,7 @@ async function handlePagesWithStaticRoutes(prerenderContext, renderContext, doNo
279
279
  return;
280
280
  }
281
281
  const routeParams = {};
282
- const pageContext = createPageContext(urlOriginal, renderContext, prerenderContext);
282
+ const pageContext = createPageContext(urlOriginal, prerenderContext);
283
283
  objectAssign(pageContext, {
284
284
  _providedByHook: null,
285
285
  routeParams,
@@ -297,7 +297,7 @@ async function handlePagesWithStaticRoutes(prerenderContext, renderContext, doNo
297
297
  prerenderContext.pageContexts.push(pageContext);
298
298
  })));
299
299
  }
300
- function createPageContext(urlOriginal, renderContext, prerenderContext) {
300
+ function createPageContext(urlOriginal, prerenderContext) {
301
301
  const pageContext = {
302
302
  _urlHandler: null,
303
303
  _urlRewrite: null,
@@ -309,17 +309,18 @@ function createPageContext(urlOriginal, renderContext, prerenderContext) {
309
309
  };
310
310
  objectAssign(pageContextInit, prerenderContext.pageContextInit);
311
311
  {
312
- const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit, renderContext);
312
+ const pageContextInitEnhanced = getPageContextInitEnhanced(pageContextInit);
313
313
  objectAssign(pageContext, pageContextInitEnhanced);
314
314
  }
315
315
  return pageContext;
316
316
  }
317
- async function callOnPrerenderStartHook(prerenderContext, renderContext) {
317
+ async function callOnPrerenderStartHook(prerenderContext) {
318
+ const globalContext = getGlobalContext();
318
319
  let onPrerenderStartHook;
319
320
  // V1 design
320
- if (renderContext.pageConfigs.length > 0) {
321
+ if (globalContext.pageConfigs.length > 0) {
321
322
  const hookName = 'onPrerenderStart';
322
- const hook = getHookFromPageConfigGlobal(renderContext.pageConfigGlobal, hookName);
323
+ const hook = getHookFromPageConfigGlobal(globalContext.pageConfigGlobal, hookName);
323
324
  if (hook) {
324
325
  assert(hook.hookName === 'onPrerenderStart');
325
326
  onPrerenderStartHook = {
@@ -331,9 +332,9 @@ async function callOnPrerenderStartHook(prerenderContext, renderContext) {
331
332
  }
332
333
  // Old design
333
334
  // TODO/v1-release: remove
334
- if (renderContext.pageConfigs.length === 0) {
335
+ if (globalContext.pageConfigs.length === 0) {
335
336
  const hookTimeout = getHookTimeoutDefault('onBeforePrerender');
336
- const pageFilesWithOnBeforePrerenderHook = renderContext.pageFilesAll.filter((p) => {
337
+ const pageFilesWithOnBeforePrerenderHook = globalContext.pageFilesAll.filter((p) => {
337
338
  assertExportNames(p);
338
339
  if (!p.exportNames?.includes('onBeforePrerender'))
339
340
  return false;
@@ -481,7 +482,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
481
482
  usesClientRouter = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
482
483
  }
483
484
  else {
484
- usesClientRouter = globalContext.pluginManifest.usesClientRouter;
485
+ usesClientRouter = globalContext.usesClientRouter;
485
486
  }
486
487
  }
487
488
  objectAssign(pageContext, {
@@ -521,27 +522,28 @@ function warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerende
521
522
  assertWarning(false, `The ${providedByHook.hookName}() hook defined by ${providedByHook.hookFilePath} returns the URL ${pc.cyan(urlOriginal)}, while ${setByConfigFile} sets the config ${pc.cyan(setByConfigName)} to ${pc.cyan(String(setByConfigValue))}. This is contradictory: either don't set the config ${pc.cyan(setByConfigName)} to ${pc.cyan(String(setByConfigValue))} or remove the URL ${pc.cyan(urlOriginal)} from the list of URLs to be pre-rendered.`, { onlyOnce: true });
522
523
  });
523
524
  }
524
- function warnMissingPages(prerenderedPageContexts, doNotPrerenderList, renderContext, partial) {
525
- const isV1 = renderContext.pageConfigs.length > 0;
525
+ function warnMissingPages(prerenderedPageContexts, doNotPrerenderList, partial) {
526
+ const globalContext = getGlobalContext();
527
+ const isV1 = globalContext.pageConfigs.length > 0;
526
528
  const hookName = isV1 ? 'onBeforePrerenderStart' : 'prerender';
527
529
  /* TODO/after-v1-design-release: document setting `prerender: false` as an alternative to using prerender.partial (both in the warnings and the docs)
528
530
  const optOutName = isV1 ? 'prerender' : 'doNotPrerender'
529
531
  const msgAddendum = `Explicitly opt-out by setting the config ${optOutName} to ${isV1 ? 'false' : 'true'} or use the option prerender.partial`
530
532
  */
531
- renderContext.allPageIds
533
+ globalContext.allPageIds
532
534
  .filter((pageId) => !prerenderedPageContexts[pageId])
533
535
  .filter((pageId) => !doNotPrerenderList.find((p) => p.pageId === pageId))
534
- .filter((pageId) => !isErrorPage(pageId, renderContext.pageConfigs))
536
+ .filter((pageId) => !isErrorPage(pageId, globalContext.pageConfigs))
535
537
  .forEach((pageId) => {
536
538
  const pageAt = isV1 ? pageId : `\`${pageId}.page.*\``;
537
539
  assertWarning(partial, `Cannot pre-render page ${pageAt} because it has a non-static route, while no ${hookName}() hook returned any URL matching the page's route. You need to use a ${hookName}() hook (https://vike.dev/${hookName}) providing a list of URLs for ${pageAt} that should be pre-rendered. If you don't want to pre-render ${pageAt} then use the option prerender.partial (https://vike.dev/prerender#partial) to suppress this warning.`, { onlyOnce: true });
538
540
  });
539
541
  }
540
- async function prerender404(prerenderedPageContexts, renderContext, prerenderContext, onComplete) {
542
+ async function prerender404(prerenderedPageContexts, prerenderContext, onComplete) {
541
543
  if (!Object.values(prerenderedPageContexts).find(({ urlOriginal }) => urlOriginal === '/404')) {
542
544
  let result;
543
545
  try {
544
- result = await prerender404Page(renderContext, prerenderContext.pageContextInit);
546
+ result = await prerender404Page(prerenderContext.pageContextInit);
545
547
  }
546
548
  catch (err) {
547
549
  assertIsNotAbort(err, 'the 404 page');
@@ -672,25 +674,6 @@ async function disableReactStreaming() {
672
674
  const { disable } = mod;
673
675
  disable();
674
676
  }
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
677
  function isSameUrl(url1, url2) {
695
678
  return normalizeUrl(url1) === normalizeUrl(url2);
696
679
  }
@@ -740,3 +723,38 @@ function makePageContextComputedUrlNonEnumerable(pageContexts) {
740
723
  });
741
724
  }
742
725
  }
726
+ function validatePrerenderConfig(
727
+ // Guaranteed by configDef.type to be either an object or boolean
728
+ prerenderConfig) {
729
+ if (!prerenderConfig || typeof prerenderConfig === 'boolean')
730
+ return;
731
+ assert(isObject(prerenderConfig));
732
+ const wrongValue = (() => {
733
+ {
734
+ const p = 'partial';
735
+ if (!hasProp(prerenderConfig, p, 'boolean') && !hasProp(prerenderConfig, p, 'undefined'))
736
+ return { prop: p, errMsg: 'should be a boolean' };
737
+ }
738
+ {
739
+ const p = 'noExtraDir';
740
+ if (!hasProp(prerenderConfig, p, 'boolean') && !hasProp(prerenderConfig, p, 'undefined'))
741
+ return { prop: p, errMsg: 'should be a boolean' };
742
+ }
743
+ {
744
+ const p = 'disableAutoRun';
745
+ if (!hasProp(prerenderConfig, p, 'boolean') && !hasProp(prerenderConfig, p, 'undefined'))
746
+ return { prop: p, errMsg: 'should be a boolean' };
747
+ }
748
+ {
749
+ const p = 'parallel';
750
+ if (!hasProp(prerenderConfig, p, 'boolean') &&
751
+ !hasProp(prerenderConfig, p, 'number') &&
752
+ !hasProp(prerenderConfig, p, 'undefined'))
753
+ return { prop: p, errMsg: 'should be a boolean or a number' };
754
+ }
755
+ })();
756
+ if (wrongValue) {
757
+ const { prop, errMsg } = wrongValue;
758
+ assertUsage(false, `Setting ${pc.cyan(`prerender.${prop}`)} ${errMsg}`);
759
+ }
760
+ }
@@ -13,4 +13,5 @@ export * from '../../utils/assertSetup.js';
13
13
  export * from '../../utils/pLimit.js';
14
14
  export * from '../../utils/isFilePathAbsoluteFilesystem.js';
15
15
  export * from '../../utils/isArray.js';
16
+ export * from '../../utils/isObject.js';
16
17
  export * from '../../utils/changeEnumerable.js';
@@ -15,4 +15,5 @@ export * from '../../utils/assertSetup.js';
15
15
  export * from '../../utils/pLimit.js';
16
16
  export * from '../../utils/isFilePathAbsoluteFilesystem.js';
17
17
  export * from '../../utils/isArray.js';
18
+ export * from '../../utils/isObject.js';
18
19
  export * from '../../utils/changeEnumerable.js';
@@ -12,40 +12,43 @@ 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';
22
+ import type { ConfigUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
21
23
  type GlobalContextPublic = {
22
24
  assetsManifest: null | ViteManifest;
23
25
  };
26
+ type PageRuntimeInfo = Awaited<ReturnType<typeof getPageRuntimeInfo>>['userFiles'];
24
27
  type GlobalContext = {
25
28
  baseServer: string;
26
29
  baseAssets: null | string;
27
30
  includeAssetsImportedByServer: boolean;
28
- redirects: Record<string, string>;
29
31
  trailingSlash: boolean;
30
32
  disableUrlNormalization: boolean;
31
- } & ({
33
+ vikeConfig: {
34
+ global: ConfigUserFriendly;
35
+ };
36
+ } & PageRuntimeInfo & ({
32
37
  isProduction: false;
33
38
  isPrerendering: false;
34
39
  viteConfig: ResolvedConfig;
35
- vikeConfig: VikeConfigObject;
36
40
  viteDevServer: ViteDevServer;
37
41
  assetsManifest: null;
38
- pluginManifest: null;
39
42
  } | ({
40
43
  isProduction: true;
41
44
  assetsManifest: ViteManifest;
42
- pluginManifest: PluginManifest;
43
45
  viteDevServer: null;
44
46
  } & ({
45
47
  isPrerendering: false;
46
48
  viteConfig: null;
47
49
  } | {
48
50
  isPrerendering: true;
51
+ usesClientRouter: boolean;
49
52
  viteConfig: ResolvedConfig;
50
53
  })));
51
54
  declare function getGlobalContext(): GlobalContext;
@@ -63,4 +66,17 @@ declare function getViteConfig(): ResolvedConfig | null;
63
66
  declare function initGlobalContext_renderPage(): Promise<void>;
64
67
  declare function initGlobalContext_runPrerender(): Promise<void>;
65
68
  declare function initGlobalContext_getGlobalContextAsync(isProduction: boolean): Promise<void>;
69
+ declare function getPageRuntimeInfo(isProduction: boolean): Promise<{
70
+ userFiles: {
71
+ pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
72
+ pageConfigs: import("../../__internal/index.js").PageConfig[];
73
+ pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
74
+ allPageIds: string[];
75
+ pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
76
+ onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
77
+ };
78
+ globalConfig: ConfigUserFriendly;
79
+ }>;
66
80
  declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
81
+ declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
82
+ declare function clearGlobalContext(): void;
@@ -14,23 +14,26 @@ 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 { getPageFilesAll, 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
+ import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
28
+ import { assertV1Design } from '../shared/assertV1Design.js';
29
+ const debug = createDebugger('vike:globalContext');
30
+ const globalObject = getGlobalObject('globalContext.ts', getInitialGlobalContext());
31
+ initDevEntry();
32
32
  function getGlobalContext() {
33
- assert(globalObject.globalContext);
33
+ if (!globalObject.globalContext) {
34
+ debug('getGlobalContext()', new Error().stack);
35
+ assert(false);
36
+ }
34
37
  return globalObject.globalContext;
35
38
  }
36
39
  /** @experimental https://vike.dev/getGlobalContext */
@@ -48,6 +51,7 @@ async function getGlobalContextAsync(isProduction) {
48
51
  }
49
52
  function makePublic(globalContext) {
50
53
  const globalContextPublic = {
54
+ // TODO/now: add viteConfig and vikeConfig
51
55
  assetsManifest: globalContext.assetsManifest
52
56
  };
53
57
  // Add internals (and prepended _ prefix to their keys)
@@ -109,9 +113,11 @@ function getViteConfig() {
109
113
  return globalObject.viteConfig ?? null;
110
114
  }
111
115
  async function initGlobalContext_renderPage() {
116
+ debug('initGlobalContext_renderPage()');
112
117
  await initGlobalContext(!globalObject.isViteDev);
113
118
  }
114
119
  async function initGlobalContext_runPrerender() {
120
+ debug('initGlobalContext_runPrerender()');
115
121
  if (globalObject.initGlobalContext_runPrerender_alreadyCalled)
116
122
  return;
117
123
  globalObject.initGlobalContext_runPrerender_alreadyCalled = true;
@@ -125,6 +131,7 @@ async function initGlobalContext_runPrerender() {
125
131
  await initGlobalContext(true);
126
132
  }
127
133
  async function initGlobalContext_getGlobalContextAsync(isProduction) {
134
+ debug('initGlobalContext_getGlobalContextAsync()');
128
135
  if (!isProduction) {
129
136
  const waitFor = 20;
130
137
  const timeout = setTimeout(() => {
@@ -138,6 +145,7 @@ async function initGlobalContext_getGlobalContextAsync(isProduction) {
138
145
  }
139
146
  await initGlobalContext(isProduction);
140
147
  }
148
+ // TODO/now: refactor: move this to the top of the file
141
149
  async function initGlobalContext(isProduction) {
142
150
  if (globalObject.globalContext) {
143
151
  assert(globalObject.globalContext.isProduction === isProduction);
@@ -152,41 +160,45 @@ async function initGlobalContext(isProduction) {
152
160
  assert(vikeConfig);
153
161
  assert(viteDevServer);
154
162
  assert(!isPrerendering);
155
- const vikeConfigGlobal = vikeConfig.vikeConfigGlobal;
156
- const pluginManifest = getRuntimeManifest(vikeConfigGlobal, viteConfig);
163
+ const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
164
+ const pluginManifest = getRuntimeManifest(vikeConfig.vikeConfigGlobal, viteConfig);
157
165
  globalObject.globalContext = {
158
166
  isProduction: false,
159
167
  isPrerendering: false,
160
168
  assetsManifest: null,
161
- pluginManifest: null,
162
169
  viteDevServer,
163
170
  viteConfig,
164
- vikeConfig,
171
+ vikeConfig: {
172
+ global: globalConfig
173
+ },
174
+ ...userFiles,
165
175
  baseServer: pluginManifest.baseServer,
166
176
  baseAssets: pluginManifest.baseAssets,
167
177
  includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
168
- redirects: pluginManifest.redirects,
169
178
  trailingSlash: pluginManifest.trailingSlash,
170
179
  disableUrlNormalization: pluginManifest.disableUrlNormalization
171
180
  };
172
181
  }
173
182
  else {
174
- const buildEntries = await loadImportBuild(globalObject.outDirRoot);
175
- assertBuildEntries(buildEntries, isPrerendering ?? false);
176
- const { pageFiles, assetsManifest, pluginManifest } = buildEntries;
177
- setPageFiles(pageFiles);
183
+ const buildEntry = await getBuildEntry(globalObject.outDirRoot, isPrerendering);
184
+ const { assetsManifest, pluginManifest } = buildEntry;
185
+ setPageFiles(buildEntry.pageFiles);
186
+ const { globalConfig, userFiles } = await getPageRuntimeInfo(isProduction);
178
187
  assertViteManifest(assetsManifest);
179
188
  assertPluginManifest(pluginManifest);
180
189
  const globalContext = {
181
190
  isProduction: true,
182
191
  assetsManifest,
183
- pluginManifest,
192
+ vikeConfig: {
193
+ global: globalConfig
194
+ },
195
+ ...userFiles,
184
196
  viteDevServer: null,
185
197
  baseServer: pluginManifest.baseServer,
186
198
  baseAssets: pluginManifest.baseAssets,
187
199
  includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
188
- redirects: pluginManifest.redirects,
189
200
  trailingSlash: pluginManifest.trailingSlash,
201
+ usesClientRouter: pluginManifest.usesClientRouter,
190
202
  disableUrlNormalization: pluginManifest.disableUrlNormalization
191
203
  };
192
204
  if (isPrerendering) {
@@ -206,29 +218,35 @@ async function initGlobalContext(isProduction) {
206
218
  }
207
219
  }
208
220
  }
221
+ async function getPageRuntimeInfo(isProduction) {
222
+ const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal, globalConfig } = await getPageFilesAll(false, isProduction);
223
+ const { pageRoutes, onBeforeRouteHook } = await loadPageRoutes(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
224
+ const userFiles = {
225
+ pageFilesAll,
226
+ pageConfigs,
227
+ pageConfigGlobal,
228
+ allPageIds,
229
+ pageRoutes,
230
+ onBeforeRouteHook
231
+ };
232
+ assertV1Design(
233
+ // pageConfigs is PageConfigRuntime[] but assertV1Design() requires PageConfigBuildTime[]
234
+ pageConfigs.length > 0, pageFilesAll);
235
+ return { userFiles, globalConfig };
236
+ }
209
237
  function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
210
- const { includeAssetsImportedByServer, redirects, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
238
+ const { includeAssetsImportedByServer, trailingSlash, disableUrlNormalization } = vikeConfigGlobal;
211
239
  const { baseServer, baseAssets } = resolveBaseFromResolvedConfig(vikeConfigGlobal.baseServer, vikeConfigGlobal.baseAssets, viteConfig);
212
240
  const manifest = {
213
241
  baseServer,
214
242
  baseAssets,
215
243
  includeAssetsImportedByServer,
216
- redirects,
217
244
  trailingSlash,
218
245
  disableUrlNormalization
219
246
  };
220
247
  assertRuntimeManifest(manifest);
221
248
  return manifest;
222
249
  }
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
250
  function assertViteManifest(manifest) {
233
251
  assert(isPlainObject(manifest));
234
252
  /* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
@@ -247,3 +265,59 @@ function eagerlyLoadUserFiles() {
247
265
  // We call it as early as possible here for better performance.
248
266
  getPageFilesExports();
249
267
  }
268
+ async function getBuildEntry(outDir, isPrerendering) {
269
+ debug('getBuildEntry()');
270
+ if (!globalObject.buildEntry) {
271
+ debug('importServerProductionEntry()');
272
+ // importServerProductionEntry() loads dist/server/entry.mjs which calls setGlobalContext_buildEntry()
273
+ await importServerProductionEntry({ outDir, doNotLoadServer: isPrerendering });
274
+ if (!globalObject.buildEntry) {
275
+ debug('globalObject.buildEntryPrevious');
276
+ // 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.)
277
+ globalObject.buildEntry = globalObject.buildEntryPrevious;
278
+ }
279
+ assert(globalObject.buildEntry);
280
+ }
281
+ const { buildEntry } = globalObject;
282
+ assert(isObject(buildEntry));
283
+ assert(hasProp(buildEntry, 'pageFiles', 'object'));
284
+ assert(hasProp(buildEntry, 'assetsManifest', 'object'));
285
+ assert(hasProp(buildEntry, 'pluginManifest', 'object'));
286
+ return buildEntry;
287
+ }
288
+ function setGlobalContext_buildEntry(buildEntry) {
289
+ debug('setGlobalContext_buildEntry()');
290
+ globalObject.buildEntry = buildEntry;
291
+ globalObject.buildEntryPrevious = buildEntry;
292
+ }
293
+ function initDevEntry() {
294
+ setPageFilesAsync(getPageFilesExports);
295
+ }
296
+ async function getPageFilesExports() {
297
+ const viteDevServer = getViteDevServer();
298
+ assert(viteDevServer);
299
+ let moduleExports;
300
+ try {
301
+ moduleExports = await viteDevServer.ssrLoadModule(virtualFileIdImportUserCodeServer);
302
+ }
303
+ catch (err) {
304
+ debugGlob(`Glob error: ${virtualFileIdImportUserCodeServer} transpile error: `, err);
305
+ throw err;
306
+ }
307
+ moduleExports = moduleExports.default || moduleExports;
308
+ debugGlob('Glob result: ', moduleExports);
309
+ assert(isObject(moduleExports));
310
+ return moduleExports;
311
+ }
312
+ function clearGlobalContext() {
313
+ debug('clearGlobalContext()');
314
+ objectReplace(globalObject, getInitialGlobalContext(), ['buildEntryPrevious']);
315
+ }
316
+ function getInitialGlobalContext() {
317
+ debug('getInitialGlobalContext()');
318
+ const { promise: viteDevServerPromise, resolve: viteDevServerPromiseResolve } = genPromise();
319
+ return {
320
+ viteDevServerPromise,
321
+ viteDevServerPromiseResolve
322
+ };
323
+ }
@@ -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';
@@ -6,4 +6,3 @@ export { getGlobalContextSync, getGlobalContextAsync } from './globalContext.js'
6
6
  export { createDevMiddleware } from '../runtime-dev/index.js';
7
7
  export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
8
8
  export { createPageRenderer } from '../createPageRenderer.js';
9
- import './page-files/setup.js';