vike 0.4.266 → 0.4.267-commit-7884d91

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 (159) hide show
  1. package/dist/client/runtime-client-routing/createPageContextClient.d.ts +4 -0
  2. package/dist/client/runtime-client-routing/getGlobalContextClientInternal.d.ts +4 -0
  3. package/dist/client/runtime-client-routing/getPageContextFromHooks.d.ts +22 -2
  4. package/dist/client/runtime-client-routing/getPageContextFromHooks.js +4 -5
  5. package/dist/client/runtime-client-routing/history.d.ts +19 -19
  6. package/dist/client/runtime-client-routing/history.js +89 -83
  7. package/dist/client/runtime-client-routing/renderPageClient.d.ts +472 -9
  8. package/dist/client/runtime-client-routing/renderPageClient.js +12 -11
  9. package/dist/client/runtime-client-routing/setScrollPosition.js +6 -5
  10. package/dist/client/runtime-client-routing/streamedValues.d.ts +5 -0
  11. package/dist/client/runtime-client-routing/streamedValues.js +23 -0
  12. package/dist/client/runtime-server-routing/createPageContextClient.d.ts +4 -0
  13. package/dist/client/runtime-server-routing/entry.js +1 -1
  14. package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +4 -0
  15. package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +4 -0
  16. package/dist/client/shared/getJsonSerializedInHtml.d.ts +2 -2
  17. package/dist/client/shared/getJsonSerializedInHtml.js +9 -6
  18. package/dist/client/shared/streamedValues/asyncIterable.d.ts +4 -0
  19. package/dist/client/shared/streamedValues/asyncIterable.js +26 -0
  20. package/dist/client/shared/streamedValues/lines.d.ts +11 -0
  21. package/dist/client/shared/streamedValues/lines.js +19 -0
  22. package/dist/client/shared/streamedValues/promise.d.ts +4 -0
  23. package/dist/client/shared/streamedValues/promise.js +19 -0
  24. package/dist/client/shared/streamedValues/readableStream.d.ts +4 -0
  25. package/dist/client/shared/streamedValues/readableStream.js +44 -0
  26. package/dist/client/shared/streamedValues/registry.d.ts +21 -0
  27. package/dist/client/shared/streamedValues/registry.js +40 -0
  28. package/dist/client/shared/streamedValues.d.ts +7 -0
  29. package/dist/client/shared/streamedValues.js +82 -0
  30. package/dist/node/api/resolveViteConfigUser.js +2 -2
  31. package/dist/node/prerender/runPrerender.d.ts +12 -4
  32. package/dist/node/prerender/runPrerender.js +71 -15
  33. package/dist/node/vite/assertEnvVite.js +2 -2
  34. package/dist/node/vite/index.js +2 -0
  35. package/dist/node/vite/plugins/build/handleAssetsManifest.js +8 -3
  36. package/dist/node/vite/plugins/build/pluginBuildApp.js +25 -26
  37. package/dist/node/vite/plugins/build/pluginBuildConfig.d.ts +2 -2
  38. package/dist/node/vite/plugins/build/pluginBuildConfig.js +24 -16
  39. package/dist/node/vite/plugins/build/pluginDistFileNames.js +70 -50
  40. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.d.ts +6 -0
  41. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.js +71 -0
  42. package/dist/node/vite/plugins/build/pluginSuppressRollupWarning.js +19 -17
  43. package/dist/node/vite/plugins/pluginCommon.js +9 -6
  44. package/dist/node/vite/plugins/pluginDev/logSkillHint.js +6 -4
  45. package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +1 -1
  46. package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +6 -4
  47. package/dist/node/vite/plugins/pluginUniversalDeploy.js +3 -2
  48. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.d.ts +2 -1
  49. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.js +29 -12
  50. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +3 -2
  51. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +7 -7
  52. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +7 -5
  53. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +4 -10
  54. package/dist/node/vite/plugins/pluginVirtualFiles.js +20 -0
  55. package/dist/node/vite/shared/addSsrMiddleware.js +13 -1
  56. package/dist/node/vite/shared/getAssetsDir.d.ts +3 -2
  57. package/dist/node/vite/shared/getAssetsDir.js +3 -3
  58. package/dist/node/vite/shared/isViteCli.d.ts +3 -3
  59. package/dist/node/vite/shared/isViteCli.js +80 -84
  60. package/dist/node/vite/shared/isViteServerSide.js +2 -7
  61. package/dist/node/vite/shared/resolveVikeConfigInternal/getPlusFiles.d.ts +2 -2
  62. package/dist/node/vite/shared/resolveVikeConfigInternal/getPlusFiles.js +3 -3
  63. package/dist/node/vite/shared/resolveVikeConfigInternal/loadFileAtConfigTime.d.ts +4 -4
  64. package/dist/node/vite/shared/resolveVikeConfigInternal/loadFileAtConfigTime.js +9 -9
  65. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +1 -1
  66. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +12 -6
  67. package/dist/node/vite/shared/resolveVikeConfigInternal/pointerImports.d.ts +3 -1
  68. package/dist/node/vite/shared/resolveVikeConfigInternal/pointerImports.js +18 -46
  69. package/dist/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.d.ts +3 -3
  70. package/dist/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +333 -212
  71. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +4 -1
  72. package/dist/node/vite/shared/resolveVikeConfigInternal.js +97 -26
  73. package/dist/server/runtime/globalContext.d.ts +20 -0
  74. package/dist/server/runtime/renderPageServer/analyzePage.js +3 -3
  75. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +20 -7
  76. package/dist/server/runtime/renderPageServer/createHttpResponse.js +34 -15
  77. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +4 -0
  78. package/dist/server/runtime/renderPageServer/csp.d.ts +2 -1
  79. package/dist/server/runtime/renderPageServer/csp.js +2 -1
  80. package/dist/server/runtime/renderPageServer/execHookOnError.js +1 -1
  81. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.d.ts +9 -0
  82. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.js +17 -5
  83. package/dist/server/runtime/renderPageServer/getHttpResponseBody.d.ts +2 -2
  84. package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +17 -2
  85. package/dist/server/runtime/renderPageServer/getPageContextJson.d.ts +8 -0
  86. package/dist/server/runtime/renderPageServer/getPageContextJson.js +47 -0
  87. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +2 -0
  88. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +1 -1
  89. package/dist/server/runtime/renderPageServer/headersResponse.d.ts +11 -2
  90. package/dist/server/runtime/renderPageServer/headersResponse.js +22 -2
  91. package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +5 -4
  92. package/dist/server/runtime/renderPageServer/html/injectAssets.d.ts +3 -2
  93. package/dist/server/runtime/renderPageServer/html/injectAssets.js +7 -1
  94. package/dist/server/runtime/renderPageServer/html/renderHtml.js +4 -2
  95. package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +5 -1
  96. package/dist/server/runtime/renderPageServer/html/serializeContext.js +12 -9
  97. package/dist/server/runtime/renderPageServer/html/stream.d.ts +13 -6
  98. package/dist/server/runtime/renderPageServer/html/stream.js +121 -31
  99. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.d.ts +30 -0
  100. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.js +92 -0
  101. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +4 -0
  102. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.js +5 -1
  103. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.d.ts +15 -0
  104. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.js +61 -0
  105. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +314 -1
  106. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +21 -12
  107. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.d.ts +4 -0
  108. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.js +12 -0
  109. package/dist/server/runtime/renderPageServer/streamedValues/lines.d.ts +10 -0
  110. package/dist/server/runtime/renderPageServer/streamedValues/lines.js +49 -0
  111. package/dist/server/runtime/renderPageServer/streamedValues/promise.d.ts +4 -0
  112. package/dist/server/runtime/renderPageServer/streamedValues/promise.js +14 -0
  113. package/dist/server/runtime/renderPageServer/streamedValues/pump.d.ts +10 -0
  114. package/dist/server/runtime/renderPageServer/streamedValues/pump.js +67 -0
  115. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.d.ts +4 -0
  116. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.js +12 -0
  117. package/dist/server/runtime/renderPageServer/streamedValues/registry.d.ts +28 -0
  118. package/dist/server/runtime/renderPageServer/streamedValues/registry.js +33 -0
  119. package/dist/server/runtime/renderPageServer.d.ts +4 -0
  120. package/dist/server/runtime/renderPageServer.js +17 -8
  121. package/dist/shared-server-client/createGlobalContextShared.d.ts +8 -0
  122. package/dist/shared-server-client/createGlobalContextShared.js +2 -1
  123. package/dist/shared-server-client/getPageContextPublicShared.js +0 -2
  124. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.d.ts +8 -0
  125. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.js +17 -7
  126. package/dist/shared-server-client/hooks/execHook.d.ts +1 -1
  127. package/dist/shared-server-client/hooks/execHook.js +2 -2
  128. package/dist/shared-server-client/route/abort.d.ts +1 -1
  129. package/dist/shared-server-client/route/abort.js +4 -2
  130. package/dist/shared-server-client/streamedValues.d.ts +22 -0
  131. package/dist/shared-server-client/streamedValues.js +24 -0
  132. package/dist/shared-server-node/vike-environments.d.ts +4 -0
  133. package/dist/shared-server-node/vike-environments.js +10 -0
  134. package/dist/shared-server-node/virtualFileId.d.ts +7 -5
  135. package/dist/shared-server-node/virtualFileId.js +42 -42
  136. package/dist/types/Config.d.ts +9 -1
  137. package/dist/types/PageConfig.d.ts +13 -5
  138. package/dist/types/PageContext.d.ts +18 -1
  139. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  140. package/dist/utils/PROJECT_VERSION.js +1 -1
  141. package/dist/utils/assertNodeVersion.d.ts +2 -0
  142. package/dist/utils/assertNodeVersion.js +4 -1
  143. package/dist/utils/assertViteVersion.d.ts +1 -3
  144. package/dist/utils/assertViteVersion.js +6 -9
  145. package/dist/utils/debug.d.ts +1 -1
  146. package/dist/utils/debug.js +1 -1
  147. package/dist/utils/deepEqual.d.ts +2 -1
  148. package/dist/utils/deepEqual.js +21 -6
  149. package/dist/utils/getContentTypeFromUrl.d.ts +2 -0
  150. package/dist/utils/getContentTypeFromUrl.js +39 -0
  151. package/dist/utils/injectRollupInputs.d.ts +2 -2
  152. package/dist/utils/injectRollupInputs.js +2 -2
  153. package/dist/utils/isDev.js +2 -7
  154. package/dist/utils/parseUrl-extras.js +4 -0
  155. package/dist/utils/requireResolve.d.ts +0 -6
  156. package/dist/utils/requireResolve.js +0 -8
  157. package/package.json +9 -10
  158. package/dist/shared-server-client/addIs404ToPageProps.d.ts +0 -2
  159. package/dist/shared-server-client/addIs404ToPageProps.js +0 -17
