vike 0.4.228 → 0.4.229-commit-2a06dcc

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 (244) 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 +7 -19
  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 +7 -1
  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 +2 -2
  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/getPublicProxy.js +27 -0
  75. package/dist/cjs/utils/isImportPath.js +21 -0
  76. package/dist/cjs/utils/isScriptFile.js +24 -21
  77. package/dist/cjs/utils/objectAssign.js +6 -10
  78. package/dist/cjs/utils/objectReplace.js +4 -4
  79. package/dist/cjs/utils/{isNpmPackage.js → parseNpmPackage.js} +24 -23
  80. package/dist/cjs/utils/path.js +12 -2
  81. package/dist/cjs/utils/requireResolve.js +134 -53
  82. package/dist/esm/__internal/index.js +3 -3
  83. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +29 -10
  84. package/dist/esm/client/client-routing-runtime/createPageContext.js +23 -22
  85. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +5 -4
  86. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +20 -0
  87. package/dist/esm/client/client-routing-runtime/globalContext.js +13 -0
  88. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +2 -2
  89. package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
  90. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +8 -7
  91. package/dist/esm/client/client-routing-runtime/utils.d.ts +0 -1
  92. package/dist/esm/client/client-routing-runtime/utils.js +0 -1
  93. package/dist/esm/client/index.d.ts +1 -0
  94. package/dist/esm/client/index.js +4 -0
  95. package/dist/esm/client/node.js +1 -3
  96. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +36 -0
  97. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +47 -0
  98. package/dist/esm/client/server-routing-runtime/entry.js +2 -2
  99. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +17 -0
  100. package/dist/esm/client/server-routing-runtime/globalContext.js +5 -0
  101. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -1
  102. package/dist/esm/client/server-routing-runtime/utils.js +1 -1
  103. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +23 -0
  104. package/dist/esm/client/shared/createGetGlobalContextClient.js +58 -0
  105. package/dist/esm/client/shared/executeOnRenderClientHook.js +5 -4
  106. package/dist/esm/client/shared/{getPageContextSerializedInHtml.d.ts → getJsonSerializedInHtml.d.ts} +2 -0
  107. package/dist/esm/client/shared/getJsonSerializedInHtml.js +29 -0
  108. package/dist/esm/client/shared/removeFoucBuster.js +1 -0
  109. package/dist/esm/client/shared/utils.d.ts +4 -0
  110. package/dist/esm/client/shared/utils.js +4 -0
  111. package/dist/esm/node/plugin/index.js +3 -1
  112. package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
  113. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.js +11 -6
  114. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +2 -2
  115. package/dist/esm/node/plugin/plugins/build/pluginBuildConfig.js +4 -11
  116. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +1 -1
  117. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +10 -6
  118. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +9 -5
  119. package/dist/esm/node/plugin/plugins/commonConfig/assertResolveAlias.js +2 -2
  120. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +2 -0
  121. package/dist/esm/node/plugin/plugins/commonConfig.js +15 -4
  122. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +3 -8
  123. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +7 -2
  124. package/dist/esm/node/plugin/plugins/envVars.js +18 -20
  125. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +4 -2
  126. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +11 -0
  127. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -1
  128. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +2 -0
  129. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +2 -2
  130. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +1 -1
  131. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.d.ts → pointerImports.d.ts} +2 -0
  132. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/{transformPointerImports.js → pointerImports.js} +14 -1
  133. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.d.ts +1 -1
  134. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +20 -19
  135. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +15 -12
  136. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +11 -11
  137. package/dist/esm/node/plugin/plugins/replaceConstants.d.ts +3 -0
  138. package/dist/esm/node/plugin/plugins/replaceConstants.js +71 -0
  139. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.d.ts +3 -0
  140. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.js +8 -0
  141. package/dist/esm/node/plugin/shared/findPageFiles.js +2 -2
  142. package/dist/esm/node/plugin/shared/getFilePath.js +3 -3
  143. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +8 -20
  144. package/dist/esm/node/plugin/utils.d.ts +1 -0
  145. package/dist/esm/node/plugin/utils.js +1 -0
  146. package/dist/esm/node/prerender/runPrerender.d.ts +314 -5
  147. package/dist/esm/node/prerender/runPrerender.js +48 -45
  148. package/dist/esm/node/prerender/utils.d.ts +1 -1
  149. package/dist/esm/node/prerender/utils.js +1 -1
  150. package/dist/esm/node/runtime/globalContext.d.ts +425 -47
  151. package/dist/esm/node/runtime/globalContext.js +103 -126
  152. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +18 -5
  153. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.d.ts +2 -2
  154. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +2 -2
  155. package/dist/esm/node/runtime/html/injectAssets.d.ts +3 -3
  156. package/dist/esm/node/runtime/html/propKeys.d.ts +8 -0
  157. package/dist/esm/node/runtime/html/propKeys.js +45 -0
  158. package/dist/esm/node/runtime/html/renderHtml.js +7 -1
  159. package/dist/esm/node/runtime/html/{serializePageContextClientSide.d.ts → serializeContext.d.ts} +7 -6
  160. package/dist/esm/node/runtime/html/{serializePageContextClientSide.js → serializeContext.js} +36 -67
  161. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -16
  162. package/dist/esm/node/runtime/index-deprecated.js +9 -36
  163. package/dist/esm/node/runtime/index.d.ts +23 -1
  164. package/dist/esm/node/runtime/index.js +38 -3
  165. package/dist/esm/node/runtime/renderPage/analyzePage.d.ts +2 -2
  166. package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
  167. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +5 -4
  168. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +8 -3
  169. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +155 -0
  170. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +71 -0
  171. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +3 -3
  172. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +1 -1
  173. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +3 -3
  174. package/dist/esm/node/runtime/renderPage/getPageAssets/getManifestEntry.js +2 -2
  175. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsDev.js +1 -17
  176. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +2 -2
  177. package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +2 -2
  178. package/dist/esm/node/runtime/renderPage/getPageAssets.js +2 -2
  179. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.d.ts +2 -2
  180. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.js +1 -1
  181. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +2 -2
  182. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  183. package/dist/esm/node/runtime/renderPage/log404/index.d.ts +2 -2
  184. package/dist/esm/node/runtime/renderPage/log404/index.js +1 -1
  185. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +3 -3
  186. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +1 -1
  187. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +225 -179
  188. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +4 -69
  189. package/dist/esm/node/runtime/renderPage.d.ts +146 -7
  190. package/dist/esm/node/runtime/renderPage.js +105 -84
  191. package/dist/esm/node/runtime/universal-middleware.js +7 -1
  192. package/dist/esm/node/runtime/utils.d.ts +3 -2
  193. package/dist/esm/node/runtime/utils.js +3 -2
  194. package/dist/esm/shared/VikeNamespace.d.ts +35 -13
  195. package/dist/esm/shared/assertPageContextProvidedByUser.js +1 -1
  196. package/dist/esm/shared/createGlobalContextShared.d.ts +39 -0
  197. package/dist/esm/shared/createGlobalContextShared.js +51 -0
  198. package/dist/esm/shared/createPageContextShared.d.ts +9 -0
  199. package/dist/esm/shared/createPageContextShared.js +15 -0
  200. package/dist/esm/shared/getPageFiles/fileTypes.js +1 -1
  201. package/dist/esm/shared/hooks/executeHookGeneric.d.ts +8 -0
  202. package/dist/esm/shared/hooks/executeHookGeneric.js +16 -0
  203. package/dist/esm/shared/hooks/getHook.d.ts +5 -3
  204. package/dist/esm/shared/hooks/getHook.js +47 -29
  205. package/dist/esm/shared/htmlElementIds.d.ts +2 -0
  206. package/dist/esm/shared/htmlElementIds.js +2 -0
  207. package/dist/esm/shared/page-configs/Config.d.ts +12 -2
  208. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +1 -1
  209. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +3 -7
  210. package/dist/esm/shared/route/executeGuardHook.js +2 -2
  211. package/dist/esm/shared/route/loadPageRoutes.js +2 -1
  212. package/dist/esm/shared/types.d.ts +64 -32
  213. package/dist/esm/types/index.d.ts +1 -5
  214. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  215. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  216. package/dist/esm/utils/catchInfiniteLoop.js +4 -4
  217. package/dist/esm/utils/getGlobalObject.d.ts +1 -1
  218. package/dist/esm/utils/getPublicProxy.d.ts +2 -0
  219. package/dist/esm/utils/getPublicProxy.js +25 -0
  220. package/dist/esm/utils/isImportPath.d.ts +4 -0
  221. package/dist/esm/utils/isImportPath.js +19 -0
  222. package/dist/esm/utils/isScriptFile.d.ts +5 -5
  223. package/dist/esm/utils/isScriptFile.js +23 -20
  224. package/dist/esm/utils/objectAssign.d.ts +1 -1
  225. package/dist/esm/utils/objectAssign.js +6 -10
  226. package/dist/esm/utils/objectReplace.d.ts +1 -1
  227. package/dist/esm/utils/objectReplace.js +4 -4
  228. package/dist/esm/utils/parseNpmPackage.d.ts +19 -0
  229. package/dist/esm/utils/{isNpmPackage.js → parseNpmPackage.js} +24 -24
  230. package/dist/esm/utils/path.d.ts +1 -1
  231. package/dist/esm/utils/path.js +12 -2
  232. package/dist/esm/utils/requireResolve.d.ts +20 -7
  233. package/dist/esm/utils/requireResolve.js +134 -53
  234. package/package.json +14 -13
  235. package/dist/cjs/node/runtime/index-common.js +0 -27
  236. package/dist/cjs/utils/makePublicCopy.js +0 -32
  237. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +0 -19
  238. package/dist/esm/client/server-routing-runtime/getPageContext.js +0 -44
  239. package/dist/esm/client/shared/getPageContextSerializedInHtml.js +0 -20
  240. package/dist/esm/node/runtime/index-common.d.ts +0 -8
  241. package/dist/esm/node/runtime/index-common.js +0 -10
  242. package/dist/esm/utils/isNpmPackage.d.ts +0 -17
  243. package/dist/esm/utils/makePublicCopy.d.ts +0 -3
  244. package/dist/esm/utils/makePublicCopy.js +0 -30
