vike 0.4.228 → 0.4.229-commit-a19745d

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 (248) hide show
  1. package/dist/cjs/__internal/index.js +2 -2
  2. package/dist/cjs/client/client-routing-runtime/globalContext.js +49 -0
  3. package/dist/cjs/client/server-routing-runtime/globalContext.js +41 -0
  4. package/dist/cjs/client/server-routing-runtime/utils.js +1 -1
  5. package/dist/cjs/client/shared/createGetGlobalContextClient.js +58 -0
  6. package/dist/cjs/client/shared/getJsonSerializedInHtml.js +31 -0
  7. package/dist/cjs/client/shared/utils.js +22 -0
  8. package/dist/cjs/node/plugin/index.js +3 -1
  9. package/dist/cjs/node/plugin/plugins/baseUrls.js +1 -1
  10. package/dist/cjs/node/plugin/plugins/build/handleAssetsManifest.js +10 -5
  11. package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +1 -1
  12. package/dist/cjs/node/plugin/plugins/build/pluginBuildConfig.js +3 -10
  13. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +9 -5
  14. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +9 -5
  15. package/dist/cjs/node/plugin/plugins/commonConfig/assertResolveAlias.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/commonConfig.js +14 -3
  17. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +2 -7
  18. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -1
  19. package/dist/cjs/node/plugin/plugins/envVars.js +17 -19
  20. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -1
  21. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +11 -0
  22. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +2 -0
  23. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +1 -1
  24. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +2 -2
  25. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.js → pointerImports.js} +13 -0
  26. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +20 -19
  27. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +15 -12
  28. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +11 -11
  29. package/dist/cjs/node/plugin/plugins/replaceConstants.js +76 -0
  30. package/dist/cjs/node/plugin/shared/applyRegExWithMagicString.js +10 -0
  31. package/dist/cjs/node/plugin/shared/findPageFiles.js +1 -1
  32. package/dist/cjs/node/plugin/shared/getFilePath.js +2 -2
  33. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +8 -20
  34. package/dist/cjs/node/plugin/utils.js +1 -0
  35. package/dist/cjs/node/prerender/runPrerender.js +44 -41
  36. package/dist/cjs/node/prerender/utils.js +1 -1
  37. package/dist/cjs/node/runtime/globalContext.js +102 -125
  38. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  39. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  40. package/dist/cjs/node/runtime/html/propKeys.js +47 -0
  41. package/dist/cjs/node/runtime/html/renderHtml.js +13 -3
  42. package/dist/cjs/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +37 -67
  43. package/dist/cjs/node/runtime/index-deprecated.js +9 -38
  44. package/dist/cjs/node/runtime/index.js +56 -2
  45. package/dist/cjs/node/runtime/renderPage/analyzePage.js +1 -1
  46. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +8 -3
  47. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +73 -0
  48. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +2 -2
  49. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +2 -2
  50. package/dist/cjs/node/runtime/renderPage/getPageAssets/getManifestEntry.js +1 -1
  51. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  52. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +1 -1
  53. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +3 -3
  54. package/dist/cjs/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  55. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  56. package/dist/cjs/node/runtime/renderPage/log404/index.js +1 -1
  57. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +1 -1
  58. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -68
  59. package/dist/cjs/node/runtime/renderPage.js +102 -81
  60. package/dist/cjs/node/runtime/universal-middleware.js +7 -1
  61. package/dist/cjs/node/runtime/utils.js +3 -2
  62. package/dist/cjs/shared/assertPageContextProvidedByUser.js +1 -1
  63. package/dist/cjs/shared/createGlobalContextShared.js +54 -0
  64. package/dist/cjs/shared/createPageContextShared.js +17 -0
  65. package/dist/cjs/shared/getPageFiles/fileTypes.js +1 -1
  66. package/dist/cjs/shared/hooks/executeHookGeneric.js +18 -0
  67. package/dist/cjs/shared/hooks/getHook.js +45 -27
  68. package/dist/cjs/shared/htmlElementIds.js +5 -0
  69. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +3 -7
  70. package/dist/cjs/shared/route/executeGuardHook.js +1 -1
  71. package/dist/cjs/shared/route/loadPageRoutes.js +2 -1
  72. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  73. package/dist/cjs/utils/catchInfiniteLoop.js +3 -3
  74. package/dist/cjs/utils/debug.js +1 -0
  75. package/dist/cjs/utils/getPublicProxy.js +27 -0
  76. package/dist/cjs/utils/isImportPath.js +21 -0
  77. package/dist/cjs/utils/isScriptFile.js +24 -21
  78. package/dist/cjs/utils/objectAssign.js +6 -10
  79. package/dist/cjs/utils/objectReplace.js +4 -4
  80. package/dist/cjs/utils/{isNpmPackage.js → parseNpmPackage.js} +24 -23
  81. package/dist/cjs/utils/path.js +12 -2
  82. package/dist/cjs/utils/requireResolve.js +148 -53
  83. package/dist/esm/__internal/index.js +3 -3
  84. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +29 -10
  85. package/dist/esm/client/client-routing-runtime/createPageContext.js +23 -22
  86. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +5 -4
  87. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +20 -0
  88. package/dist/esm/client/client-routing-runtime/globalContext.js +13 -0
  89. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +2 -2
  90. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  91. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +8 -7
  92. package/dist/esm/client/client-routing-runtime/utils.d.ts +0 -1
  93. package/dist/esm/client/client-routing-runtime/utils.js +0 -1
  94. package/dist/esm/client/index.d.ts +1 -0
  95. package/dist/esm/client/index.js +4 -0
  96. package/dist/esm/client/node.js +1 -3
  97. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +36 -0
  98. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +47 -0
  99. package/dist/esm/client/server-routing-runtime/entry.js +2 -2
  100. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +17 -0
  101. package/dist/esm/client/server-routing-runtime/globalContext.js +5 -0
  102. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -1
  103. package/dist/esm/client/server-routing-runtime/utils.js +1 -1
  104. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +23 -0
  105. package/dist/esm/client/shared/createGetGlobalContextClient.js +58 -0
  106. package/dist/esm/client/shared/executeOnRenderClientHook.js +5 -4
  107. package/dist/esm/client/shared/{getPageContextSerializedInHtml.d.ts → getJsonSerializedInHtml.d.ts} +2 -0
  108. package/dist/esm/client/shared/getJsonSerializedInHtml.js +29 -0
  109. package/dist/esm/client/shared/removeFoucBuster.js +1 -0
  110. package/dist/esm/client/shared/utils.d.ts +4 -0
  111. package/dist/esm/client/shared/utils.js +4 -0
  112. package/dist/esm/node/plugin/index.js +3 -1
  113. package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
  114. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.js +11 -6
  115. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +2 -2
  116. package/dist/esm/node/plugin/plugins/build/pluginBuildConfig.js +4 -11
  117. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +1 -1
  118. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +10 -6
  119. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +9 -5
  120. package/dist/esm/node/plugin/plugins/commonConfig/assertResolveAlias.js +2 -2
  121. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +2 -0
  122. package/dist/esm/node/plugin/plugins/commonConfig.js +15 -4
  123. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +3 -8
  124. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +7 -2
  125. package/dist/esm/node/plugin/plugins/envVars.js +18 -20
  126. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +4 -2
  127. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +11 -0
  128. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -1
  129. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +2 -0
  130. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +2 -2
  131. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +1 -1
  132. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.d.ts → pointerImports.d.ts} +2 -0
  133. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.js → pointerImports.js} +14 -1
  134. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.d.ts +1 -1
  135. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +20 -19
  136. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +15 -12
  137. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +11 -11
  138. package/dist/esm/node/plugin/plugins/replaceConstants.d.ts +3 -0
  139. package/dist/esm/node/plugin/plugins/replaceConstants.js +71 -0
  140. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.d.ts +3 -0
  141. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.js +8 -0
  142. package/dist/esm/node/plugin/shared/findPageFiles.js +2 -2
  143. package/dist/esm/node/plugin/shared/getFilePath.js +3 -3
  144. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.d.ts +1 -1
  145. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +9 -21
  146. package/dist/esm/node/plugin/utils.d.ts +1 -0
  147. package/dist/esm/node/plugin/utils.js +1 -0
  148. package/dist/esm/node/prerender/runPrerender.d.ts +314 -5
  149. package/dist/esm/node/prerender/runPrerender.js +48 -45
  150. package/dist/esm/node/prerender/utils.d.ts +1 -1
  151. package/dist/esm/node/prerender/utils.js +1 -1
  152. package/dist/esm/node/runtime/globalContext.d.ts +425 -47
  153. package/dist/esm/node/runtime/globalContext.js +103 -126
  154. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  155. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.d.ts +2 -2
  156. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  157. package/dist/esm/node/runtime/html/injectAssets.d.ts +3 -3
  158. package/dist/esm/node/runtime/html/propKeys.d.ts +8 -0
  159. package/dist/esm/node/runtime/html/propKeys.js +45 -0
  160. package/dist/esm/node/runtime/html/renderHtml.js +13 -3
  161. package/dist/esm/node/runtime/html/{serializePageContextClientSide.d.ts → serializeContext.d.ts} +7 -6
  162. package/dist/esm/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +36 -67
  163. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -16
  164. package/dist/esm/node/runtime/index-deprecated.js +9 -36
  165. package/dist/esm/node/runtime/index.d.ts +23 -1
  166. package/dist/esm/node/runtime/index.js +38 -3
  167. package/dist/esm/node/runtime/renderPage/analyzePage.d.ts +2 -2
  168. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  169. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +5 -4
  170. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +8 -3
  171. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +155 -0
  172. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +71 -0
  173. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +3 -3
  174. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +1 -1
  175. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +3 -3
  176. package/dist/esm/node/runtime/renderPage/getPageAssets/getManifestEntry.js +2 -2
  177. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  178. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +2 -2
  179. package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +2 -2
  180. package/dist/esm/node/runtime/renderPage/getPageAssets.js +3 -3
  181. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.d.ts +2 -2
  182. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  183. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +2 -2
  184. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  185. package/dist/esm/node/runtime/renderPage/log404/index.d.ts +2 -2
  186. package/dist/esm/node/runtime/renderPage/log404/index.js +1 -1
  187. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +3 -3
  188. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +1 -1
  189. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +225 -179
  190. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +4 -69
  191. package/dist/esm/node/runtime/renderPage.d.ts +146 -7
  192. package/dist/esm/node/runtime/renderPage.js +105 -84
  193. package/dist/esm/node/runtime/universal-middleware.js +7 -1
  194. package/dist/esm/node/runtime/utils.d.ts +3 -2
  195. package/dist/esm/node/runtime/utils.js +3 -2
  196. package/dist/esm/shared/VikeNamespace.d.ts +35 -13
  197. package/dist/esm/shared/assertPageContextProvidedByUser.js +1 -1
  198. package/dist/esm/shared/createGlobalContextShared.d.ts +39 -0
  199. package/dist/esm/shared/createGlobalContextShared.js +51 -0
  200. package/dist/esm/shared/createPageContextShared.d.ts +9 -0
  201. package/dist/esm/shared/createPageContextShared.js +15 -0
  202. package/dist/esm/shared/getPageFiles/fileTypes.js +1 -1
  203. package/dist/esm/shared/hooks/executeHookGeneric.d.ts +8 -0
  204. package/dist/esm/shared/hooks/executeHookGeneric.js +16 -0
  205. package/dist/esm/shared/hooks/getHook.d.ts +5 -3
  206. package/dist/esm/shared/hooks/getHook.js +47 -29
  207. package/dist/esm/shared/htmlElementIds.d.ts +2 -0
  208. package/dist/esm/shared/htmlElementIds.js +2 -0
  209. package/dist/esm/shared/page-configs/Config.d.ts +12 -2
  210. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +1 -1
  211. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +3 -7
  212. package/dist/esm/shared/route/executeGuardHook.js +2 -2
  213. package/dist/esm/shared/route/loadPageRoutes.js +2 -1
  214. package/dist/esm/shared/types.d.ts +64 -32
  215. package/dist/esm/types/index.d.ts +1 -5
  216. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  217. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  218. package/dist/esm/utils/catchInfiniteLoop.js +4 -4
  219. package/dist/esm/utils/debug.d.ts +1 -1
  220. package/dist/esm/utils/debug.js +1 -0
  221. package/dist/esm/utils/getGlobalObject.d.ts +1 -1
  222. package/dist/esm/utils/getPublicProxy.d.ts +2 -0
  223. package/dist/esm/utils/getPublicProxy.js +25 -0
  224. package/dist/esm/utils/isImportPath.d.ts +4 -0
  225. package/dist/esm/utils/isImportPath.js +19 -0
  226. package/dist/esm/utils/isScriptFile.d.ts +5 -5
  227. package/dist/esm/utils/isScriptFile.js +23 -20
  228. package/dist/esm/utils/objectAssign.d.ts +1 -1
  229. package/dist/esm/utils/objectAssign.js +6 -10
  230. package/dist/esm/utils/objectReplace.d.ts +1 -1
  231. package/dist/esm/utils/objectReplace.js +4 -4
  232. package/dist/esm/utils/parseNpmPackage.d.ts +19 -0
  233. package/dist/esm/utils/{isNpmPackage.js → parseNpmPackage.js} +24 -24
  234. package/dist/esm/utils/path.d.ts +1 -1
  235. package/dist/esm/utils/path.js +12 -2
  236. package/dist/esm/utils/requireResolve.d.ts +20 -7
  237. package/dist/esm/utils/requireResolve.js +148 -53
  238. package/package.json +14 -13
  239. package/dist/cjs/node/runtime/index-common.js +0 -27
  240. package/dist/cjs/utils/makePublicCopy.js +0 -32
  241. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +0 -19
  242. package/dist/esm/client/server-routing-runtime/getPageContext.js +0 -44
  243. package/dist/esm/client/shared/getPageContextSerializedInHtml.js +0 -20
  244. package/dist/esm/node/runtime/index-common.d.ts +0 -8
  245. package/dist/esm/node/runtime/index-common.js +0 -10
  246. package/dist/esm/utils/isNpmPackage.d.ts +0 -17
  247. package/dist/esm/utils/makePublicCopy.d.ts +0 -3
  248. package/dist/esm/utils/makePublicCopy.js +0 -30