@@ -27,11 +27,19 @@ import type { PageContextPublicProxyClient } from '../client/runtime-client-rout
27
27
  type PageContextServer<Data = unknown> = PageContextBuiltInServer<Data> & {
28
28
  /** https://vike.dev/warning/internals */
29
29
  dangerouslyUseInternals: DangerouslyUseInternals<PageContextInternalServer & PageContextAfterRender & PageContextPublicServer>;
30
- } & Vike.PageContext & Vike.PageContextServer & (Vike.Server extends {
30
+ } & Vike.PageContext & Vike.PageContextServer & PageContextContent & (Vike.Server extends {
31
31
  server: string;
32
32
  } ? {
33
33
  runtime: RuntimeAdapterTarget<Vike.Server['server']>;
34
34
  } & PageContextReqResAlias<Vike.Server['server']> : {});
35
+ type PageContextContent = {
36
+ /**
37
+ * The content of a non-HTML page — the HTTP response body (SSR) or the file content (pre-rendering).
38
+ *
39
+ * https://vike.dev/pageContext#content
40
+ */
41
+ content?: string | Uint8Array | ReadableStream<Uint8Array>;
42
+ };
35
43
  type PageContextReqResAlias<Server extends string> = ReqResAlias<'req', RuntimeAdapterTarget<Server>> & ReqResAlias<'res', RuntimeAdapterTarget<Server>>;
36
44
  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
45
  type PageContext<Data = unknown> = PageContextClient<Data> | PageContextServer<Data>;
@@ -194,6 +202,15 @@ type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageConte
194
202
  * https://vike.dev/pageContext#pageContextsAborted
195
203
  */
196
204
  pageContextsAborted: Partial<PageContextServer<Data>>[];
205
+ /**
206
+ * @experimental
207
+ *
208
+ * https://vike.dev/meta#vike-environments
209
+ */
210
+ environments?: Record<string, {
211
+ config: PageContextConfig['config'];
212
+ pageContext: PageContextServer<Data>;
213
+ }>;
197
214
  isHydration?: undefined;
198
215
  isBackwardNavigation?: undefined;
199
216
  isHistoryNavigation?: undefined;
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: '0.4.266';
1
+ export declare const PROJECT_VERSION: '0.4.267-commit-7884d91';
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.266';
2
+ export const PROJECT_VERSION = '0.4.267-commit-7884d91';
@@ -1,2 +1,4 @@
1
1
  export { assertNodeVersion };
2
+ export { nodeVersionMin };
3
+ declare const nodeVersionMin = "20.19.0";
2
4
  declare function assertNodeVersion(): void;
@@ -1,6 +1,9 @@
1
1
  export { assertNodeVersion };
2
+ export { nodeVersionMin };
2
3
  import { isNodeJS } from './isNodeJS.js';
3
4
  import { assertVersion } from './assertVersion.js';
5
+ // Vike's minimum supported Node.js version
6
+ const nodeVersionMin = '20.19.0';
4
7
  // node_modules/vike/package.json#engines.node isn't enough, as users often ignore it
5
8
  function assertNodeVersion() {
6
9
  if (!isNodeJS())
@@ -8,5 +11,5 @@ function assertNodeVersion() {
8
11
  const version = process.versions.node;
9
12
  assertVersion('Node.js', version,
10
13
  // https://gist.github.com/brillout/8e0133716e169b981b6c4e8a938b0134
11
- ['20.19.0', '22.12.0']);
14
+ [nodeVersionMin, '22.12.0']);
12
15
  }
@@ -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
  }
