vike 0.4.223 → 0.4.224-commit-00ed9fe

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 (183) hide show
  1. package/dist/cjs/node/api/build.js +4 -37
  2. package/dist/cjs/node/api/prepareViteApiCall.js +9 -3
  3. package/dist/cjs/node/plugin/index.js +8 -20
  4. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -1
  5. package/dist/cjs/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +130 -52
  6. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +145 -0
  7. package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +52 -0
  8. package/dist/cjs/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -84
  9. package/dist/cjs/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
  10. package/dist/cjs/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
  11. package/dist/cjs/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +6 -6
  12. package/dist/cjs/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
  13. package/dist/cjs/node/plugin/plugins/build.js +21 -0
  14. package/dist/cjs/node/plugin/plugins/commonConfig.js +22 -4
  15. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  17. package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
  18. package/dist/cjs/node/plugin/plugins/envVars.js +2 -2
  19. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +9 -9
  20. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  21. package/dist/cjs/node/plugin/plugins/fileEnv.js +5 -2
  22. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  23. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +2 -5
  24. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
  25. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
  26. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +16 -0
  27. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
  28. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
  29. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
  30. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +19 -7
  31. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +277 -212
  32. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  33. package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
  34. package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
  35. package/dist/cjs/node/plugin/shared/findPageFiles.js +3 -3
  36. package/dist/cjs/node/plugin/shared/getOutDirs.js +8 -7
  37. package/dist/cjs/node/plugin/shared/isViteServerBuild.js +47 -0
  38. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  39. package/dist/cjs/node/plugin/utils.js +1 -0
  40. package/dist/cjs/node/prerender/context.js +3 -8
  41. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +30 -21
  42. package/dist/cjs/node/prerender/runPrerender.js +28 -30
  43. package/dist/cjs/node/prerender/utils.js +1 -0
  44. package/dist/cjs/node/runtime/html/stream.js +7 -0
  45. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +13 -5
  46. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -4
  47. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +13 -2
  48. package/dist/cjs/node/runtime/renderPage.js +6 -10
  49. package/dist/cjs/shared/getPageContextUrlComputed.js +1 -1
  50. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +2 -5
  51. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +3 -1
  52. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +20 -9
  53. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  54. package/dist/cjs/utils/debug.js +2 -1
  55. package/dist/cjs/utils/findFile.js +1 -1
  56. package/dist/cjs/utils/findPackageJson.js +1 -1
  57. package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +10 -4
  58. package/dist/cjs/utils/parseUrl-extras.js +1 -0
  59. package/dist/cjs/utils/path.js +1 -0
  60. package/dist/cjs/utils/requireResolve.js +11 -4
  61. package/dist/cjs/utils/sorter.js +0 -3
  62. package/dist/esm/client/client-routing-runtime/index.d.ts +1 -0
  63. package/dist/esm/client/client-routing-runtime/index.js +1 -0
  64. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +8 -0
  65. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +10 -1
  66. package/dist/esm/node/api/build.js +4 -4
  67. package/dist/esm/node/api/prepareViteApiCall.js +9 -3
  68. package/dist/esm/node/plugin/index.d.ts +2 -1
  69. package/dist/esm/node/plugin/index.js +4 -17
  70. package/dist/esm/node/plugin/plugins/baseUrls.js +3 -1
  71. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.d.ts +18 -0
  72. package/dist/esm/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +131 -53
  73. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.d.ts +5 -0
  74. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +140 -0
  75. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.d.ts +3 -0
  76. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +50 -0
  77. package/dist/esm/node/plugin/plugins/{buildConfig.d.ts → build/pluginBuildConfig.d.ts} +3 -3
  78. package/dist/esm/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -81
  79. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +7 -0
  80. package/dist/esm/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
  81. package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.d.ts +3 -0
  82. package/dist/esm/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
  83. package/dist/esm/node/plugin/plugins/build/pluginDistPackageJsonFile.d.ts +3 -0
  84. package/dist/esm/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +7 -6
  85. package/dist/esm/node/plugin/plugins/build/pluginSuppressRollupWarning.d.ts +3 -0
  86. package/dist/esm/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
  87. package/dist/esm/node/plugin/plugins/build.d.ts +3 -0
  88. package/dist/esm/node/plugin/plugins/build.js +19 -0
  89. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +16 -6
  90. package/dist/esm/node/plugin/plugins/commonConfig.js +22 -4
  91. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  92. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  93. package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
  94. package/dist/esm/node/plugin/plugins/envVars.js +2 -2
  95. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +10 -10
  96. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  97. package/dist/esm/node/plugin/plugins/fileEnv.js +5 -2
  98. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  99. package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -5
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
  101. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
  102. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -0
  103. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +13 -0
  104. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
  105. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
  106. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
  107. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
  108. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +0 -1
  109. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +20 -8
  110. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +8 -6
  111. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +279 -214
  112. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  113. package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
  114. package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
  115. package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
  116. package/dist/esm/node/plugin/shared/findPageFiles.js +3 -3
  117. package/dist/esm/node/plugin/shared/getHttpRequestAsyncStore.js +1 -3
  118. package/dist/esm/node/plugin/shared/getOutDirs.d.ts +2 -2
  119. package/dist/esm/node/plugin/shared/getOutDirs.js +8 -7
  120. package/dist/esm/node/plugin/shared/isViteServerBuild.d.ts +15 -0
  121. package/dist/esm/node/plugin/shared/isViteServerBuild.js +45 -0
  122. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  123. package/dist/esm/node/plugin/utils.d.ts +1 -0
  124. package/dist/esm/node/plugin/utils.js +1 -0
  125. package/dist/esm/node/prerender/context.d.ts +0 -2
  126. package/dist/esm/node/prerender/context.js +4 -9
  127. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +11 -6
  128. package/dist/esm/node/prerender/resolvePrerenderConfig.js +31 -22
  129. package/dist/esm/node/prerender/runPrerender.d.ts +7 -25
  130. package/dist/esm/node/prerender/runPrerender.js +29 -31
  131. package/dist/esm/node/prerender/utils.d.ts +1 -0
  132. package/dist/esm/node/prerender/utils.js +1 -0
  133. package/dist/esm/node/runtime/globalContext.d.ts +3 -2
  134. package/dist/esm/node/runtime/html/stream.js +7 -0
  135. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +3 -1
  136. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +14 -6
  137. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +3 -1
  138. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -4
  139. package/dist/esm/node/runtime/renderPage/logErrorHint.js +13 -2
  140. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +165 -5
  141. package/dist/esm/node/runtime/renderPage.js +7 -11
  142. package/dist/esm/shared/getPageContextUrlComputed.js +1 -1
  143. package/dist/esm/shared/page-configs/Config.d.ts +12 -2
  144. package/dist/esm/shared/page-configs/PageConfig.d.ts +5 -5
  145. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +2 -5
  146. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +3 -1
  147. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +2 -0
  148. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +20 -9
  149. package/dist/esm/types/index.d.ts +2 -0
  150. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  151. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  152. package/dist/esm/utils/debug.js +2 -1
  153. package/dist/esm/utils/findFile.js +1 -1
  154. package/dist/esm/utils/findPackageJson.js +1 -1
  155. package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +8 -2
  156. package/dist/esm/utils/parseUrl-extras.js +1 -0
  157. package/dist/esm/utils/path.js +1 -0
  158. package/dist/esm/utils/projectInfo.d.ts +1 -1
  159. package/dist/esm/utils/requireResolve.js +11 -4
  160. package/dist/esm/utils/sorter.d.ts +18 -5
  161. package/dist/esm/utils/sorter.js +0 -3
  162. package/package.json +9 -16
  163. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +0 -119
  164. package/dist/cjs/node/plugin/plugins/buildApp.js +0 -76
  165. package/dist/cjs/node/plugin/plugins/removeRequireHookPlugin.js +0 -17
  166. package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +0 -20
  167. package/dist/cjs/node/plugin/shared/viteIsSSR.js +0 -31
  168. package/dist/esm/node/plugin/plugins/autoFullBuild.d.ts +0 -3
  169. package/dist/esm/node/plugin/plugins/autoFullBuild.js +0 -114
  170. package/dist/esm/node/plugin/plugins/buildApp.d.ts +0 -3
  171. package/dist/esm/node/plugin/plugins/buildApp.js +0 -74
  172. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +0 -20
  173. package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +0 -8
  174. package/dist/esm/node/plugin/plugins/distFileNames.d.ts +0 -3
  175. package/dist/esm/node/plugin/plugins/packageJsonFile.d.ts +0 -3
  176. package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.d.ts +0 -3
  177. package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.js +0 -15
  178. package/dist/esm/node/plugin/plugins/suppressRollupWarning.d.ts +0 -3
  179. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.d.ts +0 -2
  180. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +0 -17
  181. package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +0 -11
  182. package/dist/esm/node/plugin/shared/viteIsSSR.js +0 -29
  183. package/dist-cjs-fixup.mjs +0 -41
