vike 0.4.267 → 0.4.268-commit-45c1759

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 (204) hide show
  1. package/RenderErrorPage.js +2 -2
  2. package/abort.js +2 -2
  3. package/dist/client/__internal/index.d.ts +2 -0
  4. package/dist/client/__internal/index.js +3 -0
  5. package/dist/client/runtime-client-routing/createPageContextClient.d.ts +5 -0
  6. package/dist/client/runtime-client-routing/getGlobalContextClientInternal.d.ts +5 -0
  7. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +26 -2
  8. package/dist/client/runtime-client-routing/getPageContextFromHooks.js +4 -5
  9. package/dist/client/runtime-client-routing/renderPageClient.d.ts +481 -10
  10. package/dist/client/runtime-client-routing/renderPageClient.js +116 -41
  11. package/dist/client/runtime-client-routing/streamedValues.d.ts +5 -0
  12. package/dist/client/runtime-client-routing/streamedValues.js +23 -0
  13. package/dist/client/runtime-server-routing/createPageContextClient.d.ts +5 -0
  14. package/dist/client/runtime-server-routing/entry.js +1 -1
  15. package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +5 -0
  16. package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +5 -0
  17. package/dist/client/shared/getGlobalContextClientInternalShared.js +2 -0
  18. package/dist/client/shared/getJsonSerializedInHtml.d.ts +2 -2
  19. package/dist/client/shared/getJsonSerializedInHtml.js +9 -6
  20. package/dist/client/shared/loadPageConfigsLazyClientSide.js +0 -4
  21. package/dist/client/shared/removeFoucBuster.js +14 -3
  22. package/dist/client/shared/streamedValues/asyncIterable.d.ts +4 -0
  23. package/dist/client/shared/streamedValues/asyncIterable.js +26 -0
  24. package/dist/client/shared/streamedValues/lines.d.ts +11 -0
  25. package/dist/client/shared/streamedValues/lines.js +19 -0
  26. package/dist/client/shared/streamedValues/promise.d.ts +4 -0
  27. package/dist/client/shared/streamedValues/promise.js +19 -0
  28. package/dist/client/shared/streamedValues/readableStream.d.ts +4 -0
  29. package/dist/client/shared/streamedValues/readableStream.js +44 -0
  30. package/dist/client/shared/streamedValues/registry.d.ts +21 -0
  31. package/dist/client/shared/streamedValues/registry.js +40 -0
  32. package/dist/client/shared/streamedValues.d.ts +7 -0
  33. package/dist/client/shared/streamedValues.js +82 -0
  34. package/dist/node/api/dev.js +15 -1
  35. package/dist/node/api/resolveViteConfigUser.js +2 -2
  36. package/dist/node/api/serverEntryDev.d.ts +10 -0
  37. package/dist/node/api/serverEntryDev.js +125 -0
  38. package/dist/node/createDevMiddleware.js +12 -0
  39. package/dist/node/prerender/resolvePrerenderConfig.d.ts +1 -1
  40. package/dist/node/prerender/resolvePrerenderConfig.js +4 -1
  41. package/dist/node/prerender/runPrerender.d.ts +18 -18
  42. package/dist/node/prerender/runPrerender.js +61 -16
  43. package/dist/node/vite/assertEnvVite.js +1 -1
  44. package/dist/node/vite/index.js +2 -0
  45. package/dist/node/vite/plugins/build/handleAssetsManifest.js +6 -2
  46. package/dist/node/vite/plugins/build/pluginBuildApp.js +25 -26
  47. package/dist/node/vite/plugins/build/pluginBuildConfig.d.ts +2 -2
  48. package/dist/node/vite/plugins/build/pluginBuildConfig.js +25 -17
  49. package/dist/node/vite/plugins/build/pluginDistFileNames.js +70 -50
  50. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.d.ts +6 -0
  51. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.js +71 -0
  52. package/dist/node/vite/plugins/build/pluginSuppressRollupWarning.js +19 -17
  53. package/dist/node/vite/plugins/pluginCommon.js +10 -7
  54. package/dist/node/vite/plugins/pluginDev/optimizeDeps.d.ts +2 -2
  55. package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +6 -2
  56. package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +6 -4
  57. package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.d.ts +3 -0
  58. package/dist/node/vite/plugins/pluginUniversalDeploy/getServerConfig.js +28 -2
  59. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.d.ts +1 -1
  60. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginServerEntryAlias.js +22 -11
  61. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginWrapServerFile.d.ts +4 -0
  62. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginWrapServerFile.js +29 -0
  63. package/dist/node/vite/plugins/pluginUniversalDeploy.js +29 -5
  64. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.d.ts +2 -1
  65. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.js +29 -12
  66. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +3 -2
  67. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +7 -7
  68. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +10 -6
  69. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +5 -11
  70. package/dist/node/vite/plugins/pluginVirtualFiles.js +20 -0
  71. package/dist/node/vite/shared/addSsrMiddleware.js +11 -27
  72. package/dist/node/vite/shared/findPageFiles.d.ts +1 -1
  73. package/dist/node/vite/shared/findPageFiles.js +1 -11
  74. package/dist/node/vite/shared/getAssetsDir.d.ts +3 -2
  75. package/dist/node/vite/shared/getAssetsDir.js +3 -3
  76. package/dist/node/vite/shared/isViteCli.d.ts +3 -3
  77. package/dist/node/vite/shared/isViteCli.js +80 -84
  78. package/dist/node/vite/shared/isViteServerSide.js +2 -7
  79. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +6 -4
  80. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +17 -6
  81. package/dist/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +9 -2
  82. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +5 -1
  83. package/dist/node/vite/shared/resolveVikeConfigInternal.js +86 -13
  84. package/dist/server/__internal/fetch-deprecated.d.ts +2 -0
  85. package/dist/server/__internal/fetch-deprecated.js +6 -0
  86. package/dist/server/__internal/fetch.d.ts +9 -0
  87. package/dist/server/__internal/fetch.js +5 -0
  88. package/dist/server/__internal/index.d.ts +4 -0
  89. package/dist/server/__internal/index.js +8 -0
  90. package/dist/server/createPageRenderer.d.ts +2 -2
  91. package/dist/server/createPageRenderer.js +2 -2
  92. package/dist/server/runtime/createDevMiddleware.js +3 -1
  93. package/dist/server/runtime/globalContext.d.ts +69 -10
  94. package/dist/server/runtime/globalContext.js +35 -2
  95. package/dist/server/runtime/index.d.ts +1 -1
  96. package/dist/server/runtime/index.js +1 -1
  97. package/dist/server/runtime/renderPageServer/analyzePage.js +3 -3
  98. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +20 -9
  99. package/dist/server/runtime/renderPageServer/createHttpResponse.js +34 -21
  100. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +13 -23
  101. package/dist/server/runtime/renderPageServer/csp.d.ts +2 -1
  102. package/dist/server/runtime/renderPageServer/csp.js +2 -1
  103. package/dist/server/runtime/renderPageServer/execHookOnError.js +1 -1
  104. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.d.ts +9 -0
  105. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.js +21 -9
  106. package/dist/server/runtime/renderPageServer/getHttpResponseBody.d.ts +2 -2
  107. package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +19 -12
  108. package/dist/server/runtime/renderPageServer/getPageContextJson.d.ts +8 -0
  109. package/dist/server/runtime/renderPageServer/getPageContextJson.js +47 -0
  110. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +2 -0
  111. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +1 -1
  112. package/dist/server/runtime/renderPageServer/handlePageContextRequestUrl.js +2 -2
  113. package/dist/server/runtime/renderPageServer/headersResponse.d.ts +11 -2
  114. package/dist/server/runtime/renderPageServer/headersResponse.js +22 -2
  115. package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +5 -4
  116. package/dist/server/runtime/renderPageServer/html/injectAssets.d.ts +3 -2
  117. package/dist/server/runtime/renderPageServer/html/injectAssets.js +7 -1
  118. package/dist/server/runtime/renderPageServer/html/renderHtml.js +4 -2
  119. package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +5 -1
  120. package/dist/server/runtime/renderPageServer/html/serializeContext.js +12 -9
  121. package/dist/server/runtime/renderPageServer/html/stream.d.ts +13 -6
  122. package/dist/server/runtime/renderPageServer/html/stream.js +135 -32
  123. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.d.ts +30 -0
  124. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.js +92 -0
  125. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +10 -14
  126. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.js +5 -1
  127. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.d.ts +15 -0
  128. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.js +61 -0
  129. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +320 -55
  130. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +21 -12
  131. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.d.ts +4 -0
  132. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.js +12 -0
  133. package/dist/server/runtime/renderPageServer/streamedValues/lines.d.ts +10 -0
  134. package/dist/server/runtime/renderPageServer/streamedValues/lines.js +49 -0
  135. package/dist/server/runtime/renderPageServer/streamedValues/promise.d.ts +4 -0
  136. package/dist/server/runtime/renderPageServer/streamedValues/promise.js +14 -0
  137. package/dist/server/runtime/renderPageServer/streamedValues/pump.d.ts +10 -0
  138. package/dist/server/runtime/renderPageServer/streamedValues/pump.js +67 -0
  139. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.d.ts +4 -0
  140. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.js +12 -0
  141. package/dist/server/runtime/renderPageServer/streamedValues/registry.d.ts +28 -0
  142. package/dist/server/runtime/renderPageServer/streamedValues/registry.js +33 -0
  143. package/dist/server/runtime/renderPageServer.d.ts +65 -18
  144. package/dist/server/runtime/renderPageServer.js +33 -62
  145. package/dist/server/runtime/universal-middleware/core.d.ts +25 -0
  146. package/dist/server/runtime/universal-middleware/core.js +167 -0
  147. package/dist/server/runtime/universal-middleware/deprecated-export.d.ts +3 -0
  148. package/dist/server/runtime/universal-middleware/deprecated-export.js +10 -0
  149. package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.d.ts +15 -0
  150. package/dist/server/runtime/universal-middleware/getMiddlewaresPipe.js +51 -0
  151. package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.d.ts +9 -0
  152. package/dist/server/runtime/universal-middleware/vikeUniversalMiddleware.js +22 -0
  153. package/dist/shared-server-client/createGlobalContextShared.d.ts +8 -0
  154. package/dist/shared-server-client/createGlobalContextShared.js +2 -1
  155. package/dist/shared-server-client/getPageContextPublicShared.js +0 -2
  156. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.d.ts +8 -0
  157. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.js +17 -7
  158. package/dist/shared-server-client/hooks/execHook.d.ts +1 -1
  159. package/dist/shared-server-client/hooks/execHook.js +2 -2
  160. package/dist/shared-server-client/page-configs/serialize/serializeConfigValues.js +2 -0
  161. package/dist/shared-server-client/route/abort.d.ts +1 -1
  162. package/dist/shared-server-client/route/abort.js +4 -2
  163. package/dist/shared-server-client/streamedValues.d.ts +22 -0
  164. package/dist/shared-server-client/streamedValues.js +24 -0
  165. package/dist/shared-server-node/vike-environments.d.ts +4 -0
  166. package/dist/shared-server-node/vike-environments.js +10 -0
  167. package/dist/shared-server-node/virtualFileId.d.ts +7 -5
  168. package/dist/shared-server-node/virtualFileId.js +42 -42
  169. package/dist/types/Config.d.ts +11 -3
  170. package/dist/types/GlobalContext.d.ts +3 -3
  171. package/dist/types/PageConfig.d.ts +13 -5
  172. package/dist/types/PageContext.d.ts +18 -10
  173. package/dist/types/PageContext.js +1 -0
  174. package/dist/types/Server.d.ts +1 -1
  175. package/dist/types/VikeNamespace.d.ts +1 -1
  176. package/dist/types/index.d.ts +1 -0
  177. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  178. package/dist/utils/PROJECT_VERSION.js +1 -1
  179. package/dist/utils/assertViteVersion.d.ts +1 -3
  180. package/dist/utils/assertViteVersion.js +6 -9
  181. package/dist/utils/catchInfiniteLoop.js +33 -11
  182. package/dist/utils/deepEqual.d.ts +2 -1
  183. package/dist/utils/deepEqual.js +21 -6
  184. package/dist/utils/getContentTypeFromUrl.d.ts +2 -0
  185. package/dist/utils/getContentTypeFromUrl.js +39 -0
  186. package/dist/utils/injectRollupInputs.d.ts +2 -2
  187. package/dist/utils/injectRollupInputs.js +2 -2
  188. package/dist/utils/installUncaughtErrorHandlers.js +9 -0
  189. package/dist/utils/isDev.js +2 -7
  190. package/dist/utils/parseUrl-extras.js +4 -0
  191. package/fetch.js +2 -2
  192. package/modifyUrl.js +2 -2
  193. package/package.json +42 -26
  194. package/routing.js +2 -2
  195. package/universal-middleware.js +2 -2
  196. package/vike-server.d.ts +14 -0
  197. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginUnwrapProdOptions.d.ts +0 -4
  198. package/dist/node/vite/plugins/pluginUniversalDeploy/pluginUnwrapProdOptions.js +0 -22
  199. package/dist/server/runtime/fetch.d.ts +0 -10
  200. package/dist/server/runtime/fetch.js +0 -5
  201. package/dist/server/runtime/universal-middleware.d.ts +0 -10
  202. package/dist/server/runtime/universal-middleware.js +0 -27
  203. package/dist/shared-server-client/addIs404ToPageProps.d.ts +0 -2
  204. package/dist/shared-server-client/addIs404ToPageProps.js +0 -17
