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
@@ -61,8 +61,8 @@ async function execHookSingleWithoutPageContext(hook, globalContext, hookFnCalle
61
61
  }
62
62
  function execHookSingleSync(hook, globalContext, pageContext, getPageContextPublic, hookFnCaller) {
63
63
  const pageContextPublic = pageContext && getPageContextPublic(pageContext);
64
- hookFnCaller ?? (hookFnCaller = () => hook.hookFn(pageContextPublic));
65
- const hookReturn = execHookBase(hookFnCaller, hook, globalContext, pageContextPublic);
64
+ const call = hookFnCaller ? () => hookFnCaller(pageContextPublic) : () => hook.hookFn(pageContextPublic);
65
+ const hookReturn = execHookBase(call, hook, globalContext, pageContextPublic);
66
66
  return { hookReturn };
67
67
  }
68
68
  function execHookBaseAsync(hookFnCaller, hook, globalContext, pageContextPublic) {
@@ -207,6 +207,8 @@ function getConfigValuesBase(pageConfig, runtimeEnv, isEager) {
207
207
  assert(configDef);
208
208
  if (isEager !== null && isEager !== !!configDef.eager)
209
209
  return 'SKIP';
210
+ if (configDef._valueNotLoadedAtRuntime && !runtimeEnv.isConfigEnvironment)
211
+ return 'SKIP';
210
212
  if (!configDef.cumulative) {
211
213
  const sourcesRelevant = getConfigValueSourcesRelevant(configName, runtimeEnv, pageConfig);
212
214
  const source = sourcesRelevant[0];
@@ -113,7 +113,7 @@ type PageContextAborted = {
113
113
  _pageContextAbort: PageContextAbort;
114
114
  } & PageContextMin;
115
115
  declare function getPageContextAddendumAbort(pageContextsAborted: PageContextAborted[]): PageContextAbort | null;
116
- declare function addNewPageContextAborted(pageContextsAborted: PageContextAborted[], pageContext: PageContextMin, pageContextAbort: PageContextAbort): void;
116
+ declare function addNewPageContextAborted<PageContext extends PageContextMin>(pageContextsAborted: PageContextAborted[], pageContext: PageContext, pageContextAbort: PageContextAbort, getPageContextPublic: (pageContext: PageContext & PageContextAborted) => PageContextAborted): void;
117
117
  type InferTwoOverloads<F extends Function> = F extends {
118
118
  (...a1: infer A1): infer R1;
119
119
  (...a0: infer A0): infer R0;
@@ -189,9 +189,11 @@ function getPageContextAddendumAbort(pageContextsAborted) {
189
189
  // Sets pageContext._urlRewrite from pageContextAbort._urlRewrite
190
190
  return pageContextAbort;
191
191
  }
192
- function addNewPageContextAborted(pageContextsAborted, pageContext, pageContextAbort) {
192
+ function addNewPageContextAborted(pageContextsAborted, pageContext, pageContextAbort,
193
+ // `pageContextsAborted` is exposed to users: https://vike.dev/pageContext#pageContextsAborted
194
+ getPageContextPublic) {
193
195
  objectAssign(pageContext, { _pageContextAbort: pageContextAbort });
194
- pageContextsAborted.push(pageContext);
196
+ pageContextsAborted.push(getPageContextPublic(pageContext));
195
197
  assertNoInfiniteAbortLoop(pageContextsAborted);
196
198
  }
197
199
  // There doesn't seem to be a way to count the number of HTTP redirects (Vike doesn't have access to the HTTP request headers/cookies)
@@ -0,0 +1,22 @@
1
+ export { markers };
2
+ export type { Line };
3
+ export type { LineContent };
4
+ declare const markers: {
5
+ readableStream: string;
6
+ promise: string;
7
+ asyncIterable: string;
8
+ };
9
+ type LineContent = {
10
+ t: string;
11
+ } | {
12
+ b: string;
13
+ } | {
14
+ v: unknown;
15
+ } | {
16
+ end: true;
17
+ } | {
18
+ error: true;
19
+ };
20
+ type Line = {
21
+ s: number;
22
+ } & LineContent;
@@ -0,0 +1,24 @@
1
+ // The wire format of streamed pageContext values: a ReadableStream, a Promise or an async iterable (e.g. an async
2
+ // generator) anywhere in a passToClient value. https://vike.dev/passToClient#streaming
3
+ //
4
+ // - Serialization: a marker followed by the value's id, e.g. `"!VikePromise:0"` (the serializer escapes user strings
5
+ // starting with `!`, so a user string can't be mistaken for a marker).
6
+ // - Delivery: the serialized pageContext is wrapped in a JSON array (the client loads its decoder only then) followed, in
7
+ // the same response, by one JSON line per chunk / result:
8
+ // - HTML: see server/runtime/renderPageServer/html/streamedValuesHtml.ts
9
+ // - `.pageContext.json`: see server/runtime/renderPageServer/getPageContextJson.ts
10
+ //
11
+ // Lines:
12
+ // {"s":<id>,"t":<text>} A chunk that is a Uint8Array of valid UTF-8
13
+ // {"s":<id>,"b":<base64url>} A chunk that is any other Uint8Array
14
+ // {"s":<id>,"v":<value>} Any other chunk, or the value of a Promise (@brillout/json-serializer)
15
+ // {"s":<id>,"end":true} The end of a ReadableStream / async iterable
16
+ // {"s":<id>,"error":true} The value failed (the error is logged on the server-side and isn't sent to the client)
17
+ //
18
+ // A chunk or a Promise value can contain further streamed values: they get new ids and their lines follow.
19
+ export { markers };
20
+ const markers = {
21
+ readableStream: '!VikeStream:',
22
+ promise: '!VikePromise:',
23
+ asyncIterable: '!VikeAsyncIterable:',
24
+ };
@@ -0,0 +1,4 @@
1
+ export { isEnvironmentBuiltIn };
2
+ export { isEnvironmentNameValid };
3
+ declare function isEnvironmentBuiltIn(environmentName: string): boolean;
4
+ declare function isEnvironmentNameValid(environmentName: string): boolean;
@@ -0,0 +1,10 @@
1
+ export { isEnvironmentBuiltIn };
2
+ export { isEnvironmentNameValid };
3
+ // Vike's built-in environments; every other environment name is an additional environment (e.g. `rsc`)
4
+ function isEnvironmentBuiltIn(environmentName) {
5
+ return environmentName === 'server' || environmentName === 'client';
6
+ }
7
+ // `:` separates the environment name from the page ID in virtual file IDs
8
+ function isEnvironmentNameValid(environmentName) {
9
+ return environmentName !== '' && !environmentName.includes(':');
10
+ }
@@ -1,5 +1,6 @@
1
1
  export { parseVirtualFileId };
2
2
  export { generateVirtualFileId };
3
+ export { generateVirtualFileIdAdditionalEnvironment };
3
4
  export { virtualFileIdGlobalEntryServer };
4
5
  export { virtualFileIdGlobalEntryClientSR };
5
6
  export { virtualFileIdGlobalEntryClientCR };
@@ -8,21 +9,22 @@ declare const virtualFileIdGlobalEntryClientSR = "virtual:vike:global-entry:clie
8
9
  declare const virtualFileIdGlobalEntryClientCR = "virtual:vike:global-entry:client:client-routing";
9
10
  type VirtualFileIdEntryParsed = {
10
11
  type: 'global-entry';
11
- isForClientSide: boolean;
12
+ environmentName: string;
12
13
  isClientRouting: boolean;
13
14
  } | {
14
15
  type: 'page-entry';
15
- isForClientSide: boolean;
16
+ environmentName: string;
16
17
  pageId: string;
17
18
  isExtractAssets: boolean;
18
19
  };
19
20
  declare function parseVirtualFileId(id: string): false | VirtualFileIdEntryParsed;
20
21
  declare function generateVirtualFileId(args: {
21
22
  type: 'global-entry';
22
- isForClientSide: boolean;
23
- isClientRouting: boolean;
23
+ environmentName: string;
24
+ isClientRouting?: boolean;
24
25
  } | {
25
26
  type: 'page-entry';
26
27
  pageId: string;
27
- isForClientSide: boolean;
28
+ environmentName: string;
28
29
  }): string;
30
+ declare function generateVirtualFileIdAdditionalEnvironment(environmentName: string): string;
@@ -1,10 +1,12 @@
1
1
  export { parseVirtualFileId };
2
2
  export { generateVirtualFileId };
3
+ export { generateVirtualFileIdAdditionalEnvironment };
3
4
  export { virtualFileIdGlobalEntryServer };
4
5
  export { virtualFileIdGlobalEntryClientSR };
5
6
  export { virtualFileIdGlobalEntryClientCR };
6
7
  import { extractAssetsRemoveQuery } from './extractAssetsQuery.js';
7
8
  import { assert } from '../utils/assert.js';
9
+ import { isEnvironmentBuiltIn, isEnvironmentNameValid } from './vike-environments.js';
8
10
  import { assertIsNotBrowser } from '../utils/assertIsNotBrowser.js';
9
11
  import { removeVirtualFileIdPrefix } from '../utils/virtualFileId.js';
10
12
  assertIsNotBrowser();
@@ -18,13 +20,6 @@ const virtualFileIdGlobalEntryClientSR =
18
20
  const virtualFileIdGlobalEntryClientCR =
19
21
  //
20
22
  'virtual:vike:global-entry:client:client-routing';
21
- // Page entries
22
- const virtualFileIdPageEntryClient =
23
- //
24
- 'virtual:vike:page-entry:client:'; // ${pageId}
25
- const virtualFileIdPageEntryServer =
26
- //
27
- 'virtual:vike:page-entry:server:'; // ${pageId}
28
23
  // Virtual ID prefixes
29
24
  const virtualFileIdPageEntryPrefix =
30
25
  //
@@ -38,11 +33,11 @@ function parseVirtualFileId(id) {
38
33
  return false;
39
34
  // Global entry
40
35
  if (id.includes(virtualFileIdGlobalEntryPrefix)) {
41
- const isForClientSide = id !== virtualFileIdGlobalEntryServer;
42
36
  const isClientRouting = id === virtualFileIdGlobalEntryClientCR;
37
+ const environmentName = parseGlobalEntryEnvironmentName(id);
43
38
  return {
44
39
  type: 'global-entry',
45
- isForClientSide,
40
+ environmentName,
46
41
  isClientRouting,
47
42
  };
48
43
  }
@@ -51,52 +46,57 @@ function parseVirtualFileId(id) {
51
46
  const idOriginal = id;
52
47
  id = extractAssetsRemoveQuery(id);
53
48
  const isExtractAssets = idOriginal !== id;
54
- if (id.startsWith(virtualFileIdPageEntryClient)) {
49
+ const environmentNameBegin = virtualFileIdPageEntryPrefix.length;
50
+ const environmentNameEnd = id.indexOf(':', environmentNameBegin);
51
+ assert(environmentNameEnd > environmentNameBegin);
52
+ const environmentName = id.slice(environmentNameBegin, environmentNameEnd);
53
+ const pageIdSerialized = id.slice(environmentNameEnd + 1);
54
+ const pageId = deserializePageId(pageIdSerialized);
55
+ if (environmentName === 'client')
55
56
  assert(isExtractAssets === false);
56
- const pageIdSerialized = id.slice(virtualFileIdPageEntryClient.length);
57
- const pageId = deserializePageId(pageIdSerialized);
58
- return {
59
- type: 'page-entry',
60
- pageId,
61
- isForClientSide: true,
62
- isExtractAssets,
63
- };
64
- }
65
- if (id.startsWith(virtualFileIdPageEntryServer)) {
66
- const pageIdSerialized = id.slice(virtualFileIdPageEntryServer.length);
67
- const pageId = deserializePageId(pageIdSerialized);
68
- return {
69
- type: 'page-entry',
70
- pageId,
71
- isForClientSide: false,
72
- isExtractAssets,
73
- };
74
- }
75
- assert(false);
57
+ return {
58
+ type: 'page-entry',
59
+ environmentName,
60
+ pageId,
61
+ isExtractAssets,
62
+ };
76
63
  }
77
64
  return false;
78
65
  }
66
+ function parseGlobalEntryEnvironmentName(id) {
67
+ if (id === virtualFileIdGlobalEntryServer)
68
+ return 'server';
69
+ if (id === virtualFileIdGlobalEntryClientSR || id === virtualFileIdGlobalEntryClientCR)
70
+ return 'client';
71
+ const environmentName = id.slice(virtualFileIdGlobalEntryPrefix.length);
72
+ assert(isEnvironmentNameValid(environmentName));
73
+ return environmentName;
74
+ }
79
75
  function generateVirtualFileId(args) {
80
76
  if (args.type === 'global-entry') {
81
- const { isForClientSide, isClientRouting } = args;
82
- if (!isForClientSide) {
83
- return virtualFileIdGlobalEntryServer;
84
- }
85
- else if (isClientRouting) {
86
- return virtualFileIdGlobalEntryClientCR;
87
- }
88
- else {
89
- return virtualFileIdGlobalEntryClientSR;
77
+ const { environmentName, isClientRouting } = args;
78
+ assert(isEnvironmentNameValid(environmentName));
79
+ if (environmentName === 'client') {
80
+ return isClientRouting ? virtualFileIdGlobalEntryClientCR : virtualFileIdGlobalEntryClientSR;
90
81
  }
82
+ assert(!isClientRouting);
83
+ if (environmentName === 'server')
84
+ return virtualFileIdGlobalEntryServer;
85
+ return `${virtualFileIdGlobalEntryPrefix}${environmentName}`;
91
86
  }
92
87
  if (args.type === 'page-entry') {
93
- const { pageId, isForClientSide } = args;
88
+ const { pageId, environmentName } = args;
94
89
  const pageIdSerialized = serializePageId(pageId);
95
- const id = `${isForClientSide ? virtualFileIdPageEntryClient : virtualFileIdPageEntryServer}${pageIdSerialized}`;
96
- return id;
90
+ assert(isEnvironmentNameValid(environmentName));
91
+ return `${virtualFileIdPageEntryPrefix}${environmentName}:${pageIdSerialized}`;
97
92
  }
98
93
  assert(false);
99
94
  }
95
+ // The global entry of an additional environment (e.g. `rsc`)
96
+ function generateVirtualFileIdAdditionalEnvironment(environmentName) {
97
+ assert(!isEnvironmentBuiltIn(environmentName));
98
+ return generateVirtualFileId({ type: 'global-entry', environmentName });
99
+ }
100
100
  // Workaround:
101
101
  // - We replace virtual:vike:page-entry:client:/ with virtual:vike:page-entry:client:ROOT
102
102
  // - In order to avoid Vite to replace `virtual:vike:page-entry:client:/` with `virtual:vike:page-entry:client:`
@@ -211,7 +211,7 @@ type OnRenderHtmlAsync = (pageContext: PageContextServer) => Promise<OnRenderHtm
211
211
  * - https://vike.dev/onRenderHtml
212
212
  */
213
213
  type OnRenderHtmlSync = (pageContext: PageContextServer) => OnRenderHtmlReturn;
214
- type OnRenderHtmlReturn = DocumentHtml | {
214
+ type OnRenderHtmlReturn = DocumentHtml | void | {
215
215
  injectFilter?: (assets: InjectFilterEntry[]) => void;
216
216
  documentHtml?: DocumentHtml;
217
217
  pageContext?: OnRenderHtmlPageContextReturn | (() => Promise<OnRenderHtmlPageContextReturn> | OnRenderHtmlPageContextReturn);
@@ -540,9 +540,9 @@ type ConfigBuiltIn = {
540
540
  *
541
541
  * The middlewares defined via `+middleware` are so called "Universal Middleware" — they work with any JavaScript server (Hono, Express, Cloudflare, ...).
542
542
  *
543
- * https://github.com/magne4000/universal-middleware
543
+ * https://vike.dev/middleware
544
544
  */
545
- middleware?: EnhancedMiddleware | EnhancedMiddleware[];
545
+ middleware?: EnhancedMiddleware | EnhancedMiddleware[] | ImportStringList;
546
546
  /**
547
547
  * Set to `false` to disable Vike's automatic server integration mechanism (e.g. for integrating a JavaScript server manually via `renderPage()`).
548
548
  *
@@ -551,6 +551,14 @@ type ConfigBuiltIn = {
551
551
  * https://vike.dev/server
552
552
  */
553
553
  server?: boolean | ImportStringList;
554
+ /**
555
+ * Control how your server starts.
556
+ *
557
+ * It's built into `dist/server/index.mjs` for production, and it's also run in development if you don't define `+server.js`.
558
+ *
559
+ * https://vike.dev/serverEntry
560
+ */
561
+ serverEntry?: string | ImportStringList;
554
562
  /**
555
563
  * Set to `true` to create `.br` and `.gz` files for your static assets at build time, so that they don't have to be compressed on each request.
556
564
  *
@@ -7,12 +7,12 @@ import type { GlobalContextClientInternalWithServerRouting } from '../client/run
7
7
  import type { GlobalContextBasePublic } from '../shared-server-client/createGlobalContextShared.js';
8
8
  import type { GlobalContextClientInternal } from '../client/runtime-client-routing/getGlobalContextClientInternal.js';
9
9
  type GlobalContext = GlobalContextServer | GlobalContextClient;
10
- type GlobalContextServer = Pick<GlobalContextServerInternal, 'assetsManifest' | 'config' | 'viteConfig' | 'viteConfigRuntime' | 'pages' | 'baseServer' | 'baseAssets' | 'isClientSide'> & {
10
+ type GlobalContextServer = Pick<GlobalContextServerInternal, 'assetsManifest' | 'config' | 'viteConfig' | 'viteConfigRuntime' | 'pages' | 'baseServer' | 'baseAssets' | 'middlewares' | 'isClientSide' | 'devMiddleware'> & {
11
11
  /** https://vike.dev/warning/internals */
12
12
  dangerouslyUseInternals: GlobalContextServerInternal;
13
13
  } & Vike.GlobalContext & Vike.GlobalContextServer;
14
14
  type GlobalContextClient = GlobalContextBasePublic & {
15
15
  /** https://vike.dev/warning/internals */
16
16
  dangerouslyUseInternals: GlobalContextClientInternal;
17
- } & Pick<GlobalContextClientInternal, 'isClientSide'> & Vike.GlobalContext & Vike.GlobalContextClient & {};
18
- type GlobalContextClientWithServerRouting = GlobalContextBasePublic & Pick<GlobalContextClientInternalWithServerRouting, 'isClientSide'> & Vike.GlobalContext & Vike.GlobalContextClient & {};
17
+ } & Pick<GlobalContextClientInternal, 'isClientSide' | 'devMiddleware'> & Vike.GlobalContext & Vike.GlobalContextClient & {};
18
+ type GlobalContextClientWithServerRouting = GlobalContextBasePublic & Pick<GlobalContextClientInternalWithServerRouting, 'isClientSide' | 'devMiddleware'> & Vike.GlobalContext & Vike.GlobalContextClient & {};
@@ -78,19 +78,27 @@ type VirtualFileExportsPageEntry = {
78
78
  *
79
79
  * https://vike.dev/meta
80
80
  */
81
- type ConfigEnv = ({
81
+ type ConfigEnv = {
82
82
  /** Load value on the client-side */
83
83
  client?: boolean;
84
- } | {
85
- /** @experimental */
86
- client?: 'if-client-routing';
87
- }) & {
88
84
  /** Load value on the server-side */
89
85
  server?: boolean;
90
86
  /** Load value for config files */
91
87
  config?: boolean;
92
88
  /** Load value only in production (`true`), or only in development (`false`), or always (`undefined`). */
93
89
  production?: boolean;
90
+ /** Load value on the client-side only if the page uses Client Routing
91
+ *
92
+ * @experimental
93
+ */
94
+ clientRoutingOnly?: boolean;
95
+ /** Load value in an additional Vike environment, e.g. `rsc`
96
+ *
97
+ * @experimental
98
+ *
99
+ * https://vike.dev/meta#vike-environments
100
+ */
101
+ [environmentName: string]: boolean | undefined;
94
102
  };
95
103
  type ConfigValueSources = Record<string, // configName
96
104
  ConfigValueSource[]>;
@@ -1,4 +1,3 @@
1
- import type { IncomingMessage, ServerResponse } from 'node:http';
2
1
  export type { PageContext };
3
2
  export type { PageContextServer };
4
3
  export type { PageContextClient };
@@ -8,7 +7,6 @@ export type { PageContextInternalServer };
8
7
  export type { PageContextInternalClient };
9
8
  export type { PageContextInternalClient_ServerRouting };
10
9
  export type { PageContextInternalClient_ClientRouting };
11
- export type { PageContextInitInternal };
12
10
  export type { PageContextInit };
13
11
  export type { PageContextBuiltInServer_deprecated as PageContextBuiltInServer };
14
12
  export type { PageContextBuiltInClientWithClientRouting_deprecated as PageContextBuiltInClientWithClientRouting };
@@ -27,11 +25,19 @@ import type { PageContextPublicProxyClient } from '../client/runtime-client-rout
27
25
  type PageContextServer<Data = unknown> = PageContextBuiltInServer<Data> & {
28
26
  /** https://vike.dev/warning/internals */
29
27
  dangerouslyUseInternals: DangerouslyUseInternals<PageContextInternalServer & PageContextAfterRender & PageContextPublicServer>;
30
- } & Vike.PageContext & Vike.PageContextServer & (Vike.Server extends {
28
+ } & Vike.PageContext & Vike.PageContextServer & PageContextContent & (Vike.Server extends {
31
29
  server: string;
32
30
  } ? {
33
31
  runtime: RuntimeAdapterTarget<Vike.Server['server']>;
34
32
  } & PageContextReqResAlias<Vike.Server['server']> : {});
33
+ type PageContextContent = {
34
+ /**
35
+ * The content of a non-HTML page — the HTTP response body (SSR) or the file content (pre-rendering).
36
+ *
37
+ * https://vike.dev/pageContext#content
38
+ */
39
+ content?: string | Uint8Array | ReadableStream<Uint8Array>;
40
+ };
35
41
  type PageContextReqResAlias<Server extends string> = ReqResAlias<'req', RuntimeAdapterTarget<Server>> & ReqResAlias<'res', RuntimeAdapterTarget<Server>>;
36
42
  type ReqResAlias<Key extends 'req' | 'res', Runtime> = Key extends keyof (Vike.PageContext & Vike.PageContextServer) ? unknown : Key extends keyof Runtime ? Record<Key, Runtime[Key]> : unknown;
37
43
  type PageContext<Data = unknown> = PageContextClient<Data> | PageContextServer<Data>;
@@ -141,13 +147,6 @@ type PageContextInit = {
141
147
  headersOriginal?: unknown;
142
148
  /** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
143
149
  };
144
- type PageContextInitInternal = PageContextInit & {
145
- _nodeDev?: {
146
- req: IncomingMessage;
147
- res: ServerResponse;
148
- };
149
- _reqWeb?: Request;
150
- };
151
150
  type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextInit & PageContextUrlServer & {
152
151
  /**
153
152
  * The HTTP request headers.
@@ -194,6 +193,15 @@ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageConte
194
193
  * https://vike.dev/pageContext#pageContextsAborted
195
194
  */
196
195
  pageContextsAborted: Partial<PageContextServer<Data>>[];
196
+ /**
197
+ * @experimental
198
+ *
199
+ * https://vike.dev/meta#vike-environments
200
+ */
201
+ environments?: Record<string, {
202
+ config: PageContextConfig['config'];
203
+ pageContext: PageContextServer<Data>;
204
+ }>;
197
205
  isHydration?: undefined;
198
206
  isBackwardNavigation?: undefined;
199
207
  isHistoryNavigation?: undefined;
@@ -1 +1,2 @@
1
+ // Public usage
1
2
  export {};
@@ -5,7 +5,7 @@ import type { Fetchable, ServerOptions } from '@universal-deploy/store';
5
5
  *
6
6
  * https://vike.dev/server
7
7
  */
8
- interface Server extends Fetchable {
8
+ interface Server extends Partial<Fetchable> {
9
9
  prod?: Omit<ServerOptions, 'fetch'> & {
10
10
  static?: boolean | string;
11
11
  };
@@ -62,7 +62,7 @@ declare global {
62
62
  }
63
63
  /** Defines the type of `pageContext.runtime`.
64
64
  *
65
- * https://vike.dev/server#pagecontext-runtime
65
+ * https://vike.dev/pageContext#runtime
66
66
  */
67
67
  interface Server {
68
68
  _interfaceIsNotAny?: never;
@@ -1,3 +1,4 @@
1
+ /// <reference path="../../vike-server.d.ts" preserve="true" />
1
2
  export type { PageContext, PageContextServer, PageContextClient, PageContextWithServerRouting, PageContextClientWithServerRouting, } from './PageContext.js';
2
3
  export type { GlobalContext, GlobalContextServer, GlobalContextClient, GlobalContextClientWithServerRouting, } from './GlobalContext.js';
3
4
  export type { PrerenderContextPublic as PrerenderContext } from '../node/prerender/runPrerender.js';
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: '0.4.267';
1
+ export declare const PROJECT_VERSION: '0.4.268-commit-45c1759';
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.267';
2
+ export const PROJECT_VERSION = '0.4.268-commit-45c1759';
@@ -1,4 +1,2 @@
1
1
  export { assertViteVersion };
2
- export { viteVersionMin };
3
- declare const viteVersionMin = "6.3.0";
4
- declare function assertViteVersion(viteVersion: string): void;
2
+ declare function assertViteVersion(viteVersion: string | undefined): void;
@@ -1,14 +1,11 @@
1
1
  export { assertViteVersion };
2
- export { viteVersionMin };
2
+ import { assertUsage } from './assert.js';
3
3
  import { assertVersion } from './assertVersion.js';
4
- const viteVersionMin = '6.3.0';
5
- // package.json#peerDependencies isn't enough, as users often ignore it
4
+ const viteVersionMin = '7.1.0';
5
+ // - package.json#peerDependencies isn't enough, as users often ignore it
6
+ // - `import { version } from 'vite'` isn't reliable: the user may still use an older Vite version — see https://github.com/vitejs/vite/pull/19355
6
7
  function assertViteVersion(viteVersion) {
7
- // - 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
8
- // - TO-DO/eventually: let's also use this.meta.viteVersion
9
- // - this.meta.viteVersion was released in vite@7.0.0 => let's use it only after Vike requires a Vite version above 7.0.0
10
- // - https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md#700-2025-06-24
11
- // - https://github.com/vitejs/vite/pull/20088
12
- // - We can then remove the assertUsage() at isViteServerSide.ts — see viteVersionMin export usage
8
+ // `viteVersion` is `undefined` on Vite 6 and older (their `config` hook has no `this`); assertVersion() needs a string
9
+ assertUsage(viteVersion, `You're using an old Vite version — update Vite to ${viteVersionMin} or above.`);
13
10
  assertVersion('Vite', viteVersion, [viteVersionMin]);
14
11
  }
@@ -1,20 +1,40 @@
1
1
  export { catchInfiniteLoop };
2
- import { assertUsage, assertWarning } from './assert.js';
2
+ import { assert, assertUsage, assertWarning } from './assert.js';
3
3
  import { humanizeTime } from './humanizeTime.js';
4
- const trackers = {};
4
+ const trackers = new Map();
5
+ let lastCleanup;
6
+ // Given these parameters, a warning is shown upon 10 calls a second on average during 5 seconds
5
7
  const maxCalls = 99;
6
8
  const time = 5 * 1000;
7
9
  function catchInfiniteLoop(functionName) {
8
10
  // Init
9
11
  const now = new Date().getTime();
10
- // Clean all outdated trackers
11
- Object.keys(trackers).forEach((key) => {
12
- const tracker = trackers[key];
13
- const elapsedTime = now - tracker.startTime;
14
- if (elapsedTime > time)
15
- delete trackers[key];
16
- });
17
- const tracker = (trackers[functionName] ?? (trackers[functionName] = { count: 0, startTime: now }));
12
+ // Cleanup
13
+ if (globalThis.__VIKE__IS_CLIENT) {
14
+ // No cleanup on the client-side, in order to minimize client-side JavaScript (to save client-side KBs)
15
+ assert(trackers.size < 5);
16
+ }
17
+ else {
18
+ // Clean outdated trackers
19
+ // - On the server-side, there is an infinite amount of outdated trackers (a new tracker is created per HTTP request) => we should clean them
20
+ // - We don't clean upon every call: the server creates a new tracker per HTTP request, so that would cost O(n^2) — O(number of requests within `time`) per request
21
+ // - https://github.com/vikejs/vike/pull/3576
22
+ const cleanInterval = 10 * 1000;
23
+ lastCleanup ?? (lastCleanup = now);
24
+ if (now - lastCleanup > cleanInterval) {
25
+ trackers.forEach((tracker, key) => {
26
+ if (isOutdated(tracker, now))
27
+ trackers.delete(key);
28
+ });
29
+ lastCleanup = now;
30
+ }
31
+ }
32
+ // Get/reset tracker
33
+ let tracker = trackers.get(functionName);
34
+ if (!tracker || isOutdated(tracker, now)) {
35
+ tracker = { count: 0, startTime: now };
36
+ trackers.set(functionName, tracker);
37
+ }
18
38
  // Count
19
39
  tracker.count++;
20
40
  // Error
@@ -24,8 +44,10 @@ function catchInfiniteLoop(functionName) {
24
44
  }
25
45
  // Warning, at 50% threshold
26
46
  if (!tracker.warned && tracker.count > maxCalls * 0.5) {
27
- // Warning is shown upon 10 calls a second, on average during 5 seconds, given the default parameters
28
47
  assertWarning(false, msg, { onlyOnce: false, showStackTrace: true });
29
48
  tracker.warned = true;
30
49
  }
31
50
  }
51
+ function isOutdated(tracker, now) {
52
+ return now - tracker.startTime > time;
53
+ }
@@ -1 +1,2 @@
1
- export declare function deepEqual(x: any, y: any): boolean;
1
+ export { deepEqual };
2
+ declare function deepEqual(x: any, y: any): boolean;
@@ -1,7 +1,22 @@
1
- // https://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects/32922084#32922084
2
- export function deepEqual(x, y) {
3
- const ok = Object.keys, tx = typeof x, ty = typeof y;
4
- return x && y && tx === 'object' && tx === ty
5
- ? ok(x).length === ok(y).length && ok(x).every((key) => deepEqual(x[key], y[key]))
6
- : x === y;
1
+ export { deepEqual };
2
+ import { assertIsNotBrowser } from './assertIsNotBrowser.js';
3
+ // If client-side needs it then use a more minimal version to save client-side KBs:
4
+ // https://github.com/vikejs/vike/blob/165d572a5994ccd0e56e43fe2993b1cef117ee7f/packages/vike/src/utils/deepEqual.ts
5
+ assertIsNotBrowser();
6
+ function deepEqual(x, y) {
7
+ return deepEqualCyclic(x, y, new Map());
8
+ }
9
+ // Supports cyclic objects, e.g. Vite plugins
10
+ function deepEqualCyclic(x, y, seen) {
11
+ if (x === y)
12
+ return true;
13
+ if (!x || !y || typeof x !== 'object' || typeof y !== 'object')
14
+ return false;
15
+ // A pair seen before is either being compared higher up (a cycle) or already found equal
16
+ const seenY = seen.get(x) ?? new Set();
17
+ if (seenY.has(y))
18
+ return true;
19
+ seen.set(x, seenY.add(y));
20
+ const keys = Object.keys(x);
21
+ return keys.length === Object.keys(y).length && keys.every((key) => deepEqualCyclic(x[key], y[key], seen));
7
22
  }
@@ -0,0 +1,2 @@
1
+ export { getContentTypeFromUrl };
2
+ declare function getContentTypeFromUrl(url: string): string | null;