vike 0.4.229 → 0.4.230-commit-8b60b8c

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 (235) hide show
  1. package/dist/cjs/client/server-routing-runtime/utils.js +1 -0
  2. package/dist/cjs/client/shared/{preparePageContextForUserConsumptionClientSide.js → preparePageContextForPublicUsageClientShared.js} +14 -19
  3. package/dist/cjs/node/api/build.js +2 -5
  4. package/dist/cjs/node/plugin/index.js +3 -1
  5. package/dist/cjs/node/plugin/onLoad.js +2 -0
  6. package/dist/cjs/node/plugin/plugins/build/pluginDistFileNames.js +1 -0
  7. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +4 -4
  8. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -0
  9. package/dist/cjs/node/plugin/plugins/envVars.js +17 -19
  10. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -1
  11. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +2 -2
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +1 -1
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +5 -0
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +2 -2
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +12 -8
  17. package/dist/cjs/node/plugin/plugins/replaceConstants.js +76 -0
  18. package/dist/cjs/node/plugin/shared/applyRegExWithMagicString.js +10 -0
  19. package/dist/cjs/node/plugin/shared/findPageFiles.js +1 -1
  20. package/dist/cjs/node/plugin/shared/loggerNotProd.js +2 -2
  21. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  22. package/dist/cjs/node/prerender/runPrerender.js +42 -38
  23. package/dist/cjs/node/prerender/utils.js +1 -1
  24. package/dist/cjs/node/runtime/globalContext.js +13 -27
  25. package/dist/cjs/node/runtime/html/renderHtml.js +12 -2
  26. package/dist/cjs/node/runtime/html/serializeContext.js +4 -2
  27. package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +7 -5
  28. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +3 -4
  29. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +6 -9
  30. package/dist/cjs/node/runtime/renderPage/execHookServer.js +11 -0
  31. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +14 -15
  32. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  33. package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +1 -1
  34. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +1 -1
  35. package/dist/cjs/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
  36. package/dist/cjs/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +10 -0
  37. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
  38. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +0 -2
  39. package/dist/cjs/node/runtime/renderPage.js +21 -12
  40. package/dist/cjs/node/runtime/utils.js +1 -1
  41. package/dist/cjs/shared/NOT_SERIALIZABLE.js +0 -1
  42. package/dist/cjs/shared/addIs404ToPageProps.js +0 -7
  43. package/dist/cjs/shared/createGlobalContextShared.js +37 -8
  44. package/dist/cjs/shared/createPageContextShared.js +14 -11
  45. package/dist/cjs/shared/getPageContext.js +3 -3
  46. package/dist/cjs/shared/getPageContextUrlComputed.js +2 -36
  47. package/dist/cjs/shared/getProxyForPublicUsage.js +56 -0
  48. package/dist/cjs/shared/hooks/execHook.js +170 -0
  49. package/dist/cjs/shared/hooks/getHook.js +23 -4
  50. package/dist/cjs/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +54 -47
  51. package/dist/cjs/shared/prepareGlobalContextForPublicUsage.js +10 -0
  52. package/dist/cjs/shared/preparePageContextForPublicUsage.js +80 -0
  53. package/dist/cjs/shared/route/abort.js +2 -2
  54. package/dist/cjs/shared/route/debug.js +17 -7
  55. package/dist/cjs/shared/route/executeGuardHook.js +4 -9
  56. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +4 -3
  57. package/dist/cjs/shared/route/index.js +2 -4
  58. package/dist/cjs/shared/route/loadPageRoutes.js +6 -0
  59. package/dist/cjs/shared/route/resolveRouteFunction.js +14 -10
  60. package/dist/cjs/shared/utils.js +1 -0
  61. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  62. package/dist/cjs/utils/debug.js +15 -6
  63. package/dist/cjs/utils/isDev.js +3 -1
  64. package/dist/cjs/utils/isScriptFile.js +24 -21
  65. package/dist/cjs/utils/objectAssign.js +3 -3
  66. package/dist/cjs/utils/objectDefineProperty.js +1 -1
  67. package/dist/cjs/utils/parseNpmPackage.js +1 -0
  68. package/dist/cjs/utils/parseUrl-extras.js +0 -1
  69. package/dist/cjs/utils/requireResolve.js +39 -19
  70. package/dist/esm/client/client-routing-runtime/{createPageContext.d.ts → createPageContextClientSide.d.ts} +21 -13
  71. package/dist/esm/client/client-routing-runtime/{createPageContext.js → createPageContextClientSide.js} +9 -11
  72. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +400 -15
  73. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +56 -54
  74. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +11 -1
  75. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +3 -8
  76. package/dist/esm/client/client-routing-runtime/prefetch.js +3 -3
  77. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.d.ts +11 -0
  78. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  79. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +135 -0
  80. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +72 -81
  81. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  82. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  83. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +19 -13
  84. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +15 -26
  85. package/dist/esm/client/server-routing-runtime/entry.js +4 -4
  86. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +11 -1
  87. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.d.ts +9 -0
  88. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  89. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
  90. package/dist/esm/client/server-routing-runtime/utils.js +1 -0
  91. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +11 -1
  92. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +3 -3
  93. package/dist/esm/client/shared/executeOnRenderClientHook.js +4 -13
  94. package/dist/esm/client/shared/{loadUserFilesClientSide.d.ts → loadPageConfigsLazyClientSide.d.ts} +2 -2
  95. package/dist/esm/client/shared/{loadUserFilesClientSide.js → loadPageConfigsLazyClientSide.js} +4 -4
  96. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.d.ts +11 -0
  97. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +39 -0
  98. package/dist/esm/node/api/build.js +2 -2
  99. package/dist/esm/node/plugin/index.js +3 -1
  100. package/dist/esm/node/plugin/onLoad.js +2 -0
  101. package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.js +1 -0
  102. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +4 -4
  103. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -1
  104. package/dist/esm/node/plugin/plugins/envVars.js +18 -20
  105. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +4 -2
  106. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.d.ts +1 -2
  107. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +2 -2
  108. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  109. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +2 -2
  110. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +6 -1
  111. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +3 -3
  112. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +1 -1
  113. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +12 -8
  114. package/dist/esm/node/plugin/plugins/replaceConstants.d.ts +3 -0
  115. package/dist/esm/node/plugin/plugins/replaceConstants.js +71 -0
  116. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.d.ts +3 -0
  117. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.js +8 -0
  118. package/dist/esm/node/plugin/shared/findPageFiles.js +2 -2
  119. package/dist/esm/node/plugin/shared/loggerNotProd.js +1 -1
  120. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.d.ts +1 -1
  121. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  122. package/dist/esm/node/prerender/runPrerender.d.ts +37 -73
  123. package/dist/esm/node/prerender/runPrerender.js +42 -38
  124. package/dist/esm/node/prerender/utils.d.ts +1 -1
  125. package/dist/esm/node/prerender/utils.js +1 -1
  126. package/dist/esm/node/runtime/globalContext.d.ts +46 -251
  127. package/dist/esm/node/runtime/globalContext.js +14 -28
  128. package/dist/esm/node/runtime/html/renderHtml.js +12 -2
  129. package/dist/esm/node/runtime/html/serializeContext.d.ts +1 -1
  130. package/dist/esm/node/runtime/html/serializeContext.js +4 -2
  131. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.d.ts +1 -1
  132. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +7 -5
  133. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +2 -2
  134. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +3 -4
  135. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +26 -41
  136. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +7 -10
  137. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +12 -0
  138. package/dist/esm/node/runtime/renderPage/execHookServer.js +9 -0
  139. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -3
  140. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +14 -15
  141. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +4 -2
  142. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  143. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +1 -1
  144. package/dist/esm/node/runtime/renderPage/getPageAssets.js +1 -1
  145. package/dist/esm/node/runtime/renderPage/{loadUserFilesServerSide.d.ts → loadPageConfigsLazyServerSide.d.ts} +6 -6
  146. package/dist/esm/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
  147. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.d.ts +20 -0
  148. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +8 -0
  149. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +38 -74
  150. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
  151. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +0 -2
  152. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +0 -1
  153. package/dist/esm/node/runtime/renderPage.d.ts +21 -39
  154. package/dist/esm/node/runtime/renderPage.js +22 -13
  155. package/dist/esm/node/runtime/utils.d.ts +1 -1
  156. package/dist/esm/node/runtime/utils.js +1 -1
  157. package/dist/esm/shared/NOT_SERIALIZABLE.js +0 -1
  158. package/dist/esm/shared/addIs404ToPageProps.d.ts +1 -6
  159. package/dist/esm/shared/addIs404ToPageProps.js +1 -8
  160. package/dist/esm/shared/createGlobalContextShared.d.ts +28 -6
  161. package/dist/esm/shared/createGlobalContextShared.js +37 -8
  162. package/dist/esm/shared/createPageContextShared.d.ts +7 -6
  163. package/dist/esm/shared/createPageContextShared.js +15 -12
  164. package/dist/esm/shared/getPageContext.d.ts +1 -1
  165. package/dist/esm/shared/getPageContext.js +1 -1
  166. package/dist/esm/shared/getPageContextUrlComputed.d.ts +2 -5
  167. package/dist/esm/shared/getPageContextUrlComputed.js +3 -37
  168. package/dist/esm/shared/getPageFiles.d.ts +1 -1
  169. package/dist/esm/shared/getProxyForPublicUsage.d.ts +4 -0
  170. package/dist/esm/shared/getProxyForPublicUsage.js +54 -0
  171. package/dist/esm/shared/hooks/execHook.d.ts +63 -0
  172. package/dist/esm/shared/hooks/execHook.js +168 -0
  173. package/dist/esm/shared/hooks/getHook.d.ts +10 -11
  174. package/dist/esm/shared/hooks/getHook.js +23 -4
  175. package/dist/esm/shared/page-configs/Config.d.ts +11 -4
  176. package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.d.ts → getUserFriendlyConfigs.d.ts} +8 -6
  177. package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +55 -48
  178. package/dist/esm/shared/prepareGlobalContextForPublicUsage.d.ts +7 -0
  179. package/dist/esm/shared/prepareGlobalContextForPublicUsage.js +8 -0
  180. package/dist/esm/shared/preparePageContextForPublicUsage.d.ts +11 -0
  181. package/dist/esm/shared/preparePageContextForPublicUsage.js +78 -0
  182. package/dist/esm/shared/route/abort.js +1 -1
  183. package/dist/esm/shared/route/debug.d.ts +4 -1
  184. package/dist/esm/shared/route/debug.js +17 -7
  185. package/dist/esm/shared/route/executeGuardHook.d.ts +4 -3
  186. package/dist/esm/shared/route/executeGuardHook.js +4 -9
  187. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +4 -3
  188. package/dist/esm/shared/route/index.js +2 -4
  189. package/dist/esm/shared/route/loadPageRoutes.d.ts +2 -1
  190. package/dist/esm/shared/route/loadPageRoutes.js +7 -1
  191. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  192. package/dist/esm/shared/route/resolveRouteFunction.js +14 -10
  193. package/dist/esm/shared/types.d.ts +14 -4
  194. package/dist/esm/shared/utils.d.ts +1 -0
  195. package/dist/esm/shared/utils.js +1 -0
  196. package/dist/esm/types/index.d.ts +1 -1
  197. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  198. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  199. package/dist/esm/utils/debug.d.ts +1 -1
  200. package/dist/esm/utils/debug.js +15 -6
  201. package/dist/esm/utils/isDev.js +3 -1
  202. package/dist/esm/utils/isScriptFile.d.ts +5 -5
  203. package/dist/esm/utils/isScriptFile.js +23 -20
  204. package/dist/esm/utils/objectAssign.d.ts +1 -1
  205. package/dist/esm/utils/objectAssign.js +3 -3
  206. package/dist/esm/utils/objectDefineProperty.d.ts +0 -1
  207. package/dist/esm/utils/objectDefineProperty.js +1 -1
  208. package/dist/esm/utils/parseNpmPackage.d.ts +2 -0
  209. package/dist/esm/utils/parseNpmPackage.js +1 -1
  210. package/dist/esm/utils/parseUrl-extras.js +0 -1
  211. package/dist/esm/utils/requireResolve.js +39 -19
  212. package/package.json +2 -2
  213. package/dist/cjs/client/shared/getPageContextProxyForUser.js +0 -16
  214. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -16
  215. package/dist/cjs/shared/getPageConfigsRuntime.js +0 -23
  216. package/dist/cjs/shared/hooks/executeHook.js +0 -87
  217. package/dist/cjs/shared/hooks/executeHookGeneric.js +0 -18
  218. package/dist/cjs/shared/preparePageContextForUserConsumption.js +0 -34
  219. package/dist/cjs/utils/getPublicProxy.js +0 -27
  220. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +0 -2
  221. package/dist/esm/client/shared/getPageContextProxyForUser.js +0 -14
  222. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +0 -12
  223. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.js +0 -44
  224. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +0 -24
  225. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -14
  226. package/dist/esm/shared/getPageConfigsRuntime.d.ts +0 -14
  227. package/dist/esm/shared/getPageConfigsRuntime.js +0 -21
  228. package/dist/esm/shared/hooks/executeHook.d.ts +0 -21
  229. package/dist/esm/shared/hooks/executeHook.js +0 -85
  230. package/dist/esm/shared/hooks/executeHookGeneric.d.ts +0 -8
  231. package/dist/esm/shared/hooks/executeHookGeneric.js +0 -16
  232. package/dist/esm/shared/preparePageContextForUserConsumption.d.ts +0 -5
  233. package/dist/esm/shared/preparePageContextForUserConsumption.js +0 -32
  234. package/dist/esm/utils/getPublicProxy.d.ts +0 -2
  235. package/dist/esm/utils/getPublicProxy.js +0 -25