@@ -8,7 +8,7 @@ const extractAssetsQuery_js_1 = require("../../../../../shared/extractAssetsQuer
8
8
  const debug_js_1 = require("./debug.js");
9
9
  const isRuntimeEnvMatch_js_1 = require("./isRuntimeEnvMatch.js");
10
10
  const serializeConfigValues_js_1 = require("../../../../../../shared/page-configs/serialize/serializeConfigValues.js");
11
- const fixServerAssets_js_1 = require("../../../buildConfig/fixServerAssets.js");
11
+ const handleAssetsManifest_js_1 = require("../../../build/handleAssetsManifest.js");
12
12
  const getConfigValueBuildTime_js_1 = require("../../../../../../shared/page-configs/getConfigValueBuildTime.js");
13
13
  async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
14
14
  const result = (0, virtualFilePageConfigValuesAll_js_1.isVirtualFileIdPageConfigValuesAll)(id);
@@ -26,11 +26,11 @@ async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
26
26
  (0, utils_js_1.assert)(pageConfig, { id, pageId });
27
27
  const code = getLoadConfigValuesAll(pageConfig, isForClientSide, pageId,
28
28
  // TODO/now: add meta.default
29
- vikeConfig.global.config.includeAssetsImportedByServer ?? true, isDev);
29
+ vikeConfig.global.config.includeAssetsImportedByServer ?? true, config, isDev);
30
30
  (0, debug_js_1.debug)(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
31
31
  return code;
32
32
  }