@@ -4,6 +4,7 @@ export { getVikeConfig };
4
4
  export { getVikeConfigInternal };
5
5
  export { getVikeConfigInternalOptional };
6
6
  export { setVikeConfigContext };
7
+ export { setViteEnvironmentNames };
7
8
  export { isVikeConfigContextSet };
8
9
  export { reloadVikeConfig };
9
10
  export { isV1Design };
@@ -12,7 +13,6 @@ export { getConfigDefinitionOptional };
12
13
  export { getVikeConfigFromCliOrEnv };
13
14
  export { EARLY_SETTINGS };
14
15
  import { deepEqual } from '../../../utils/deepEqual.js';
15
- import { assertKeys } from '../../../utils/assertKeys.js';
16
16
  import { assertIsNotProductionRuntime } from '../../../utils/assertSetup.js';
17
17
  import { getMostSimilar } from '../../../utils/getMostSimilar.js';
18
18
  import { objectEntries } from '../../../utils/objectEntries.js';
@@ -23,6 +23,7 @@ import { checkType } from '../../../utils/checkType.js';
23
23
  import { genPromise } from '../../../utils/genPromise.js';
24
24
  import { getGlobalObject } from '../../../utils/getGlobalObject.js';
25
25
  import { hasProp } from '../../../utils/hasProp.js';