@@ -2,9 +2,10 @@ import { assertServerRouting } from '../../utils/assertRoutingType.js';
2
2
  assertServerRouting();
3
3
  import { createPageContextClientSide } from './createPageContextClientSide.js';
4
4
  import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
5
- import { assertHook } from '../../shared/hooks/getHook.js';
6
5
  import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
7
6
  import { removeFoucBuster } from '../shared/removeFoucBuster.js';
7
+ import { execHook } from '../../shared/hooks/execHook.js';
8
+ import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
8
9
  // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
9
10
  const isProd = import.meta.env.PROD;
10
11
  assertSingleInstance_onClientEntryServerRouting(isProd);
@@ -13,7 +14,6 @@ if (import.meta.env.DEV)
13
14
  hydrate();
14
15
  async function hydrate() {
15
16
  const pageContext = await createPageContextClientSide();
16
- await executeOnRenderClientHook(pageContext, false);
17
- assertHook(pageContext, 'onHydrationEnd');
18
- await pageContext.exports.onHydrationEnd?.(pageContext);
17
+ await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
18
+ await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
19
19
  }
@@ -5,13 +5,23 @@ type GlobalContextClientWithServerRouting = GlobalContextSharedPublic & Pick<Glo
5
5
  type GlobalContextClientInternal = Awaited<ReturnType<typeof getGlobalContextClientInternal>>;