@@ -1,16 +1,155 @@
1
1
  export { renderPage };
2
2
  export { renderPage_addAsyncHookwrapper };
3
- import { HttpResponse } from './renderPage/createHttpResponse.js';
3
+ export type { PageContextInit };
4
+ export type { PageContextBegin };
5
+ import { type GlobalContextServer, type GlobalContextServerInternal } from './globalContext.js';
6
+ import { type HttpResponse } from './renderPage/createHttpResponse.js';
4
7
  import type { PageContextServer } from '../../types/index.js';
5
- declare function renderPage<PageContextUserAdded extends {}, PageContextInit extends {
6
- /** @deprecated */
7
- url?: string;
8
- /** The URL of the HTTP request */
9
- urlOriginal: string;
10
- }>(pageContextInit: PageContextInit): Promise<PageContextInit & {
8
+ import type { PageContextBuiltInServerInternal } from '../../shared/types.js';
9
+ type PageContextInit = Pick<PageContextBuiltInServerInternal, 'urlOriginal' | 'headersOriginal'> & {
10
+ /** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
11
+ /** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
12
+ };
13
+ type PageContextBegin = Awaited<ReturnType<typeof getPageContextBegin>>;
14
+ declare function renderPage<PageContextUserAdded extends {}, PageContextInitUser extends PageContextInit>(pageContextInit: PageContextInitUser): Promise<PageContextInitUser & {
11
15
  httpResponse: HttpResponse;
12
16
  } & Partial<PageContextServer & PageContextUserAdded>>;
13
17
  declare let asyncHookWrapper: <PageContext>(_httpRequestId: number, ret: () => Promise<PageContext>) => Promise<{
14
18
  pageContextReturn: Awaited<PageContext>;
15
19
  }>;
16
20
  declare function renderPage_addAsyncHookwrapper(wrapper: typeof asyncHookWrapper): void;
21
+ declare function getPageContextBegin(pageContextInit: PageContextInit, globalContext: GlobalContextServerInternal, globalContext_public: GlobalContextServer, httpRequestId: number): Promise<{
22
+ isClientSide: boolean;
23
+ isPrerendering: boolean;
24
+ } & Pick<PageContextBuiltInServerInternal, "urlOriginal" | "headersOriginal"> & {
25
+ /** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
26
+ /** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
27
+ } & {
28
+ globalContext: GlobalContextServer;
29
+ _globalContext: {
30
+ isGlobalContext: true;
31
+ _virtualFileExports: unknown;
32
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
33
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
34
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
35
+ _allPageIds: string[];
36
+ config: import("../../types/index.js").ConfigResolved;
37
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
38
+ } & ({
39
+ _isProduction: false;
40
+ _isPrerendering: false;
41
+ assetsManifest: null;
42
+ _viteDevServer: import("vite").ViteDevServer;
43
+ viteConfig: import("vite").ResolvedConfig;
44
+ viteConfigRuntime: {
45
+ root: string;
46
+ build: {
47
+ outDir: string;
48
+ };
49
+ _baseViteOriginal: string;
50
+ vitePluginServerEntry: {
51
+ inject: boolean | undefined;
52
+ };
53
+ };
54
+ baseServer: string;
55
+ baseAssets: string;
56
+ isClientSide: false;
57
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
58
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
59
+ isGlobalContext: true;
60
+ _virtualFileExports: unknown;
61
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
62
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
63
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
64
+ _allPageIds: string[];
65
+ config: import("../../types/index.js").ConfigResolved;
66
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
67
+ } | {
68
+ _isPrerendering: true;
69
+ viteConfig: import("vite").ResolvedConfig;
70
+ _isProduction: true;
71
+ assetsManifest: import("../shared/ViteManifest.js").ViteManifest;
72
+ _viteDevServer: null;
73
+ viteConfigRuntime: {
74
+ root: string;
75
+ build: {
76
+ outDir: string;
77
+ };
78
+ _baseViteOriginal: string;
79
+ vitePluginServerEntry: {
80
+ inject: boolean | undefined;
81
+ };
82
+ };
83
+ _usesClientRouter: boolean;
84
+ baseServer: string;
85
+ baseAssets: string;
86
+ isClientSide: false;
87
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
88
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
89
+ isGlobalContext: true;
90
+ _virtualFileExports: unknown;
91
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
92
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
93
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
94
+ _allPageIds: string[];
95
+ config: import("../../types/index.js").ConfigResolved;
96
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
97
+ } | {
98
+ _isPrerendering: false;
99
+ viteConfig: null;
100
+ _isProduction: true;
101
+ assetsManifest: import("../shared/ViteManifest.js").ViteManifest;
102
+ _viteDevServer: null;
103
+ viteConfigRuntime: {
104
+ root: string;
105
+ build: {
106
+ outDir: string;
107
+ };
108
+ _baseViteOriginal: string;
109
+ vitePluginServerEntry: {
110
+ inject: boolean | undefined;
111
+ };
112
+ };
113
+ _usesClientRouter: boolean;
114
+ baseServer: string;
115
+ baseAssets: string;
116
+ isClientSide: false;
117
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
118
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
119
+ isGlobalContext: true;
120
+ _virtualFileExports: unknown;
121
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
122
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
123
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
124
+ _allPageIds: string[];
125
+ config: import("../../types/index.js").ConfigResolved;
126
+ pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
127
+ });
128
+ _baseServer: string;
129
+ _baseAssets: string;
130
+ _includeAssetsImportedByServer: boolean;
131
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
132
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
133
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
134
+ _allPageIds: string[];
135
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
136
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
137
+ _pageContextInit: PageContextInit;
138
+ _urlRewrite: null;
139
+ _urlHandler: ((url: string) => string) | null;
140
+ isClientSideNavigation: boolean;
141
+ } & {
142
+ urlParsed: import("./utils.js").UrlPublic;
143
+ urlPathname: string;
144
+ url: string;
145
+ } & {
146
+ headers: Record<string, string> | null;
147
+ } & {
148
+ config: import("../../types/index.js").ConfigResolved;
149
+ _source: import("../../shared/page-configs/getPageConfigUserFriendly.js").Source;
150
+ _sources: import("../../shared/page-configs/getPageConfigUserFriendly.js").Sources;
151
+ _from: import("../../shared/page-configs/getPageConfigUserFriendly.js").From;
152
+ isPageContext: true;
153
+ } & {
154
+ _httpRequestId: number;
155
+ }>;
@@ -1,19 +1,20 @@
1
1
  export { renderPage };
2
2
  export { renderPage_addAsyncHookwrapper };
3
- import { getPageContextInitEnhanced, renderPageAlreadyRouted, createPageContext } from './renderPage/renderPageAlreadyRouted.js';
3
+ import { renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
4
+ import { createPageContextServerSide, createPageContextServerSideWithoutGlobalContext } from './renderPage/createPageContextServerSide.js';
4
5
  import { route } from '../../shared/route/index.js';
5
6
  import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty } from './utils.js';
6
7
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
7
- import { getGlobalContextInternal, initGlobalContext_renderPage } from './globalContext.js';
8
+ import { getGlobalContextServerInternal, initGlobalContext_renderPage } from './globalContext.js';
8
9
  import { handlePageContextRequestUrl } from './renderPage/handlePageContextRequestUrl.js';
9
- import { createHttpResponseFavicon404, createHttpResponseRedirect, createHttpResponsePageContextJson, createHttpResponseError, createHttpResponseBaseIsMissing } from './renderPage/createHttpResponse.js';
10
+ import { createHttpResponseFavicon404, createHttpResponseRedirect, createHttpResponsePageContextJson, createHttpResponseError, createHttpResponseErrorWithoutGlobalContext, createHttpResponseBaseIsMissing } from './renderPage/createHttpResponse.js';
10
11
  import { logRuntimeError, logRuntimeInfo } from './renderPage/loggerRuntime.js';
11
12
  import { isNewError } from './renderPage/isNewError.js';
12
13
  import { assertArguments } from './renderPage/assertArguments.js';
13
14
  import { log404 } from './renderPage/log404/index.js';
14
15
  import { isVikeConfigInvalid } from './renderPage/isVikeConfigInvalid.js';
15
16
  import pc from '@brillout/picocolors';
16
- import { serializePageContextAbort, serializePageContextClientSide } from './html/serializePageContextClientSide.js';
17
+ import { getPageContextClientSerializedAbort, getPageContextClientSerialized } from './html/serializeContext.js';
17
18
  import { getErrorPageId } from '../../shared/error-page.js';
18
19
  import { handleErrorWithoutErrorPage } from './renderPage/handleErrorWithoutErrorPage.js';
19
20
  import { loadUserFilesServerSide } from './renderPage/loadUserFilesServerSide.js';
@@ -27,13 +28,13 @@ async function renderPage(pageContextInit) {
27
28
  assert(hasProp(pageContextInit, 'urlOriginal', 'string')); // assertUsage() already implemented at assertArguments()
28
29
  assertIsUrl(pageContextInit.urlOriginal);
29
30
  onSetupRuntime();
30
- const pageContextInvalidRequest = renderInvalidRequest(pageContextInit);
31
+ const pageContextInvalidRequest = getPageContextInvalidRequest(pageContextInit);
31
32
  if (pageContextInvalidRequest)
32
33
  return pageContextInvalidRequest;
33
34
  const httpRequestId = getRequestId();
34
35
  const urlOriginalPretty = getUrlPretty(pageContextInit.urlOriginal);
35
36
  logHttpRequest(urlOriginalPretty, httpRequestId);
36
- const { pageContextReturn } = await asyncHookWrapper(httpRequestId, () => renderPageAndPrepare(pageContextInit, httpRequestId));
37
+ const { pageContextReturn } = await asyncHookWrapper(httpRequestId, () => renderPagePrepare(pageContextInit, httpRequestId));
37
38
  logHttpResponse(urlOriginalPretty, httpRequestId, pageContextReturn);
38
39
  checkType(pageContextReturn);
39
40
  assert(pageContextReturn.httpResponse);
@@ -47,13 +48,12 @@ let asyncHookWrapper = async (_httpRequestId, ret) => ({
47
48
  function renderPage_addAsyncHookwrapper(wrapper) {
48
49
  asyncHookWrapper = wrapper;
49
50
  }
50
- async function renderPageAndPrepare(pageContextInit, httpRequestId) {
51
+ async function renderPagePrepare(pageContextInit, httpRequestId) {
51
52
  // Invalid config
52
- if (isVikeConfigInvalid) {
53
- if (1 < 2 // Make TS happy
54
- ) {
55
- return renderInvalidVikeConfig(isVikeConfigInvalid.err, pageContextInit, httpRequestId);
56
- }
53
+ if (isVikeConfigInvalid &&
54
+ true // Make TS happy
55
+ ) {
56
+ return getPageContextInvalidVikeConfig(isVikeConfigInvalid.err, pageContextInit, httpRequestId);
57
57
  }
58
58
  // Prepare context
59
59
  try {
@@ -67,49 +67,52 @@ async function renderPageAndPrepare(pageContextInit, httpRequestId) {
67
67
  // initGlobalContext_renderPage() doens't call any user hook => err isn't thrown from user code.
68
68
  assert(!isAbortError(err));
69
69
  logRuntimeError(err, httpRequestId);
70
- const pageContextWithError = getPageContextHttpResponseError(err, pageContextInit, null);
70
+ const pageContextWithError = getPageContextHttpResponseErrorWithoutGlobalContext(err, pageContextInit);
71
71
  return pageContextWithError;
72
72
  }
73
73
  if (isVikeConfigInvalid) {
74
- return renderInvalidVikeConfig(isVikeConfigInvalid.err, pageContextInit, httpRequestId);
74
+ return getPageContextInvalidVikeConfig(isVikeConfigInvalid.err, pageContextInit, httpRequestId);
75
75
  }
76
76
  else {
77
77
  // `globalContext` now contains the entire Vike config and getVikeConfig() isn't called anymore for this request.
78
78
  }
79
- const globalContext = await getGlobalContextInternal();
79
+ const { globalContext, globalContext_public } = await getGlobalContextServerInternal();
80
+ const pageContextBegin = await getPageContextBegin(pageContextInit, globalContext, globalContext_public, httpRequestId);
80
81
  // Check Base URL
81
82
  {
82
- const pageContextHttpResponse = await checkBaseUrl(pageContextInit, globalContext);
83
+ const pageContextHttpResponse = await checkBaseUrl(pageContextBegin, globalContext);
83
84
  if (pageContextHttpResponse)
84
85
  return pageContextHttpResponse;
85
86
  }
86
87
  // Normalize URL
87
88
  {
88
- const pageContextHttpResponse = await normalizeUrl(pageContextInit, globalContext, httpRequestId);
89
+ const pageContextHttpResponse = await normalizeUrl(pageContextBegin, globalContext, httpRequestId);
89
90
  if (pageContextHttpResponse)
90
91
  return pageContextHttpResponse;
91
92
  }
92
93
  // Permanent redirects (HTTP status code `301`)
93
94
  {
94
- const pageContextHttpResponse = await getPermanentRedirect(pageContextInit, globalContext, httpRequestId);
95
+ const pageContextHttpResponse = await getPermanentRedirect(pageContextBegin, globalContext, httpRequestId);
95
96
  if (pageContextHttpResponse)
96
97
  return pageContextHttpResponse;
97
98
  }
98
- return await renderPageAlreadyPrepared(pageContextInit, globalContext, httpRequestId, []);
99
+ return await renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRequestId, []);
99
100
  }
100
- async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpRequestId, pageContextsFromRewrite) {
101
+ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRequestId, pageContextsFromRewrite) {
102
+ const pageContextNominalPageBegin = forkPageContext(pageContextBegin);
101
103
  assertNoInfiniteAbortLoop(pageContextsFromRewrite.length,
102
104
  // There doesn't seem to be a way to count the number of HTTP redirects (vike don't have access to the HTTP request headers/cookies)
103
105
  // https://stackoverflow.com/questions/9683007/detect-infinite-http-redirect-loop-on-server-side
104
106
  0);
105
107
  let pageContextNominalPageSuccess;
106
108
  const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
107
- const pageContextNominalPageInit = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextFromAllRewrites._urlRewrite, httpRequestId);
108
- objectAssign(pageContextNominalPageInit, pageContextFromAllRewrites);
109
+ // This is where pageContext._urlRewrite is set
110
+ assert(pageContextFromAllRewrites._urlRewrite === null || typeof pageContextFromAllRewrites._urlRewrite === 'string');
111
+ objectAssign(pageContextNominalPageBegin, pageContextFromAllRewrites);
109
112
  let errNominalPage;
110
113
  {
111
114
  try {
112
- pageContextNominalPageSuccess = await renderPageNominal(pageContextNominalPageInit);
115
+ pageContextNominalPageSuccess = await renderPageNominal(pageContextNominalPageBegin);
113
116
  }
114
117
  catch (err) {
115
118
  errNominalPage = err;
@@ -117,7 +120,7 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
117
120
  logRuntimeError(errNominalPage, httpRequestId);
118
121
  }
119
122
  if (!errNominalPage) {
120
- assert(pageContextNominalPageSuccess === pageContextNominalPageInit);
123
+ assert(pageContextNominalPageSuccess === pageContextNominalPageBegin);
121
124
  }
122
125
  }
123
126
  // Log upon 404
@@ -133,12 +136,12 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
133
136
  else {
134
137
  assert(errNominalPage);
135
138
  assert(pageContextNominalPageSuccess === undefined);
136
- assert(pageContextNominalPageInit);
137
- assert(hasProp(pageContextNominalPageInit, 'urlOriginal', 'string'));
138
- const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextInit, globalContext, errNominalPage, pageContextNominalPageInit, httpRequestId);
139
+ assert(pageContextNominalPageBegin);
140
+ assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
141
+ const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
139
142
  // Handle `throw redirect()` and `throw render()` while rendering nominal page
140
143
  if (isAbortError(errNominalPage)) {
141
- const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextInit, pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalContext);
144
+ const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
142
145
  if (handled.pageContextReturn) {
143
146
  // - throw redirect()
144
147
  // - throw render(url)
@@ -151,7 +154,7 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
151
154
  Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
152
155
  }
153
156
  {
154
- const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
157
+ const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
155
158
  if (!errorPageId) {
156
159
  objectAssign(pageContextErrorPageInit, { pageId: null });
157
160
  return handleErrorWithoutErrorPage(pageContextErrorPageInit);
@@ -167,12 +170,12 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
167
170
  catch (errErrorPage) {
168
171
  // Handle `throw redirect()` and `throw render()` while rendering error page
169
172
  if (isAbortError(errErrorPage)) {
170
- const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextInit, pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalContext);
173
+ const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
171
174
  // throw render(abortStatusCode)
172
175
  if (!handled.pageContextReturn) {
173
176
  const pageContextAbort = errErrorPage._pageContextAbort;
174
177
  assertWarning(false, `Failed to render error page because ${pc.cyan(pageContextAbort._abortCall)} was called: make sure ${pc.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
175
- const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextInit, pageContextErrorPageInit);
178
+ const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
176
179
  return pageContextHttpWithError;
177
180
  }
178
181
  // `throw redirect()` / `throw render(url)`
@@ -181,7 +184,7 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
181
184
  if (isNewError(errErrorPage, errNominalPage)) {
182
185
  logRuntimeError(errErrorPage, httpRequestId);
183
186
  }
184
- const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextInit, pageContextErrorPageInit);
187
+ const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
185
188
  return pageContextWithError;
186
189
  }
187
190
  return pageContextErrorPage;
@@ -233,11 +236,26 @@ function logHttpResponse(urlOriginalPretty, httpRequestId, pageContextReturn) {
233
236
  logRuntimeInfo?.(msg, httpRequestId, isNominal ? 'info' : 'error');
234
237
  }
235
238
  function prettyUrl(url) {
236
- return pc.bold(decodeURI(url));
239
+ try {
240
+ url = decodeURI(url);
241
+ }
242
+ catch {
243
+ // https://github.com/vikejs/vike/pull/2367#issuecomment-2800967564
244
+ }
245
+ return pc.bold(url);
237
246
  }
238
- function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
239
- const pageContextWithError = createPageContext(pageContextInit, false);
240
- const httpResponse = createHttpResponseError(pageContext);
247
+ function getPageContextHttpResponseError(err, pageContextBegin) {
248
+ const pageContextWithError = forkPageContext(pageContextBegin);
249
+ const httpResponse = createHttpResponseError(pageContextBegin);
250
+ objectAssign(pageContextWithError, {
251
+ httpResponse,
252
+ errorWhileRendering: err
253
+ });
254
+ return pageContextWithError;
255
+ }
256
+ function getPageContextHttpResponseErrorWithoutGlobalContext(err, pageContextInit) {
257
+ const pageContextWithError = createPageContextServerSideWithoutGlobalContext(pageContextInit);
258
+ const httpResponse = createHttpResponseErrorWithoutGlobalContext();
241
259
  objectAssign(pageContextWithError, {
242
260
  httpResponse,
243
261
  errorWhileRendering: err
@@ -267,8 +285,8 @@ async function renderPageNominal(pageContext) {
267
285
  assert(pageContext === pageContextAfterRender);
268
286
  return pageContextAfterRender;
269
287
  }
270
- async function getPageContextErrorPageInit(pageContextInit, globalContext, errNominalPage, pageContextNominalPagePartial, httpRequestId) {
271
- const pageContext = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, null, httpRequestId);
288
+ async function getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPagePartial) {
289
+ const pageContext = forkPageContext(pageContextBegin);
272
290
  assert(errNominalPage);
273
291
  objectAssign(pageContext, {
274
292
  is404: false,
@@ -281,17 +299,17 @@ async function getPageContextErrorPageInit(pageContextInit, globalContext, errNo
281
299
  assert(pageContext.errorWhileRendering);
282
300
  return pageContext;
283
301
  }
284
- async function getPageContextInitEnhancedSSR(pageContextInit, globalContext, urlRewrite, httpRequestId) {
302
+ async function getPageContextBegin(pageContextInit, globalContext, globalContext_public, httpRequestId) {
285
303
  const { isClientSideNavigation, _urlHandler } = handlePageContextUrl(pageContextInit.urlOriginal);
286
- const pageContextInitEnhanced = await getPageContextInitEnhanced(pageContextInit, globalContext, false, {
304
+ const pageContextBegin = await createPageContextServerSide(pageContextInit, globalContext, globalContext_public, {
305
+ isPrerendering: false,
287
306
  ssr: {
288
- urlRewrite,
289
307
  urlHandler: _urlHandler,
290
308
  isClientSideNavigation
291
309
  }
292
310
  });
293
- objectAssign(pageContextInitEnhanced, { _httpRequestId: httpRequestId });
294
- return pageContextInitEnhanced;
311
+ objectAssign(pageContextBegin, { _httpRequestId: httpRequestId });
312
+ return pageContextBegin;
295
313
  }
296
314
  function handlePageContextUrl(urlOriginal) {
297
315
  const { isPageContextRequest } = handlePageContextRequestUrl(urlOriginal);
@@ -314,11 +332,12 @@ function assertIsNotViteRequest(urlPathname, urlOriginal) {
314
332
  return;
315
333
  assertUsage(false, `${pc.code('renderPage(pageContextInit)')} called with ${pc.code(`pageContextInit.urlOriginal===${JSON.stringify(urlOriginal)}`)} which is unexpected because the URL ${pc.bold(urlOriginal)} should have already been handled by the development middleware: make sure the ${pc.cyan('createDevMiddleware()')} middleware is executed *before* the ${pc.cyan('renderPage()')} middleware, see ${pc.underline('https://vike.dev/renderPage')}`);
316
334
  }
317
- async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
335
+ async function normalizeUrl(pageContextBegin, globalContext, httpRequestId) {
336
+ const pageContext = forkPageContext(pageContextBegin);
318
337
  const { trailingSlash, disableUrlNormalization } = globalContext.config;
319
338
  if (disableUrlNormalization)
320
339
  return null;
321
- const { urlOriginal } = pageContextInit;
340
+ const { urlOriginal } = pageContext;
322
341
  const { isPageContextRequest } = handlePageContextRequestUrl(urlOriginal);
323
342
  if (isPageContextRequest)
324
343
  return null;
@@ -326,13 +345,13 @@ async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
326
345
  if (!urlNormalized)
327
346
  return null;
328
347
  logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
329
- const httpResponse = createHttpResponseRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit);
330
- const pageContextHttpResponse = createPageContext(pageContextInit, false);
331
- objectAssign(pageContextHttpResponse, { httpResponse });
332
- return pageContextHttpResponse;
348
+ const httpResponse = createHttpResponseRedirect({ url: urlNormalized, statusCode: 301 }, pageContext);
349
+ objectAssign(pageContext, { httpResponse });
350
+ return pageContext;
333
351
  }
334
- async function getPermanentRedirect(pageContextInit, globalContext, httpRequestId) {
335
- const urlWithoutBase = removeBaseServer(pageContextInit.urlOriginal, globalContext.baseServer);
352
+ async function getPermanentRedirect(pageContextBegin, globalContext, httpRequestId) {
353
+ const pageContext = forkPageContext(pageContextBegin);
354
+ const urlWithoutBase = removeBaseServer(pageContext.urlOriginal, globalContext.baseServer);
336
355
  let origin = null;
337
356
  let urlTargetExternal = null;
338
357
  let urlTarget = modifyUrlPathname(urlWithoutBase, (urlPathname) => {
@@ -365,48 +384,45 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
365
384
  return null;
366
385
  if (!originChanged)
367
386
  urlTarget = prependBase(urlTarget, globalContext.baseServer);
368
- assert(urlTarget !== pageContextInit.urlOriginal);
387
+ assert(urlTarget !== pageContext.urlOriginal);
369
388
  }
370
389
  logRuntimeInfo?.(`Permanent redirection defined by config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
371
- const httpResponse = createHttpResponseRedirect({ url: urlTarget, statusCode: 301 }, pageContextInit);
372
- const pageContextHttpResponse = createPageContext(pageContextInit, false);
373
- objectAssign(pageContextHttpResponse, { httpResponse });
374
- return pageContextHttpResponse;
390
+ const httpResponse = createHttpResponseRedirect({ url: urlTarget, statusCode: 301 }, pageContext);
391
+ objectAssign(pageContext, { httpResponse });
392
+ return pageContext;
375
393
  }
376
394
  function normalize(url) {
377
395
  return url || '/';
378
396
  }
379
- async function handleAbortError(errAbort, pageContextsFromRewrite,
380
- // The original `pageContextInit` object passed to `renderPage(pageContextInit)`
381
- pageContextInit,
382
- // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageInit to it: we only use some pageContextNominalPageInit information.
383
- pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalContext) {
384
- logAbortErrorHandled(errAbort, globalContext.isProduction, pageContextNominalPageInit);
397
+ async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextBegin,
398
+ // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageBegin to it: we only use some pageContextNominalPageBegin information.
399
+ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext) {
400
+ logAbortErrorHandled(errAbort, globalContext._isProduction, pageContextNominalPageBegin);
385
401
  const pageContextAbort = errAbort._pageContextAbort;
386
402
  let pageContextSerialized;
387
- if (pageContextNominalPageInit.isClientSideNavigation) {
403
+ if (pageContextNominalPageBegin.isClientSideNavigation) {
388
404
  if (pageContextAbort.abortStatusCode) {
389
- const errorPageId = getErrorPageId(globalContext.pageFilesAll, globalContext.pageConfigs);
405
+ const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
390
406
  const abortCall = pageContextAbort._abortCall;
391
407
  assert(abortCall);
392
408
  assertUsage(errorPageId, `You called ${pc.cyan(abortCall)} but you didn't define an error page, make sure to define one https://vike.dev/error-page`);
393
- const pageContext = createPageContext({}, false);
409
+ const pageContext = forkPageContext(pageContextBegin);
394
410
  objectAssign(pageContext, { pageId: errorPageId });
395
411
  objectAssign(pageContext, pageContextAbort);
396
412
  objectAssign(pageContext, pageContextErrorPageInit, true);
397
413
  objectAssign(pageContext, await loadUserFilesServerSide(pageContext));
398
414
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
399
- pageContextSerialized = serializePageContextClientSide(pageContext);
415
+ pageContextSerialized = getPageContextClientSerialized(pageContext);
400
416
  }
401
417
  else {
402
- pageContextSerialized = serializePageContextAbort(pageContextAbort);
418
+ pageContextSerialized = getPageContextClientSerializedAbort(pageContextAbort);
403
419
  }
404
420
  const httpResponse = await createHttpResponsePageContextJson(pageContextSerialized);
405
421
  const pageContextReturn = { httpResponse };
406
422
  return { pageContextReturn };
407
423
  }
408
424
  if (pageContextAbort._urlRewrite) {
409
- const pageContextReturn = await renderPageAlreadyPrepared(pageContextInit, globalContext, httpRequestId, [
425
+ const pageContextReturn = await renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRequestId, [
410
426
  ...pageContextsFromRewrite,
411
427
  pageContextAbort
412
428
  ]);
@@ -414,22 +430,22 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
414
430
  return { pageContextReturn };
415
431
  }
416
432
  if (pageContextAbort._urlRedirect) {
417
- const pageContextReturn = createPageContext(pageContextInit, false);
433
+ const pageContextReturn = forkPageContext(pageContextBegin);
418
434
  objectAssign(pageContextReturn, pageContextAbort);
419
- const httpResponse = createHttpResponseRedirect(pageContextAbort._urlRedirect, pageContextInit);
435
+ const httpResponse = createHttpResponseRedirect(pageContextAbort._urlRedirect, pageContextBegin);
420
436
  objectAssign(pageContextReturn, { httpResponse });
421
437
  return { pageContextReturn };
422
438
  }
423
439
  assert(pageContextAbort.abortStatusCode);
424
440
  return { pageContextAbort };
425
441
  }
426
- async function checkBaseUrl(pageContextInit, globalContext) {
442
+ async function checkBaseUrl(pageContextBegin, globalContext) {
443
+ const pageContext = forkPageContext(pageContextBegin);
427
444
  const { baseServer } = globalContext;
428
- const { urlOriginal } = pageContextInit;
445
+ const { urlOriginal } = pageContext;
429
446
  const { isBaseMissing } = parseUrl(urlOriginal, baseServer);
430
447
  if (!isBaseMissing)
431
448
  return;
432
- const pageContext = createPageContext(pageContextInit, false);
433
449
  const httpResponse = createHttpResponseBaseIsMissing(urlOriginal, baseServer);
434
450
  objectAssign(pageContext, {
435
451
  httpResponse,
@@ -438,20 +454,25 @@ async function checkBaseUrl(pageContextInit, globalContext) {
438
454
  checkType(pageContext);
439
455
  return pageContext;
440
456
  }
441
- function renderInvalidRequest(pageContextInit) {
457
+ function getPageContextInvalidRequest(pageContextInit) {
442
458
  const urlPathnameWithBase = parseUrl(pageContextInit.urlOriginal, '/').pathname;
443
459
  assertIsNotViteRequest(urlPathnameWithBase, pageContextInit.urlOriginal);
444
- if (urlPathnameWithBase.endsWith('/favicon.ico')) {
445
- const pageContext = createPageContext(pageContextInit, false);
446
- const httpResponse = createHttpResponseFavicon404();
447
- objectAssign(pageContext, { httpResponse });
448
- checkType(pageContext);
449
- return pageContext;
450
- }
451
- return null;
460
+ if (!urlPathnameWithBase.endsWith('/favicon.ico'))
461
+ return;
462
+ const pageContext = createPageContextServerSideWithoutGlobalContext(pageContextInit);
463
+ const httpResponse = createHttpResponseFavicon404();
464
+ objectAssign(pageContext, { httpResponse });
465
+ checkType(pageContext);
466
+ return pageContext;
452
467
  }
453
- function renderInvalidVikeConfig(err, pageContextInit, httpRequestId) {
468
+ function getPageContextInvalidVikeConfig(err, pageContextInit, httpRequestId) {
454
469
  logRuntimeInfo?.(pc.bold(pc.red('Error while loading a Vike config file, see error above.')), httpRequestId, 'error');
455
- const pageContextWithError = getPageContextHttpResponseError(err, pageContextInit, null);
470
+ const pageContextWithError = getPageContextHttpResponseErrorWithoutGlobalContext(err, pageContextInit);
456
471
  return pageContextWithError;
457
472
  }
473
+ // Create pageContext forks to avoid leaks: upon an error (bug or abort) a brand new pageContext object is created, in order to avoid previous pageContext modifications that are now obsolete to leak to the new pageContext object.
474
+ function forkPageContext(pageContextBegin) {
475
+ const pageContext = {};
476
+ objectAssign(pageContext, pageContextBegin, true);
477
+ return pageContext;
478
+ }
@@ -1,6 +1,12 @@
1
1
  import { renderPage } from './index.js';
2
2
  export default async function universalVikeHandler(request, context, runtime) {
3
- const pageContextInit = { ...context, ...runtime, urlOriginal: request.url, headersOriginal: request.headers };
3
+ const pageContextInit = {
4
+ ...context,
5
+ ...runtime,
6
+ runtime,
7
+ urlOriginal: request.url,
8
+ headersOriginal: request.headers
9
+ };
4
10
  const pageContext = await renderPage(pageContextInit);
5
11
  const response = pageContext.httpResponse;
6
12
  const readable = response.getReadableWebStream();
@@ -30,7 +30,7 @@ export * from '../../utils/debug.js';
30
30
  export * from '../../utils/urlToFile.js';
31
31
  export * from '../../utils/getGlobalObject.js';
32
32
  export * from '../../utils/freezePartial.js';
33
- export * from '../../utils/isNpmPackage.js';
33
+ export * from '../../utils/parseNpmPackage.js';
34
34
  export * from '../../utils/isNullish.js';
35
35
  export * from '../../utils/isScriptFile.js';
36
36
  export * from '../../utils/removeFileExtention.js';
@@ -54,4 +54,5 @@ export * from '../../utils/isVikeReactApp.js';
54
54
  export * from '../../utils/getPropAccessNotation.js';
55
55
  export * from '../../utils/PROJECT_VERSION.js';
56
56
  export * from '../../utils/genPromise.js';
57
- export * from '../../utils/makePublicCopy.js';
57
+ export * from '../../utils/getPublicProxy.js';
58
+ export * from '../../utils/augmentType.js';
@@ -34,7 +34,7 @@ export * from '../../utils/debug.js';
34
34
  export * from '../../utils/urlToFile.js';
35
35
  export * from '../../utils/getGlobalObject.js';
36
36
  export * from '../../utils/freezePartial.js';
37
- export * from '../../utils/isNpmPackage.js';
37
+ export * from '../../utils/parseNpmPackage.js';
38
38
  export * from '../../utils/isNullish.js';
39
39
  export * from '../../utils/isScriptFile.js';
40
40
  export * from '../../utils/removeFileExtention.js';
@@ -58,4 +58,5 @@ export * from '../../utils/isVikeReactApp.js';
58
58
  export * from '../../utils/getPropAccessNotation.js';
59
59
  export * from '../../utils/PROJECT_VERSION.js';
60
60
  export * from '../../utils/genPromise.js';
61
- export * from '../../utils/makePublicCopy.js';
61
+ export * from '../../utils/getPublicProxy.js';
62
+ export * from '../../utils/augmentType.js';