vike 0.4.222 → 0.4.223-commit-586dbfb

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 (161) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +1 -1
  2. package/dist/cjs/node/api/prepareViteApiCall.js +1 -1
  3. package/dist/cjs/node/plugin/index.js +6 -4
  4. package/dist/cjs/node/plugin/plugins/baseUrls.js +9 -2
  5. package/dist/cjs/node/plugin/plugins/buildApp.js +14 -7
  6. package/dist/cjs/node/plugin/plugins/buildConfig/fixServerAssets.js +49 -19
  7. package/dist/cjs/node/plugin/plugins/buildConfig.js +6 -1
  8. package/dist/cjs/node/plugin/plugins/commonConfig.js +17 -1
  9. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +1 -1
  10. package/dist/cjs/node/plugin/plugins/envVars.js +2 -18
  11. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +2 -2
  12. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +1 -1
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +4 -4
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +6 -1
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +11 -10
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +8 -5
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +36 -71
  18. package/dist/cjs/node/plugin/shared/findPageFiles.js +3 -3
  19. package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +1 -1
  20. package/dist/cjs/node/plugin/shared/viteIsSSR.js +19 -10
  21. package/dist/cjs/node/prerender/runPrerender.js +3 -1
  22. package/dist/cjs/node/runtime/globalContext.js +19 -8
  23. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +1 -1
  24. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +24 -0
  25. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +1 -1
  26. package/dist/cjs/node/runtime/renderPage/handlePageContextRequestUrl.js +1 -1
  27. package/dist/cjs/node/runtime/renderPage/isNewError.js +1 -1
  28. package/dist/cjs/node/runtime/renderPage/isVikeConfigInvalid.js +10 -0
  29. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
  30. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +7 -1
  31. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -4
  32. package/dist/cjs/node/runtime/renderPage.js +63 -49
  33. package/dist/cjs/node/runtime/universal-middleware.js +14 -0
  34. package/dist/cjs/node/shared/resolveBase.js +0 -13
  35. package/dist/cjs/shared/getPageConfigsRuntime.js +2 -8
  36. package/dist/cjs/shared/getPageContextRequestUrl.js +1 -1
  37. package/dist/cjs/shared/getPageContextUrlComputed.js +12 -9
  38. package/dist/cjs/shared/hooks/getHook.js +1 -1
  39. package/dist/cjs/shared/page-configs/getPageConfigUserFriendly.js +44 -12
  40. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -8
  41. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +16 -6
  42. package/dist/cjs/shared/route/loadPageRoutes.js +1 -1
  43. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  44. package/dist/cjs/utils/assert.js +1 -1
  45. package/dist/cjs/utils/assertSetup.js +1 -1
  46. package/dist/cjs/utils/assertSingleInstance.js +2 -2
  47. package/dist/cjs/utils/findFile.js +1 -1
  48. package/dist/cjs/utils/getGlobalObject.js +2 -6
  49. package/dist/cjs/utils/parseUrl-extras.js +2 -2
  50. package/dist/cjs/utils/parseUrl.js +5 -5
  51. package/dist/cjs/utils/requireResolve.js +3 -3
  52. package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
  53. package/dist/esm/client/client-routing-runtime/getPageContextCurrent.js +1 -1
  54. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
  55. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
  56. package/dist/esm/client/client-routing-runtime/history.js +1 -1
  57. package/dist/esm/client/client-routing-runtime/index.d.ts +1 -0
  58. package/dist/esm/client/client-routing-runtime/index.js +1 -0
  59. package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
  60. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
  61. package/dist/esm/client/client-routing-runtime/prefetch.js +3 -3
  62. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +8 -0
  63. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +12 -3
  64. package/dist/esm/client/client-routing-runtime/scrollRestoration.js +1 -1
  65. package/dist/esm/client/client-routing-runtime/skipLink.js +2 -2
  66. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
  67. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
  68. package/dist/esm/client/shared/getPageContextProxyForUser.js +1 -1
  69. package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
  70. package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
  71. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  72. package/dist/esm/node/api/prepareViteApiCall.js +1 -1
  73. package/dist/esm/node/plugin/index.d.ts +6 -2
  74. package/dist/esm/node/plugin/index.js +2 -1
  75. package/dist/esm/node/plugin/plugins/baseUrls.js +9 -2
  76. package/dist/esm/node/plugin/plugins/buildApp.js +14 -7
  77. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.js +49 -19
  78. package/dist/esm/node/plugin/plugins/buildConfig.js +6 -1
  79. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +14 -6
  80. package/dist/esm/node/plugin/plugins/commonConfig.js +17 -1
  81. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +1 -1
  82. package/dist/esm/node/plugin/plugins/envVars.js +2 -18
  83. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +3 -3
  84. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +1 -1
  85. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +4 -4
  86. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +6 -1
  87. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +10 -9
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +8 -5
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +5 -5
  90. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +38 -73
  91. package/dist/esm/node/plugin/shared/findPageFiles.js +3 -3
  92. package/dist/esm/node/plugin/shared/getHttpRequestAsyncStore.js +2 -2
  93. package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +7 -4
  94. package/dist/esm/node/plugin/shared/viteIsSSR.js +20 -11
  95. package/dist/esm/node/prerender/runPrerender.js +3 -1
  96. package/dist/esm/node/runtime/globalContext.d.ts +9 -8
  97. package/dist/esm/node/runtime/globalContext.js +19 -8
  98. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.d.ts +2 -2
  99. package/dist/esm/node/runtime/html/injectAssets.d.ts +2 -2
  100. package/dist/esm/node/runtime/renderPage/analyzePage.d.ts +2 -2
  101. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +1 -1
  102. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +2 -0
  103. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +24 -0
  104. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
  105. package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +2 -2
  106. package/dist/esm/node/runtime/renderPage/getPageAssets.js +1 -1
  107. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.d.ts +2 -2
  108. package/dist/esm/node/runtime/renderPage/handlePageContextRequestUrl.js +1 -1
  109. package/dist/esm/node/runtime/renderPage/isNewError.js +1 -1
  110. package/dist/esm/node/runtime/renderPage/isVikeConfigInvalid.d.ts +6 -0
  111. package/dist/esm/node/runtime/renderPage/isVikeConfigInvalid.js +8 -0
  112. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +3 -3
  113. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
  114. package/dist/esm/node/runtime/renderPage/log404/index.d.ts +2 -2
  115. package/dist/esm/node/runtime/renderPage/logErrorHint.js +7 -1
  116. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +4 -4
  117. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +12 -12
  118. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -4
  119. package/dist/esm/node/runtime/renderPage.d.ts +5 -5
  120. package/dist/esm/node/runtime/renderPage.js +64 -49
  121. package/dist/esm/node/runtime/universal-middleware.d.ts +1 -0
  122. package/dist/esm/node/runtime/universal-middleware.js +11 -0
  123. package/dist/esm/node/shared/resolveBase.d.ts +1 -9
  124. package/dist/esm/node/shared/resolveBase.js +0 -13
  125. package/dist/esm/shared/getPageConfigsRuntime.d.ts +2 -2
  126. package/dist/esm/shared/getPageConfigsRuntime.js +3 -9
  127. package/dist/esm/shared/getPageContextRequestUrl.js +1 -1
  128. package/dist/esm/shared/getPageContextUrlComputed.js +12 -9
  129. package/dist/esm/shared/getPageFiles.d.ts +1 -1
  130. package/dist/esm/shared/hooks/getHook.d.ts +3 -3
  131. package/dist/esm/shared/hooks/getHook.js +1 -1
  132. package/dist/esm/shared/page-configs/Config.d.ts +3 -1
  133. package/dist/esm/shared/page-configs/PageConfig.d.ts +12 -4
  134. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.d.ts +24 -16
  135. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.js +44 -12
  136. package/dist/esm/shared/page-configs/serialize/PageConfigSerialized.d.ts +3 -2
  137. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -8
  138. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +2 -0
  139. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +16 -6
  140. package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
  141. package/dist/esm/shared/route/loadPageRoutes.js +1 -1
  142. package/dist/esm/shared/types.d.ts +6 -0
  143. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  144. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  145. package/dist/esm/utils/assert.js +1 -1
  146. package/dist/esm/utils/assertSetup.js +1 -1
  147. package/dist/esm/utils/assertSingleInstance.js +2 -2
  148. package/dist/esm/utils/findFile.js +1 -1
  149. package/dist/esm/utils/getGlobalObject.d.ts +3 -2
  150. package/dist/esm/utils/getGlobalObject.js +2 -6
  151. package/dist/esm/utils/parseUrl-extras.js +2 -2
  152. package/dist/esm/utils/parseUrl.d.ts +3 -4
  153. package/dist/esm/utils/parseUrl.js +5 -5
  154. package/dist/esm/utils/projectInfo.d.ts +1 -1
  155. package/dist/esm/utils/requireResolve.js +3 -3
  156. package/package.json +18 -6
  157. package/universal-middleware.js +3 -0
  158. package/dist/cjs/node/runtime/renderPage/isConfigInvalid.js +0 -10
  159. package/dist/esm/node/runtime/renderPage/isConfigInvalid.d.ts +0 -6
  160. package/dist/esm/node/runtime/renderPage/isConfigInvalid.js +0 -8
  161. package/dist-cjs-fixup.mjs +0 -41
