vike 0.4.267-commit-b005535 → 0.4.267-commit-5676e14

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 (139) 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/renderPageClient.d.ts +472 -9
  6. package/dist/client/runtime-client-routing/renderPageClient.js +11 -5
  7. package/dist/client/runtime-client-routing/streamedValues.d.ts +5 -0
  8. package/dist/client/runtime-client-routing/streamedValues.js +23 -0
  9. package/dist/client/runtime-server-routing/createPageContextClient.d.ts +4 -0
  10. package/dist/client/runtime-server-routing/entry.js +1 -1
  11. package/dist/client/runtime-server-routing/getGlobalContextClientInternal.d.ts +4 -0
  12. package/dist/client/shared/getGlobalContextClientInternalShared.d.ts +4 -0
  13. package/dist/client/shared/getJsonSerializedInHtml.d.ts +2 -2
  14. package/dist/client/shared/getJsonSerializedInHtml.js +9 -6
  15. package/dist/client/shared/streamedValues/asyncIterable.d.ts +4 -0
  16. package/dist/client/shared/streamedValues/asyncIterable.js +26 -0
  17. package/dist/client/shared/streamedValues/lines.d.ts +11 -0
  18. package/dist/client/shared/streamedValues/lines.js +19 -0
  19. package/dist/client/shared/streamedValues/promise.d.ts +4 -0
  20. package/dist/client/shared/streamedValues/promise.js +19 -0
  21. package/dist/client/shared/streamedValues/readableStream.d.ts +4 -0
  22. package/dist/client/shared/streamedValues/readableStream.js +44 -0
  23. package/dist/client/shared/streamedValues/registry.d.ts +21 -0
  24. package/dist/client/shared/streamedValues/registry.js +40 -0
  25. package/dist/client/shared/streamedValues.d.ts +7 -0
  26. package/dist/client/shared/streamedValues.js +82 -0
  27. package/dist/node/api/resolveViteConfigUser.js +2 -2
  28. package/dist/node/prerender/runPrerender.d.ts +12 -4
  29. package/dist/node/prerender/runPrerender.js +60 -15
  30. package/dist/node/vite/assertEnvVite.js +1 -1
  31. package/dist/node/vite/index.js +2 -0
  32. package/dist/node/vite/plugins/build/handleAssetsManifest.js +6 -2
  33. package/dist/node/vite/plugins/build/pluginBuildApp.js +25 -26
  34. package/dist/node/vite/plugins/build/pluginBuildConfig.d.ts +2 -2
  35. package/dist/node/vite/plugins/build/pluginBuildConfig.js +24 -16
  36. package/dist/node/vite/plugins/build/pluginDistFileNames.js +70 -50
  37. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.d.ts +6 -0
  38. package/dist/node/vite/plugins/build/pluginEnvironmentEntries.js +71 -0
  39. package/dist/node/vite/plugins/build/pluginSuppressRollupWarning.js +19 -17
  40. package/dist/node/vite/plugins/pluginCommon.js +9 -6
  41. package/dist/node/vite/plugins/pluginDev/optimizeDeps.js +1 -1
  42. package/dist/node/vite/plugins/pluginReplaceConstantsGlobalThis.js +6 -4
  43. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.d.ts +2 -1
  44. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntry.js +29 -12
  45. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +3 -2
  46. package/dist/node/vite/plugins/pluginVirtualFiles/generateVirtualFilePageEntry.js +7 -7
  47. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.d.ts +7 -5
  48. package/dist/node/vite/plugins/pluginVirtualFiles/getConfigValueSourcesRelevant.js +4 -10
  49. package/dist/node/vite/plugins/pluginVirtualFiles.js +20 -0
  50. package/dist/node/vite/shared/addSsrMiddleware.js +13 -1
  51. package/dist/node/vite/shared/getAssetsDir.d.ts +3 -2
  52. package/dist/node/vite/shared/getAssetsDir.js +3 -3
  53. package/dist/node/vite/shared/isViteCli.d.ts +3 -3
  54. package/dist/node/vite/shared/isViteCli.js +80 -84
  55. package/dist/node/vite/shared/isViteServerSide.js +2 -7
  56. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.d.ts +1 -1
  57. package/dist/node/vite/shared/resolveVikeConfigInternal/metaBuiltIn.js +8 -6
  58. package/dist/node/vite/shared/resolveVikeConfigInternal.d.ts +4 -1
  59. package/dist/node/vite/shared/resolveVikeConfigInternal.js +82 -11
  60. package/dist/server/runtime/globalContext.d.ts +20 -0
  61. package/dist/server/runtime/renderPageServer/analyzePage.js +3 -3
  62. package/dist/server/runtime/renderPageServer/createHttpResponse.d.ts +20 -7
  63. package/dist/server/runtime/renderPageServer/createHttpResponse.js +34 -15
  64. package/dist/server/runtime/renderPageServer/createPageContextServer.d.ts +4 -0
  65. package/dist/server/runtime/renderPageServer/execHookOnError.js +1 -1
  66. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.d.ts +9 -0
  67. package/dist/server/runtime/renderPageServer/execHookOnRenderHtml.js +17 -5
  68. package/dist/server/runtime/renderPageServer/getHttpResponseBody.d.ts +2 -2
  69. package/dist/server/runtime/renderPageServer/getHttpResponseBody.js +17 -2
  70. package/dist/server/runtime/renderPageServer/getPageContextJson.d.ts +8 -0
  71. package/dist/server/runtime/renderPageServer/getPageContextJson.js +47 -0
  72. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.d.ts +2 -0
  73. package/dist/server/runtime/renderPageServer/handleErrorWithoutErrorPage.js +1 -1
  74. package/dist/server/runtime/renderPageServer/headersResponse.d.ts +11 -2
  75. package/dist/server/runtime/renderPageServer/headersResponse.js +20 -1
  76. package/dist/server/runtime/renderPageServer/html/injectAssets/getHtmlTags.js +5 -4
  77. package/dist/server/runtime/renderPageServer/html/injectAssets.d.ts +3 -2
  78. package/dist/server/runtime/renderPageServer/html/injectAssets.js +7 -1
  79. package/dist/server/runtime/renderPageServer/html/renderHtml.js +4 -2
  80. package/dist/server/runtime/renderPageServer/html/serializeContext.d.ts +5 -1
  81. package/dist/server/runtime/renderPageServer/html/serializeContext.js +12 -9
  82. package/dist/server/runtime/renderPageServer/html/stream.d.ts +13 -6
  83. package/dist/server/runtime/renderPageServer/html/stream.js +121 -31
  84. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.d.ts +30 -0
  85. package/dist/server/runtime/renderPageServer/html/streamedValuesHtml.js +92 -0
  86. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.d.ts +4 -0
  87. package/dist/server/runtime/renderPageServer/loadPageConfigsLazyServerSide.js +5 -1
  88. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.d.ts +15 -0
  89. package/dist/server/runtime/renderPageServer/loadPageContextEnvironments.js +61 -0
  90. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.d.ts +314 -1
  91. package/dist/server/runtime/renderPageServer/renderPageServerAfterRoute.js +21 -12
  92. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.d.ts +4 -0
  93. package/dist/server/runtime/renderPageServer/streamedValues/asyncIterable.js +12 -0
  94. package/dist/server/runtime/renderPageServer/streamedValues/lines.d.ts +10 -0
  95. package/dist/server/runtime/renderPageServer/streamedValues/lines.js +49 -0
  96. package/dist/server/runtime/renderPageServer/streamedValues/promise.d.ts +4 -0
  97. package/dist/server/runtime/renderPageServer/streamedValues/promise.js +14 -0
  98. package/dist/server/runtime/renderPageServer/streamedValues/pump.d.ts +10 -0
  99. package/dist/server/runtime/renderPageServer/streamedValues/pump.js +67 -0
  100. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.d.ts +4 -0
  101. package/dist/server/runtime/renderPageServer/streamedValues/readableStream.js +12 -0
  102. package/dist/server/runtime/renderPageServer/streamedValues/registry.d.ts +28 -0
  103. package/dist/server/runtime/renderPageServer/streamedValues/registry.js +33 -0
  104. package/dist/server/runtime/renderPageServer.d.ts +4 -0
  105. package/dist/server/runtime/renderPageServer.js +18 -8
  106. package/dist/shared-server-client/createGlobalContextShared.d.ts +8 -0
  107. package/dist/shared-server-client/createGlobalContextShared.js +2 -1
  108. package/dist/shared-server-client/getPageContextPublicShared.js +0 -2
  109. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.d.ts +8 -0
  110. package/dist/shared-server-client/getPageFiles/parseVirtualFileExportsGlobalEntry.js +17 -7
  111. package/dist/shared-server-client/hooks/execHook.d.ts +1 -1
  112. package/dist/shared-server-client/hooks/execHook.js +2 -2
  113. package/dist/shared-server-client/route/abort.d.ts +1 -1
  114. package/dist/shared-server-client/route/abort.js +4 -2
  115. package/dist/shared-server-client/streamedValues.d.ts +22 -0
  116. package/dist/shared-server-client/streamedValues.js +24 -0
  117. package/dist/shared-server-node/vike-environments.d.ts +4 -0
  118. package/dist/shared-server-node/vike-environments.js +10 -0
  119. package/dist/shared-server-node/virtualFileId.d.ts +7 -5
  120. package/dist/shared-server-node/virtualFileId.js +42 -42
  121. package/dist/types/Config.d.ts +1 -1
  122. package/dist/types/PageConfig.d.ts +13 -5
  123. package/dist/types/PageContext.d.ts +18 -1
  124. package/dist/utils/PROJECT_VERSION.d.ts +1 -1
  125. package/dist/utils/PROJECT_VERSION.js +1 -1
  126. package/dist/utils/assertViteVersion.d.ts +1 -3
  127. package/dist/utils/assertViteVersion.js +6 -9
  128. package/dist/utils/catchInfiniteLoop.js +33 -11
  129. package/dist/utils/deepEqual.d.ts +2 -1
  130. package/dist/utils/deepEqual.js +21 -6
  131. package/dist/utils/getContentTypeFromUrl.d.ts +2 -0
  132. package/dist/utils/getContentTypeFromUrl.js +39 -0
  133. package/dist/utils/injectRollupInputs.d.ts +2 -2
  134. package/dist/utils/injectRollupInputs.js +2 -2
  135. package/dist/utils/isDev.js +2 -7
  136. package/dist/utils/parseUrl-extras.js +4 -0
  137. package/package.json +7 -7
  138. package/dist/shared-server-client/addIs404ToPageProps.d.ts +0 -2
  139. 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.267-commit-b005535';
1
+ export declare const PROJECT_VERSION: '0.4.267-commit-5676e14';
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.267-commit-b005535';
2
+ export const PROJECT_VERSION = '0.4.267-commit-5676e14';
@@ -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;
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.267-commit-b005535",
3
+ "version": "0.4.267-commit-5676e14",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {
@@ -125,13 +125,13 @@
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.13",
132
+ "@universal-deploy/vite": "^0.1.14",
133
133
  "@universal-middleware/core": "^0.4.18",
134
- "@universal-middleware/node": "^0.2.2",
134
+ "@universal-middleware/node": "^0.2.3",
135
135
  "cac": "^6.0.0",
136
136
  "convert-route": "^1.1.1",
137
137
  "es-module-lexer": "^1.0.0",
@@ -143,12 +143,12 @@
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": {
@@ -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
- }