@@ -44,6 +44,7 @@ const path_1 = __importDefault(require("path"));
44
44
  const index_js_1 = require("../../shared/route/index.js");
45
45
  const utils_js_1 = require("./utils.js");
46
46
  const renderPageAlreadyRouted_js_1 = require("../runtime/renderPage/renderPageAlreadyRouted.js");
47
+ const createPageContextServerSide_js_1 = require("../runtime/renderPage/createPageContextServerSide.js");
47
48
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
48
49
  const os_1 = require("os");
49
50
  const globalContext_js_1 = require("../runtime/globalContext.js");
@@ -114,7 +115,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
114
115
  await disableReactStreaming();
115
116
  const viteConfig = await (0, vite_1.resolveConfig)(options.viteConfig || {}, 'build', 'production');
116
117
  const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig)(viteConfig);
117
- const vike = (0, commonConfig_js_1.getVikeConfigPublic)(viteConfig);
118
+ const vike = (0, commonConfig_js_1.getVikeConfigInternal)(viteConfig);
118
119
  const { outDirClient, outDirServer } = (0, getOutDirs_js_1.getOutDirs)(viteConfig);
119
120
  const { root } = viteConfig;
120
121
  const prerenderConfigGlobal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(vikeConfig);
@@ -131,26 +132,26 @@ async function runPrerender(options = {}, standaloneTrigger) {
131
132
  }