@@ -8,7 +8,7 @@ export { getConfigDefinitionOptional };
8
8
  import { assertPosixPath, assert, isObject, assertUsage, assertWarning, objectEntries, hasProp, includes, assertIsNotProductionRuntime, getMostSimilar, joinEnglish, assertKeys, objectKeys, objectFromEntries, unique, isCallable, makeFirst, lowerFirst } from '../../../utils.js';
9
9
  import { configDefinitionsBuiltIn } from './getVikeConfig/configDefinitionsBuiltIn.js';
10
10
  import { getLocationId, getFilesystemRouteString, getFilesystemRouteDefinedBy, isInherited, sortAfterInheritanceOrder, applyFilesystemRoutingRootEffect } from './getVikeConfig/filesystemRouting.js';
11
- import { isConfigInvalid, isConfigInvalid_set } from '../../../../runtime/renderPage/isConfigInvalid.js';
11
+ import { isVikeConfigInvalid, isVikeConfigInvalid_set } from '../../../../runtime/renderPage/isVikeConfigInvalid.js';
12
12
  import { getViteDevServer } from '../../../../runtime/globalContext.js';
13
13
  import { logConfigError, logConfigErrorRecover } from '../../../shared/loggerNotProd.js';
14
14
  import { removeSuperfluousViteLog_enable, removeSuperfluousViteLog_disable } from '../../../shared/loggerVite/removeSuperfluousViteLog.js';
@@ -19,8 +19,8 @@ import { resolvePointerImport } from './getVikeConfig/resolvePointerImport.js';
19
19
  import { getFilePathResolved } from '../../../shared/getFilePath.js';
20
20
  import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
21
21
  import { assertExtensionsRequire } from './getVikeConfig/assertExtensions.js';
22
- import { getPageConfigUserFriendlyNew } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
23
- import { getConfigValuesBase } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
22
+ import { getPageConfigGlobalUserFriendly, getPageConfigUserFriendly } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
23
+ import { getConfigValuesBase, isJsonValue } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
24
24
  import { getPlusFilesAll } from './getVikeConfig/getPlusFilesAll.js';
25
25
  assertIsNotProductionRuntime();
26
26
  let restartVite = false;
@@ -37,7 +37,7 @@ function reloadVikeConfig(config) {
37
37
  handleReloadSideEffects();
38
38
  }