6
6
  declare const getGlobalContextClientInternal: () => Promise<{
7
7
  isGlobalContext: true;
8
+ _isOriginalObject: true;
8
9
  _virtualFileExports: unknown;
9
10
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
10
11
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
11
12
  _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
12
13
  _allPageIds: string[];
14
+ _userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
13
15
  config: import("../../types/index.js").ConfigResolved;
14
- pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
16
+ pages: {
17
+ [k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
18
+ route: import("../../shared/page-configs/Config.js").Route;
19
+ isErrorPage?: undefined;
20
+ } | {
21
+ route?: undefined;
22
+ isErrorPage: true;
23
+ });
24
+ };
15
25
  } & {
16
26
  isClientSide: true;
17
27
  } & object>;
@@ -0,0 +1,9 @@
1
+ export { preparePageContextForPublicUsageClient };
2
+ export type { PageContextForPublicUsageClient };
3
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
4
+ import type { PageContextInternalClient_ServerRouting } from '../../shared/types.js';
5
+ import type { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
6
+ type PageContextForPublicUsageClient = PageContextPrepareMinimum & PageContextInternalClient_ServerRouting & PageConfigUserFriendlyOld;
7
+ declare function preparePageContextForPublicUsageClient<PageContext extends PageContextForPublicUsageClient>(pageContext: PageContext): PageContext & {
8
+ Page: unknown;
9
+ };
@@ -0,0 +1,5 @@
1
+ export { preparePageContextForPublicUsageClient };
2
+ import { preparePageContextForPublicUsageClientShared } from '../shared/preparePageContextForPublicUsageClientShared.js';
3
+ function preparePageContextForPublicUsageClient(pageContext) {
4
+ return preparePageContextForPublicUsageClientShared(pageContext);
5
+ }
@@ -11,3 +11,4 @@ export * from '../../utils/slice.js';
11
11
  export * from '../../utils/unique.js';
12
12
  export * from '../../utils/getPropAccessNotation.js';
13
13
  export * from '../../utils/augmentType.js';
14
+ export * from '../../utils/changeEnumerable.js';
@@ -15,3 +15,4 @@ export * from '../../utils/slice.js';
15
15
  export * from '../../utils/unique.js'; // Only used by Server Routing (not needed for Client Routing)
16
16
  export * from '../../utils/getPropAccessNotation.js';
17
17
  export * from '../../utils/augmentType.js';
18
+ export * from '../../utils/changeEnumerable.js';
@@ -4,13 +4,23 @@ export { createGetGlobalContextClient };
4
4
  import { type GlobalContextShared } from '../../shared/createGlobalContextShared.js';
5
5
  declare function createGetGlobalContextClient<GlobalContextAddendum extends object>(virtualFileExports: unknown, isClientRouting: boolean, addGlobalContext?: (globalContext: GlobalContextShared) => Promise<GlobalContextAddendum>): () => Promise<{
6
6
  isGlobalContext: true;
7
+ _isOriginalObject: true;
7
8
  _virtualFileExports: unknown;
8
9
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
9
10
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
10
11
  _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
11
12
  _allPageIds: string[];
13
+ _userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
12
14
  config: import("../../types/index.js").ConfigResolved;
13
- pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
15
+ pages: {
16
+ [k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
17
+ route: import("../../shared/page-configs/Config.js").Route;
18
+ isErrorPage?: undefined;
19
+ } | {
20
+ route?: undefined;
21
+ isErrorPage: true;
22
+ });
23
+ };
14
24
  } & Awaited<{
15
25
  /**
16
26
  * Whether the environment is client-side or server-side / pre-rendering.
@@ -1,7 +1,7 @@
1
1
  export { executeOnRenderClientHook };
2
2
  export type { PageContextBeforeRenderClient };
3
3
  import type { PageFile, PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
4
- import { type PageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
4
+ import type { PageContextForPublicUsageClientShared } from './preparePageContextForPublicUsageClientShared.js';
5
5
  import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
6
6
  type PageContextBeforeRenderClient = {
7
7
  _pageFilesLoaded: PageFile[];
@@ -9,5 +9,5 @@ type PageContextBeforeRenderClient = {
9
9
  urlPathname?: string;
10
10
  pageId: string;
11
11
  _pageConfigs: PageConfigRuntime[];
12
- } & PageConfigUserFriendlyOld & PageContextForUserConsumptionClientSide;
13
- declare function executeOnRenderClientHook<PC extends PageContextBeforeRenderClient>(pageContext: PC, isClientRouting: boolean): Promise<void>;
12
+ } & PageConfigUserFriendlyOld & PageContextForPublicUsageClientShared;
13
+ declare function executeOnRenderClientHook<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
@@ -1,22 +1,17 @@
1
1
  export { executeOnRenderClientHook };
2
2
  import { assert, assertUsage } from '../server-routing-runtime/utils.js';
3
3
  import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
4
- import { preparePageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
5
- import { executeHook } from '../../shared/hooks/executeHook.js';
6
- async function executeOnRenderClientHook(pageContext, isClientRouting) {
7
- const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting);
4
+ import { execHookSingle } from '../../shared/hooks/execHook.js';
5
+ async function executeOnRenderClientHook(pageContext, prepareForPublicUsage) {
8
6
  let hook = null;
9
- let hookName;
10
7
  {
11
8
  const renderHook = getHookFromPageContext(pageContext, 'render');
12
9
  hook = renderHook;
13
- hookName = 'render';
14
10
  }
15
11
  {
16
12
  const renderHook = getHookFromPageContext(pageContext, 'onRenderClient');
17
13
  if (renderHook) {
18
14
  hook = renderHook;
19
- hookName = 'onRenderClient';
20
15
  }
21
16
  }
22
17
  if (!hook) {
@@ -42,16 +37,12 @@ async function executeOnRenderClientHook(pageContext, isClientRouting) {
42
37
  assertUsage(false, errMsg);
43
38
  }
44
39
  }
45
- assert(hook);
46
- const renderHook = hook.hookFn;
47
- assert(hookName);
48
40
  // We don't use a try-catch wrapper because rendering errors are usually handled by the UI framework. (E.g. React's Error Boundaries.)
49
- const hookResult = await executeHook(() => renderHook(pageContextForUserConsumption), hook, pageContext);
50
- assertUsage(hookResult === undefined, `The ${hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
41
+ await execHookSingle(hook, pageContext, prepareForPublicUsage);
51
42
  }
52
43
  function getUrlToShowToUser(pageContext) {
53
44
  let url;
54
- // try/catch to avoid passToClient assertUsage() (although: this may not be needed anymore, since we're now accessing pageContext and not pageContextForUserConsumption)
45
+ // try/catch to avoid passToClient assertUsage() (although: this may not be needed anymore, since we're now accessing pageContext and not pageContextForPublicUsage)
55
46
  try {
56
47
  url =
57
48
  // Client Routing
@@ -1,4 +1,4 @@
1
- export { loadUserFilesClientSide };
1
+ export { loadPageConfigsLazyClientSide };
2
2
  export { isErrorFetchingStaticAssets };
3
3
  export type { PageContextUserFiles };
4
4
  import { type PageFile, type PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
@@ -11,5 +11,5 @@ type PageContextUserFiles = {
11
11
  _pageConfigs: PageConfigRuntime[];
12
12
  _pageConfigGlobal: PageConfigGlobalRuntime;
13
13
  };
14
- declare function loadUserFilesClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
14
+ declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
15
15
  declare function isErrorFetchingStaticAssets(err: unknown): boolean;
@@ -1,12 +1,12 @@
1
- export { loadUserFilesClientSide };
1
+ export { loadPageConfigsLazyClientSide };
2
2
  export { isErrorFetchingStaticAssets };
3
3
  import { getPageFilesClientSide } from '../../shared/getPageFiles.js';
4
- import { getPageConfigUserFriendly_oldDesign } from '../../shared/page-configs/getPageConfigUserFriendly.js';
4
+ import { getUserFriendlyConfigsPageLazy } from '../../shared/page-configs/getUserFriendlyConfigs.js';
5
5
  import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
6
6
  import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
7
7
  import { objectAssign } from '../server-routing-runtime/utils.js';
8
8
  const stamp = '__whileFetchingAssets';
9
- async function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
9
+ async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
10
10
  const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
11
11
  const pageConfig = findPageConfig(pageConfigs, pageId);
12
12
  let pageConfigLoaded;
@@ -30,7 +30,7 @@ async function loadUserFilesClientSide(pageId, pageFilesAll, pageConfigs, pageCo
30
30
  }
31
31
  throw err;
32
32
  }
33
- const pageContextExports = getPageConfigUserFriendly_oldDesign(pageFilesClientSide, pageConfigLoaded, pageConfigGlobal);
33
+ const pageContextExports = getUserFriendlyConfigsPageLazy(pageFilesClientSide, pageConfigLoaded, pageConfigGlobal);
34
34
  const pageContextAddendum = {};
35
35
  objectAssign(pageContextAddendum, pageContextExports);
36
36
  objectAssign(pageContextAddendum, { _pageFilesLoaded: pageFilesClientSide });
@@ -0,0 +1,11 @@
1
+ export { preparePageContextForPublicUsageClientShared };
2
+ export { preparePageContextForPublicUsageClientMinimal };
3
+ export type { PageContextForPublicUsageClientShared };
4
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
5
+ import { type PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
6
+ import type { PageContextInternalClient } from '../../shared/types.js';
7
+ type PageContextForPublicUsageClientShared = PageContextPrepareMinimum & PageContextInternalClient & PageConfigUserFriendlyOld;
8
+ declare function preparePageContextForPublicUsageClientShared<PageContext extends PageContextForPublicUsageClientShared>(pageContext: PageContext): PageContext & {
9
+ Page: unknown;
10
+ };
11
+ declare function preparePageContextForPublicUsageClientMinimal<PageContext extends PageContextPrepareMinimum>(pageContext: PageContext): PageContext;
@@ -0,0 +1,39 @@
1
+ export { preparePageContextForPublicUsageClientShared };
2
+ export { preparePageContextForPublicUsageClientMinimal };
3
+ import { objectAssign } from '../server-routing-runtime/utils.js';
4
+ import { assertPropertyGetters, preparePageContextForPublicUsage } from '../../shared/preparePageContextForPublicUsage.js';
5
+ function preparePageContextForPublicUsageClientShared(pageContext) {
6
+ // TODO/now use proxy
7
+ const Page = pageContext.config?.Page ||
8
+ // TODO/next-major-release: remove
9
+ pageContext.exports?.Page;
10
+ objectAssign(pageContext, { Page });
11
+ // TODO/next-major-release: after we remove supportVueReactiviy() we can call this later inside the agnostic preparePageContextForPublicUsage()
12
+ assertPropertyGetters(pageContext);
13
+ // TODO/next-major-release: remove
14
+ // - Requires https://github.com/vikejs/vike-vue/issues/198
15
+ // - Last time I tried to remove it (https://github.com/vikejs/vike/commit/705fd23598d9d69bf46a52c8550216cd7117ce71) the tests were failing as expected: only the Vue integrations that used shallowReactive() failed.
16
+ supportVueReactiviy(pageContext);
17
+ return preparePageContextForPublicUsageClientMinimal(pageContext);
18
+ }
19
+ function preparePageContextForPublicUsageClientMinimal(pageContext) {
20
+ const pageContextPublic = preparePageContextForPublicUsage(pageContext);
21
+ return pageContextPublic;
22
+ }
23
+ // With Vue + Cient Routing, the `pageContext` is made reactive:
24
+ // ```js
25
+ // import { reactive } from 'vue'
26
+ // // See /examples/vue-full/renderer/createVueApp.ts
27
+ // const pageContextReactive = reactive(pageContext)
28
+ // ```
29
+ function supportVueReactiviy(pageContext) {
30
+ resolveGetters(pageContext);
31
+ }
32
+ // Remove propery descriptor getters because they break Vue's reactivity.
33
+ // E.g. resolve the `pageContext.urlPathname` getter.
34
+ function resolveGetters(pageContext) {
35
+ Object.entries(pageContext).forEach(([key, val]) => {
36
+ delete pageContext[key];
37
+ pageContext[key] = val;
38
+ });
39
+ }
@@ -1,10 +1,9 @@
1
1
  export { build };
2
2
  import { prepareViteApiCall } from './prepareViteApiCall.js';
3
3
  import { build as buildVite, version, createBuilder } from 'vite';
4
- import assert from 'assert';
5
4
  import { isVikeCli } from '../cli/context.js';
6
5
  import { isPrerendering } from '../prerender/context.js';
7
- import { assertVersion } from './utils.js';
6
+ import { assert, assertVersion } from './utils.js';
8
7
  /**
9
8
  * Programmatically trigger `$ vike build`
10
9
  *
@@ -16,6 +15,7 @@ async function build(options = {}) {
16
15
  if (viteConfigFromUserEnhanced)
17
16
  viteConfigFromUserEnhanced._viteConfigFromUserEnhanced = viteConfigFromUserEnhanced;
18
17
  if (vikeConfig.global.config.vite6BuilderApp) {
18
+ // This assertion isn't reliable: the user may still use a Vite version older than 6.0.0 — see https://github.com/vitejs/vite/pull/19355
19
19
  assertVersion('Vite', version, '6.0.0');
20
20
  const builder = await createBuilder(viteConfigFromUserEnhanced);
21
21
  // See Vite plugin vike:build:pluginBuildApp
@@ -21,6 +21,7 @@ import { setResolveClientEntriesDev } from '../runtime/renderPage/getPageAssets.
21
21
  import { resolveClientEntriesDev } from './shared/resolveClientEntriesDev.js';
22
22
  import { workaroundCssModuleHmr } from './plugins/workaroundCssModuleHmr.js';
23
23
  import { workaroundVite6HmrRegression } from './plugins/workaroundVite6HmrRegression.js';
24
+ import { replaceConstants } from './plugins/replaceConstants.js';
24
25
  // We don't call this in ./onLoad.ts to avoid a cyclic dependency with utils.ts
25
26
  setResolveClientEntriesDev(resolveClientEntriesDev);
26
27
  // Return `PluginInterop` instead of `Plugin` to avoid type mismatch upon different Vite versions
@@ -38,7 +39,8 @@ function plugin(vikeVitePluginOptions = {}) {
38
39
  envVarsPlugin(),
39
40
  fileEnv(),
40
41
  workaroundCssModuleHmr(),
41
- workaroundVite6HmrRegression()
42
+ workaroundVite6HmrRegression(),
43
+ replaceConstants()
42
44
  ];
43
45
  Object.assign(plugins, { __vikeVitePluginOptions: vikeVitePluginOptions });
44
46
  return plugins;
@@ -9,6 +9,8 @@ function onLoad() {
9
9
  assertIsNotBrowser();
10
10
  assertNodeVersion();
11
11
  // package.json#peerDependencies isn't enough as users often ignore it
12
+ // This assertion isn't reliable: the user may still use a Vite version older than 5.1.0 — see https://github.com/vitejs/vite/pull/19355
13
+ // TO-DO/soon: let's also use this.meta.viteVersion https://github.com/vitejs/vite/pull/20088
12
14
  assertVersion('Vite', version, '5.1.0');
13
15
  // Ensure we don't bloat the server runtime with heavy dependencies such Vite and esbuild
14
16
  assertIsNotProductionRuntime();
@@ -47,6 +47,7 @@ function pluginDistFileNames() {
47
47
  }
48
48
  }
49
49
  // Disable CSS bundling to workaround https://github.com/vikejs/vike/issues/1815
50
+ // TO-DO/eventually: let's bundle CSS again once Rolldown replaces Rollup
50
51
  if (id.endsWith('.css')) {
51
52
  const userRootDir = config.root;
52
53
  if (id.startsWith(userRootDir)) {
@@ -27,14 +27,14 @@ function pluginModuleBanner() {
27
27
  if (id.startsWith(config.root))
28
28
  id = id.slice(config.root.length + 1);
29
29
  id = id.replaceAll('*/', '*\\/'); // https://github.com/vikejs/vike/issues/2377
30
- const s = new MagicString(code);
30
+ const magicString = new MagicString(code);
31
31
  // Use legal comment so that esbuild doesn't remove it.
32
32
  // - Terser still removes the comment, but I guess users use terser to minify JavaScript so I guess it's a good thing that comment is removed.
33
33
  // - https://esbuild.github.io/api/#legal-comments
34
- s.prepend(`/*! ${id} [vike:pluginModuleBanner] */\n`);
34
+ magicString.prepend(`/*! ${id} [vike:pluginModuleBanner] */\n`);
35
35
  return {
36
- code: s.toString(),
37
- map: s.generateMap({ hires: true, source: id })
36
+ code: magicString.toString(),
37
+ map: magicString.generateMap({ hires: true, source: id })
38
38
  };
39
39
  }