132
133
  const concurrencyLimit = (0, utils_js_1.pLimit)(parallel === false || parallel === 0 ? 1 : parallel === true || parallel === undefined ? (0, os_1.cpus)().length : parallel);
133
134
  await (0, globalContext_js_1.initGlobalContext_runPrerender)();
134
- const globalContext = await (0, globalContext_js_1.getGlobalContextInternal)();
135
- globalContext.pageFilesAll.forEach(assertExportNames);
135
+ const { globalContext, globalContext_public } = await (0, globalContext_js_1.getGlobalContextServerInternal)();
136
+ globalContext._pageFilesAll.forEach(assertExportNames);
136
137
  const prerenderContext = {
137
- noExtraDir,
138
138
  pageContexts: [],
139
- pageContextInit: options.pageContextInit ?? null,
140
- prerenderedPageContexts: {},
141
- output: []
139
+ output: [],
140
+ _noExtraDir: noExtraDir,
141
+ _pageContextInit: options.pageContextInit ?? null,
142
+ _prerenderedPageContexts: {}
142
143
  };
143
144
  const doNotPrerenderList = [];
144
145
  await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, defaultLocalValue, concurrencyLimit, globalContext);
145
146
  // Allow user to create `pageContext` for parameterized routes and/or bulk data fetching
146
147
  // https://vike.dev/onBeforePrerenderStart
147
- await callOnBeforePrerenderStartHooks(prerenderContext, globalContext, concurrencyLimit, doNotPrerenderList);
148
+ await callOnBeforePrerenderStartHooks(prerenderContext, globalContext, globalContext_public, concurrencyLimit, doNotPrerenderList);
148
149
  // Create `pageContext` for each page with a static route
149
150
  const urlList = getUrlListFromPagesWithStaticRoute(globalContext, doNotPrerenderList);
150
- await createPageContextsForOnPrerenderStartHook(urlList, prerenderContext, globalContext, concurrencyLimit, false);
151
+ await createPageContexts(urlList, prerenderContext, globalContext, globalContext_public, concurrencyLimit, false);
151
152
  // Create `pageContext` for 404 page
152
153
  const urlList404 = getUrlList404(globalContext);
153
- await createPageContextsForOnPrerenderStartHook(urlList404, prerenderContext, globalContext, concurrencyLimit, true);
154
+ await createPageContexts(urlList404, prerenderContext, globalContext, globalContext_public, concurrencyLimit, true);
154
155
  // Allow user to duplicate the list of `pageContext` for i18n
155
156
  // https://vike.dev/onPrerenderStart
156
157
  await callOnPrerenderStartHook(prerenderContext, globalContext, concurrencyLimit);
@@ -160,15 +161,15 @@ async function runPrerender(options = {}, standaloneTrigger) {
160
161
  prerenderedCount++;
161
162
  const { pageId } = htmlFile.pageContext;
162
163
  (0, utils_js_1.assert)(pageId);
163
- prerenderContext.prerenderedPageContexts[pageId] = htmlFile.pageContext;
164
+ prerenderContext._prerenderedPageContexts[pageId] = htmlFile.pageContext;
164
165
  await writeFiles(htmlFile, root, outDirClient, options.onPagePrerender, prerenderContext.output, logLevel);
165
166
  };
166
167
  await prerenderPages(prerenderContext, concurrencyLimit, onComplete);
167
- warnContradictoryNoPrerenderList(prerenderContext.prerenderedPageContexts, doNotPrerenderList);
168
+ warnContradictoryNoPrerenderList(prerenderContext._prerenderedPageContexts, doNotPrerenderList);
168
169
  if (logLevel === 'info') {
169
170
  console.log(`${picocolors_1.default.green(`✓`)} ${prerenderedCount} HTML documents pre-rendered.`);
170
171
  }