39
39
  async function handleReloadSideEffects() {
40
- wasConfigInvalid = !!isConfigInvalid;
40
+ wasConfigInvalid = !!isVikeConfigInvalid;
41
41
  const vikeConfigPromisePrevious = vikeConfigPromise;
42
42
  try {
43
43
  await vikeConfigPromise;
@@ -52,7 +52,7 @@ async function handleReloadSideEffects() {
52
52
  // Let the next handleReloadSideEffects() call handle side effects
53
53
  return;
54
54
  }
55
- if (!isConfigInvalid) {
55
+ if (!isVikeConfigInvalid) {
56
56
  if (wasConfigInvalid) {
57
57
  wasConfigInvalid = false;
58
58
  logConfigErrorRecover();
@@ -105,13 +105,13 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
105
105
  if (!hasError) {
106
106
  assert(ret);
107
107
  assert(err === undefined);
108
- isConfigInvalid_set(false);
108
+ isVikeConfigInvalid_set(false);
109
109
  return ret;
110
110
  }
111
111
  else {
112
112
  assert(ret === undefined);
113
113
  assert(err);
114
- isConfigInvalid_set({ err });
114
+ isVikeConfigInvalid_set({ err });
115
115
  if (!isDev) {
116
116
  assert(getViteDevServer() === null);
117
117
  throw err;
@@ -127,7 +127,7 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
127
127
  configDefinitions: {},
128
128
  configValueSources: {}
129
129
  },
130
- global: getPageConfigUserFriendlyNew({ configValues: {} }),
130
+ global: getPageConfigGlobalUserFriendly({ pageConfigGlobalValues: {} }),
131
131
  pages: {}
132
132
  };
133
133
  return dummyData;
@@ -143,18 +143,12 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
143
143
  // interop vike(options) in vite.config.js
144
144
  temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
145
145
  // global
146
- const configValuesGlobal = getConfigValues(pageConfigGlobal);
147
- const global = getPageConfigUserFriendlyNew({ configValues: configValuesGlobal });
148
- // TODO/now DEDUPE
146
+ const pageConfigGlobalValues = getConfigValues(pageConfigGlobal);
147
+ const global = getPageConfigGlobalUserFriendly({ pageConfigGlobalValues });
149
148
  // pages
150
149
  const pages = objectFromEntries(pageConfigs.map((pageConfig) => {
151
- const configValuesLocal = getConfigValues(pageConfig, true);
152
- const configValues = { ...configValuesGlobal, ...configValuesLocal };
153
- const page = {
154
- ...getPageConfigUserFriendlyNew({ configValues }),
155
- route: pageConfig.routeFilesystem?.routeString ?? null
156
- };
157
- return [pageConfig.pageId, page];
150
+ const pageConfigValues = getConfigValues(pageConfig, true);
151
+ return getPageConfigUserFriendly(pageConfigGlobalValues, pageConfig, pageConfigValues);
158
152
  }));
159
153
  return { pageConfigs, pageConfigGlobal, global, pages };
160
154
  }
@@ -219,13 +213,12 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
219
213
  return;
220
214
  configValueSources[configName] = sources;
221
215
  });
222
- const { routeFilesystem, isErrorPage } = determineRouteFilesystem(locationId, configValueSources);
216
+ const pageConfigRoute = determineRouteFilesystem(locationId, configValueSources);
223
217
  applyEffectsAll(configValueSources, configDefinitionsLocal);
224
218
  const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
225
219
  const pageConfig = {
226
220
  pageId: locationId,
227
- isErrorPage,
228
- routeFilesystem,
221
+ ...pageConfigRoute,
229
222
  configDefinitions: configDefinitionsLocal,
230
223
  plusFiles: plusFilesRelevant,
231
224
  configValueSources,
@@ -359,8 +352,8 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
359
352
  locationId: '/',
360
353
  plusFile: null,
361
354
  isOverriden: configDef.cumulative ? false : sources.length > 0,
362
- valueIsImportedAtRuntime: false,
363
- valueIsDefinedByPlusFile: false
355
+ valueIsLoadedWithImport: false,
356
+ valueIsDefinedByPlusValueFile: false
364
357
  });
365
358
  });
366
359
  }