40
40
  }
@@ -1,6 +1,6 @@
1
1
  export { determineOptimizeDeps };
2
2
  import { findPageFiles } from '../../shared/findPageFiles.js';
3
- import { assert, assertIsImportPathNpmPackage, createDebugger, isArray, unique } from '../../utils.js';
3
+ import { assert, assertIsImportPathNpmPackage, createDebugger, getNpmPackageName, isArray, unique } from '../../utils.js';
4
4
  import { getVikeConfig, isOverriden } from '../importUserCode/v1-design/getVikeConfig.js';
5
5
  import { analyzeClientEntries } from '../build/pluginBuildConfig.js';
6
6
  import { virtualFileIdImportUserCodeClientCR, virtualFileIdImportUserCodeClientSR } from '../../../shared/virtual-files/virtualFileImportUserCode.js';
@@ -55,6 +55,11 @@ async function getPageDeps(config, pageConfigs) {
55
55
  return;
56
56
  if (definedAt.definedBy)
57
57
  return;
58
+ if (definedAt.importPathAbsolute) {
59
+ const npmPackageName = getNpmPackageName(definedAt.importPathAbsolute);
60
+ if (npmPackageName && config.optimizeDeps.exclude?.includes(npmPackageName))
61
+ return;
62
+ }
58
63
  if (definedAt.filePathAbsoluteUserRootDir !== null) {
59
64
  // Vite expects entries to be filesystem absolute paths (surprisingly so).
60
65
  addEntry(definedAt.filePathAbsoluteFilesystem);
@@ -1,11 +1,12 @@
1
1
  export { envVarsPlugin };
2
2
  import MagicString from 'magic-string';
3
3
  import { loadEnv } from 'vite';
4
- import { assert, assertPosixPath, assertUsage, assertWarning, escapeRegex, isArray, lowerFirst } from '../utils.js';
4
+ import { assert, assertPosixPath, assertUsage, assertWarning, escapeRegex, isArray, isNotNullish, lowerFirst } from '../utils.js';
5
5
  import { getModuleFilePathAbsolute } from '../shared/getFilePath.js';
6
6
  import { normalizeId } from '../shared/normalizeId.js';
7
7
  import { isViteServerBuild_safe } from '../shared/isViteServerBuild.js';
8
- // TODO/enventually: (after we implemented vike.config.js)
8
+ import { applyRegExpWithMagicString } from '../shared/applyRegExWithMagicString.js';
9
+ // TODO/enventually:
9
10
  // - Make import.meta.env work inside +config.js
10
11
  // - For it to work, we'll probably need the user to define the settings (e.g. `envDir`) for loadEnv() inside vike.config.js instead of vite.config.js
11
12
  // - Or stop using Vite's `mode` implemention and have Vike implement its own `mode` feature? (So that the only dependencies are `$ vike build --mode staging` and `$ MODE=staging vike build`.)
@@ -22,7 +23,6 @@ function envVarsPlugin() {
22
23
  enforce: 'post',
23
24
  configResolved(config_) {
24
25
  config = config_;
25
- config.command;
26
26
  envsAll = loadEnv(config.mode, config.envDir || config.root, '');
27
27
  config.plugins.sort(lowerFirst((plugin) => (plugin.name === 'vite:define' ? 1 : 0)));
28
28
  },
@@ -38,21 +38,22 @@ function envVarsPlugin() {
38
38
  return;
39
39
  const isBuild = config.command === 'build';
40
40
  const isClientSide = !isViteServerBuild_safe(config, options);
41
- const s = new MagicString(code);
42
- Object.entries(envsAll)
41
+ const magicString = new MagicString(code);
42
+ // Find & check
43
+ const replacements = Object.entries(envsAll)
43
44
  .filter(([key]) => {
44
45
  // Already handled by Vite
45
46
  const envPrefix = !config.envPrefix ? [] : isArray(config.envPrefix) ? config.envPrefix : [config.envPrefix];
46
47
  return !envPrefix.some((prefix) => key.startsWith(prefix));
47
48
  })
48
- .forEach(([envName, envVal]) => {
49
+ .map(([envName, envVal]) => {
49
50
  const envStatement = `import.meta.env.${envName}`;
50
- const envStatementRegExStr = escapeRegex(envStatement) + '\\b';
51
+ const envStatementRegExpStr = escapeRegex(envStatement) + '\\b';
51
52
  // Security check
52
53
  {
53
54
  const isPrivate = !envName.startsWith(PUBLIC_ENV_PREFIX) && !PUBLIC_ENV_ALLOWLIST.includes(envName);
54
55
  if (isPrivate && isClientSide) {
55
- if (!new RegExp(envStatementRegExStr).test(code))
56
+ if (!new RegExp(envStatementRegExpStr).test(code))
56
57
  return;
57
58
  const modulePath = getModuleFilePathAbsolute(id, config);
58
59
  const errMsgAddendum = isBuild ? '' : ' (Vike will prevent your app from building for production)';
@@ -70,22 +71,19 @@ function envVarsPlugin() {
70
71
  // Double check
71
72
  assert(!(isPrivate && isClientSide) || !isBuild);
72
73
  }
73
- // Apply
74
- applyEnvVar(s, envStatementRegExStr, envVal);
74
+ return { regExpStr: envStatementRegExpStr, replacement: envVal };
75
+ })
76
+ .filter(isNotNullish);
77
+ // Apply
78
+ replacements.forEach(({ regExpStr, replacement }) => {
79
+ applyRegExpWithMagicString(magicString, regExpStr, replacement);
75
80
  });
76
- if (!s.hasChanged())
81
+ if (!magicString.hasChanged())
77
82
  return null;
78
83
  return {
79
- code: s.toString(),
80
- map: s.generateMap({ hires: true, source: id })
84
+ code: magicString.toString(),
85
+ map: magicString.generateMap({ hires: true, source: id })
81
86
  };
82
87
  }
83
88
  };
84
89
  }
85
- function applyEnvVar(s, envStatementRegExStr, envVal) {
86
- const envStatementRegEx = new RegExp(envStatementRegExStr, 'g');
87
- let match;
88
- while ((match = envStatementRegEx.exec(s.original))) {
89
- s.overwrite(match.index, match.index + match[0].length, JSON.stringify(envVal));
90
- }
91
- }
@@ -1,5 +1,5 @@
1
1
  export { getVirtualFileImportUserCode };
2
- import { assert, assertPosixPath, scriptFileExtensions, debugGlob, isVersionOrAbove, assertWarning } from '../../utils.js';
2
+ import { assert, assertPosixPath, scriptFileExtensionPattern, debugGlob, isVersionOrAbove, assertWarning } from '../../utils.js';
3
3
  import { isVirtualFileIdImportUserCode } from '../../../shared/virtual-files/virtualFileImportUserCode.js';
4
4
  import { version as viteVersion } from 'vite';
5
5
  import { fileTypes } from '../../../../shared/getPageFiles/fileTypes.js';
@@ -174,7 +174,9 @@ function getGlobRoots(config) {
174
174
  }
175
175
  function getGlobPath(globRootDir, fileType) {
176
176
  assertPosixPath(globRootDir);
177
- let globPath = [...globRootDir.split('/'), '**', `*${fileType}.${scriptFileExtensions}`].filter(Boolean).join('/');
177
+ let globPath = [...globRootDir.split('/'), '**', `*${fileType}.${scriptFileExtensionPattern}`]
178
+ .filter(Boolean)
179
+ .join('/');
178
180
  if (!globPath.startsWith('/')) {
179
181
  globPath = '/' + globPath;
180
182
  }
@@ -1,6 +1,5 @@
1
1
  export { assertExtensionsConventions };
2
2
  export { assertExtensionsRequire };
3
3
  import type { PlusFile } from './getPlusFilesAll.js';
4
- import { PageConfigBuildTime } from '../../../../../../shared/page-configs/PageConfig.js';
5
4
  declare function assertExtensionsConventions(plusFile: PlusFile): void;
6
- declare function assertExtensionsRequire(pageConfig: PageConfigBuildTime): void;
5
+ declare function assertExtensionsRequire(plusFiles: PlusFile[]): void;
@@ -28,8 +28,8 @@ function assertExtensionName(plusFile) {
28
28
  const name = getNameValue(plusFile);
29
29
  assertUsage(name, `Vike extension name missing: the config ${filePathToShowToUser} must define the setting ${pc.cyan('name')}`);
30
30
  }
31
- function assertExtensionsRequire(pageConfig) {
32
- const plusFilesRelevantList = pageConfig.plusFiles;
31
+ function assertExtensionsRequire(plusFiles) {
32
+ const plusFilesRelevantList = plusFiles;
33
33
  // Collect extensions
34
34
  const extensions = {};
35
35
  plusFilesRelevantList.forEach((plusFile) => {
@@ -19,6 +19,7 @@ const configDefinitionsBuiltIn = {
19
19
  },
20
20
  onCreatePageContext: {
21
21
  env: { server: true, client: true },
22
+ // Required because `onCreatePageContext()` is called before routing
22
23
  global: true,
23
24
  cumulative: true
24
25
  },
@@ -55,6 +56,10 @@ const configDefinitionsBuiltIn = {
55
56
  data: {
56
57
  env: { server: true }
57
58
  },
59
+ onData: {
60
+ env: { server: true, client: true },
61
+ cumulative: true
62
+ },
58
63
  iKnowThePerformanceRisksOfAsyncRouteFunctions: {
59
64
  env: { server: true, client: 'if-client-routing' },
60
65
  eager: true
@@ -1,7 +1,7 @@
1
1
  export { crawlPlusFiles };
2
2
  export { isPlusFile };
3
3
  export { getPlusFileValueConfigName };
4
- import { assertPosixPath, assert, scriptFileExtensions, assertIsSingleModuleInstance, assertIsNotProductionRuntime, isVersionOrAbove, isScriptFile, scriptFileExtensionList, createDebugger, deepEqual, assertUsage, assertFilePathAbsoluteFilesystem, assertWarning, hasProp, isNotNullish } from '../../../../utils.js';
4
+ import { assertPosixPath, assert, scriptFileExtensionPattern, assertIsSingleModuleInstance, assertIsNotProductionRuntime, isVersionOrAbove, isScriptFile, scriptFileExtensionList, createDebugger, deepEqual, assertUsage, assertFilePathAbsoluteFilesystem, assertWarning, hasProp, isNotNullish } from '../../../../utils.js';
5
5
  import path from 'path';
6
6
  import { glob } from 'tinyglobby';
7
7
  import { exec } from 'child_process';
@@ -115,7 +115,7 @@ async function gitLsFiles(userRootDir, ignorePatterns, ignoreMatchers) {
115
115
  }
116
116
  // Same as gitLsFiles() but using tinyglobby
117
117
  async function tinyglobby(userRootDir, ignorePatterns) {
118
- const pattern = `**/+*.${scriptFileExtensions}`;
118
+ const pattern = `**/+*.${scriptFileExtensionPattern}`;
119
119
  const options = {
120
120
  ignore: ignorePatterns,
121
121
  cwd: userRootDir,
@@ -7,7 +7,7 @@ import { getConfigFileExport } from './getConfigFileExport.js';
7
7
  import { loadConfigFile, loadValueFile } from './loadFileAtConfigTime.js';
8
8
  import { resolvePointerImport } from './resolvePointerImport.js';
9
9
  import { getFilePathResolved } from '../../../../shared/getFilePath.js';
10
- import { assertExtensionsConventions } from './assertExtensions.js';
10
+ import { assertExtensionsConventions, assertExtensionsRequire } from './assertExtensions.js';
11
11
  async function getPlusFilesAll(userRootDir, esbuildCache) {
12
12
  const plusFiles = await findPlusFiles(userRootDir);
13
13
  const configFiles = [];
@@ -80,8 +80,13 @@ async function getPlusFilesAll(userRootDir, esbuildCache) {
80
80
  Object.entries(plusFilesAll).forEach(([_locationId, plusFiles]) => {
81
81
  plusFiles.sort(sortMakeDeterministic);
82
82
  });
83
+ assertPlusFiles(plusFilesAll);
83
84
  return plusFilesAll;
84
85
  }
86
+ function assertPlusFiles(plusFilesAll) {
87
+ const plusFiles = Object.values(plusFilesAll).flat();
88
+ assertExtensionsRequire(plusFiles);
89
+ }
85
90
  function getPlusFileFromConfigFile(configFile, isExtensionConfig, locationId, userRootDir) {
86
91
  const { fileExports, filePath, extendsFilePaths } = configFile;
87
92
  const fileExportsByConfigName = {};
@@ -7,7 +7,7 @@ import fs from 'fs';
7
7
  import path from 'path';
8
8
  import pc from '@brillout/picocolors';
9
9
  import { import_ } from '@brillout/import';
10
- import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, assertWarning, isObject, toPosixPath, assertUsage, isPlainJavaScriptFile, createDebugger, assertFilePathAbsoluteFilesystem, assertIsImportPathNpmPackage, genPromise, isVitest, isImportPathNpmPackageOrPathAlias, isImportPathRelative, requireResolveOptionalDir } from '../../../../utils.js';
10
+ import { assertPosixPath, getRandomId, assertIsNotProductionRuntime, assert, assertWarning, isObject, toPosixPath, assertUsage, isPlainScriptFile, createDebugger, assertFilePathAbsoluteFilesystem, assertIsImportPathNpmPackage, genPromise, isVitest, isImportPathNpmPackageOrPathAlias, isImportPathRelative, requireResolveOptionalDir } from '../../../../utils.js';
11
11
  import { transformPointerImports } from './pointerImports.js';
12
12
  import sourceMapSupport from 'source-map-support';
13
13
  import { getFilePathAbsoluteUserRootDir } from '../../../../shared/getFilePath.js';
@@ -26,7 +26,7 @@ async function transpileAndExecuteFile(filePath, userRootDir, isExtensionConfig,
26
26
  }
27
27
  const { promise, resolve } = genPromise();
28
28
  esbuildCache.transpileCache[filePathAbsoluteFilesystem] = promise;
29
- assertUsage(isPlainJavaScriptFile(filePathAbsoluteFilesystem), `${filePathToShowToUserResolved} has file extension .${fileExtension} but a config file can only be a JavaScript/TypeScript file`);
29
+ assertUsage(isPlainScriptFile(filePathAbsoluteFilesystem), `${filePathToShowToUserResolved} has file extension .${fileExtension} but a config file can only be a JavaScript/TypeScript file`);
30
30
  const isHeader = isHeaderFile(filePathAbsoluteFilesystem);
31
31
  if (isHeader) {
32
32
  assertWarning(false, `${pc.cyan('.h.js')} files are deprecated: simply renaming ${filePathToShowToUserResolved} to ${removeHeaderFileExtension(filePathToShowToUserResolved)} is usually enough, although you may occasionally need to use ${pc.cyan("with { type: 'pointer' }")} as explained at https://vike.dev/config#pointer-imports`, { onlyOnce: true });
@@ -152,7 +152,7 @@ async function transpileWithEsbuild(filePath, userRootDir, transformImports, esb
152
152
  const isVikeExtensionImport = (path.startsWith('vike-') && path.endsWith('/config')) || importPathResolved.endsWith('+config.js');
153
153
  const isPointerImport = transformImports === 'all' ||
154
154
  // .jsx, .vue, .svg, ... => obviously not config code => pointer import
155
- !isPlainJavaScriptFile(importPathResolved) ||
155
+ !isPlainScriptFile(importPathResolved) ||
156
156
  // Import of a Vike extension config => make it a pointer import because we want to show nice error messages (that can display whether a config has been set by the user or by a Vike extension).
157
157
  // - Should we stop doing this? (And instead let Node.js directly load Vike extensions.)
158
158
  // - In principle, we can use the setting 'name' value of Vike extensions.
@@ -11,7 +11,7 @@ export type { VikeConfigObject };
11
11
  import type { PageConfigGlobalBuildTime, ConfigValueSource, PageConfigBuildTime } from '../../../../../shared/page-configs/PageConfig.js';
12
12
  import { type ConfigDefinitions, type ConfigDefinitionInternal } from './getVikeConfig/configDefinitionsBuiltIn.js';
13
13
  import type { ResolvedConfig, UserConfig } from 'vite';
14
- import { type PageConfigUserFriendly, type PageConfigsUserFriendly } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
14
+ import { type PageConfigUserFriendly, type PageConfigsUserFriendly } from '../../../../../shared/page-configs/getUserFriendlyConfigs.js';
15
15
  import { type PlusFile } from './getVikeConfig/getPlusFilesAll.js';
16
16
  type VikeConfigObject = {
17
17
  pageConfigs: PageConfigBuildTime[];