@@ -2,7 +2,7 @@ export { createDebug };
2
2
  export { isDebug };
3
3
  export { isDebugError };
4
4
  export { debug };
5
- declare const flags: ["vike", "vike:config", "vike:crawl", "vike:file-change", "vike:error", "vike:esbuild-resolve", "vike:pluginExtractAssets", "vike:pluginExtractExportNames", "vike:glob", "vike:globalContext", "vike:log", "vike:optimizeDeps", "vike:outDir", "vike:pageFiles", "vike:pointer-imports", "vike:requireResolve", "vike:routing", "vike:setup", "vike:staticReplace", "vike:stream", "vike:virtualFiles", "vike:vite-config-user", "vike:vite-rpc"];
5
+ declare const flags: ["vike", "vike:config", "vike:crawl", "vike:file-change", "vike:error", "vike:transpile-resolve", "vike:pluginExtractAssets", "vike:pluginExtractExportNames", "vike:glob", "vike:globalContext", "vike:log", "vike:optimizeDeps", "vike:outDir", "vike:pageFiles", "vike:pointer-imports", "vike:requireResolve", "vike:routing", "vike:setup", "vike:staticReplace", "vike:stream", "vike:virtualFiles", "vike:vite-config-user", "vike:vite-rpc"];
6
6
  type Flag = (typeof flags)[number];