171
- await warnMissingPages(prerenderContext.prerenderedPageContexts, globalContext, doNotPrerenderList, partial);
172
+ await warnMissingPages(prerenderContext._prerenderedPageContexts, globalContext, doNotPrerenderList, partial);
172
173
  const prerenderContextPublic = makePublic(prerenderContext);
173
174
  (0, utils_js_1.objectAssign)(vike.prerenderContext, prerenderContextPublic);
174
175
  if (prerenderConfigGlobal.isPrerenderingEnabledForAllPages && !prerenderConfigGlobal.keepDistServer) {
@@ -195,7 +196,7 @@ async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, default
195
196
  });
196
197
  // Old design
197
198
  // TODO/v1-release: remove
198
- await Promise.all(globalContext.pageFilesAll
199
+ await Promise.all(globalContext._pageFilesAll
199
200
  .filter((p) => {
200
201
  assertExportNames(p);
201
202
  if (!p.exportNames?.includes('doNotPrerender'))
@@ -207,8 +208,8 @@ async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, default
207
208
  (0, utils_js_1.assert)(p.loadFile);
208
209
  await p.loadFile();
209
210
  })));
210
- globalContext.allPageIds.forEach((pageId) => {
211
- const pageFilesServerSide = (0, getPageFiles_js_1.getPageFilesServerSide)(globalContext.pageFilesAll, pageId);
211
+ globalContext._allPageIds.forEach((pageId) => {
212
+ const pageFilesServerSide = (0, getPageFiles_js_1.getPageFilesServerSide)(globalContext._pageFilesAll, pageId);
212
213
  for (const p of pageFilesServerSide) {
213
214
  if (!p.exportNames?.includes('doNotPrerender'))
214
215
  continue;
@@ -232,10 +233,10 @@ function assertExportNames(pageFile) {
232
233
  const { exportNames, fileType } = pageFile;
233
234
  (0, utils_js_1.assert)(exportNames || fileType === '.page.route' || fileType === '.css', pageFile.filePath);
234
235
  }
235
- async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext, concurrencyLimit, doNotPrerenderList) {
236
+ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext, globalContext_public, concurrencyLimit, doNotPrerenderList) {
236
237
  const onBeforePrerenderStartHooks = [];
237
238
  // V1 design
238
- await Promise.all(globalContext.pageConfigs.map((pageConfig) => concurrencyLimit(async () => {
239
+ await Promise.all(globalContext._pageConfigs.map((pageConfig) => concurrencyLimit(async () => {
239
240
  const hookName = 'onBeforePrerenderStart';
240
241
  const pageConfigLoaded = await (0, loadConfigValues_js_1.loadConfigValues)(pageConfig, false);
241
242
  const hook = (0, getHook_js_1.getHookFromPageConfig)(pageConfigLoaded, hookName);
@@ -251,7 +252,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext,
251
252
  });
252
253
  })));
253
254
  // 0.4 design
254
- await Promise.all(globalContext.pageFilesAll
255
+ await Promise.all(globalContext._pageFilesAll
255
256
  .filter((p) => {
256
257
  assertExportNames(p);
257
258
  if (!p.exportNames?.includes('prerender'))
@@ -295,7 +296,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext,
295
296
  }
296
297
  // Add result
297
298
  const providedByHook = { hookFilePath, hookName };
298
- const pageContextNew = await createPageContext(url, prerenderContext, globalContext, false, undefined, providedByHook);
299
+ const pageContextNew = await createPageContextPrerendering(url, prerenderContext, globalContext, globalContext_public, false, undefined, providedByHook);
299
300
  prerenderContext.pageContexts.push(pageContextNew);
300
301
  if (pageContext) {
301
302
  (0, utils_js_1.objectAssign)(pageContextNew, { _pageContextAlreadyProvidedByOnPrerenderHook: true });
@@ -306,7 +307,7 @@ async function callOnBeforePrerenderStartHooks(prerenderContext, globalContext,
306
307
  }
307
308
  function getUrlListFromPagesWithStaticRoute(globalContext, doNotPrerenderList) {
308
309
  const urlList = [];
309
- globalContext.pageRoutes.map((pageRoute) => {
310
+ globalContext._pageRoutes.map((pageRoute) => {
310
311
  const { pageId } = pageRoute;
311
312
  if (doNotPrerenderList.find((p) => p.pageId === pageId))
312
313
  return;
@@ -331,7 +332,7 @@ function getUrlListFromPagesWithStaticRoute(globalContext, doNotPrerenderList) {
331
332
  }
332
333
  function getUrlList404(globalContext) {
333
334
  const urlList = [];
334
- const errorPageId = (0, error_page_js_1.getErrorPageId)(globalContext.pageFilesAll, globalContext.pageConfigs);
335
+ const errorPageId = (0, error_page_js_1.getErrorPageId)(globalContext._pageFilesAll, globalContext._pageConfigs);
335
336
  if (errorPageId) {
336
337
  urlList.push({
337
338
  // A URL is required for `viteDevServer.transformIndexHtml(url,html)`
@@ -341,28 +342,30 @@ function getUrlList404(globalContext) {
341
342
  }
342
343
  return urlList;
343
344
  }
344
- async function createPageContextsForOnPrerenderStartHook(urlList, prerenderContext, globalContext, concurrencyLimit, is404) {
345
+ async function createPageContexts(urlList, prerenderContext, globalContext, globalContext_public, concurrencyLimit, is404) {
345
346
  await Promise.all(urlList.map(({ urlOriginal, pageId }) => concurrencyLimit(async () => {
346
347
  // Already included in a onBeforePrerenderStart() hook
347
348
  if (prerenderContext.pageContexts.find((pageContext) => isSameUrl(pageContext.urlOriginal, urlOriginal))) {
348
349
  return;
349
350
  }
350
- const pageContext = await createPageContext(urlOriginal, prerenderContext, globalContext, is404, pageId, null);
351
+ const pageContext = await createPageContextPrerendering(urlOriginal, prerenderContext, globalContext, globalContext_public, is404, pageId, null);
351
352
  prerenderContext.pageContexts.push(pageContext);
352
353
  })));
353
354
  }
354
- async function createPageContext(urlOriginal, prerenderContext, globalContext, is404, pageId, providedByHook) {
355
+ async function createPageContextPrerendering(urlOriginal, prerenderContext, globalContext, globalContext_public, is404, pageId, providedByHook) {
355
356
  const pageContextInit = {
356
357
  urlOriginal,
357
- ...prerenderContext.pageContextInit
358
+ ...prerenderContext._pageContextInit
358
359
  };
359
- const pageContext = await (0, renderPageAlreadyRouted_js_1.getPageContextInitEnhanced)(pageContextInit, globalContext, true);
360
+ const pageContext = await (0, createPageContextServerSide_js_1.createPageContextServerSide)(pageContextInit, globalContext, globalContext_public, {
361
+ isPrerendering: true
362
+ });
360
363
  (0, utils_js_1.assert)(pageContext.isPrerendering === true);
361
364
  (0, utils_js_1.objectAssign)(pageContext, {
362
365
  _urlHandler: null,
363
366
  _httpRequestId: null,
364
367
  _urlRewrite: null,
365
- _noExtraDir: prerenderContext.noExtraDir,
368
+ _noExtraDir: prerenderContext._noExtraDir,
366
369
  _prerenderContext: prerenderContext,
367
370
  _providedByHook: providedByHook,
368
371
  _urlOriginalModifiedByHook: null,
@@ -388,14 +391,14 @@ async function createPageContext(urlOriginal, prerenderContext, globalContext, i
388
391
  {
389
392
  const { pageId } = pageContext;
390
393
  (0, utils_js_1.assert)(pageId);
391
- (0, utils_js_1.assert)(globalContext.isPrerendering);
392
- if (globalContext.pageConfigs.length > 0) {
393
- const pageConfig = globalContext.pageConfigs.find((p) => p.pageId === pageId);
394
+ (0, utils_js_1.assert)(globalContext._isPrerendering);
395
+ if (globalContext._pageConfigs.length > 0) {
396
+ const pageConfig = globalContext._pageConfigs.find((p) => p.pageId === pageId);
394
397
  (0, utils_js_1.assert)(pageConfig);
395
398
  usesClientRouter = (0, getConfigValueRuntime_js_1.getConfigValueRuntime)(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
396
399
  }
397
400
  else {
398
- usesClientRouter = globalContext.usesClientRouter;
401
+ usesClientRouter = globalContext._usesClientRouter;
399
402
  }
400
403
  }
401
404
  (0, utils_js_1.objectAssign)(pageContext, { _usesClientRouter: usesClientRouter });
@@ -432,9 +435,9 @@ function assertRouteMatch(pageContextFromRoute, pageContext) {
432
435
  async function callOnPrerenderStartHook(prerenderContext, globalContext, concurrencyLimit) {
433
436
  let onPrerenderStartHook;
434
437
  // V1 design
435
- if (globalContext.pageConfigs.length > 0) {
438
+ if (globalContext._pageConfigs.length > 0) {
436
439
  const hookName = 'onPrerenderStart';
437
- const hook = (0, getHook_js_1.getHookFromPageConfigGlobal)(globalContext.pageConfigGlobal, hookName);
440
+ const hook = (0, getHook_js_1.getHookFromPageConfigGlobal)(globalContext._pageConfigGlobal, hookName);
438
441
  if (hook) {
439
442
  (0, utils_js_1.assert)(hook.hookName === 'onPrerenderStart');
440
443
  onPrerenderStartHook = {
@@ -446,9 +449,9 @@ async function callOnPrerenderStartHook(prerenderContext, globalContext, concurr
446
449
  }
447
450
  // Old design
448
451
  // TODO/v1-release: remove
449
- if (globalContext.pageConfigs.length === 0) {
452
+ if (globalContext._pageConfigs.length === 0) {
450
453
  const hookTimeout = (0, getHook_js_1.getHookTimeoutDefault)('onBeforePrerender');
451
- const pageFilesWithOnBeforePrerenderHook = globalContext.pageFilesAll.filter((p) => {
454
+ const pageFilesWithOnBeforePrerenderHook = globalContext._pageFilesAll.filter((p) => {
452
455
  assertExportNames(p);
453
456
  if (!p.exportNames?.includes('onBeforePrerender'))
454
457
  return false;
@@ -588,7 +591,7 @@ async function prerenderPages(prerenderContext, concurrencyLimit, onComplete) {
588
591
  pageContext,
589
592
  htmlString: documentHtml,
590
593
  pageContextSerialized,
591
- doNotCreateExtraDirectory: prerenderContext.noExtraDir ?? pageContext.is404
594
+ doNotCreateExtraDirectory: prerenderContext._noExtraDir ?? pageContext.is404
592
595
  });
593
596
  })));
594
597
  }
@@ -605,16 +608,16 @@ function warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerende
605
608
  });
606
609
  }
607
610
  async function warnMissingPages(prerenderedPageContexts, globalContext, doNotPrerenderList, partial) {
608
- const isV1 = globalContext.pageConfigs.length > 0;
611
+ const isV1 = globalContext._pageConfigs.length > 0;
609
612
  const hookName = isV1 ? 'onBeforePrerenderStart' : 'prerender';
610
613
  /* TODO/after-v1-design-release: document setting `prerender: false` as an alternative to using prerender.partial (both in the warnings and the docs)
611
614
  const optOutName = isV1 ? 'prerender' : 'doNotPrerender'
612
615
  const msgAddendum = `Explicitly opt-out by setting the config ${optOutName} to ${isV1 ? 'false' : 'true'} or use the option prerender.partial`
613
616
  */
614
- globalContext.allPageIds
617
+ globalContext._allPageIds
615
618
  .filter((pageId) => !prerenderedPageContexts[pageId])
616
619
  .filter((pageId) => !doNotPrerenderList.find((p) => p.pageId === pageId))
617
- .filter((pageId) => !(0, error_page_js_1.isErrorPage)(pageId, globalContext.pageConfigs))
620
+ .filter((pageId) => !(0, error_page_js_1.isErrorPage)(pageId, globalContext._pageConfigs))
618
621
  .forEach((pageId) => {
619
622
  const pageAt = isV1 ? pageId : `\`${pageId}.page.*\``;
620
623
  (0, utils_js_1.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 });
@@ -767,7 +770,7 @@ function assertIsNotAbort(err, urlOriginal) {
767
770
  (0, utils_js_1.assertUsage)(false, `${picocolors_1.default.cyan(abortCall)} thrown${thrownBy} while pre-rendering ${urlOriginal} but ${picocolors_1.default.cyan(abortCaller)} isn't supported for pre-rendered pages`);
768
771
  }
769
772
  function makePublic(prerenderContext) {
770
- const prerenderContextPublic = (0, utils_js_1.makePublicCopy)(prerenderContext, 'prerenderContext', [
773
+ const prerenderContextPublic = (0, utils_js_1.getPublicProxy)(prerenderContext, 'prerenderContext', [
771
774
  'output', // vite-plugin-vercel
772
775
  'pageContexts' // https://vike.dev/i18n#pre-rendering
773
776
  ]);
@@ -31,6 +31,6 @@ __exportStar(require("../../utils/pLimit.js"), exports);
31
31
  __exportStar(require("../../utils/isFilePathAbsoluteFilesystem.js"), exports);
32
32
  __exportStar(require("../../utils/isArray.js"), exports);
33
33
  __exportStar(require("../../utils/isObject.js"), exports);
34
- __exportStar(require("../../utils/makePublicCopy.js"), exports);
34
+ __exportStar(require("../../utils/getPublicProxy.js"), exports);
35
35
  __exportStar(require("../../utils/isNullish.js"), exports);
36
36
  __exportStar(require("../../utils/preservePropertyGetters.js"), exports);
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getGlobalContext = getGlobalContext;
7
7
  exports.getGlobalContextSync = getGlobalContextSync;
8
8
  exports.getGlobalContextAsync = getGlobalContextAsync;
9
- exports.getGlobalContextInternal = getGlobalContextInternal;
9
+ exports.getGlobalContextServerInternal = getGlobalContextServerInternal;
10
10
  exports.getViteDevServer = getViteDevServer;
11
11
  exports.getViteConfig = getViteConfig;
12
12
  exports.initGlobalContext_renderPage = initGlobalContext_renderPage;
@@ -21,32 +21,36 @@ exports.clearGlobalContext = clearGlobalContext;
21
21
  exports.assertBuildInfo = assertBuildInfo;
22
22
  exports.updateUserFiles = updateUserFiles;
23
23
  // The core logic revolves around:
24
- // - globalObject.userFiles which is the main requirement for resolveGlobalContext()
24
+ // - virtualFileExports is the main requirement
25
25
  // - In production: globalObject.buildEntry which is the production entry set by @brillout/vite-plugin-server-entry
26
- // - loadBuildEntry() sets globalObject.buildEntry and then sets globalObject.userFiles
26
+ // - loadBuildEntry() sets globalObject.buildEntry and then sets virtualFileExports
27
27
  // - With vike-server it's set at server start: @brillout/vite-plugin-server-entry injects `import './entry.mjs'` (the production entry generated by @brillout/vite-plugin-server-entry) as first line of code of dist/server/index.mjs while dist/server/entry.mjs calls setGlobalContext_buildEntry()
28
28
  // - Without vike-server it's manually loaded here using importServerProductionEntry() which uses @brillout/vite-plugin-server-entry's autoImporter or crawler
29
29
  // - In development: globalObject.viteDevServer which is Vite's development server
30
- // - globalObject.viteDevServer is used by updateUserFiles() which then sets globalConfig.userFiles
30
+ // - globalObject.viteDevServer is used by updateUserFiles() which then sets virtualFileExports
31
31
  const utils_js_1 = require("./utils.js");
32
32
  const runtime_1 = require("@brillout/vite-plugin-server-entry/runtime");
33
33
  const virtualFileImportUserCode_js_1 = require("../shared/virtual-files/virtualFileImportUserCode.js");
34
34
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
35
35
  const loadPageRoutes_js_1 = require("../../shared/route/loadPageRoutes.js");
36
36
  const assertV1Design_js_1 = require("../shared/assertV1Design.js");
37
- const getPageConfigsRuntime_js_1 = require("../../shared/getPageConfigsRuntime.js");
38
37
  const resolveBase_js_1 = require("../shared/resolveBase.js");
38
+ const createGlobalContextShared_js_1 = require("../../shared/createGlobalContextShared.js");
39
39
  const debug = (0, utils_js_1.createDebugger)('vike:globalContext');
40
40
  const globalObject = (0, utils_js_1.getGlobalObject)('runtime/globalContext.ts', getInitialGlobalContext());
41
- async function getGlobalContextInternal() {
42
- // getGlobalContextInternal() should always be called after initGlobalContext()
41
+ // Trick to break down TypeScript circular dependency
42
+ // https://chat.deepseek.com/a/chat/s/d7e9f90a-c7f3-4108-9cd5-4ad6caed3539
43
+ const globalObjectTyped = globalObject;
44
+ async function getGlobalContextServerInternal() {
45
+ // getGlobalContextServerInternal() should always be called after initGlobalContext()
43
46
  (0, utils_js_1.assert)(globalObject.isInitialized);
44
47
  assertGlobalContextIsDefined();
45
48
  if (globalObject.isProduction !== true)
46
49
  await globalObject.waitForUserFilesUpdate;
47
- const { globalContext } = globalObject;
50
+ const { globalContext, globalContext_public } = globalObjectTyped;
48
51
  assertIsDefined(globalContext);
49
- return globalContext;
52
+ (0, utils_js_1.assert)(globalContext_public);
53
+ return { globalContext, globalContext_public };
50
54
  }
51
55
  function assertIsDefined(globalContext) {
52
56
  if (!globalContext) {
@@ -56,9 +60,11 @@ function assertIsDefined(globalContext) {
56
60
  }
57
61
  }
58
62
  function assertGlobalContextIsDefined() {
59
- assertIsDefined(globalObject.globalContext);
63
+ assertIsDefined(globalObjectTyped.globalContext);
64
+ (0, utils_js_1.assert)(globalObject.globalContext);
60
65
  (0, utils_js_1.assert)(globalObject.globalContext_public);
61
66
  }
67
+ // We purposely return GlobalContext instead of GlobalContextServer because `import { getGlobalContext } from 'vike'` can resolve to the client-side implementation.
62
68
  /**
63
69
  * Get runtime information about your app.
64
70
  *
@@ -86,7 +92,7 @@ async function getGlobalContextAsync(isProduction) {
86
92
  if (!isProduction)
87
93
  await globalObject.waitForUserFilesUpdate;
88
94
  assertGlobalContextIsDefined();
89
- const { globalContext_public } = globalObject;
95
+ const { globalContext_public } = globalObjectTyped;
90
96
  (0, utils_js_1.assert)(globalContext_public);
91
97
  return globalContext_public;
92
98
  }
@@ -99,24 +105,25 @@ async function getGlobalContextAsync(isProduction) {
99
105
  */
100
106
  function getGlobalContextSync() {
101
107
  debug('getGlobalContextSync()');
102
- const { globalContext_public } = globalObject;
103
- (0, utils_js_1.assertUsage)(globalContext_public, "The global context isn't set yet, call getGlobalContextSync() later or use getGlobalContext() instead.");
108
+ const { globalContext_public } = globalObjectTyped;
109
+ (0, utils_js_1.assertUsage)(globalContext_public, createGlobalContextShared_js_1.getGlobalContextSyncErrMsg);
104
110
  (0, utils_js_1.assertWarning)(false,
105
- // We discourage users from using it because using `pageContext.globalContext` is better: it doesn't have the race condition issue that `getGlobalContextSync()` would have when called inside React/Vue components.
111
+ // We discourage users from using it because `pageContext.globalContext` is safer: I ain't sure but there could be race conditions when using `getGlobalContextSync()` inside React/Vue components upon HMR.
106
112
  // We're lying about "is going to be deprecated in the next major release": let's keep it and see if users need it (so far I can't see a use case for it).
107
113
  'getGlobalContextSync() is going to be deprecated in the next major release, see https://vike.dev/getGlobalContext', { onlyOnce: true });
108
114
  return globalContext_public;
109
115
  }
110
116
  function makePublic(globalContext) {
111
- const globalContextPublic = (0, utils_js_1.makePublicCopy)(globalContext, 'globalContext', [
117
+ const globalContextPublic = (0, utils_js_1.getPublicProxy)(globalContext, 'globalContext', [
112
118
  'assetsManifest',
113
119
  'config',
114
120
  'viteConfig',
115
121
  'viteConfigRuntime',
116
122
  'pages',
117
123
  'baseServer',
118
- 'baseAssets'
119
- ]);
124
+ 'baseAssets',
125
+ 'isClientSide'
126
+ ], true);
120
127
  return globalContextPublic;
121
128
  }
122
129
  async function setGlobalContext_viteDevServer(viteDevServer) {
@@ -224,96 +231,6 @@ function setIsProduction(isProduction) {
224
231
  (0, utils_js_1.assert)(globalObject.isProduction === isProduction);
225
232
  globalObject.isProduction = isProduction;
226
233
  }
227
- function defineGlobalContext() {
228
- const globalContext = resolveGlobalContext();
229
- assertIsDefined(globalContext);
230
- const globalContext_public = makePublic(globalContext);
231
- (0, utils_js_1.objectAssign)(globalContext, { globalContext_public });
232
- globalObject.globalContext = globalContext;
233
- globalObject.globalContext_public = globalContext_public;
234
- assertGlobalContextIsDefined();
235
- (0, utils_js_1.onSetupRuntime)();
236
- }
237
- function resolveGlobalContext() {
238
- const { viteDevServer, viteConfig, viteConfigRuntime, isPrerendering, isProduction, userFiles } = globalObject;
239
- (0, utils_js_1.assert)(typeof isProduction === 'boolean');
240
- let globalContext;
241
- if (!isProduction) {
242
- // Requires globalObject.viteDevServer
243
- if (!viteDevServer)
244
- return null;
245
- (0, utils_js_1.assert)(userFiles); // main common requiement
246
- (0, utils_js_1.assert)(viteConfig);
247
- (0, utils_js_1.assert)(viteConfigRuntime);
248
- (0, utils_js_1.assert)(!isPrerendering);
249
- globalContext = {
250
- isProduction: false,
251
- isPrerendering: false,
252
- assetsManifest: null,
253
- viteDevServer,
254
- viteConfig,
255
- ...userFiles,
256
- viteConfigRuntime,
257
- ...resolveBaseRuntime(viteConfigRuntime, userFiles.config)
258
- };
259
- }
260
- else {
261
- // Requires globalObject.buildEntry
262
- if (!globalObject.buildEntry)
263
- return null;
264
- (0, utils_js_1.assert)(userFiles); // main common requiement
265
- const { buildInfo, assetsManifest } = globalObject;
266
- (0, utils_js_1.assert)(buildInfo);
267
- (0, utils_js_1.assert)(assetsManifest);
268
- const globalContext_ = {
269
- isProduction: true,
270
- assetsManifest,
271
- ...userFiles,
272
- viteDevServer: null,
273
- viteConfigRuntime: buildInfo.viteConfigRuntime,
274
- usesClientRouter: buildInfo.usesClientRouter,
275
- ...resolveBaseRuntime(buildInfo.viteConfigRuntime, userFiles.config)
276
- };
277
- if (isPrerendering) {
278
- (0, utils_js_1.assert)(viteConfig);
279
- (0, utils_js_1.objectAssign)(globalContext_, {
280
- isPrerendering: true,
281
- viteConfig
282
- });
283
- globalContext = globalContext_;
284
- }
285
- else {
286
- (0, utils_js_1.objectAssign)(globalContext_, {
287
- isPrerendering: false,
288
- viteConfig: null
289
- });
290
- globalContext = globalContext_;
291
- }
292
- }
293
- return globalContext;
294
- }
295
- async function getUserFiles() {
296
- // Help TypeScript resolve what TypeScript (wrongfully) believes to be cyclic dependency
297
- const globalObject_ = globalObject;
298
- const { pageConfigsRuntime } = globalObject_;
299
- (0, utils_js_1.assert)(pageConfigsRuntime);
300
- const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal, globalConfig, pageConfigsUserFriendly } = pageConfigsRuntime;
301
- const { pageRoutes, onBeforeRouteHook } = await (0, loadPageRoutes_js_1.loadPageRoutes)(pageFilesAll, pageConfigs, pageConfigGlobal, allPageIds);
302
- const userFiles = {
303
- pageFilesAll,
304
- pageConfigs,
305
- pageConfigGlobal,
306
- allPageIds,
307
- pageRoutes,
308
- onBeforeRouteHook,
309
- pages: pageConfigsUserFriendly,
310
- config: globalConfig.config
311
- };
312
- (0, assertV1Design_js_1.assertV1Design)(
313
- // pageConfigs is PageConfigRuntime[] but assertV1Design() requires PageConfigBuildTime[]
314
- pageConfigs.length > 0, pageFilesAll);
315
- return userFiles;
316
- }
317
234
  function assertViteManifest(manifest) {
318
235
  (0, utils_js_1.assert)((0, utils_js_1.isPlainObject)(manifest));
319
236
  /* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
@@ -329,10 +246,7 @@ function assertViteManifest(manifest) {
329
246
  }
330
247
  async function loadBuildEntry(outDir) {
331
248
  debug('loadBuildEntry()');
332
- if (globalObject.userFiles) {
333
- (0, utils_js_1.assert)(globalObject.buildInfo);
334
- (0, utils_js_1.assert)(globalObject.assetsManifest);
335
- (0, utils_js_1.assert)(globalObject.buildEntry);
249
+ if (globalObject.globalContext) {
336
250
  return;
337
251
  }
338
252
  if (!globalObject.buildEntry) {
@@ -345,20 +259,18 @@ async function loadBuildEntry(outDir) {
345
259
  globalObject.buildEntry = globalObject.buildEntryPrevious;
346
260
  }
347
261
  (0, utils_js_1.assert)(globalObject.buildEntry);
262
+ // If using `inject` then dist/server/index.js imports dist/server/entry.js and loadBuildEntry() isn't needed.
263
+ // If dist/server/entry.js isn't imported then this means the user is running the original server entry `$ ts-node server/index.ts`.
348
264
  (0, utils_js_1.assertWarning)(
349
- // vike-server => `vitePluginServerEntry.inject === true`
350
- // vike-node => `vitePluginServerEntry.inject === [ 'index' ]`
351
- globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject !== true,
352
- /* TO-DO/eventually:
353
- !!globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject,
354
- */
355
- `Run the built server entry (e.g. ${picocolors_1.default.cyan('$ node dist/server/index.mjs')}) instead of the original server entry (e.g. ${picocolors_1.default.cyan('$ ts-node server/index.ts')})`, { onlyOnce: true });
265
+ // vike-server => `inject === true`
266
+ // vike-node => `inject === [ 'index' ]` => we don't show the warning to vike-node users (I don't remember why).
267
+ globalObject.buildInfo?.viteConfigRuntime.vitePluginServerEntry.inject !== true || globalObject.isPrerendering, `Run the built server entry (e.g. ${picocolors_1.default.cyan('$ node dist/server/index.mjs')}) instead of the original server entry (e.g. ${picocolors_1.default.cyan('$ ts-node server/index.ts')})`, { onlyOnce: true });
356
268
  }
357
269
  const { buildEntry } = globalObject;
358
270
  assertBuildEntry(buildEntry);
359
271
  globalObject.assetsManifest = buildEntry.assetsManifest;
360
272
  globalObject.buildInfo = buildEntry.buildInfo;
361
- await setUserFiles(buildEntry.virtualFileExports);
273
+ await setGlobalContext(buildEntry.virtualFileExports);
362
274
  }
363
275
  async function setGlobalContext_buildEntry(buildEntry) {
364
276
  debug('setGlobalContext_buildEntry()');
@@ -418,15 +330,80 @@ async function updateUserFiles() {
418
330
  // Avoid race condition: abort if there is a new globalObject.viteDevServer (happens when vite.config.js is modified => Vite's dev server is fully reloaded).
419
331
  if (viteDevServer !== globalObject.viteDevServer)
420
332
  return;
421
- await setUserFiles(virtualFileExports);
333
+ await setGlobalContext(virtualFileExports);
422
334
  resolve();
423
335
  }
424
- async function setUserFiles(virtualFileExports) {
425
- globalObject.pageConfigsRuntime = (0, getPageConfigsRuntime_js_1.getPageConfigsRuntime)(virtualFileExports);
426
- const userFiles = await getUserFiles();
427
- globalObject.userFiles = userFiles;
428
- defineGlobalContext();
336
+ async function setGlobalContext(virtualFileExports) {
337
+ const globalContext = await (0, createGlobalContextShared_js_1.createGlobalContextShared)(virtualFileExports, globalObject, addGlobalContext);
338
+ (0, assertV1Design_js_1.assertV1Design)(
339
+ // pageConfigs is PageConfigRuntime[] but assertV1Design() requires PageConfigBuildTime[]
340
+ globalContext._pageConfigs.length > 0, globalContext._pageFilesAll);
341
+ // Public usage
342
+ globalObject.globalContext_public = makePublic(globalContext);
429
343
  assertGlobalContextIsDefined();
344
+ (0, utils_js_1.onSetupRuntime)();
345
+ // Never actually used, only used for TypeScript `ReturnType<typeof setGlobalContext>`
346
+ return globalContext;
347
+ }
348
+ async function addGlobalContext(globalContext) {
349
+ const { pageRoutes, onBeforeRouteHook } = await (0, loadPageRoutes_js_1.loadPageRoutes)(globalContext._pageFilesAll, globalContext._pageConfigs, globalContext._pageConfigGlobal, globalContext._allPageIds);
350
+ const globalContextBase = {
351
+ isClientSide: false,
352
+ _pageRoutes: pageRoutes,
353
+ _onBeforeRouteHook: onBeforeRouteHook
354
+ };
355
+ const { viteDevServer, viteConfig, viteConfigRuntime, isPrerendering, isProduction } = globalObject;
356
+ (0, utils_js_1.assert)(typeof isProduction === 'boolean');
357
+ if (!isProduction) {
358
+ (0, utils_js_1.assert)(viteDevServer);
359
+ (0, utils_js_1.assert)(globalContext); // main common requirement
360
+ (0, utils_js_1.assert)(viteConfig);
361
+ (0, utils_js_1.assert)(viteConfigRuntime);
362
+ (0, utils_js_1.assert)(!isPrerendering);
363
+ return {
364
+ ...globalContext,
365
+ ...globalContextBase,
366
+ ...resolveBaseRuntime(viteConfigRuntime, globalContext.config),
367
+ _isProduction: false,
368
+ _isPrerendering: false,
369
+ assetsManifest: null,
370
+ _viteDevServer: viteDevServer,
371
+ viteConfig,
372
+ viteConfigRuntime
373
+ };
374
+ }
375
+ else {
376
+ (0, utils_js_1.assert)(globalObject.buildEntry);
377
+ (0, utils_js_1.assert)(globalContext); // main common requiement
378
+ const { buildInfo, assetsManifest } = globalObject;
379
+ (0, utils_js_1.assert)(buildInfo);
380
+ (0, utils_js_1.assert)(assetsManifest);
381
+ const globalContextBase2 = {
382
+ ...globalContext,
383
+ ...globalContextBase,
384
+ ...resolveBaseRuntime(buildInfo.viteConfigRuntime, globalContext.config),
385
+ _isProduction: true,
386
+ assetsManifest,
387
+ _viteDevServer: null,
388
+ viteConfigRuntime: buildInfo.viteConfigRuntime,
389
+ _usesClientRouter: buildInfo.usesClientRouter
390
+ };
391
+ if (isPrerendering) {
392
+ (0, utils_js_1.assert)(viteConfig);
393
+ return {
394
+ ...globalContextBase2,
395
+ _isPrerendering: true,
396
+ viteConfig
397
+ };
398
+ }
399
+ else {
400
+ return {
401
+ ...globalContextBase2,
402
+ _isPrerendering: false,
403
+ viteConfig: null
404
+ };
405
+ }
406
+ }
430
407
  }
431
408
  function clearGlobalContext() {
432
409
  debug('clearGlobalContext()');