@@ -424,20 +417,10 @@ function getPlusFilesOrdered(configName, plusFilesRelevant) {
424
417
  const plusFilesConfig = plusFilesForConfigName.filter((plusFile) => plusFile.isConfigFile &&
425
418
  // We consider extensions (e.g. vike-react) later (i.e. with less priority)
426
419
  !plusFile.isExtensionConfig);
427
- // Make this value:
428
- // /pages/some-page/+{configName}.js > `export default`
429
- // override that value:
430
- // /pages/some-page/+config.js > `export default { someConfig }`
431
- const plusFileWinner = plusFilesValue[0] ?? plusFilesConfig[0];
432
- if (plusFileWinner) {
433
- const plusFilesOverriden = [...plusFilesValue, ...plusFilesConfig].filter((f) => f !== plusFileWinner);
434
- // A user-land conflict of plusFiles with the same `locationId` (we are iterating over `plusFilesRelevant: PlusFilesByLocationId`) means that the user has superfluously defined the config twice; the user should remove such redundancy as it makes things unnecessarily ambiguous.
435
- assertOverwrittenConfigFile(plusFileWinner, plusFilesOverriden, configName);
436
- [plusFileWinner, ...plusFilesOverriden].forEach((plusFile) => {
437
- assert(plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it's a user-land plus file
438
- populate(plusFile);
439
- });
440
- }
420
+ [...plusFilesValue, ...plusFilesConfig].forEach((plusFile) => {
421
+ assert(plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it's a user-land plus file
422
+ populate(plusFile);
423
+ });
441
424
  }
442
425
  // ==========================
443
426
  // Side-effect configs (next)
@@ -489,8 +472,8 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
489
472
  let valueFilePath;
490
473
  if (plusFile.isConfigFile) {
491
474
  // Defined over pointer import
492
- assert(confVal.configValueLoaded);
493
- const pointerImport = resolvePointerImport(confVal.configValue, plusFile.filePath, userRootDir, configName);
475
+ assert(confVal.valueIsLoaded);
476
+ const pointerImport = resolvePointerImport(confVal.value, plusFile.filePath, userRootDir, configName);
494
477
  const configDefinedAt = getConfigDefinedAt('Config', configName, definedAtFilePath_);
495
478
  assertUsage(pointerImport, `${configDefinedAt} should be an import`);
496
479
  valueFilePath = pointerImport.fileExportPath.filePathAbsoluteVite;
@@ -511,8 +494,8 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
511
494
  value: valueFilePath,
512
495
  valueIsFilePath: true,
513
496
  configEnv: configDef.env,
514
- valueIsImportedAtRuntime: true,
515
- valueIsDefinedByPlusFile: false,
497
+ valueIsLoadedWithImport: false,
498
+ valueIsDefinedByPlusValueFile: false,
516
499
  isOverriden,
517
500
  definedAtFilePath
518
501
  };
@@ -520,8 +503,7 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
520
503
  }
521
504
  // +config.js
522
505
  if (plusFile.isConfigFile) {
523
- assert(confVal.configValueLoaded);
524
- const { configValue } = confVal;
506
+ assert(confVal.valueIsLoaded);
525
507
  // Defined over pointer import
526
508
  const pointerImport = plusFile.pointerImportsByConfigName[configName];
527
509
  if (pointerImport) {
@@ -537,8 +519,8 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
537
519
  ...configValueSourceCommon,
538
520
  ...value,
539
521
  configEnv: resolveConfigEnv(configDef.env, pointerImport.fileExportPath),
540
- valueIsImportedAtRuntime: true,
541
- valueIsDefinedByPlusFile: false,
522
+ valueIsLoadedWithImport: true,
523
+ valueIsDefinedByPlusValueFile: false,
542
524
  isOverriden,
543
525
  definedAtFilePath: pointerImport.fileExportPath
544
526
  };
@@ -548,10 +530,10 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
548
530
  const configValueSource = {
549
531
  ...configValueSourceCommon,
550
532
  valueIsLoaded: true,
551
- value: configValue,
533
+ value: confVal.value,
552
534
  configEnv: configDef.env,
553
- valueIsImportedAtRuntime: false,
554
- valueIsDefinedByPlusFile: false,
535
+ valueIsLoadedWithImport: false,
536
+ valueIsDefinedByPlusValueFile: false,
555
537
  isOverriden,
556
538
  definedAtFilePath: definedAtFilePath_
557
539
  };
@@ -560,22 +542,13 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
560
542
  // Defined by value file, i.e. +{configName}.js
561
543
  if (!plusFile.isConfigFile) {
562
544
  const configEnvResolved = resolveConfigEnv(configDef.env, plusFile.filePath);
563
- const valueAlreadyLoaded = confVal.configValueLoaded;
564
- assert(valueAlreadyLoaded === !!configEnvResolved.config);
565
- const value = valueAlreadyLoaded
566
- ? {
567
- valueIsLoaded: true,
568
- value: confVal.configValue
569
- }
570
- : {
571
- valueIsLoaded: false
572
- };
545
+ assert(confVal.valueIsLoaded === !!configEnvResolved.config);
573
546
  const configValueSource = {
574
547
  ...configValueSourceCommon,
575
- ...value,
548
+ ...confVal,
576
549
  configEnv: configEnvResolved,
577
- valueIsImportedAtRuntime: !valueAlreadyLoaded,
578
- valueIsDefinedByPlusFile: true,
550
+ valueIsLoadedWithImport: !confVal.valueIsLoaded || !isJsonValue(confVal.value),
551
+ valueIsDefinedByPlusValueFile: true,
579
552
  isOverriden,
580
553
  definedAtFilePath: {
581
554
  ...plusFile.filePath,
@@ -589,14 +562,6 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
589
562
  }
590
563
  assert(false);
591
564
  }
592
- function assertOverwrittenConfigFile(plusFileWinner, plusFilesOverriden, configName) {
593
- plusFilesOverriden.forEach((plusFileLoser) => {
594
- const loserFilePath = plusFileLoser.filePath.filePathToShowToUser;
595
- const winnerFilePath = plusFileWinner.filePath.filePathToShowToUser;
596
- const confName = pc.cyan(configName);
597
- assertWarning(false, `The value of the config ${confName} defined at ${loserFilePath} is always overwritten by the value defined at ${winnerFilePath}, remove the superfluous value defined at ${loserFilePath}`, { onlyOnce: true });
598
- });
599
- }
600
565
  function isDefiningPage(plusFiles) {
601
566
  for (const plusFile of plusFiles) {
602
567
  const configNames = getDefiningConfigNames(plusFile);
@@ -630,8 +595,8 @@ function getConfigDefinitions(plusFilesRelevant, filter) {
630
595
  const confVal = getConfVal(plusFile, 'meta');
631
596
  if (!confVal)
632
597
  return;
633
- assert(confVal.configValueLoaded);
634
- const meta = confVal.configValue;
598
+ assert(confVal.valueIsLoaded);
599
+ const meta = confVal.value;
635
600
  assertMetaUsage(meta, `Config ${pc.cyan('meta')} defined at ${plusFile.filePath.filePathToShowToUser}`);
636
601
  // Set configDef._userEffectDefinedAtFilePath
637
602
  Object.entries(meta).forEach(([configName, configDef]) => {
@@ -927,8 +892,8 @@ function getConfVal(plusFile, configName) {
927
892
  if (!configNames.includes(configName))
928
893
  return null;
929
894
  if (plusFile.isNotLoaded)
930
- return { configValueLoaded: false };
931
- const confVal = { configValue: plusFile.fileExportsByConfigName[configName], configValueLoaded: true };
895
+ return { valueIsLoaded: false };
896
+ const confVal = { value: plusFile.fileExportsByConfigName[configName], valueIsLoaded: true };
932
897
  return confVal;
933
898
  }
934
899
  function resolveConfigEnv(configEnv, filePath) {
@@ -1,5 +1,5 @@
1
1
  export { findPageFiles };
2
- import glob from 'fast-glob';
2
+ import { glob } from 'tinyglobby';
3
3
  import { assertWarning, toPosixPath, scriptFileExtensions } from '../utils.js';
4
4
  import pc from '@brillout/picocolors';
5
5
  import { getOutDirs } from './getOutDirs.js';
@@ -7,11 +7,11 @@ async function findPageFiles(config, fileTypes, isDev) {
7
7
  const cwd = config.root;
8
8
  const { outDirRoot } = getOutDirs(config);
9
9
  const timeBase = new Date().getTime();
10
- let pageFiles = await glob(fileTypes.map((fileType) => `**/*${fileType}.${scriptFileExtensions}`), { ignore: ['**/node_modules/**', `${outDirRoot}/**`], cwd, dot: false });
10
+ let pageFiles = await glob(fileTypes.map((fileType) => `**/*${fileType}.${scriptFileExtensions}`), { ignore: ['**/node_modules/**', `${outDirRoot}/**`], cwd, dot: false, expandDirectories: false });
11
11
  pageFiles = pageFiles.map((p) => '/' + toPosixPath(p));
12
12
  const time = new Date().getTime() - timeBase;
13
13
  if (isDev) {
14
- // 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
14
+ // 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
15
15
  assertWarning(time < 1.5 * 1000, `Finding your page files ${pc.cyan('**/*.page.*')} took an unexpected long time (${time}ms). Reach out to the vike maintainer.`, {
16
16
  onlyOnce: 'slow-page-files-search'
17
17
  });
@@ -10,7 +10,7 @@
10
10
  // - We dedupe errors ourself with getHttpRequestAsyncStore().shouldErrorBeSwallowed()
11
11
  export { getHttpRequestAsyncStore };
12
12
  export { installHttpRequestAsyncStore };
13
- import { renderPage_addWrapper } from '../../runtime/renderPage.js';
13
+ import { renderPage_addAsyncHookwrapper } from '../../runtime/renderPage.js';
14
14
  import { assert, assertIsNotProductionRuntime, isObject, unique } from '../utils.js';
15
15
  import { getConfigBuildErrorFormatted } from '../plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js';
16
16
  import { logErrorDebugNote } from './loggerNotProd.js';
@@ -27,7 +27,7 @@ async function installHttpRequestAsyncStore() {
27
27
  return;
28
28
  }
29
29
  asyncLocalStorage = new mod.AsyncLocalStorage();
30
- renderPage_addWrapper(async (httpRequestId, renderPage) => {
30
+ renderPage_addAsyncHookwrapper(async (httpRequestId, renderPage) => {
31
31
  assert(asyncLocalStorage);
32
32
  const loggedErrors = new Set();
33
33
  const markErrorAsLogged = (err) => {
@@ -1,8 +1,11 @@
1
- import type { ResolvedConfig, UserConfig } from 'vite';
2
1
  export { viteIsSSR };
3
2
  export { viteIsSSR_options };
3
+ export { viteIsSSR_safe };
4
+ import type { ResolvedConfig, UserConfig } from 'vite';
4
5
  declare function viteIsSSR(config: ResolvedConfig | UserConfig): boolean;
5
- type Options = undefined | boolean | {
6
+ declare function viteIsSSR_options(options: {
7
+ ssr?: boolean;
8
+ } | undefined): boolean;
9
+ declare function viteIsSSR_safe(config: ResolvedConfig, options: {
6
10
  ssr?: boolean;
7
- };
8
- declare function viteIsSSR_options(options: Options): boolean;
11
+ } | undefined): boolean;
@@ -1,20 +1,29 @@
1
- import { assert } from '../../../utils/assert.js';
2
- import { isObject } from '../../../utils/isObject.js';
3
1
  export { viteIsSSR };
4
2
  export { viteIsSSR_options };
3
+ export { viteIsSSR_safe };
4
+ import { assert } from '../../../utils/assert.js';
5
5
  function viteIsSSR(config) {
6
6
  return !!config?.build?.ssr;
7
7
  }
8
- // https://github.com/vitejs/vite/discussions/5109#discussioncomment-1450726
9
8
  function viteIsSSR_options(options) {
10
- if (options === undefined) {
11
- return false;
12
- }
13
- if (typeof options === 'boolean') {
14
- return options;
9
+ return !!options?.ssr;
10
+ }
11
+ // Vite is quite messy about setting `ssr: boolean`, thus we use an extra safe implemention for security purposes.
12
+ // It's used for .client.js and .server.js guarantee thus we use agressive assert() calls for added safety.
13
+ function viteIsSSR_safe(config, options) {
14
+ if (config.command === 'build') {
15
+ assert(typeof config.build.ssr === 'boolean');
16
+ const val = config.build.ssr;
17
+ if (options?.ssr !== undefined)
18
+ assert(val === options.ssr);
19
+ return val;
15
20
  }
16
- if (isObject(options)) {
17
- return !!options.ssr;
21
+ else {
22
+ assert(typeof options?.ssr === 'boolean');
23
+ const val = options.ssr;
24
+ /* This assert() fails (which is very unexpected).
25
+ if (typeof config.build.ssr === 'boolean') assert(val === config.build.ssr)
26
+ //*/
27
+ return val;
18
28
  }
19
- assert(false);
20
29
  }
@@ -30,6 +30,7 @@ import { resolvePrerenderConfig, resolvePrerenderConfigLocal } from './resolvePr
30
30
  import { getOutDirs } from '../plugin/shared/getOutDirs.js';
31
31
  import { isVikeCli } from '../cli/context.js';
32
32
  import { isViteCliCall } from '../plugin/shared/isViteCliCall.js';
33
+ import { getVikeConfigPublic } from '../plugin/plugins/commonConfig.js';
33
34
  async function runPrerenderFromAPI(options = {}) {
34
35
  return await runPrerender(options, 'prerender()');
35
36
  // - 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.
@@ -60,7 +61,8 @@ async function runPrerenderFromAutoRun(viteConfig, config) {
60
61
  logErrorHint(err);
61
62
  process.exit(1);
62
63
  }
63
- config.vike.prerenderContext = prerenderContextPublic;
64
+ const vike = getVikeConfigPublic(config);
65
+ vike.prerenderContext = prerenderContextPublic;
64
66
  const forceExit = isVikeCli() || isViteCliCall();
65
67
  return { forceExit };
66
68
  }
@@ -16,24 +16,25 @@ export { assertBuildInfo };
16
16
  export { getViteConfigRuntime };
17
17
  export { updateUserFiles };
18
18
  export type { BuildInfo };
19
- export type { GlobalContext };
19
+ export type { GlobalContextInternal };
20
20
  export type { GlobalContextPublic };
21
21
  import type { ViteManifest } from '../shared/ViteManifest.js';
22
22
  import type { ResolvedConfig, ViteDevServer } from 'vite';
23
- import type { ConfigUserFriendly, PageConfigsUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
23
+ import type { PageConfigUserFriendly, PageConfigsUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
24
24
  import type { ConfigVitePluginServerEntry } from '@brillout/vite-plugin-server-entry/plugin';
25
- type GlobalContextPublic = Pick<GlobalContext, 'assetsManifest' | 'config' | 'viteConfig' | 'pages'>;
25
+ import { type BaseUrlsResolved } from '../shared/resolveBase.js';
26
+ type GlobalContextPublic = Pick<GlobalContext, 'assetsManifest' | 'config' | 'viteConfig' | 'pages' | 'baseAssets' | 'baseServer'>;
26
27
  type PageRuntimeInfo = Awaited<ReturnType<typeof getUserFiles>>;
27
- type GlobalContext = GlobalContextWithoutPublicCopy & {
28
+ type GlobalContextInternal = GlobalContext & {
28
29
  globalContext_public: GlobalContextPublic;
29
30
  };
30
- type GlobalContextWithoutPublicCopy = {
31
+ type GlobalContext = {
31
32
  viteConfigRuntime: {
32
33
  _baseViteOriginal: null | string;
33
34
  };
34
- config: ConfigUserFriendly['config'];
35
+ config: PageConfigUserFriendly['config'];
35
36
  pages: PageConfigsUserFriendly;
36
- } & PageRuntimeInfo & ({
37
+ } & BaseUrlsResolved & PageRuntimeInfo & ({
37
38
  isProduction: false;
38
39
  isPrerendering: false;
39
40
  viteConfig: ResolvedConfig;
@@ -51,7 +52,7 @@ type GlobalContextWithoutPublicCopy = {
51
52
  usesClientRouter: boolean;
52
53
  viteConfig: ResolvedConfig;
53
54
  })));
54
- declare function getGlobalContextInternal(): Promise<GlobalContext>;
55
+ declare function getGlobalContextInternal(): Promise<GlobalContextInternal>;
55
56
  /** @experimental https://vike.dev/getGlobalContext */
56
57
  declare function getGlobalContextSync(): GlobalContextPublic;
57
58
  /** @experimental https://vike.dev/getGlobalContext */
@@ -18,7 +18,7 @@ export { assertBuildInfo };
18
18
  export { getViteConfigRuntime };
19
19
  export { updateUserFiles };
20
20
  // The core logic revolves around:
21
- // - globalObject.userFiles which is the main requirement for assembleGlobalContext()
21
+ // - globalObject.userFiles which is the main requirement for resolveGlobalContext()
22
22
  // - In production: globalObject.buildEntry which is the production entry set by @brillout/vite-plugin-server-entry
23
23
  // - loadBuildEntry() sets globalObject.buildEntry and then sets globalObject.userFiles
24
24
  // - With vike-server it's set at server start: @brillout/vite-plugin-server-entry injects `import './entry.mjs'` (the production entry generated by @brillout/vite-plugin-server-entry) as first line of code of dist/server/index.mjs while dist/server/entry.mjs calls setGlobalContext_buildEntry()
@@ -32,8 +32,9 @@ import pc from '@brillout/picocolors';
32
32
  import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
33
33
  import { assertV1Design } from '../shared/assertV1Design.js';
34
34
  import { getPageConfigsRuntime } from '../../shared/getPageConfigsRuntime.js';
35
+ import { resolveBase } from '../shared/resolveBase.js';
35
36
  const debug = createDebugger('vike:globalContext');
36
- const globalObject = getGlobalObject('globalContext.ts', getInitialGlobalContext());
37
+ const globalObject = getGlobalObject('runtime/globalContext.ts', getInitialGlobalContext());
37
38
  async function getGlobalContextInternal() {
38
39
  // getGlobalContextInternal() should always be called after initGlobalContext()
39
40
  assert(globalObject.isInitialized);
@@ -79,7 +80,9 @@ function makePublic(globalContext) {
79
80
  'assetsManifest',
80
81
  'config',
81
82
  'viteConfig',
82
- 'pages'
83
+ 'pages',
84
+ 'baseServer',
85
+ 'baseAssets'
83
86
  ]);
84
87
  return globalContextPublic;
85
88
  }
@@ -121,7 +124,7 @@ function getViteConfig() {
121
124
  }
122
125
  async function initGlobalContext_renderPage() {
123
126
  debug('initGlobalContext_renderPage()');
124
- // globalObject.isProduction isn't set upon production server without vike-server (there isn't any signal we can use)
127
+ // `globalObject.isProduction === undefined` when using production server without `vike-server`. (There isn't any reliable signal we can use to determine early whether the environement is production or development.)
125
128
  if (globalObject.isProduction === undefined)
126
129
  setIsProduction(true);
127
130
  await initGlobalContext();
@@ -184,7 +187,7 @@ function setIsProduction(isProduction) {
184
187
  globalObject.isProduction = isProduction;
185
188
  }
186
189
  function defineGlobalContext() {
187
- const globalContext = assembleGlobalContext();
190
+ const globalContext = resolveGlobalContext();
188
191
  assertIsDefined(globalContext);
189
192
  const globalContext_public = makePublic(globalContext);
190
193
  objectAssign(globalContext, { globalContext_public });
@@ -193,7 +196,7 @@ function defineGlobalContext() {
193
196
  assertGlobalContextIsDefined();
194
197
  onSetupRuntime();
195
198
  }
196
- function assembleGlobalContext() {
199
+ function resolveGlobalContext() {
197
200
  const { viteDevServer, viteConfig, isPrerendering, isProduction, userFiles } = globalObject;
198
201
  assert(typeof isProduction === 'boolean');
199
202
  let globalContext;
@@ -212,7 +215,8 @@ function assembleGlobalContext() {
212
215
  viteDevServer,
213
216
  viteConfig,
214
217
  ...userFiles,
215
- viteConfigRuntime
218
+ viteConfigRuntime,
219
+ ...resolveBaseRuntime(viteConfigRuntime, userFiles.config)
216
220
  };
217
221
  }
218
222
  else {
@@ -229,7 +233,8 @@ function assembleGlobalContext() {
229
233
  ...userFiles,
230
234
  viteDevServer: null,
231
235
  viteConfigRuntime: buildInfo.viteConfigRuntime,
232
- usesClientRouter: buildInfo.usesClientRouter
236
+ usesClientRouter: buildInfo.usesClientRouter,
237
+ ...resolveBaseRuntime(buildInfo.viteConfigRuntime, userFiles.config)
233
238
  };
234
239
  if (isPrerendering) {
235
240
  assert(viteConfig);
@@ -398,3 +403,9 @@ function getInitialGlobalContext() {
398
403
  viteDevServerPromiseResolve
399
404
  };
400
405
  }
406
+ function resolveBaseRuntime(viteConfigRuntime, config) {
407
+ const baseViteOriginal = viteConfigRuntime._baseViteOriginal;
408
+ const baseServerUnresolved = config.baseServer ?? null;
409
+ const baseAssetsUnresolved = config.baseAssets ?? null;
410
+ return resolveBase(baseViteOriginal, baseServerUnresolved, baseAssetsUnresolved);
411
+ }
@@ -1,5 +1,5 @@
1
1
  export { getViteDevScript };
2
- import type { GlobalContext } from '../../globalContext.js';
2
+ import type { GlobalContextInternal } from '../../globalContext.js';
3
3
  declare function getViteDevScript(pageContext: {
4
- _globalContext: GlobalContext;
4
+ _globalContext: GlobalContextInternal;
5
5
  }): Promise<string>;
@@ -8,7 +8,7 @@ import { type PreloadFilter } from './injectAssets/getHtmlTags.js';
8
8
  import type { StreamFromReactStreamingPackage } from './stream/react-streaming.js';
9
9
  import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
10
10
  import type { PageContextSerialization } from './serializePageContextClientSide.js';
11
- import type { GlobalContext } from '../globalContext.js';
11
+ import type { GlobalContextInternal } from '../globalContext.js';
12
12
  type PageContextInjectAssets = {
13
13
  urlPathname: string;
14
14
  __getPageAssets: () => Promise<PageAsset[]>;
@@ -22,7 +22,7 @@ type PageContextInjectAssets = {
22
22
  _baseServer: string;
23
23
  _pageConfigs: PageConfigRuntime[];
24
24
  is404: null | boolean;
25
- _globalContext: GlobalContext;
25
+ _globalContext: GlobalContextInternal;
26
26
  } & PageContextSerialization;
27
27
  declare function injectHtmlTagsToString(htmlParts: HtmlPart[], pageContext: PageContextInjectAssets & {
28
28
  _isStream: false;
@@ -2,5 +2,5 @@ export { analyzePage };
2
2
  import type { PageFile } from '../../../shared/getPageFiles/getPageFileObject.js';
3
3
  import type { PageConfigRuntime } from '../../../shared/page-configs/PageConfig.js';
4
4
  import { type AnalysisResult } from '../../../shared/getPageFiles/analyzePageClientSide.js';
5
- import type { GlobalContext } from '../globalContext.js';
6
- declare function analyzePage(pageFilesAll: PageFile[], pageConfig: null | PageConfigRuntime, pageId: string, globalContext: GlobalContext): Promise<AnalysisResult>;
5
+ import type { GlobalContextInternal } from '../globalContext.js';
6
+ declare function analyzePage(pageFilesAll: PageFile[], pageConfig: null | PageConfigRuntime, pageId: string, globalContext: GlobalContextInternal): Promise<AnalysisResult>;
@@ -1,7 +1,7 @@
1
1
  export { assertNoInfiniteHttpRedirect };
2
2
  import { assert, assertUsage, getGlobalObject } from '../../utils.js';
3
3
  import pc from '@brillout/picocolors';
4
- const globalObject = getGlobalObject('assertNoInfiniteHttpRedirect.ts', {
4
+ const globalObject = getGlobalObject('createHttpResponse/assertNoInfiniteHttpRedirect.ts', {
5
5
  redirectGraph: {}
6
6
  });
7
7
  function assertNoInfiniteHttpRedirect(urlRedirectTarget, urlLogical) {
@@ -3,6 +3,7 @@ export { createHttpResponsePageContextJson };
3
3
  export { createHttpResponseError };
4
4
  export { createHttpResponseRedirect };
5
5
  export { createHttpResponseFavicon404 };
6
+ export { createHttpResponseBaseIsMissing };
6
7
  export type { HttpResponse };
7
8
  import type { GetPageAssets } from './getPageAssets.js';
8
9
  import type { HtmlRender } from '../html/renderHtml.js';
@@ -28,6 +29,7 @@ declare function createHttpResponsePage(htmlRender: HtmlRender, renderHook: null
28
29
  abortStatusCode?: AbortStatusCode;
29
30
  }): Promise<HttpResponse>;
30
31
  declare function createHttpResponseFavicon404(): HttpResponse;
32
+ declare function createHttpResponseBaseIsMissing(urlOriginal: string, baseServer: string): HttpResponse;
31
33
  declare function createHttpResponseError(pageContext: null | {
32
34
  _pageFilesAll: PageFile[];
33
35
  _pageConfigs: PageConfigRuntime[];
@@ -3,6 +3,7 @@ export { createHttpResponsePageContextJson };
3
3
  export { createHttpResponseError };
4
4
  export { createHttpResponseRedirect };
5
5
  export { createHttpResponseFavicon404 };
6
+ export { createHttpResponseBaseIsMissing };
6
7
  import { assert, assertWarning, escapeHtml } from '../utils.js';
7
8
  import { getErrorPageId, isErrorPage } from '../../../shared/error-page.js';
8
9
  import { getHttpResponseBody, getHttpResponseBodyStreamHandlers } from './getHttpResponseBody.js';
@@ -38,6 +39,29 @@ function createHttpResponseFavicon404() {
38
39
  const httpResponse = createHttpResponse(404, 'text/html;charset=utf-8', [], "<p>No favicon.ico found.</p><script>console.log('This HTTP response was generated by Vike.')</script>");
39
40
  return httpResponse;
40
41
  }
42
+ function createHttpResponseBaseIsMissing(urlOriginal, baseServer) {
43
+ const httpResponse = createHttpResponse(
44
+ // We use the error code `500` to signal a failing state because this HTTP response should never be used, see https://vike.dev/base-url#setup
45
+ // In other words: this HTTP response is expected to be generated but isn't expected to be actually used.
46
+ 500, 'text/html;charset=utf-8', [], `
47
+ <h1>Error: Base URL is missing</h1>
48
+ <p>
49
+ <a href="https://vike.dev/renderPage"><code>renderPage(pageContextInit)</code></a> called with <code>pageContextInit.urlOriginal===${JSON.stringify(urlOriginal)}</code> which doesn't start with the Base URL <code>${baseServer}</code>.
50
+ </p>
51
+ <p>
52
+ See <a href="https://vike.dev/base-url#setup">vike.dev/base-url#setup</a> for how to properly setup your server while using a Base URL.
53
+ </p>
54
+ <style>
55
+ code {
56
+ font-family: monospace;
57
+ background-color: #eaeaea;
58
+ padding: 3px 5px;
59
+ border-radius: 4px;
60
+ }
61
+ </style>
62
+ `);
63
+ return httpResponse;
64
+ }
41
65
  function createHttpResponseError(pageContext) {
42
66
  const reason = (() => {
43
67
  if (!pageContext) {
@@ -1,7 +1,7 @@
1
1
  export { executeOnBeforeRenderAndDataHooks };
2
- import { type PageConfigUserFriendly } from '../../../shared/getPageFiles.js';
2
+ import { type PageConfigUserFriendlyOld } from '../../../shared/getPageFiles.js';
3
3
  import { type PageContextForUserConsumptionServerSide } from './preparePageContextForUserConsumptionServerSide.js';
4
4
  declare function executeOnBeforeRenderAndDataHooks(pageContext: {
5
5
  pageId: string;
6
6
  _pageContextAlreadyProvidedByOnPrerenderHook?: true;
7
- } & PageConfigUserFriendly & PageContextForUserConsumptionServerSide): Promise<void>;
7
+ } & PageConfigUserFriendlyOld & PageContextForUserConsumptionServerSide): Promise<void>;
@@ -5,7 +5,7 @@ export type { GetPageAssets };
5
5
  export type { PageContextGetPageAssets };
6
6
  import { type MediaType } from './inferMediaType.js';
7
7
  import type { ClientDependency } from '../../../shared/getPageFiles/analyzePageClientSide/ClientDependency.js';
8
- import type { GlobalContext } from '../globalContext.js';
8
+ import type { GlobalContextInternal } from '../globalContext.js';
9
9
  import type { ResolveClientEntriesDev } from '../../plugin/shared/resolveClientEntriesDev.js';
10
10
  type PageAsset = {
11
11
  src: string;
@@ -18,7 +18,7 @@ type PageContextGetPageAssets = {
18
18
  _baseServer: string;
19
19
  _baseAssets: string | null;
20
20
  _includeAssetsImportedByServer: boolean;
21
- _globalContext: GlobalContext;
21
+ _globalContext: GlobalContextInternal;
22
22
  };
23
23
  declare function getPageAssets(pageContext: PageContextGetPageAssets, clientDependencies: ClientDependency[], clientEntries: string[]): Promise<PageAsset[]>;
24
24
  declare function setResolveClientEntriesDev(resolveClientEntriesDev: ResolveClientEntriesDev): void;
@@ -6,7 +6,7 @@ import { retrieveAssetsProd } from './getPageAssets/retrieveAssetsProd.js';
6
6
  import { inferMediaType } from './inferMediaType.js';
7
7
  import { getManifestEntry } from './getPageAssets/getManifestEntry.js';
8
8
  import { sortPageAssetsForEarlyHintsHeader } from './getPageAssets/sortPageAssetsForEarlyHintsHeader.js';
9
- const globalObject = getGlobalObject('getPageAssets.ts', {
9
+ const globalObject = getGlobalObject('renderPage/getPageAssets.ts', {
10
10
  resolveClientEntriesDev: null
11
11
  });
12
12
  async function getPageAssets(pageContext, clientDependencies, clientEntries) {