26
+ import { includes } from '../../../utils/includes.js';
26
27
  import { isCallable } from '../../../utils/isCallable.js';
27
28
  import { isObject } from '../../../utils/isObject.js';
28
29
  import { joinEnglish } from '../../../utils/joinEnglish.js';
@@ -42,6 +43,7 @@ import { loadPointerImport, loadValueFile } from './resolveVikeConfigInternal/lo
42
43
  import { resolvePointerImport } from './resolveVikeConfigInternal/resolvePointerImport.js';
43
44
  import { parsePointerImportData } from './resolveVikeConfigInternal/pointerImports.js';
44
45
  import { getFilePathResolved } from './getFilePath.js';
46
+ import { isEnvironmentBuiltIn, isEnvironmentNameValid } from '../../../shared-server-node/vike-environments.js';
45
47
  import { getConfigValueBuildTime } from '../../../shared-server-client/page-configs/getConfigValueBuildTime.js';
46
48
  import { resolveGlobalConfigPublic, } from '../../../shared-server-client/page-configs/resolveVikeConfigPublic.js';
47
49
  import { getConfigValuesBase, isJsonValue, } from '../../../shared-server-client/page-configs/serialize/serializeConfigValues.js';
@@ -65,12 +67,13 @@ const globalObject = getGlobalObject('vite/shared/resolveVikeConfigInternal.ts',
65
67
  vikeConfigSync: null,
66
68
  vikeConfigCtx: null, // Information provided by Vite's `config` and Vike's CLI. We could, if we want or need to, completely remove the dependency on Vite.
67
69
  prerenderContext: null,
70
+ viteEnvironmentNames: null,
68
71
  });
69
72
  function reloadVikeConfig() {
70
73
  assert(globalObject.vikeConfigCtx);
71
- const { userRootDir, vikeVitePluginOptions } = globalObject.vikeConfigCtx;
74
+ const { userRootDir, isDev, vikeVitePluginOptions } = globalObject.vikeConfigCtx;
72
75
  assert(vikeVitePluginOptions);
73
- resolveVikeConfigInternal_withErrorHandling(userRootDir, true, vikeVitePluginOptions);
76
+ resolveVikeConfigInternal_withErrorHandling(userRootDir, isDev, vikeVitePluginOptions);
74
77
  }