7
7
  type Options = {
8
8
  serialization?: {
@@ -15,7 +15,7 @@ const flags = [
15
15
  'vike:crawl',
16
16
  'vike:file-change',
17
17
  'vike:error',
18
- 'vike:esbuild-resolve',
18
+ 'vike:transpile-resolve',
19
19
  'vike:pluginExtractAssets',
20
20
  'vike:pluginExtractExportNames',
21
21
  'vike:glob',
@@ -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;
@@ -0,0 +1,39 @@
1
+ export { getContentTypeFromUrl };
2
+ import { parseUrl } from './parseUrl.js';
3
+ import { assertIsNotBrowser } from './assertIsNotBrowser.js';
4
+ assertIsNotBrowser();
5
+ const contentTypes = new Map(Object.entries({
6
+ atom: 'application/atom+xml;charset=utf-8',
7
+ rss: 'application/rss+xml;charset=utf-8',
8
+ xml: 'application/xml;charset=utf-8',
9
+ json: 'application/json',
10
+ jsonld: 'application/ld+json',
11
+ webmanifest: 'application/manifest+json',
12
+ txt: 'text/plain;charset=utf-8',
13
+ md: 'text/markdown;charset=utf-8',
14
+ csv: 'text/csv;charset=utf-8',
15
+ ics: 'text/calendar;charset=utf-8',
16
+ html: 'text/html;charset=utf-8',
17
+ htm: 'text/html;charset=utf-8',
18
+ css: 'text/css;charset=utf-8',
19
+ js: 'text/javascript;charset=utf-8',
20
+ mjs: 'text/javascript;charset=utf-8',
21
+ svg: 'image/svg+xml',
22
+ png: 'image/png',
23
+ jpg: 'image/jpeg',
24
+ jpeg: 'image/jpeg',
25
+ gif: 'image/gif',
26
+ webp: 'image/webp',
27
+ avif: 'image/avif',
28
+ ico: 'image/x-icon',
29
+ pdf: 'application/pdf',
30
+ }));
31
+ // Content-Type of the URL's file extension, or `null` if unknown, see https://vike.dev/pageContext#content
32
+ function getContentTypeFromUrl(url) {
33
+ const { pathname } = parseUrl(url, '/');
34
+ // Last non-empty segment, see https://vike.dev/url-normalization
35
+ const fileName = pathname.split('/').filter(Boolean).pop() ?? '';
36
+ const i = fileName.lastIndexOf('.');
37
+ const fileExtension = i > 0 ? fileName.slice(i + 1).toLowerCase() : null;
38
+ return (fileExtension && contentTypes.get(fileExtension)) || null;
39
+ }
@@ -1,7 +1,7 @@
1
1
  export { injectRollupInputs };
2
2
  export { normalizeRollupInput };
3
- import type { ResolvedConfig, Rollup } from 'vite';
3
+ import type { Rollup } from 'vite';
4
4
  type InputOption = Rollup.InputOption;
5
5
  type InputsMap = Record<string, string>;
6
- declare function injectRollupInputs(inputsNew: InputsMap, config: ResolvedConfig): InputsMap;
6
+ declare function injectRollupInputs(inputsNew: InputsMap, inputCurrent: InputOption | undefined): InputsMap;
7
7
  declare function normalizeRollupInput(input?: InputOption): InputsMap;
@@ -3,8 +3,8 @@ export { normalizeRollupInput };
3
3
  import { assert } from './assert.js';
4
4
  import { isObject } from './isObject.js';
5
5
  import { isArray } from './isArray.js';
6
- function injectRollupInputs(inputsNew, config) {
7
- const inputsCurrent = normalizeRollupInput(config.build.rollupOptions.input);
6
+ function injectRollupInputs(inputsNew, inputCurrent) {
7
+ const inputsCurrent = normalizeRollupInput(inputCurrent);
8
8
  const input = {
9
9
  ...inputsNew,
10
10
  ...inputsCurrent,
@@ -1,15 +1,10 @@
1
1
  export { isDevCheck };
2
2
  export { applyDev };
3
3
  export { applyPreview };
4
- import { assertUsage } from './assert.js';
4
+ import { assert } from './assert.js';
5
5
  function isDevCheck(configEnv) {
6
6
  const { isPreview, command } = configEnv;
7
- // Note that:
8
- // - `assertVersion('Vite', version, '5.1.0')` isn't enough: https://github.com/vitejs/vite/pull/19355
9
- // - We'll eventually be able to make this an assert() instead of assertUsage() once Vike requires a Vite version that supports this.meta.viteVersion
10
- // - https://github.com/vitejs/vite/pull/20088
11
- // - Released at 7.0.0: https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md#700-2025-06-24
12
- assertUsage(typeof isPreview === 'boolean', 'You are using an old Vite version; make sure to use Vite 5.1.0 or above.');
7
+ assert(typeof isPreview === 'boolean');
13
8
  return command === 'serve' && !isPreview;
14
9
  }
15
10
  function applyDev(_, env) {
@@ -10,6 +10,7 @@ import { assertUrlComponents, createUrlFromComponents, isBaseServer, parseUrl }
10
10
  import { assert } from './assert.js';
11
11
  import { slice } from './slice.js';
12
12
  import { assertIsNotBrowser } from './assertIsNotBrowser.js';
13
+ import { getContentTypeFromUrl } from './getContentTypeFromUrl.js';
13
14
  assertIsNotBrowser();
14
15
  function prependBase(url, baseServer) {
15
16
  if (baseServer.startsWith('http')) {
@@ -61,6 +62,9 @@ function normalizeUrlPathname(urlOriginal, trailingSlash, baseServer) {
61
62
  if (urlPathnameNormalized === '/') {
62
63
  return urlPathnameNormalized;
63
64
  }
65
+ // A file URL such as /feed.atom doesn't get a trailing slash
66
+ if (getContentTypeFromUrl(urlPathnameNormalized))
67
+ trailingSlash = false;
64
68
  // If the Base URL has a trailing slash, then Vite (as of vite@5.0.0-beta.19) expects the root URL to also have a trailing slash, see https://github.com/vikejs/vike/issues/1258#issuecomment-1812226260
65
69
  if (baseServer.endsWith('/') && baseServer !== '/' && normalize(baseServer) === urlPathnameNormalized) {
66
70
  trailingSlash = true;
@@ -1,5 +1,4 @@
1
1
  export { requireResolveOptional };
2
- export { requireResolveOptionalDir };
3
2
  export { requireResolveNpmPackage };
4
3
  export { requireResolveDistFile };
5
4
  export { getPackageNodeModulesDirectory };
@@ -8,11 +7,6 @@ declare function requireResolveOptional({ importPath, importerFilePath, userRoot
8
7
  importerFilePath: string | null;
9
8
  userRootDir: string;
10
9
  }): string | null;
11
- declare function requireResolveOptionalDir({ importPath, importerDir, userRootDir, }: {
12
- importPath: string;
13
- importerDir: string;
14
- userRootDir: string;
15
- }): string | null;
16
10
  declare function requireResolveNpmPackage({ importPathNpmPackage, userRootDir, }: {
17
11
  importPathNpmPackage: string;
18
12
  userRootDir: string;
@@ -1,5 +1,4 @@
1
1
  export { requireResolveOptional };
2
- export { requireResolveOptionalDir };
3
2
  export { requireResolveNpmPackage };
4
3
  export { requireResolveDistFile };
5
4
  export { getPackageNodeModulesDirectory };
@@ -88,13 +87,6 @@ function requireResolveOptional({ importPath, importerFilePath, userRootDir, })
88
87
  return null;
89
88
  return res.importPathResolvedFilePath;
90
89
  }
91
- function requireResolveOptionalDir({ importPath, importerDir, userRootDir, }) {
92
- const importerFilePath = getFakeImporterFile(importerDir);
93
- const res = requireResolve_(importPath, importerFilePath, userRootDir);
94
- if (res.hasFailed)
95
- return null;
96
- return res.importPathResolvedFilePath;
97
- }
98
90
  function requireResolveNpmPackage({ importPathNpmPackage, userRootDir, }) {
99
91
  assertImportIsNpmPackage(importPathNpmPackage);
100
92
  const importerFilePath = getFakeImporterFile(userRootDir);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.266",
3
+ "version": "0.4.267-commit-7884d91",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -125,30 +125,30 @@
125
125
  "@babel/core": "^7.28.5",
126
126
  "@babel/types": "^7.28.5",
127
127
  "@brillout/import": "^0.2.6",
128
- "@brillout/json-serializer": "^0.5.25",
128
+ "@brillout/json-serializer": "^0.5.27",
129
129
  "@brillout/picocolors": "^1.0.31",
130
- "@brillout/vite-plugin-server-entry": "^0.7.21",
130
+ "@brillout/vite-plugin-server-entry": "^0.7.23",
131
131
  "@universal-deploy/store": "^0.2.2",
132
- "@universal-deploy/vite": "^0.1.11",
132
+ "@universal-deploy/vite": "^0.1.14",
133
133
  "@universal-middleware/core": "^0.4.18",
134
134
  "@universal-middleware/node": "^0.2.2",
135
135
  "cac": "^6.0.0",
136
136
  "convert-route": "^1.1.1",
137
137
  "es-module-lexer": "^1.0.0",
138
- "esbuild": ">=0.19.0",
139
138
  "json5": "^2.0.0",
140
- "magic-string": "^1.2.3",
139
+ "magic-string": "^1.4.2",
141
140
  "picomatch": "^4.0.7",
141
+ "rolldown": ">=1.0.0",
142
142
  "semver": "^7.8.5",
143
143
  "sirv": "^3.0.2",
144
144
  "source-map-support": "^0.5.0",
145
145
  "tinyglobby": "^0.2.17",
146
- "vite": ">=6.3.0",
146
+ "vite": ">=7.1.0",
147
147
  "vite-plugin-wrapper": "^0.1.1"
148
148
  },
149
149
  "peerDependencies": {
150
150
  "react-streaming": ">=0.3.42",
151
- "vite": ">=6.3.0"
151
+ "vite": ">=7.1.0"
152
152
  },
153
153
  "peerDependenciesMeta": {
154
154
  "react-streaming": {
@@ -260,7 +260,7 @@
260
260
  "./fetch.js"
261
261
  ],
262
262
  "devDependencies": {
263
- "@brillout/release-me": "^0.4.16",
263
+ "@brillout/release-me": "^0.4.18",
264
264
  "@types/babel__core": "^7.20.5",
265
265
  "@types/estree": "^1.0.5",
266
266
  "@types/node": "^20.10.5",
@@ -269,7 +269,6 @@
269
269
  "@types/source-map-support": "^0.5.10",
270
270
  "react-streaming": "^0.4.20",
271
271
  "rimraf": "^6.1.3",
272
- "rolldown": "1.0.0-rc.17",
273
272
  "typescript": "^7.0.2",
274
273
  "vite": "^7.2.6"
275
274
  },
@@ -1,2 +0,0 @@
1
- export { addIs404ToPageProps };
2
- declare function addIs404ToPageProps(pageContext: Record<string, unknown>): void;
@@ -1,17 +0,0 @@
1
- export { addIs404ToPageProps };
2
- import { assertWarning } from '../utils/assert.js';
3
- import { isObject } from '../utils/isObject.js';
4
- function addIs404ToPageProps(pageContext) {
5
- addIs404(pageContext);
6
- }
7
- function addIs404(pageContext) {
8
- if (pageContext.is404 === undefined || pageContext.is404 === null)
9
- return;
10
- const pageProps = pageContext.pageProps || {};
11
- if (!isObject(pageProps)) {
12
- assertWarning(false, 'pageContext.pageProps should be an object', { showStackTrace: true, onlyOnce: true });
13
- return;
14
- }
15
- pageProps.is404 = pageProps.is404 || pageContext.is404;
16
- pageContext.pageProps = pageProps;
17
- }