33
- function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, isDev) {
33
+ function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, config, isDev) {
34
34
  const lines = [];
35
35
  const importStatements = [];
36
36
  const filesEnv = new Map();
@@ -38,7 +38,7 @@ function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAsse
38
38
  lines.push('export const configValuesSerialized = {');
39
39
  lines.push(...(0, serializeConfigValues_js_1.serializeConfigValues)(pageConfig, importStatements, filesEnv, (configEnv) => (0, isRuntimeEnvMatch_js_1.isRuntimeEnvMatch)(configEnv, { isForClientSide, isClientRouting, isDev }), '', false));
40
40
  lines.push('};');
41
- if (!(0, fixServerAssets_js_1.fixServerAssets_isEnabled)() && includeAssetsImportedByServer && isForClientSide && !isDev) {
41
+ if (!(0, handleAssetsManifest_js_1.handleAssetsManifest_isFixEnabled)(config) && includeAssetsImportedByServer && isForClientSide && !isDev) {
42
42
  importStatements.push(`import '${(0, extractAssetsQuery_js_1.extractAssetsAddQuery)((0, virtualFilePageConfigValuesAll_js_1.getVirtualFileIdPageConfigValuesAll)(pageId, false))}'`);
43
43
  }
44
44
  const code = [...importStatements, ...lines].join('\n');
@@ -11,6 +11,8 @@ const addSsrMiddleware_js_1 = require("../shared/addSsrMiddleware.js");
11
11
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
12
12
  const index_js_1 = require("./devConfig/index.js");
13
13
  const getOutDirs_js_1 = require("../shared/getOutDirs.js");
14
+ const sirv_1 = __importDefault(require("sirv"));
15
+ const resolvePrerenderConfig_js_1 = require("../../prerender/resolvePrerenderConfig.js");
14
16
  function previewConfig() {
15
17
  let config;
16
18
  // let vikeConfig: VikeConfigObject
@@ -37,23 +39,26 @@ function previewConfig() {
37
39
  */
38
40
  return () => {
39
41
  assertDist();
40
- /* We don't use this condition (we wrongfully always use the SSR middleware) because of the regression introduced by https://github.com/vitejs/vite/pull/14756 which stops servering .html files when `appType: 'custom'`.
41
- if (!vikeConfig.global.config.prerender || vikeConfig.global.config.prerender.partial) {
42
- addSsrMiddleware(server.middlewares, config, true)
42
+ // We cannot re-use Vite's static middleware: https://github.com/vitejs/vite/pull/14836#issuecomment-1788540300
43
+ addStaticAssetsMiddleware(server.middlewares);
44
+ const prerenderConfigGlobal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(config._vikeConfigObject);
45
+ if (!prerenderConfigGlobal.isPrerenderingEnabledForAllPages) {
46
+ (0, addSsrMiddleware_js_1.addSsrMiddleware)(server.middlewares, config, true, prerenderConfigGlobal.isPrerenderingEnabled);
43
47
  }
44
- /*/
45
- (0, addSsrMiddleware_js_1.addSsrMiddleware)(server.middlewares, config, true);
46
- //*/
47
48
  addStatic404Middleware(server.middlewares);
48
49
  };
49
50
  }
50
51
  };
51
52
  function assertDist() {
52
- let { outDirRoot, outDirClient, outDirServer } = (0, getOutDirs_js_1.getOutDirs)(config);
53
+ const { outDirRoot, outDirClient, outDirServer } = (0, getOutDirs_js_1.getOutDirs)(config);
53
54
  [outDirRoot, outDirClient, outDirServer].forEach((outDirAny) => {
54
55
  (0, utils_js_1.assertUsage)(fs_1.default.existsSync(outDirAny), `Cannot run ${picocolors_1.default.cyan('$ vike preview')}: your app isn't built (the build directory ${picocolors_1.default.cyan(outDirAny)} is missing). Make sure to run ${picocolors_1.default.cyan('$ vike build')} before running ${picocolors_1.default.cyan('$ vike preview')}.`);
55
56
  });
56
57
  }
58
+ function addStaticAssetsMiddleware(middlewares) {
59
+ const { outDirClient } = (0, getOutDirs_js_1.getOutDirs)(config);
60
+ middlewares.use((0, sirv_1.default)(outDirClient));
61
+ }
57
62
  function addStatic404Middleware(middlewares) {
58
63
  const { outDirClient } = (0, getOutDirs_js_1.getOutDirs)(config);
59
64
  middlewares.use(config.base, (_, res, next) => {
@@ -7,7 +7,7 @@ exports.addSsrMiddleware = addSsrMiddleware;
7
7
  const renderPage_js_1 = require("../../runtime/renderPage.js");
8
8
  const utils_js_1 = require("../utils.js");
9
9
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
10
- function addSsrMiddleware(middlewares, config, isPreview) {
10
+ function addSsrMiddleware(middlewares, config, isPreview, isPrerenderingEnabled) {
11
11
  middlewares.use(async (req, res, next) => {
12
12
  if (res.headersSent)
13
13
  return next();
@@ -42,6 +42,10 @@ function addSsrMiddleware(middlewares, config, isPreview) {
42
42
  // - We purposely don't use next(err) to align behavior: we use our own/copied implementation of buildErrorMessage() regardless of whether the user uses Vite's dev middleware or Vite's standalone dev server
43
43
  return next();
44
44
  }
45
+ if (pageContext.httpResponse.statusCode === 404 && isPreview && isPrerenderingEnabled) {
46
+ // Serve /dist/client/404.html instead
47
+ return next();
48
+ }
45
49
  const configHeaders = (isPreview && config?.preview?.headers) || config?.server?.headers;
46
50
  if (configHeaders) {
47
51
  for (const [name, value] of Object.entries(configHeaders))
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.findPageFiles = findPageFiles;
7
- const fast_glob_1 = __importDefault(require("fast-glob"));
7
+ const tinyglobby_1 = require("tinyglobby");
8
8
  const utils_js_1 = require("../utils.js");
9
9
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
10
10
  const getOutDirs_js_1 = require("./getOutDirs.js");
@@ -12,11 +12,11 @@ async function findPageFiles(config, fileTypes, isDev) {
12
12
  const cwd = config.root;
13
13
  const { outDirRoot } = (0, getOutDirs_js_1.getOutDirs)(config);
14
14
  const timeBase = new Date().getTime();
15
- let pageFiles = await (0, fast_glob_1.default)(fileTypes.map((fileType) => `**/*${fileType}.${utils_js_1.scriptFileExtensions}`), { ignore: ['**/node_modules/**', `${outDirRoot}/**`], cwd, dot: false });
15
+ let pageFiles = await (0, tinyglobby_1.glob)(fileTypes.map((fileType) => `**/*${fileType}.${utils_js_1.scriptFileExtensions}`), { ignore: ['**/node_modules/**', `${outDirRoot}/**`], cwd, dot: false, expandDirectories: false });
16
16
  pageFiles = pageFiles.map((p) => '/' + (0, utils_js_1.toPosixPath)(p));
17
17
  const time = new Date().getTime() - timeBase;
18
18
  if (isDev) {
19
- // We only warn in dev, because while building it's expected to take a long time as fast-glob is competing for resources with other tasks
19
+ // We only warn in dev, because while building it's expected to take a long time as tinyglobby is competing for resources with other tasks
20
20
  (0, utils_js_1.assertWarning)(time < 1.5 * 1000, `Finding your page files ${picocolors_1.default.cyan('**/*.page.*')} took an unexpected long time (${time}ms). Reach out to the vike maintainer.`, {
21
21
  onlyOnce: 'slow-page-files-search'
22
22
  });
@@ -7,20 +7,21 @@ exports.getOutDirs = getOutDirs;
7
7
  exports.resolveOutDir = resolveOutDir;
8
8
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
9
  const utils_js_1 = require("../utils.js");
10
- const viteIsSSR_js_1 = require("./viteIsSSR.js");
10
+ const isViteServerBuild_js_1 = require("./isViteServerBuild.js");
11
11
  const debug = (0, utils_js_1.createDebugger)('vike:outDir');
12
- function getOutDirs(config) {
12
+ function getOutDirs(configGlobal, viteEnv) {
13
+ const configEnv = viteEnv?.config ?? configGlobal;
13
14
  debug('getOutDirs()', new Error().stack);
14
- const outDir = getOutDirFromViteResolvedConfig(config);
15
+ const outDir = getOutDirFromViteResolvedConfig(configEnv);
15
16
  if (!isOutDirRoot(outDir))
16
- assertOutDirResolved(outDir, config);
17
- const outDirs = getOutDirsAll(outDir, config.root);
17
+ assertOutDirResolved(outDir, configEnv);
18
+ const outDirs = getOutDirsAll(outDir, configEnv.root);
18
19
  return outDirs;
19
20
  }
20
21
  /** Appends `client/` or `server/` to `config.build.outDir` */
21
22
  function resolveOutDir(config, isSSR) {
22
23
  debug('resolveOutDir()', new Error().stack);
23
- const isServerSide = (0, viteIsSSR_js_1.viteIsSSR)(config) || isSSR;
24
+ const isServerSide = (0, isViteServerBuild_js_1.isViteServerBuild)(config) || isSSR;
24
25
  debug('isServerSide', isServerSide);
25
26
  const outDir = getOutDirFromViteUserConfig(config) || 'dist';
26
27
  debug('outDir', outDir);
@@ -109,7 +110,7 @@ function assertOutDirResolved(outDir, config) {
109
110
  (0, utils_js_1.assert)('/client'.length === '/server'.length);
110
111
  const outDirCorrected = outDir.slice(0, -1 * '/client'.length);
111
112
  const wrongUsage = `You've set Vite's config.build.outDir to ${picocolors_1.default.cyan(outDir)} but you should set it to ${picocolors_1.default.cyan(outDirCorrected)} instead.`;
112
- if ((0, viteIsSSR_js_1.viteIsSSR)(config)) {
113
+ if ((0, isViteServerBuild_js_1.isViteServerBuild)(config)) {
113
114
  (0, utils_js_1.assertUsage)(outDir.endsWith('/server'), wrongUsage);
114
115
  }
115
116
  else {
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isViteServerBuild = isViteServerBuild;
4
+ exports.isViteClientBuild = isViteClientBuild;
5
+ exports.isViteServerBuild_options = isViteServerBuild_options;
6
+ exports.isViteServerBuild_safe = isViteServerBuild_safe;
7
+ exports.isViteServerBuild_onlySsrEnv = isViteServerBuild_onlySsrEnv;
8
+ const assert_js_1 = require("../../../utils/assert.js");
9
+ function isViteServerBuild(configGlobal, viteEnv) {
10
+ const configEnv = viteEnv?.config ?? configGlobal;
11
+ return !!configEnv?.build?.ssr;
12
+ }
13
+ // Only `ssr` env: for example don't include `vercel_edge` nor `vercel_node`.
14
+ function isViteServerBuild_onlySsrEnv(configGlobal, viteEnv) {
15
+ return viteEnv ? viteEnv.name === 'ssr' : isViteServerBuild(configGlobal);
16
+ }
17
+ function isViteClientBuild(configGlobal, viteEnv) {
18
+ const yes = !isViteServerBuild(configGlobal, viteEnv);
19
+ const isVite5 = viteEnv === undefined;
20
+ if (!isVite5) {
21
+ const yes2 = viteEnv.name === 'client';
22
+ (0, assert_js_1.assert)(yes === yes2);
23
+ }
24
+ return yes;
25
+ }
26
+ function isViteServerBuild_options(options) {
27
+ return !!options?.ssr;
28
+ }
29
+ // Vite is quite messy about setting `ssr: boolean`, thus we use an extra safe implemention for security purposes.
30
+ // It's used for .client.js and .server.js guarantee thus we use agressive assert() calls for added safety.
31
+ function isViteServerBuild_safe(config, options) {
32
+ if (config.command === 'build') {
33
+ (0, assert_js_1.assert)(typeof config.build.ssr === 'boolean');
34
+ const val = config.build.ssr;
35
+ if (options?.ssr !== undefined)
36
+ (0, assert_js_1.assert)(val === options.ssr);
37
+ return val;
38
+ }
39
+ else {
40
+ (0, assert_js_1.assert)(typeof options?.ssr === 'boolean');
41
+ const val = options.ssr;
42
+ /* This assert() fails (which is very unexpected).
43
+ if (typeof config.build.ssr === 'boolean') assert(val === config.build.ssr)
44
+ //*/
45
+ return val;
46
+ }
47
+ }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveClientEntriesDev = resolveClientEntriesDev;
4
4
  const utils_js_1 = require("../utils.js");
5
5
  const module_1 = require("module");
6
- // @ts-ignore Shimmed by dist-cjs-fixup.js for CJS build.
6
+ // @ts-ignore `file://${__filename}` is shimmed at dist/cjs by dist-cjs-fixup.js.
7
7
  const importMetaUrl = `file://${__filename}`;
8
8
  const require_ = (0, module_1.createRequire)(importMetaUrl);
9
9
  (0, utils_js_1.assertIsNotProductionRuntime)();
@@ -44,3 +44,4 @@ __exportStar(require("../../utils/isArray.js"), exports);
44
44
  __exportStar(require("../../utils/PROJECT_VERSION.js"), exports);
45
45
  __exportStar(require("../../utils/isEqualStringList.js"), exports);
46
46
  __exportStar(require("../../utils/isDocker.js"), exports);
47
+ __exportStar(require("../../utils/isVitest.js"), exports);
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isPrerenderEnabled = isPrerenderEnabled;
4
3
  exports.isPrerenderAutoRunEnabled = isPrerenderAutoRunEnabled;
5
4
  exports.temp_disablePrerenderAutoRun = temp_disablePrerenderAutoRun;
6
5
  exports.isPrerendering = isPrerendering;
@@ -8,14 +7,10 @@ exports.setContextIsPrerendering = setContextIsPrerendering;
8
7
  const getGlobalObject_js_1 = require("../../utils/getGlobalObject.js");
9
8
  const resolvePrerenderConfig_js_1 = require("./resolvePrerenderConfig.js");
10
9
  const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('prerender/context.ts', {});
11
- function isPrerenderEnabled(vikeConfig) {
12
- const prerenderConfig = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfig)(vikeConfig);
13
- return !!prerenderConfig;
14
- }
15
10
  function isPrerenderAutoRunEnabled(vikeConfig) {
16
- const prerenderConfig = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfig)(vikeConfig);
17
- return (isPrerenderEnabled(vikeConfig) &&
18
- !(prerenderConfig || {}).disableAutoRun &&
11
+ const prerenderConfigGlobal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(vikeConfig);
12
+ return (prerenderConfigGlobal.isPrerenderingEnabled &&
13
+ !(prerenderConfigGlobal || {}).disableAutoRun &&
19
14
  !globalObject.isDisabled &&
20
15
  vikeConfig.global.config.disableAutoFullBuild !== 'prerender');
21
16
  }
@@ -1,29 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolvePrerenderConfig = resolvePrerenderConfig;
3
+ exports.resolvePrerenderConfigGlobal = resolvePrerenderConfigGlobal;
4
4
  exports.resolvePrerenderConfigLocal = resolvePrerenderConfigLocal;
5
5
  const utils_js_1 = require("./utils.js");
6
6
  const getConfigValueBuildTime_js_1 = require("../../shared/page-configs/getConfigValueBuildTime.js");
7
- const helpers_js_1 = require("../../shared/page-configs/helpers.js");
8
- // TODO/now:
9
- // - prerender.value
10
- function resolvePrerenderConfig(vikeConfig) {
7
+ function resolvePrerenderConfigGlobal(vikeConfig) {
11
8
  const prerenderConfigs = vikeConfig.global.config.prerender;
12
- if (!prerenderConfigs &&
13
- !vikeConfig.pageConfigs.some((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value)) {
14
- return false;
15
- }
16
- let prerenderSettings = prerenderConfigs || [];
9
+ let prerenderConfigList = prerenderConfigs || [];
17
10
  // Needed because of backwards compatibility of `vike({prerender:true})` in `vite.config.js`; after we remove it we can remove this line.
18
- prerenderSettings = prerenderSettings.filter(isObject2);
19
- (0, utils_js_1.assert)(prerenderSettings.every(isObject2));
20
- const prerenderConfig = {
21
- partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
22
- noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? false,
23
- parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
24
- disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false
11
+ prerenderConfigList = prerenderConfigList.filter(isObject2);
12
+ (0, utils_js_1.assert)(prerenderConfigList.every(isObject2)); // Help TS
13
+ const prerenderConfigGlobal = {
14
+ partial: pickFirst(prerenderConfigList.map((c) => c.partial)) ?? false,
15
+ noExtraDir: pickFirst(prerenderConfigList.map((c) => c.noExtraDir)) ?? false,
16
+ parallel: pickFirst(prerenderConfigList.map((c) => c.parallel)) ?? true,
17
+ disableAutoRun: pickFirst(prerenderConfigList.map((c) => c.disableAutoRun)) ?? false
25
18
  };
26
- return prerenderConfig;
19
+ const prerenderConfigGlobalLocalValue = prerenderConfigList.map((c) => c.value).filter((v) => v !== null);
20
+ const defaultLocalValue = pickFirst(prerenderConfigGlobalLocalValue) ??
21
+ (prerenderConfigGlobalLocalValue.length > 0 ||
22
+ // Backwards compatibility for with vike({ prerender: true }) in vite.config.js
23
+ prerenderConfigs?.some((p) => p === true) ||
24
+ false);
25
+ (0, utils_js_1.objectAssign)(prerenderConfigGlobal, {
26
+ defaultLocalValue,
27
+ isPrerenderingEnabledForAllPages: vikeConfig.pageConfigs.length > 0 &&
28
+ vikeConfig.pageConfigs.every((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue),
29
+ isPrerenderingEnabled: vikeConfig.pageConfigs.length > 0 &&
30
+ vikeConfig.pageConfigs.some((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue)
31
+ });
32
+ // TODO/next-major remove
33
+ if (vikeConfig.pageConfigs.length === 0 && defaultLocalValue)
34
+ prerenderConfigGlobal.isPrerenderingEnabled = true;
35
+ return prerenderConfigGlobal;
27
36
  }
28
37
  function resolvePrerenderConfigLocal(pageConfig) {
29
38
  const configValue = (0, getConfigValueBuildTime_js_1.getConfigValueBuildTime)(pageConfig, 'prerender');
@@ -32,11 +41,11 @@ function resolvePrerenderConfigLocal(pageConfig) {
32
41
  const values = configValue.value;
33
42
  (0, utils_js_1.assert)((0, utils_js_1.isArray)(values));
34
43
  const value = values[0];
44
+ // TODO/now I believe this assert() can fail
35
45
  (0, utils_js_1.assert)(typeof value === 'boolean');
36
46
  (0, utils_js_1.assert)((0, utils_js_1.isArray)(configValue.definedAtData));
37
- const configValueFilePathToShowToUser = (0, helpers_js_1.getConfigValueFilePathToShowToUser)(configValue.definedAtData[0]);
38
- (0, utils_js_1.assert)(configValueFilePathToShowToUser);
39
- return { value, configValueFilePathToShowToUser };
47
+ const prerenderConfigLocal = { value };
48
+ return prerenderConfigLocal;
40
49
  }
41
50
  function isObject2(p) {
42
51
  return typeof p === 'object' && p !== null;
@@ -68,6 +68,7 @@ const resolvePrerenderConfig_js_1 = require("./resolvePrerenderConfig.js");
68
68
  const getOutDirs_js_1 = require("../plugin/shared/getOutDirs.js");
69
69
  const context_js_2 = require("../cli/context.js");
70
70
  const isViteCliCall_js_1 = require("../plugin/shared/isViteCliCall.js");
71
+ const commonConfig_js_1 = require("../plugin/plugins/commonConfig.js");
71
72
  async function runPrerenderFromAPI(options = {}) {
72
73
  return await runPrerender(options, 'prerender()');
73
74
  // - We purposely propagate the error to the user land, so that the error interrupts the user land. It's also, I guess, a nice-to-have that the user has control over the error.
@@ -94,11 +95,13 @@ async function runPrerenderFromAutoRun(viteConfig, config) {
94
95
  prerenderContextPublic = ret.prerenderContextPublic;
95
96
  }
96
97
  catch (err) {
98
+ // Avoid Rollup prefixing the error with [vike:build:pluginAutoFullBuild], see for example https://github.com/vikejs/vike/issues/472#issuecomment-1276274203
97
99
  console.error(err);
98
100
  (0, logErrorHint_js_1.logErrorHint)(err);
99
101
  process.exit(1);
100
102
  }
101
- config.vike.prerenderContext = prerenderContextPublic;
103
+ const vike = (0, commonConfig_js_1.getVikeConfigPublic)(config);
104
+ vike.prerenderContext = prerenderContextPublic;
102
105
  const forceExit = (0, context_js_2.isVikeCli)() || (0, isViteCliCall_js_1.isViteCliCall)();
103
106
  return { forceExit };
104
107
  }
@@ -117,15 +120,14 @@ async function runPrerender(options = {}, standaloneTrigger) {
117
120
  const vikeConfig = await (0, getVikeConfig_js_1.getVikeConfig)(viteConfig);
118
121
  const { outDirClient } = (0, getOutDirs_js_1.getOutDirs)(viteConfig);
119
122
  const { root } = viteConfig;
120
- const prerenderConfig = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfig)(vikeConfig);
121
- validatePrerenderConfig(prerenderConfig);
122
- if (!prerenderConfig) {
123
+ const prerenderConfigGlobal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigGlobal)(vikeConfig);
124
+ validatePrerenderConfig(prerenderConfigGlobal);
125
+ const { partial, noExtraDir, parallel, defaultLocalValue, isPrerenderingEnabled } = prerenderConfigGlobal;
126
+ if (!isPrerenderingEnabled) {
123
127
  (0, utils_js_1.assert)(standaloneTrigger);
124
- (0, utils_js_1.assertWarning)(prerenderConfig, `You're executing ${picocolors_1.default.cyan(standaloneTrigger)} but the config ${picocolors_1.default.cyan('prerender')} isn't set to true`, {
125
- onlyOnce: true
126
- });
128
+ // TODO/now: make it assertUsage() and remove dist/server/entry.mjs if pre-rendering is completely disabled
129
+ (0, utils_js_1.assertWarning)(false, `You're executing ${picocolors_1.default.cyan(standaloneTrigger)} but you didn't enable pre-rendering. Use the ${picocolors_1.default.cyan('prerender')} setting (${picocolors_1.default.underline('https://vike.dev/prerender')}) to enable pre-rendering for at least one page.`, { onlyOnce: true });
127
130
  }
128
- const { partial = false, noExtraDir = false, parallel = true } = prerenderConfig || {};
129
131
  const concurrencyLimit = (0, utils_js_1.pLimit)(parallel === false || parallel === 0 ? 1 : parallel === true || parallel === undefined ? (0, os_1.cpus)().length : parallel);
130
132
  await (0, globalContext_js_1.initGlobalContext_runPrerender)();
131
133
  const globalContext = await (0, globalContext_js_1.getGlobalContextInternal)();
@@ -138,7 +140,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
138
140
  output: []
139
141
  };
140
142
  const doNotPrerenderList = [];
141
- await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, concurrencyLimit, globalContext);
143
+ await collectDoNoPrerenderList(vikeConfig.pageConfigs, doNotPrerenderList, defaultLocalValue, concurrencyLimit, globalContext);
142
144
  await callOnBeforePrerenderStartHooks(prerenderContext, globalContext, concurrencyLimit, doNotPrerenderList);
143
145
  await handlePagesWithStaticRoutes(prerenderContext, globalContext, doNotPrerenderList, concurrencyLimit);
144
146
  await callOnPrerenderStartHook(prerenderContext, globalContext);
@@ -161,20 +163,21 @@ async function runPrerender(options = {}, standaloneTrigger) {
161
163
  const prerenderContextPublic = makePublic(prerenderContext);
162
164
  return { viteConfig, prerenderContextPublic };
163
165
  }
164
- async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurrencyLimit, globalContext) {
166
+ async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, defaultLocalValue, concurrencyLimit, globalContext) {
165
167
  // V1 design
166
168
  pageConfigs.forEach((pageConfig) => {
167
- const configValue = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigLocal)(pageConfig);
168
- if (!configValue)
169
- return;
170
- const { value, configValueFilePathToShowToUser } = configValue;
171
- if (value === false) {
172
- doNotPrerenderList.push({
173
- pageId: pageConfig.pageId,
174
- setByConfigName: 'prerender',
175
- setByConfigValue: false,
176
- setByConfigFile: configValueFilePathToShowToUser
177
- });
169
+ const prerenderConfigLocal = (0, resolvePrerenderConfig_js_1.resolvePrerenderConfigLocal)(pageConfig);
170
+ const { pageId } = pageConfig;
171
+ if (!prerenderConfigLocal) {
172
+ if (!defaultLocalValue) {
173
+ doNotPrerenderList.push({ pageId });
174
+ }
175
+ }
176
+ else {
177
+ const { value } = prerenderConfigLocal;
178
+ if (value === false) {
179
+ doNotPrerenderList.push({ pageId });
180
+ }
178
181
  }
179
182
  });
180
183
  // Old design
@@ -207,12 +210,7 @@ async function collectDoNoPrerenderList(pageConfigs, doNotPrerenderList, concurr
207
210
  }
208
211
  else {
209
212
  // Don't pre-render `pageId`
210
- doNotPrerenderList.push({
211
- pageId,
212
- setByConfigFile: p.filePath,
213
- setByConfigName: 'doNotPrerender',
214
- setByConfigValue: doNotPrerender
215
- });
213
+ doNotPrerenderList.push({ pageId });
216
214
  }
217
215
  }
218
216
  });
@@ -565,8 +563,7 @@ function warnContradictoryNoPrerenderList(prerenderedPageContexts, doNotPrerende
565
563
  if (!isContradictory)
566
564
  return;
567
565
  }
568
- const { setByConfigName, setByConfigValue, setByConfigFile } = doNotPrerenderListEntry;
569
- (0, utils_js_1.assertWarning)(false, `The ${providedByHook.hookName}() hook defined by ${providedByHook.hookFilePath} returns the URL ${picocolors_1.default.cyan(urlOriginal)}, while ${setByConfigFile} sets the config ${picocolors_1.default.cyan(setByConfigName)} to ${picocolors_1.default.cyan(String(setByConfigValue))}. This is contradictory: either don't set the config ${picocolors_1.default.cyan(setByConfigName)} to ${picocolors_1.default.cyan(String(setByConfigValue))} or remove the URL ${picocolors_1.default.cyan(urlOriginal)} from the list of URLs to be pre-rendered.`, { onlyOnce: true });
566
+ (0, utils_js_1.assertWarning)(false, `The ${providedByHook.hookName}() hook defined by ${providedByHook.hookFilePath} returns the URL ${picocolors_1.default.cyan(urlOriginal)} matching the route of the page ${picocolors_1.default.cyan(pageId)} which isn't configured to be pre-rendered. This is contradictory: either enable pre-rendering for ${picocolors_1.default.cyan(pageId)} or remove the URL ${picocolors_1.default.cyan(urlOriginal)} from the list of URLs to be pre-rendered.`, { onlyOnce: true });
570
567
  });
571
568
  }
572
569
  async function warnMissingPages(prerenderedPageContexts, globalContext, doNotPrerenderList, partial) {
@@ -813,7 +810,8 @@ prerenderConfig) {
813
810
  }
814
811
  function makePublic(prerenderContext) {
815
812
  const prerenderContextPublic = (0, utils_js_1.makePublicCopy)(prerenderContext, 'prerenderContext', [
816
- 'pageContexts'
813
+ 'output', // vite-plugin-vercel
814
+ 'pageContexts' // https://vike.dev/i18n#pre-rendering
817
815
  ]);
818
816
  return prerenderContextPublic;
819
817
  }
@@ -33,3 +33,4 @@ __exportStar(require("../../utils/isArray.js"), exports);
33
33
  __exportStar(require("../../utils/isObject.js"), exports);
34
34
  __exportStar(require("../../utils/changeEnumerable.js"), exports);
35
35
  __exportStar(require("../../utils/makePublicCopy.js"), exports);
36
+ __exportStar(require("../../utils/isNotNullish.js"), exports);
@@ -164,6 +164,13 @@ function getStreamReadableWeb(htmlRender) {
164
164
  if (isStreamReadableWeb(htmlRender)) {
165
165
  return htmlRender;
166
166
  }
167
+ if (isStreamPipeWeb(htmlRender)) {
168
+ const streamPipeWeb = getStreamPipeWeb(htmlRender);
169
+ (0, utils_js_1.assert)(streamPipeWeb);
170
+ const { readable, writable } = new TransformStream();
171
+ streamPipeWeb(writable);
172
+ return readable;
173
+ }
167
174
  return null;
168
175
  }
169
176
  function pipeToStreamWritableWeb(htmlRender, writable) {
@@ -9,20 +9,28 @@ const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
9
  const globalObject = (0, utils_js_1.getGlobalObject)('createHttpResponse/assertNoInfiniteHttpRedirect.ts', {
10
10
  redirectGraph: {}
11
11
  });
12
- function assertNoInfiniteHttpRedirect(urlRedirectTarget, urlLogical) {
12
+ // It's too strict, see https://github.com/vikejs/vike/issues/1270#issuecomment-1820608999
13
+ // - Let's create a new setting `+doNotCatchInfiniteRedirect` if someone complains.
14
+ function assertNoInfiniteHttpRedirect(
15
+ // The exact URL that the user will be redirected to.
16
+ // - It includes the Base URL as well as the locale (i18n) base.
17
+ urlRedirectTarget,
18
+ // Rationale for checking against `pageContextInit.urlOriginal`: https://github.com/vikejs/vike/pull/2264#issuecomment-2713890263
19
+ pageContextInit) {
13
20
  if (!urlRedirectTarget.startsWith('/')) {
14
- // We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (in itself).
15
- // - There isn't a reliable way to check whether the redirect points to an external origin or the same origin. For same origins, we assume/hope the user to pass the URL without origin.
21
+ // We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (at least not in itself).
22
+ // - There isn't a reliable way to check whether the redirect points to an external origin or the same origin; we hope/assume the user sets the URL without origin.
16
23
  // ```js
17
24
  // // For same-origin, the user usually/hopefully passes a URL without origin
18
25
  // renderPage({ urlOriginal: '/some/pathname' })
19
26
  // ```
20
27
  return;
21
28
  }
22
- (0, utils_js_1.assert)(urlLogical.startsWith('/'));
29
+ const urlOriginalNormalized = (0, utils_js_1.removeUrlOrigin)(pageContextInit.urlOriginal).urlModified;
30
+ (0, utils_js_1.assert)(urlOriginalNormalized.startsWith('/'));
23
31
  const graph = copy(globalObject.redirectGraph);
24
32
  graph[urlRedirectTarget] ?? (graph[urlRedirectTarget] = new Set());
25
- graph[urlRedirectTarget].add(urlLogical);
33
+ graph[urlRedirectTarget].add(urlOriginalNormalized);
26
34
  validate(graph);
27
35
  globalObject.redirectGraph = graph;
28
36
  }
@@ -84,10 +84,8 @@ async function createHttpResponsePageContextJson(pageContextSerialized) {
84
84
  const httpResponse = createHttpResponse(200, 'application/json', [], pageContextSerialized, [], null);
85
85
  return httpResponse;
86
86
  }
87
- function createHttpResponseRedirect({ url, statusCode },
88
- // The URL we assume the redirect to be logically based on
89
- urlLogical) {
90
- (0, assertNoInfiniteHttpRedirect_js_1.assertNoInfiniteHttpRedirect)(url, urlLogical);
87
+ function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
88
+ (0, assertNoInfiniteHttpRedirect_js_1.assertNoInfiniteHttpRedirect)(url, pageContextInit);
91
89
  (0, utils_js_1.assert)(url);
92
90
  (0, utils_js_1.assert)(statusCode);
93
91
  (0, utils_js_1.assert)(300 <= statusCode && statusCode <= 399);
@@ -27,15 +27,25 @@ const errorsMisc = [
27
27
  errMsg: 'assets.json',
28
28
  link: 'https://vike.dev/getGlobalContext',
29
29
  mustMentionNodeModules: false
30
+ },
31
+ {
32
+ errMsg: 'ERR_UNKNOWN_FILE_EXTENSION',
33
+ link: 'https://vike.dev/broken-npm-package#err-unknown-file-extension'
30
34
  }
31
35
  ];
36
+ const reactInvalidEelement = 'https://vike.dev/broken-npm-package#react-invalid-component';
32
37
  const errorsReact = [
33
38
  {
34
39
  errMsg: 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components)',
35
- link: 'https://vike.dev/broken-npm-package#react-invalid-component',
40
+ link: reactInvalidEelement,
36
41
  // The stack trace can be user-land while the import is coming from node_modules
37
42
  mustMentionNodeModules: false
38
43
  },
44
+ {
45
+ errMsg: 'Objects are not valid as a React child',
46
+ link: reactInvalidEelement,
47
+ mustMentionNodeModules: false
48
+ },
39
49
  {
40
50
  // React's "Invalid hook call.", see https://github.com/vikejs/vike/discussions/1637#discussioncomment-9424712
41
51
  errMsg: "Cannot read properties of null (reading 'useContext')"
@@ -71,7 +81,8 @@ const errorsCjsEsm = [
71
81
  { errMsg: 'exports is not defined' },
72
82
  { errMsg: 'module is not defined' },
73
83
  { errMsg: 'not defined in ES' },
74
- { errMsg: "Unexpected token 'export'" }
84
+ { errMsg: "Unexpected token 'export'" },
85
+ { errMsg: 'Failed to resolve entry for package' }
75
86
  ];
76
87
  function logErrorHint(error) {
77
88
  /* Collect errors for ./logErrorHint.spec.ts
@@ -346,7 +346,7 @@ async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
346
346
  if (!urlNormalized)
347
347
  return null;
348
348
  (0, loggerRuntime_js_1.logRuntimeInfo)?.(`URL normalized from ${picocolors_1.default.cyan(urlOriginal)} to ${picocolors_1.default.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
349
- const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)({ url: urlNormalized, statusCode: 301 }, pageContextInit.urlOriginal);
349
+ const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)({ url: urlNormalized, statusCode: 301 }, pageContextInit);
350
350
  const pageContextHttpResponse = createPageContext(pageContextInit);
351
351
  (0, utils_js_1.objectAssign)(pageContextHttpResponse, { httpResponse });
352
352
  return pageContextHttpResponse;
@@ -388,7 +388,7 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
388
388
  (0, utils_js_1.assert)(urlTarget !== pageContextInit.urlOriginal);
389
389
  }
390
390
  (0, loggerRuntime_js_1.logRuntimeInfo)?.(`Permanent redirection defined by config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
391
- const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)({ url: urlTarget, statusCode: 301 }, urlWithoutBase);
391
+ const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)({ url: urlTarget, statusCode: 301 }, pageContextInit);
392
392
  const pageContextHttpResponse = createPageContext(pageContextInit);
393
393
  (0, utils_js_1.objectAssign)(pageContextHttpResponse, { httpResponse });
394
394
  return pageContextHttpResponse;
@@ -396,7 +396,9 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
396
396
  function normalize(url) {
397
397
  return url || '/';
398
398
  }
399
- async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextInit,
399
+ async function handleAbortError(errAbort, pageContextsFromRewrite,
400
+ // The original `pageContextInit` object passed to `renderPage(pageContextInit)`
401
+ pageContextInit,
400
402
  // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageInit to it: we only use some pageContextNominalPageInit information.
401
403
  pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalContext) {
402
404
  (0, abort_js_1.logAbortErrorHandled)(errAbort, globalContext.isProduction, pageContextNominalPageInit);
@@ -434,13 +436,7 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
434
436
  if (pageContextAbort._urlRedirect) {
435
437
  const pageContextReturn = createPageContext(pageContextInit);
436
438
  (0, utils_js_1.objectAssign)(pageContextReturn, pageContextAbort);
437
- const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)(pageContextAbort._urlRedirect, (() => {
438
- const { pathname, searchOriginal } = pageContextNominalPageInit.urlParsed;
439
- const urlLogical = (0, utils_js_1.createUrlFromComponents)(null, pathname, searchOriginal,
440
- // The server-side doesn't have access to the hash
441
- null);
442
- return urlLogical;
443
- })());
439
+ const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)(pageContextAbort._urlRedirect, pageContextInit);
444
440
  (0, utils_js_1.objectAssign)(pageContextReturn, { httpResponse });
445
441
  return { pageContextReturn };
446
442
  }
@@ -39,7 +39,7 @@ function getUrlParsed(pageContext) {
39
39
  // 6. The value of pageContext.urlPathname is now '/login': the pathname of `pageContext.urlLogical`. (While pageContext.urlOriginal is still '/fr-FR/admin'.)
40
40
  // Reproduction: https://github.com/vikejs/vike/discussions/1436#discussioncomment-8142023
41
41
  // Determine logical URL
42
- const assertUrlResolved = (src) => (0, utils_js_1.assert)(urlResolved && typeof urlResolved === 'string',
42
+ const assertUrlResolved = (src) => (0, utils_js_1.assert)(typeof urlResolved === 'string',
43
43
  // TODO/eventually: remove debug logs, see:
44
44
  // - https://github.com/vikejs/vike/issues/2138#issuecomment-2631713411
45
45
  // - https://github.com/vikejs/vike/commit/5c7810f3080ab62536950f26e019bb2a3a517082