75
78
  async function getVikeConfigInternal(
76
79
  // I don't remember the logic behind it — neither why we restart Vite's dev server, nor why we sometimes don't.
@@ -110,6 +113,32 @@ function setVikeConfigContext(vikeConfigCtx_) {
110
113
  // If the user changes Vite's `config.root` => Vite completely reloads itself => setVikeConfigContext() is called again
111
114
  globalObject.vikeConfigCtx = vikeConfigCtx_;
112
115
  }
116
+ // Vike's config is resolved before Vite's environments are known (Vike's config can modify Vite's config)
117
+ async function setViteEnvironmentNames(viteEnvironmentNames) {
118
+ globalObject.viteEnvironmentNames = viteEnvironmentNames;
119
+ if (!globalObject.vikeConfigPromise)
120
+ return;
121
+ const vikeConfig = await globalObject.vikeConfigPromise;
122
+ // Resolve again: to report a missing environment like any other config error, or to recover from one (e.g. the user added the environment to Vite's config)
123
+ const isMissing = getAdditionalEnvironmentsMissing(vikeConfig._additionalEnvironmentNames).length > 0;
124
+ if (!isMissing && !globalObject.vikeConfigHasBuildError)
125
+ return;
126
+ reloadVikeConfig();
127
+ await globalObject.vikeConfigPromise;
128
+ }
129
+ function getAdditionalEnvironmentsMissing(additionalEnvironmentNames) {
130
+ const { viteEnvironmentNames } = globalObject;
131
+ if (!viteEnvironmentNames)
132
+ return [];
133
+ return additionalEnvironmentNames.filter((name) => !viteEnvironmentNames.includes(name));
134
+ }
135
+ function assertAdditionalEnvironmentsExist(additionalEnvironmentNames) {
136
+ const [name] = getAdditionalEnvironmentsMissing(additionalEnvironmentNames);
137
+ if (name === undefined)
138
+ return;
139
+ assert(globalObject.viteEnvironmentNames);
140
+ assertUsage(false, `The environment ${pc.cyan(JSON.stringify(name))} is used by ${pc.cyan('meta.env')} but it doesn't exist in Vite's ${pc.cyan('config.environments')} (${joinEnglish(globalObject.viteEnvironmentNames.map((n) => pc.cyan(n)), 'and')})`);
141
+ }
113
142
  function isVikeConfigContextSet() {
114
143
  return !!globalObject.vikeConfigCtx;
115
144
  }
@@ -219,6 +248,8 @@ async function resolveVikeConfigInternal(userRootDir, vikeVitePluginOptions, vik
219
248
  const plusFilesByLocationId = await getPlusFiles(userRootDir, vikeTranspileCache);
220
249
  const configDefinitionsResolved = await resolveConfigDefinitions(plusFilesByLocationId, userRootDir, vikeTranspileCache);
221
250
  const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesByLocationId, userRootDir);
251
+ const additionalEnvironmentNames = getAdditionalEnvironmentNames(getMetaEnvAll(configDefinitionsResolved, [pageConfigGlobal, ...pageConfigs]));
252
+ assertAdditionalEnvironmentsExist(additionalEnvironmentNames);
222
253
  if (!globalObject.isV1Design_)
223
254
  globalObject.isV1Design_ = pageConfigs.length > 0;
224
255
  // Backwards compatibility for vike(options) in vite.config.js
@@ -241,6 +272,7 @@ async function resolveVikeConfigInternal(userRootDir, vikeVitePluginOptions, vik
241
272
  _pageConfigGlobal: pageConfigGlobal,
242
273
  _vikeConfigDependencies: vikeTranspileCache.vikeConfigDependencies,
243
274
  _extensions,
275
+ _additionalEnvironmentNames: additionalEnvironmentNames,
244
276
  };
245
277
  globalObject.vikeConfigSync = vikeConfig;
246
278
  return vikeConfig;
@@ -330,6 +362,23 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesByLocationI
330
362
  assertPageConfigs(pageConfigs);
331
363
  return { pageConfigs, pageConfigGlobal };
332
364
  }
365
+ // Get all the `meta.env` of all configs
366
+ function getMetaEnvAll(configDefinitionsResolved, pageConfigs) {
367
+ const configDefinitionsAll = [
368
+ configDefinitionsResolved.configDefinitionsGlobal,
369
+ ...Object.values(configDefinitionsResolved.configDefinitionsLocal).map(({ configDefinitions }) => configDefinitions),
370
+ ];
371
+ return [
372
+ ...configDefinitionsAll.flatMap((configDefinitions) => Object.values(configDefinitions).map(({ env }) => env)),
373
+ ...pageConfigs.flatMap(({ configValueSources }) => Object.values(configValueSources).flatMap((sources) => sources.map(({ configEnv }) => configEnv))),
374
+ ];
375
+ }
376
+ function getAdditionalEnvironmentNames(configEnvs) {
377
+ const names = configEnvs.flatMap((configEnv) => Object.entries(configEnv)
378
+ .filter(([, value]) => value)
379
+ .map(([name]) => name));
380
+ return unique(names.filter(isAdditionalEnvironmentName));
381
+ }
333
382
  function resolvePageConfigBuildTime(pageId, locationId, plusFilesRelevant, configDefinitionsLocal, plusFilesByLocationId, userRootDir) {
334
383
  const configValueSources = {};
335
384
  objectEntries(configDefinitionsLocal)
@@ -482,7 +531,7 @@ function assertOnBeforeRenderEnv(pageConfig) {
482
531
  function getConfigValues(pageConfig, isGlobalConfig) {
483
532
  const tolerateMissingValue = !isGlobalConfig;
484
533
  const configValues = {};
485
- getConfigValuesBase(pageConfig, { isForConfig: true }, null).forEach((entry) => {
534
+ getConfigValuesBase(pageConfig, { isConfigEnvironment: true }, null).forEach((entry) => {
486
535
  if (entry.configValueBase.type === 'computed') {
487
536
  assert('value' in entry); // Help TS
488
537
  const { configValueBase, value, configName } = entry;
@@ -1091,11 +1140,13 @@ function applyEffectMetaEnv(configModFromEffect, configValueSources, configDefEf
1091
1140
  });
1092
1141
  }
1093
1142
  function getComputed(pageConfig) {
1143
+ assert(globalObject.vikeConfigCtx);
1144
+ const { isDev } = globalObject.vikeConfigCtx;
1094
1145
  const configValuesComputed = {};
1095
1146
  objectEntries(pageConfig.configDefinitions).forEach(([configName, configDef]) => {
1096
1147
  if (!configDef._computed)
1097
1148
  return;
1098
- const value = configDef._computed(pageConfig);
1149
+ const value = configDef._computed(pageConfig, isDev);
1099
1150
  if (value === undefined)
1100
1151
  return;
1101
1152
  configValuesComputed[configName] = {
@@ -1220,6 +1271,14 @@ function determineIsErrorPage(routeFilesystem) {
1220
1271
  assertPosixPath(routeFilesystem);
1221
1272
  return routeFilesystem.split('/').includes('_error');
1222
1273
  }
1274
+ // Keys of `meta.env` that only Vike sets
1275
+ const configEnvKeysInternal = ['clientRoutingOnly', 'eager'];
1276
+ // Keys of `meta.env` that can't be environment names
1277
+ // - Including file suffixes such as `.ssr.js`, `.shared.js`, `.clear.js`, `.default.js`
1278
+ const configEnvKeysReserved = ['ssr', 'shared', 'clear', 'default', ...configEnvKeysInternal];
1279
+ function isAdditionalEnvironmentName(configEnvKey) {
1280
+ return (!isEnvironmentBuiltIn(configEnvKey) && !['config', 'production', ...configEnvKeysInternal].includes(configEnvKey));
1281
+ }
1223
1282
  function getConfigEnvValue(val, errMsgIntro) {
1224
1283
  const errInvalidValue = `${errMsgIntro} an invalid value ${pc.cyan(JSON.stringify(val))}`;
1225
1284
  // Legacy outdated values
@@ -1235,22 +1294,23 @@ function getConfigEnvValue(val, errMsgIntro) {
1235
1294
  if (val === 'config-only')
1236
1295
  return { config: true };
1237
1296
  if (val === '_routing-lazy')
1238
- return { server: true, client: 'if-client-routing' };
1297
+ return { server: true, client: true, clientRoutingOnly: true };
1239
1298
  if (val === '_routing-eager')
1240
- return { server: true, client: 'if-client-routing', eager: true };
1299
+ return { server: true, client: true, clientRoutingOnly: true, eager: true };
1241
1300
  assertUsage(false, errInvalidValue);
1242
1301
  })();
1243
1302
  assertWarning(false, `${errMsgIntro} ${pc.cyan(val)} which is deprecated and will be removed in the next major release`, { onlyOnce: true });
1244
1303
  return valConverted;
1245
1304
  }
1246
1305
  assertUsage(isObject(val), `${errMsgIntro} an invalid type ${pc.cyan(typeof val)}`);
1247
- assertKeys(val, ['config', 'server', 'client'], `${errInvalidValue}:`);
1248
- assertUsage(hasProp(val, 'config', 'undefined') || hasProp(val, 'config', 'boolean'), errInvalidValue);
1249
- assertUsage(hasProp(val, 'server', 'undefined') || hasProp(val, 'server', 'boolean'), errInvalidValue);
1250
- assertUsage(hasProp(val, 'client', 'undefined') || hasProp(val, 'client', 'boolean'), errInvalidValue);
1306
+ Object.entries(val).forEach(([key, value]) => {
1307
+ assertUsage(!includes(configEnvKeysReserved, key), `${errInvalidValue}: ${pc.cyan(key)} can't be an environment name, because ${includes(configEnvKeysInternal, key) ? 'Vike uses it internally' : `it's a file suffix (${pc.cyan(`+Page.${key}.js`)})`}`);
1308
+ assertUsage(isEnvironmentNameValid(key), `${errInvalidValue}: ${pc.cyan(key)} isn't a valid environment name`);
1309
+ assertUsage(value === undefined || typeof value === 'boolean', errInvalidValue);
1310
+ });
1251
1311
  /* To allow users to set an eager config:
1252
1312
  * - Uncomment line below.
1253
- * - Add 'eager' to assertKeys() call above.
1313
+ * - Move 'eager' from configEnvKeysInternal to the keys that isAdditionalEnvironmentName() excludes.
1254
1314
  * - Add `eager: boolean` to ConfigEnv type.
1255
1315
  assertUsage(hasProp(val, 'eager', 'undefined') || hasProp(val, 'eager', 'boolean'), errInvalidValue)
1256
1316
  */
@@ -1279,11 +1339,21 @@ function resolveConfigEnv(configEnv, filePath) {
1279
1339
  else if (suffixes.includes('client')) {
1280
1340
  configEnvResolved.client = true;
1281
1341
  configEnvResolved.server = false;
1342
+ // Additional environments (e.g. `rsc`) are server-side
1343
+ Object.keys(configEnvResolved).forEach((key) => {
1344
+ if (isAdditionalEnvironmentName(key))
1345
+ delete configEnvResolved[key];
1346
+ });
1282
1347
  }
1283
1348
  else if (suffixes.includes('shared')) {
1284
1349
  configEnvResolved.server = true;
1285
1350
  configEnvResolved.client = true;
1286
1351
  }
1352
+ else {
1353
+ return configEnvResolved;
1354
+ }
1355
+ // The file suffix decides, regardless of Client Routing
1356
+ delete configEnvResolved.clientRoutingOnly;
1287
1357
  }
1288
1358
  return configEnvResolved;
1289
1359
  }
@@ -1312,7 +1382,9 @@ async function resolvePrerenderContext(vikeConfig) {
1312
1382
  }
1313
1383
  function restartViteDevServer() {
1314
1384
  const viteDevServer = getViteDevServer();
1315
- assert(viteDevServer);
1385
+ // setViteEnvironmentNames() can reload Vike's config while Vite resolves its config, before the dev server exists
1386
+ if (!viteDevServer)
1387
+ return;
1316
1388
  swallowViteLogForceOptimization_enable();
1317
1389
  (async () => {
1318
1390
  try {
@@ -1347,6 +1419,7 @@ async function getVikeConfigDummy(vikeTranspileCache) {
1347
1419
  prerenderContext: prerenderContextDummy,
1348
1420
  _vikeConfigDependencies: vikeTranspileCache.vikeConfigDependencies,
1349
1421
  _extensions: [],
1422
+ _additionalEnvironmentNames: [],
1350
1423
  };
1351
1424
  globalObject.vikeConfigSync = vikeConfigDummy;
1352
1425
  globalObject.isV1Design_ = true;
@@ -0,0 +1,2 @@
1
+ export { default } from './fetch.js';
2
+ import '../assertEnvServer.js';
@@ -0,0 +1,6 @@
1
+ export { default } from './fetch.js';
2
+ // TO-DO/next-major-release: remove this export (the entire file)
3
+ import { assertWarning } from '../../utils/assert.js';
4
+ import pc from '@brillout/picocolors';
5
+ import '../assertEnvServer.js';
6
+ assertWarning(false, `${pc.cyan("import vike from 'vike/fetch'")} is deprecated, see ${pc.underline('https://vike.dev/migration/vike-fetch')}`, { onlyOnce: true });
@@ -0,0 +1,9 @@
1
+ import '../assertEnvServer.js';
2
+ declare const _default: {
3
+ fetch: ((request: Request, context?: Universal.Context, runtime?: import("@universal-middleware/core").RuntimeAdapterTarget<unknown>) => Promise<Response>) & import("@universal-middleware/core").WithUniversalSymbols<{
4
+ readonly name: 'vike';
5
+ readonly method: ["GET", "POST", "PUT", "PATCH", "HEAD", "OPTIONS"];
6
+ readonly path: '/**';
7
+ }>;
8
+ };
9
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import '../assertEnvServer.js';
2
+ import { vikeUniversalMiddleware } from '../runtime/universal-middleware/vikeUniversalMiddleware.js';
3
+ export default {
4
+ fetch: vikeUniversalMiddleware,
5
+ };
@@ -1,9 +1,12 @@
1
1
  export { setGlobalContext_prodBuildEntry } from '../runtime/globalContext.js';
2
+ export { getMiddlewaresPipe_nonHandlers, getMiddlewaresPipe_handlers, } from '../runtime/universal-middleware/getMiddlewaresPipe.js';
3
+ export { getPageContextJson };
2
4
  export { route, getPagesAndRoutes };
3
5
  export type { PageRoutes, PageFile, PageConfigRuntime as PageConfig };
4
6
  import { route as routeInternal, type PageRoutes } from '../../shared-server-client/route/index.js';
5
7
  import type { PageFile } from '../../shared-server-client/getPageFiles/getPageFileObject.js';
6
8
  import { PageConfigRuntime } from '../../types/PageConfig.js';
9
+ import type { PageContextServer } from '../../types/PageContext.js';
7
10
  import '../assertEnvServer.js';
8
11
  /**
9
12
  * Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel} to compute some rewrite rules and extract { isr } configs.
@@ -19,3 +22,4 @@ declare function getPagesAndRoutes(): Promise<{
19
22
  declare function route(pageContext: Parameters<typeof routeInternal>[0]): Promise<{
20
23
  pageContextAddendum: import("../../shared-server-client/route/index.js").PageContextAfterRoute;
21
24
  }>;
25
+ declare function getPageContextJson(pageContext: PageContextServer): string | ReadableStream<Uint8Array<ArrayBufferLike>>;
@@ -1,10 +1,15 @@
1
1
  // Used by vike:build:pluginProdBuildEntry
2
2
  export { setGlobalContext_prodBuildEntry } from '../runtime/globalContext.js';
3
+ // Used by the vike(app) of the @vikejs/* server adapters
4
+ export { getMiddlewaresPipe_nonHandlers, getMiddlewaresPipe_handlers, } from '../runtime/universal-middleware/getMiddlewaresPipe.js';
5
+ // Used by vike-react-rsc
6
+ export { getPageContextJson };
3
7
  // Used by vite-plugin-vercel
4
8
  export { route, getPagesAndRoutes };
5
9
  import { route as routeInternal } from '../../shared-server-client/route/index.js';
6
10
  import { getGlobalContextServerInternal, initGlobalContext_getPagesAndRoutes } from '../runtime/globalContext.js';
7
11
  import { setNodeEnvProductionIfUndefined } from '../../utils/assertSetup.js';
12
+ import { getPageContextJson as getPageContextJsonInternal } from '../runtime/renderPageServer/getPageContextJson.js';
8
13
  import '../assertEnvServer.js';
9
14
  /**
10
15
  * Used by {@link https://github.com/magne4000/vite-plugin-vercel|vite-plugin-vercel} to compute some rewrite rules and extract { isr } configs.
@@ -30,3 +35,6 @@ async function route(pageContext) {
30
35
  // Old interface
31
36
  return { pageContextAddendum: pageContextFromRoute };
32
37
  }
38
+ function getPageContextJson(pageContext) {
39
+ return getPageContextJsonInternal(pageContext);
40
+ }
@@ -1,5 +1,5 @@
1
1
  export { createPageRenderer };
2
- import { renderPageServer } from './runtime/renderPageServer.js';
2
+ import { renderPageServer_userLand } from './runtime/renderPageServer.js';
3
3
  import './assertEnvServer.js';
4
4
  type Options = {
5
5
  viteDevServer?: unknown;
@@ -10,4 +10,4 @@ type Options = {
10
10
  baseAssets?: string | null;
11
11
  };
12
12
  /** @deprecated */
13
- declare function createPageRenderer(options: Options): typeof renderPageServer;
13
+ declare function createPageRenderer(options: Options): typeof renderPageServer_userLand;
@@ -1,14 +1,14 @@
1
1
  export { createPageRenderer };
2
2
  // TO-DO/next-major-release: remove this file
3
3
  //import { SsrEnv, setSsrEnv } from './ssrEnv.js'
4
- import { renderPageServer } from './runtime/renderPageServer.js';
4
+ import { renderPageServer_userLand } from './runtime/renderPageServer.js';
5
5
  import { assertWarning } from '../utils/assert.js';
6
6
  //import { importBuildWasLoaded } from './importBuild.js'
7
7
  import './assertEnvServer.js';
8
8
  /** @deprecated */
9
9
  function createPageRenderer(options) {
10
10
  showWarnings(options);
11
- return renderPageServer;
11
+ return renderPageServer_userLand;
12
12
  }
13
13
  function showWarnings(options) {
14
14
  assertWarning(false, '`createPageRenderer()` is outdated, use `renderPage()` instead. See https://vike.dev/renderPage', { onlyOnce: true, showStackTrace: true });
@@ -1,7 +1,9 @@
1
1
  export { createDevMiddleware_ as createDevMiddleware };
2
2
  import '../assertEnvServer.js';
3
3
  const createDevMiddleware_ = async (...args) => {
4
- const p = '../../node/createDevMiddleware.js';
4
+ let p = '../../node/createDevMiddleware.js';
5
+ // Absolute URL, because on Windows Vite's ssrLoadModule() resolves a relative dynamic import to `D:/...` and then fails to load it (e.g. if `vike` is linked and `$ vike dev` runs +serverEntry.js)
6
+ p = new URL(p, import.meta.url).href;
5
7
  const { createDevMiddleware } = await import(/*webpackIgnore: true*/ /* @vite-ignore */ p);
6
8
  return createDevMiddleware(...args);
7
9
  };
@@ -54,6 +54,10 @@ declare function getGlobalContextServerInternal(): Promise<{
54
54
  _pageFilesAll: import("../__internal/index.js").PageFile[];
55
55
  _pageConfigs: import("../__internal/index.js").PageConfig[];
56
56
  _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
57
+ _environmentEntries: Record<string, {
58
+ pageConfigs: import("../__internal/index.js").PageConfig[];
59
+ pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
60
+ } | null>;
57
61
  _allPageIds: string[];
58
62
  } & {
59
63
  isClientSide: false;
@@ -63,10 +67,9 @@ declare function getGlobalContextServerInternal(): Promise<{
63
67
  _isPrerendering: false;
64
68
  assetsManifest: null;
65
69
  _viteDevServer: ViteDevServer | undefined;
70
+ devMiddleware: import("vite").Connect.Server | null;
66
71
  viteConfig: ResolvedConfig | undefined;
67
72
  } & {
68
- baseServer: string;
69
- baseAssets: string;
70
73
  viteConfigRuntime: {
71
74
  root: string;
72
75
  build: {
@@ -77,6 +80,14 @@ declare function getGlobalContextServerInternal(): Promise<{
77
80
  inject: boolean | undefined;
78
81
  };
79
82
  };
83
+ baseServer: string;
84
+ baseAssets: string;
85
+ /**
86
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
87
+ *
88
+ * https://vike.dev/globalContext#middlewares
89
+ */
90
+ middlewares: import("./universal-middleware/core.js").Middleware[];
80
91
  } & {
81
92
  prerenderContext: PrerenderContext | undefined;
82
93
  }) | (Record<string, unknown> & {
@@ -102,6 +113,10 @@ declare function getGlobalContextServerInternal(): Promise<{
102
113
  _pageFilesAll: import("../__internal/index.js").PageFile[];
103
114
  _pageConfigs: import("../__internal/index.js").PageConfig[];
104
115
  _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
116
+ _environmentEntries: Record<string, {
117
+ pageConfigs: import("../__internal/index.js").PageConfig[];
118
+ pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
119
+ } | null>;
105
120
  _allPageIds: string[];
106
121
  } & {
107
122
  isClientSide: false;
@@ -110,12 +125,11 @@ declare function getGlobalContextServerInternal(): Promise<{
110
125
  _isProduction: true;
111
126
  assetsManifest: ViteManifest;
112
127
  _viteDevServer: null;
128
+ devMiddleware: null;
113
129
  _usesClientRouter: boolean;
114
130
  _isPrerendering: true;
115
131
  viteConfig: ResolvedConfig;
116
132
  } & {
117
- baseServer: string;
118
- baseAssets: string;
119
133
  viteConfigRuntime: {
120
134
  root: string;
121
135
  build: {
@@ -126,6 +140,14 @@ declare function getGlobalContextServerInternal(): Promise<{
126
140
  inject: boolean | undefined;
127
141
  };
128
142
  };
143
+ baseServer: string;
144
+ baseAssets: string;
145
+ /**
146
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
147
+ *
148
+ * https://vike.dev/globalContext#middlewares
149
+ */
150
+ middlewares: import("./universal-middleware/core.js").Middleware[];
129
151
  } & {
130
152
  prerenderContext: PrerenderContext | undefined;
131
153
  }) | (Record<string, unknown> & {
@@ -151,6 +173,10 @@ declare function getGlobalContextServerInternal(): Promise<{
151
173
  _pageFilesAll: import("../__internal/index.js").PageFile[];
152
174
  _pageConfigs: import("../__internal/index.js").PageConfig[];
153
175
  _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
176
+ _environmentEntries: Record<string, {
177
+ pageConfigs: import("../__internal/index.js").PageConfig[];
178
+ pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
179
+ } | null>;
154
180
  _allPageIds: string[];
155
181
  } & {
156
182
  isClientSide: false;
@@ -159,12 +185,11 @@ declare function getGlobalContextServerInternal(): Promise<{
159
185
  _isProduction: true;
160
186
  assetsManifest: ViteManifest;
161
187
  _viteDevServer: null;
188
+ devMiddleware: null;
162
189
  _usesClientRouter: boolean;
163
190
  _isPrerendering: false;
164
191
  viteConfig: null;
165
192
  } & {
166
- baseServer: string;
167
- baseAssets: string;
168
193
  viteConfigRuntime: {
169
194
  root: string;
170
195
  build: {
@@ -175,6 +200,14 @@ declare function getGlobalContextServerInternal(): Promise<{
175
200
  inject: boolean | undefined;
176
201
  };
177
202
  };
203
+ baseServer: string;
204
+ baseAssets: string;
205
+ /**
206
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
207
+ *
208
+ * https://vike.dev/globalContext#middlewares
209
+ */
210
+ middlewares: import("./universal-middleware/core.js").Middleware[];
178
211
  } & {
179
212
  prerenderContext: PrerenderContext | undefined;
180
213
  });
@@ -202,6 +235,10 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
202
235
  _pageFilesAll: import("../__internal/index.js").PageFile[];
203
236
  _pageConfigs: import("../__internal/index.js").PageConfig[];
204
237
  _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
238
+ _environmentEntries: Record<string, {
239
+ pageConfigs: import("../__internal/index.js").PageConfig[];
240
+ pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
241
+ } | null>;
205
242
  _allPageIds: string[];
206
243
  } & (({
207
244
  isClientSide: false;
@@ -211,6 +248,7 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
211
248
  _isPrerendering: false;
212
249
  assetsManifest: null;
213
250
  _viteDevServer: ViteDevServer | undefined;
251
+ devMiddleware: import("vite").Connect.Server | null;
214
252
  viteConfig: ResolvedConfig | undefined;
215
253
  } | {
216
254
  isClientSide: false;
@@ -219,6 +257,7 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
219
257
  _isProduction: true;
220
258
  assetsManifest: ViteManifest;
221
259
  _viteDevServer: null;
260
+ devMiddleware: null;
222
261
  _usesClientRouter: boolean;
223
262
  _isPrerendering: true;
224
263
  viteConfig: ResolvedConfig;
@@ -229,12 +268,11 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
229
268
  _isProduction: true;
230
269
  assetsManifest: ViteManifest;
231
270
  _viteDevServer: null;
271
+ devMiddleware: null;
232
272
  _usesClientRouter: boolean;
233
273
  _isPrerendering: false;
234
274
  viteConfig: null;
235
275
  }) & {
236
- baseServer: string;
237
- baseAssets: string;
238
276
  viteConfigRuntime: {
239
277
  root: string;
240
278
  build: {
@@ -245,6 +283,14 @@ declare function getGlobalContextServerInternalOptional(): (Record<string, unkno
245
283
  inject: boolean | undefined;
246
284
  };
247
285
  };
286
+ baseServer: string;
287
+ baseAssets: string;
288
+ /**
289
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
290
+ *
291
+ * https://vike.dev/globalContext#middlewares
292
+ */
293
+ middlewares: import("./universal-middleware/core.js").Middleware[];
248
294
  })) & {
249
295
  prerenderContext: PrerenderContext | undefined;
250
296
  })) | null;
@@ -309,6 +355,10 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
309
355
  _pageFilesAll: import("../__internal/index.js").PageFile[];
310
356
  _pageConfigs: import("../__internal/index.js").PageConfig[];
311
357
  _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
358
+ _environmentEntries: Record<string, {
359
+ pageConfigs: import("../__internal/index.js").PageConfig[];
360
+ pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
361
+ } | null>;
312
362
  _allPageIds: string[];
313
363
  } & (({
314
364
  isClientSide: false;
@@ -318,6 +368,7 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
318
368
  _isPrerendering: false;
319
369
  assetsManifest: null;
320
370
  _viteDevServer: ViteDevServer | undefined;
371
+ devMiddleware: import("vite").Connect.Server | null;
321
372
  viteConfig: ResolvedConfig | undefined;
322
373
  } | {
323
374
  isClientSide: false;
@@ -326,6 +377,7 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
326
377
  _isProduction: true;
327
378
  assetsManifest: ViteManifest;
328
379
  _viteDevServer: null;
380
+ devMiddleware: null;
329
381
  _usesClientRouter: boolean;
330
382
  _isPrerendering: true;
331
383
  viteConfig: ResolvedConfig;
@@ -336,12 +388,11 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
336
388
  _isProduction: true;
337
389
  assetsManifest: ViteManifest;
338
390
  _viteDevServer: null;
391
+ devMiddleware: null;
339
392
  _usesClientRouter: boolean;
340
393
  _isPrerendering: false;
341
394
  viteConfig: null;
342
395
  }) & {
343
- baseServer: string;
344
- baseAssets: string;
345
396
  viteConfigRuntime: {
346
397
  root: string;
347
398
  build: {
@@ -352,6 +403,14 @@ declare function createGlobalContext(virtualFileExportsGlobalEntry: unknown): Pr
352
403
  inject: boolean | undefined;
353
404
  };
354
405
  };
406
+ baseServer: string;
407
+ baseAssets: string;
408
+ /**
409
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
410
+ *
411
+ * https://vike.dev/globalContext#middlewares
412
+ */
413
+ middlewares: import("./universal-middleware/core.js").Middleware[];
355
414
  })) & {
356
415
  prerenderContext: PrerenderContext | undefined;
357
416
  }>;
@@ -56,6 +56,7 @@ import { logRuntimeError, logRuntimeInfo } from './loggerRuntime.js';
56
56
  import { debugFileChange, getVikeConfigErrorBuild, setVikeConfigError, } from '../../shared-server-node/getVikeConfigError.js';
57
57
  import { getVikeApiOperation } from '../../shared-server-node/api-context.js';
58
58
  import { hasAlreadyLogged } from './logErrorServer.js';
59
+ import { getMiddlewares_globalContext } from './universal-middleware/core.js';
59
60
  import '../assertEnvServer.js';
60
61
  const debug = createDebug('vike:globalContext');
61
62
  const globalObject = getGlobalObject('runtime/globalContext.ts', getInitialGlobalObject());
@@ -490,14 +491,18 @@ function addGlobalContextCommon(globalContext, pageRoutes, onBeforeRouteHook) {
490
491
  if (!isProduction) {
491
492
  assert(globalContext); // main common requirement
492
493
  assert(!isPrerendering);
493
- return {
494
+ const globalContextDev = {
494
495
  ...globalContextBase,
495
496
  _isProduction: false,
496
497
  _isPrerendering: false,
497
498
  assetsManifest: null,
498
499
  _viteDevServer: viteDevServer,
500
+ // https://vike.dev/globalContext#devMiddleware
501
+ devMiddleware: viteDevServer?.middlewares ?? null,
499
502
  viteConfig,
500
503
  };
504
+ addDevMiddlewareWarning(globalContextDev, viteDevServer);
505
+ return globalContextDev;
501
506
  }
502
507
  else {
503
508
  assert(globalObject.prodBuildEntry);
@@ -510,6 +515,7 @@ function addGlobalContextCommon(globalContext, pageRoutes, onBeforeRouteHook) {
510
515
  _isProduction: true,
511
516
  assetsManifest,
512
517
  _viteDevServer: null,
518
+ devMiddleware: null,
513
519
  _usesClientRouter: buildInfo.usesClientRouter,
514
520
  };
515
521
  if (isPrerendering) {
@@ -529,6 +535,25 @@ function addGlobalContextCommon(globalContext, pageRoutes, onBeforeRouteHook) {
529
535
  }
530
536
  }
531
537
  }
538
+ function addDevMiddlewareWarning(globalContext, viteDevServer) {
539
+ if (!viteDevServer)
540
+ return;
541
+ const getMiddlewareMode = () => viteDevServer.config.server.middlewareMode;
542
+ Object.defineProperty(globalContext, 'devMiddleware', {
543
+ get() {
544
+ const middlewareMode = getMiddlewareMode();
545
+ if (!middlewareMode) {
546
+ assertWarning(false, `You don't need ${pc.cyan('globalContext.devMiddleware')} because the development middleware is already installed (Vite's ${pc.cyan('config.server.middlewareMode')} is ${pc.cyan(JSON.stringify(middlewareMode))}) — installing the development middleware twice might hang the server`, { onlyOnce: true });
547
+ }
548
+ return viteDevServer.middlewares;
549
+ },
550
+ enumerable: getMiddlewareMode()
551
+ ? true
552
+ : // So that spreading or serializing globalContext doesn't get the warning
553
+ false,
554
+ configurable: true,
555
+ });
556
+ }
532
557
  async function addGlobalContextAsync(globalContext) {
533
558
  debug('addGlobalContextAsync()');
534
559
  let { viteConfigRuntime, buildInfo } = globalObject;
@@ -545,9 +570,17 @@ async function addGlobalContextAsync(globalContext) {
545
570
  }
546
571
  }
547
572
  assert(viteConfigRuntime);
573
+ const { baseServer, baseAssets } = resolveBaseRuntime(viteConfigRuntime, globalContext.config);
548
574
  return {
549
575
  viteConfigRuntime,
550
- ...resolveBaseRuntime(viteConfigRuntime, globalContext.config),
576
+ baseServer,
577
+ baseAssets,
578
+ /**
579
+ * Every `+middleware` from Vike extensions, as well as Vike's built-in handler that renders pages.
580
+ *
581
+ * https://vike.dev/globalContext#middlewares
582
+ */
583
+ middlewares: getMiddlewares_globalContext(globalContext, baseServer),
551
584
  };
552
585
  }
553
586
  function clearGlobalContext() {
@@ -1,4 +1,4 @@
1
- export { renderPageServer as renderPage } from './renderPageServer.js';
1
+ export { renderPageServer_userLand as renderPage } from './renderPageServer.js';
2
2
  export { escapeInject, dangerouslySkipEscape } from './renderPageServer/html/renderHtml.js';
3
3
  export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './renderPageServer/html/stream.js';
4
4
  export { PROJECT_VERSION as version } from '../../utils/PROJECT_VERSION.js';