vike 0.4.224 → 0.4.225-commit-2b7971f

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 (163) hide show
  1. package/dist/cjs/client/shared/getPageContextProxyForUser.js +3 -66
  2. package/dist/cjs/node/api/build.js +1 -1
  3. package/dist/cjs/node/api/context.js +4 -4
  4. package/dist/cjs/node/api/dev.js +1 -1
  5. package/dist/cjs/node/api/prepareViteApiCall.js +25 -14
  6. package/dist/cjs/node/api/prerender.js +1 -1
  7. package/dist/cjs/node/api/preview.js +1 -1
  8. package/dist/cjs/node/cli/context.js +5 -4
  9. package/dist/cjs/node/cli/entry.js +3 -3
  10. package/dist/cjs/node/cli/parseCli.js +43 -15
  11. package/dist/cjs/node/cli/utils.js +1 -1
  12. package/dist/cjs/node/plugin/plugins/build/pluginBuildEntry.js +1 -1
  13. package/dist/cjs/node/plugin/plugins/commonConfig.js +16 -11
  14. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -4
  15. package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +14 -10
  17. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -2
  18. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  19. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +139 -84
  20. package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
  21. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +10 -1
  22. package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
  23. package/dist/cjs/node/plugin/shared/getEnvVarObject.js +9 -8
  24. package/dist/cjs/node/plugin/shared/loggerNotProd/log.js +1 -1
  25. package/dist/cjs/node/prerender/context.js +1 -1
  26. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +33 -18
  27. package/dist/cjs/node/prerender/runPrerender.js +12 -18
  28. package/dist/cjs/node/prerender/utils.js +1 -1
  29. package/dist/cjs/node/runtime/globalContext.js +9 -5
  30. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  31. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +67 -14
  32. package/dist/cjs/node/runtime/html/stream.js +7 -0
  33. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +14 -5
  34. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -4
  35. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +6 -1
  36. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  37. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  38. package/dist/cjs/node/runtime/renderPage.js +19 -38
  39. package/dist/cjs/node/runtime/utils.js +0 -1
  40. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +10 -8
  41. package/dist/cjs/node/shared/assertV1Design.js +2 -1
  42. package/dist/cjs/node/shared/utils.js +0 -1
  43. package/dist/cjs/shared/NOT_SERIALIZABLE.js +5 -0
  44. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +19 -2
  45. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +8 -5
  46. package/dist/cjs/shared/page-configs/helpers.js +1 -1
  47. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  48. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +9 -5
  49. package/dist/cjs/shared/route/loadPageRoutes.js +2 -2
  50. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  51. package/dist/cjs/utils/assert.js +12 -5
  52. package/dist/cjs/utils/assertSingleInstance.js +11 -17
  53. package/dist/cjs/utils/debug.js +2 -1
  54. package/dist/cjs/utils/getRandomId.js +1 -1
  55. package/dist/cjs/utils/normalizeHeaders.js +1 -1
  56. package/dist/cjs/utils/objectAssign.js +7 -2
  57. package/dist/cjs/utils/parseUrl-extras.js +1 -0
  58. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +3 -1
  59. package/dist/esm/client/client-routing-runtime/createPageContext.js +4 -3
  60. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +1 -1
  61. package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +6 -3
  62. package/dist/esm/client/server-routing-runtime/getPageContext.js +6 -3
  63. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +1 -11
  64. package/dist/esm/client/shared/getPageContextProxyForUser.js +4 -67
  65. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
  66. package/dist/esm/node/api/build.js +1 -1
  67. package/dist/esm/node/api/context.d.ts +8 -2
  68. package/dist/esm/node/api/context.js +4 -4
  69. package/dist/esm/node/api/dev.js +1 -1
  70. package/dist/esm/node/api/prepareViteApiCall.d.ts +2 -2
  71. package/dist/esm/node/api/prepareViteApiCall.js +25 -14
  72. package/dist/esm/node/api/prerender.js +1 -1
  73. package/dist/esm/node/api/preview.js +1 -1
  74. package/dist/esm/node/api/types.d.ts +7 -0
  75. package/dist/esm/node/cli/context.d.ts +4 -2
  76. package/dist/esm/node/cli/context.js +5 -4
  77. package/dist/esm/node/cli/entry.js +4 -4
  78. package/dist/esm/node/cli/parseCli.d.ts +3 -0
  79. package/dist/esm/node/cli/parseCli.js +44 -16
  80. package/dist/esm/node/cli/utils.d.ts +1 -1
  81. package/dist/esm/node/cli/utils.js +1 -1
  82. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.js +2 -2
  83. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -0
  84. package/dist/esm/node/plugin/plugins/commonConfig.js +16 -11
  85. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -4
  86. package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
  87. package/dist/esm/node/plugin/plugins/importUserCode/index.js +15 -11
  88. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +3 -1
  89. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +10 -2
  90. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +5 -2
  91. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -12
  92. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +3 -2
  93. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +141 -85
  94. package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
  95. package/dist/esm/node/plugin/plugins/setGlobalContext.js +11 -2
  96. package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
  97. package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
  98. package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +3 -1
  99. package/dist/esm/node/plugin/shared/getEnvVarObject.js +9 -8
  100. package/dist/esm/node/plugin/shared/loggerNotProd/log.js +2 -2
  101. package/dist/esm/node/prerender/context.js +1 -1
  102. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +2 -1
  103. package/dist/esm/node/prerender/resolvePrerenderConfig.js +34 -19
  104. package/dist/esm/node/prerender/runPrerender.js +13 -19
  105. package/dist/esm/node/prerender/utils.d.ts +1 -1
  106. package/dist/esm/node/prerender/utils.js +1 -1
  107. package/dist/esm/node/runtime/globalContext.d.ts +1 -1
  108. package/dist/esm/node/runtime/globalContext.js +10 -6
  109. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +6 -3
  110. package/dist/esm/node/runtime/html/serializePageContextClientSide.d.ts +2 -0
  111. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +69 -15
  112. package/dist/esm/node/runtime/html/stream.js +7 -0
  113. package/dist/esm/node/runtime/index-deprecated.d.ts +1 -3
  114. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +3 -1
  115. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +15 -6
  116. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +3 -1
  117. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -4
  118. package/dist/esm/node/runtime/renderPage/logErrorHint.js +6 -1
  119. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +3 -0
  120. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +32 -6
  121. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +18 -12
  122. package/dist/esm/node/runtime/renderPage.js +21 -40
  123. package/dist/esm/node/runtime/utils.d.ts +0 -1
  124. package/dist/esm/node/runtime/utils.js +0 -1
  125. package/dist/esm/node/runtime-dev/createDevMiddleware.js +10 -8
  126. package/dist/esm/node/shared/assertV1Design.js +2 -1
  127. package/dist/esm/node/shared/utils.d.ts +0 -1
  128. package/dist/esm/node/shared/utils.js +0 -1
  129. package/dist/esm/shared/NOT_SERIALIZABLE.d.ts +1 -0
  130. package/dist/esm/shared/NOT_SERIALIZABLE.js +2 -0
  131. package/dist/esm/shared/page-configs/Config.d.ts +23 -3
  132. package/dist/esm/shared/page-configs/PageConfig.d.ts +17 -6
  133. package/dist/esm/shared/page-configs/getConfigDefinedAt.d.ts +5 -3
  134. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +20 -3
  135. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +8 -5
  136. package/dist/esm/shared/page-configs/helpers.js +1 -1
  137. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.d.ts +1 -1
  138. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +2 -5
  139. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +3 -3
  140. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +9 -5
  141. package/dist/esm/shared/route/abort.d.ts +2 -2
  142. package/dist/esm/shared/route/loadPageRoutes.js +2 -2
  143. package/dist/esm/shared/types.d.ts +39 -3
  144. package/dist/esm/types/index.d.ts +2 -0
  145. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  146. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  147. package/dist/esm/utils/assert.d.ts +2 -1
  148. package/dist/esm/utils/assert.js +12 -5
  149. package/dist/esm/utils/assertSingleInstance.js +11 -17
  150. package/dist/esm/utils/debug.js +2 -1
  151. package/dist/esm/utils/getRandomId.d.ts +1 -1
  152. package/dist/esm/utils/getRandomId.js +1 -1
  153. package/dist/esm/utils/normalizeHeaders.js +1 -1
  154. package/dist/esm/utils/objectAssign.d.ts +1 -1
  155. package/dist/esm/utils/objectAssign.js +7 -2
  156. package/dist/esm/utils/parseUrl-extras.js +1 -0
  157. package/package.json +6 -3
  158. package/dist/cjs/shared/notSerializable.js +0 -5
  159. package/dist/cjs/utils/projectInfo.js +0 -8
  160. package/dist/esm/shared/notSerializable.d.ts +0 -1
  161. package/dist/esm/shared/notSerializable.js +0 -2
  162. package/dist/esm/utils/projectInfo.d.ts +0 -4
  163. package/dist/esm/utils/projectInfo.js +0 -5
@@ -108,15 +108,9 @@ async function renderPageAlreadyPrepared(pageContextInit, globalContext, httpReq
108
108
  // https://stackoverflow.com/questions/9683007/detect-infinite-http-redirect-loop-on-server-side
109
109
  0);
110
110
  let pageContextNominalPageSuccess;
111
- let pageContextNominalPageInit = {};
112
- {
113
- const pageContextFromAllRewrites = (0, abort_js_1.getPageContextFromAllRewrites)(pageContextsFromRewrite);
114
- (0, utils_js_1.objectAssign)(pageContextNominalPageInit, pageContextFromAllRewrites);
115
- }
116
- {
117
- const pageContextInitEnhanced = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextNominalPageInit._urlRewrite, httpRequestId);
118
- (0, utils_js_1.objectAssign)(pageContextNominalPageInit, pageContextInitEnhanced);
119
- }
111
+ const pageContextFromAllRewrites = (0, abort_js_1.getPageContextFromAllRewrites)(pageContextsFromRewrite);
112
+ const pageContextNominalPageInit = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, pageContextFromAllRewrites._urlRewrite, httpRequestId);
113
+ (0, utils_js_1.objectAssign)(pageContextNominalPageInit, pageContextFromAllRewrites);
120
114
  let errNominalPage;
121
115
  {
122
116
  try {
@@ -247,7 +241,7 @@ function prettyUrl(url) {
247
241
  return picocolors_1.default.bold(decodeURI(url));
248
242
  }
249
243
  function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
250
- const pageContextWithError = createPageContext(pageContextInit);
244
+ const pageContextWithError = (0, renderPageAlreadyRouted_js_1.createPageContext)(pageContextInit, false);
251
245
  const httpResponse = (0, createHttpResponse_js_1.createHttpResponseError)(pageContext);
252
246
  (0, utils_js_1.objectAssign)(pageContextWithError, {
253
247
  httpResponse,
@@ -255,13 +249,6 @@ function getPageContextHttpResponseError(err, pageContextInit, pageContext) {
255
249
  });
256
250
  return pageContextWithError;
257
251
  }
258
- function createPageContext(pageContextInit) {
259
- const pageContext = {
260
- _isPageContextObject: true
261
- };
262
- Object.assign(pageContext, pageContextInit);
263
- return pageContext;
264
- }
265
252
  async function renderPageNominal(pageContext) {
266
253
  (0, utils_js_1.objectAssign)(pageContext, { errorWhileRendering: null });
267
254
  // Route
@@ -286,10 +273,8 @@ async function renderPageNominal(pageContext) {
286
273
  return pageContextAfterRender;
287
274
  }
288
275
  async function getPageContextErrorPageInit(pageContextInit, globalContext, errNominalPage, pageContextNominalPagePartial, httpRequestId) {
289
- const pageContextInitEnhanced = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, null, httpRequestId);
276
+ const pageContext = await getPageContextInitEnhancedSSR(pageContextInit, globalContext, null, httpRequestId);
290
277
  (0, utils_js_1.assert)(errNominalPage);
291
- const pageContext = {};
292
- (0, utils_js_1.objectAssign)(pageContext, pageContextInitEnhanced);
293
278
  (0, utils_js_1.objectAssign)(pageContext, {
294
279
  is404: false,
295
280
  errorWhileRendering: errNominalPage,
@@ -303,7 +288,7 @@ async function getPageContextErrorPageInit(pageContextInit, globalContext, errNo
303
288
  }
304
289
  async function getPageContextInitEnhancedSSR(pageContextInit, globalContext, urlRewrite, httpRequestId) {
305
290
  const { isClientSideNavigation, _urlHandler } = handlePageContextUrl(pageContextInit.urlOriginal);
306
- const pageContextInitEnhanced = await (0, renderPageAlreadyRouted_js_1.getPageContextInitEnhanced)(pageContextInit, globalContext, {
291
+ const pageContextInitEnhanced = await (0, renderPageAlreadyRouted_js_1.getPageContextInitEnhanced)(pageContextInit, globalContext, false, {
307
292
  ssr: {
308
293
  urlRewrite,
309
294
  urlHandler: _urlHandler,
@@ -346,8 +331,8 @@ async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
346
331
  if (!urlNormalized)
347
332
  return null;
348
333
  (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);
350
- const pageContextHttpResponse = createPageContext(pageContextInit);
334
+ const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)({ url: urlNormalized, statusCode: 301 }, pageContextInit);
335
+ const pageContextHttpResponse = (0, renderPageAlreadyRouted_js_1.createPageContext)(pageContextInit, false);
351
336
  (0, utils_js_1.objectAssign)(pageContextHttpResponse, { httpResponse });
352
337
  return pageContextHttpResponse;
353
338
  }
@@ -388,15 +373,17 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
388
373
  (0, utils_js_1.assert)(urlTarget !== pageContextInit.urlOriginal);
389
374
  }
390
375
  (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);
392
- const pageContextHttpResponse = createPageContext(pageContextInit);
376
+ const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)({ url: urlTarget, statusCode: 301 }, pageContextInit);
377
+ const pageContextHttpResponse = (0, renderPageAlreadyRouted_js_1.createPageContext)(pageContextInit, false);
393
378
  (0, utils_js_1.objectAssign)(pageContextHttpResponse, { httpResponse });
394
379
  return pageContextHttpResponse;
395
380
  }
396
381
  function normalize(url) {
397
382
  return url || '/';
398
383
  }
399
- async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextInit,
384
+ async function handleAbortError(errAbort, pageContextsFromRewrite,
385
+ // The original `pageContextInit` object passed to `renderPage(pageContextInit)`
386
+ pageContextInit,
400
387
  // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageInit to it: we only use some pageContextNominalPageInit information.
401
388
  pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalContext) {
402
389
  (0, abort_js_1.logAbortErrorHandled)(errAbort, globalContext.isProduction, pageContextNominalPageInit);
@@ -408,10 +395,10 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
408
395
  const abortCall = pageContextAbort._abortCall;
409
396
  (0, utils_js_1.assert)(abortCall);
410
397
  (0, utils_js_1.assertUsage)(errorPageId, `You called ${picocolors_1.default.cyan(abortCall)} but you didn't define an error page, make sure to define one https://vike.dev/error-page`);
411
- const pageContext = createPageContext({});
398
+ const pageContext = (0, renderPageAlreadyRouted_js_1.createPageContext)({}, false);
412
399
  (0, utils_js_1.objectAssign)(pageContext, { pageId: errorPageId });
413
400
  (0, utils_js_1.objectAssign)(pageContext, pageContextAbort);
414
- (0, utils_js_1.objectAssign)(pageContext, pageContextErrorPageInit);
401
+ (0, utils_js_1.objectAssign)(pageContext, pageContextErrorPageInit, true);
415
402
  (0, utils_js_1.objectAssign)(pageContext, await (0, loadUserFilesServerSide_js_1.loadUserFilesServerSide)(pageContext));
416
403
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
417
404
  pageContextSerialized = (0, serializePageContextClientSide_js_1.serializePageContextClientSide)(pageContext);
@@ -432,15 +419,9 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
432
419
  return { pageContextReturn };
433
420
  }
434
421
  if (pageContextAbort._urlRedirect) {
435
- const pageContextReturn = createPageContext(pageContextInit);
422
+ const pageContextReturn = (0, renderPageAlreadyRouted_js_1.createPageContext)(pageContextInit, false);
436
423
  (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
- })());
424
+ const httpResponse = (0, createHttpResponse_js_1.createHttpResponseRedirect)(pageContextAbort._urlRedirect, pageContextInit);
444
425
  (0, utils_js_1.objectAssign)(pageContextReturn, { httpResponse });
445
426
  return { pageContextReturn };
446
427
  }
@@ -453,7 +434,7 @@ async function checkBaseUrl(pageContextInit, globalContext) {
453
434
  const { isBaseMissing } = (0, utils_js_1.parseUrl)(urlOriginal, baseServer);
454
435
  if (!isBaseMissing)
455
436
  return;
456
- const pageContext = createPageContext(pageContextInit);
437
+ const pageContext = (0, renderPageAlreadyRouted_js_1.createPageContext)(pageContextInit, false);
457
438
  const httpResponse = (0, createHttpResponse_js_1.createHttpResponseBaseIsMissing)(urlOriginal, baseServer);
458
439
  (0, utils_js_1.objectAssign)(pageContext, {
459
440
  httpResponse,
@@ -466,7 +447,7 @@ function renderInvalidRequest(pageContextInit) {
466
447
  const urlPathnameWithBase = (0, utils_js_1.parseUrl)(pageContextInit.urlOriginal, '/').pathname;
467
448
  assertIsNotViteRequest(urlPathnameWithBase, pageContextInit.urlOriginal);
468
449
  if (urlPathnameWithBase.endsWith('/favicon.ico')) {
469
- const pageContext = createPageContext(pageContextInit);
450
+ const pageContext = (0, renderPageAlreadyRouted_js_1.createPageContext)(pageContextInit, false);
470
451
  const httpResponse = (0, createHttpResponse_js_1.createHttpResponseFavicon404)();
471
452
  (0, utils_js_1.objectAssign)(pageContext, { httpResponse });
472
453
  (0, utils_js_1.checkType)(pageContext);
@@ -31,7 +31,6 @@ __exportStar(require("../../utils/parseUrl.js"), exports);
31
31
  __exportStar(require("../../utils/parseUrl-extras.js"), exports);
32
32
  __exportStar(require("../../utils/slice.js"), exports);
33
33
  __exportStar(require("../../utils/sorter.js"), exports);
34
- __exportStar(require("../../utils/projectInfo.js"), exports);
35
34
  __exportStar(require("../../utils/isArray.js"), exports);
36
35
  __exportStar(require("../../utils/isObject.js"), exports);
37
36
  __exportStar(require("../../utils/objectAssign.js"), exports);
@@ -11,16 +11,18 @@ const globalContext_js_1 = require("../runtime/globalContext.js");
11
11
  */
12
12
  async function createDevMiddleware(options = {}) {
13
13
  (0, globalContext_js_1.setGlobalContext_isProduction)(false);
14
- const viteConfigFromOptions = {
15
- ...options.viteConfig,
16
- server: {
17
- ...options.viteConfig?.server,
18
- middlewareMode: options.viteConfig?.server?.middlewareMode ?? true
14
+ const optionsMod = {
15
+ ...options,
16
+ viteConfig: {
17
+ ...options.viteConfig,
18
+ root: options.root ?? options.viteConfig?.root,
19
+ server: {
20
+ ...options.viteConfig?.server,
21
+ middlewareMode: options.viteConfig?.server?.middlewareMode ?? true
22
+ }
19
23
  }
20
24
  };
21
- if (options.root)
22
- viteConfigFromOptions.root = options.root;
23
- const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(viteConfigFromOptions, 'dev');
25
+ const { viteConfigEnhanced } = await (0, prepareViteApiCall_js_1.prepareViteApiCall)(optionsMod, 'dev');
24
26
  const server = await (0, vite_1.createServer)(viteConfigEnhanced);
25
27
  const devMiddleware = server.middlewares;
26
28
  return { devMiddleware, viteServer: server, viteConfig: server.config };
@@ -12,7 +12,8 @@ function assertV1Design(pageConfigs, pageFilesAll) {
12
12
  (0, utils_js_1.assert)(pageConfigs.length > 0);
13
13
  const filesV1 = (0, utils_js_1.unique)(pageConfigs
14
14
  .map((p) => Object.values(p.configValueSources).map((sources) => sources
15
- .map((c) => c.definedAtFilePath.filePathAbsoluteUserRootDir)
15
+ .map((c) => c.definedAt)
16
+ .map((definedAt) => (definedAt.definedBy ? null : definedAt.filePathAbsoluteUserRootDir))
16
17
  .filter(utils_js_1.isNotNullish)
17
18
  .map((filePathToShowToUser) => indent + filePathToShowToUser)))
18
19
  .flat(2));
@@ -19,7 +19,6 @@ const assertIsNotBrowser_js_1 = require("../../utils/assertIsNotBrowser.js");
19
19
  __exportStar(require("../../utils/assert.js"), exports);
20
20
  __exportStar(require("../../utils/getFileExtension.js"), exports);
21
21
  __exportStar(require("../../utils/isPlainObject.js"), exports);
22
- __exportStar(require("../../utils/projectInfo.js"), exports);
23
22
  __exportStar(require("../../utils/checkType.js"), exports);
24
23
  __exportStar(require("../../utils/hasProp.js"), exports);
25
24
  __exportStar(require("../../utils/objectAssign.js"), exports);
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NOT_SERIALIZABLE = void 0;
4
+ // TODO: move to ../node/runtime/html/NOT_SERIALIZABLE.ts once code is distributed as ESM
5
+ exports.NOT_SERIALIZABLE = '__VIKE__NOT_SERIALIZABLE__';
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getConfigDefinedAt = getConfigDefinedAt;
7
7
  exports.getConfigDefinedAtOptional = getConfigDefinedAtOptional;
8
8
  exports.getDefinedAtString = getDefinedAtString;
9
+ exports.getDefinedByString = getDefinedByString;
9
10
  const utils_js_1 = require("../utils.js");
10
11
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
11
12
  const getExportPath_js_1 = require("./getExportPath.js");
@@ -33,8 +34,10 @@ function getDefinedAtString(definedAtData, configName) {
33
34
  }
34
35
  (0, utils_js_1.assert)(files.length >= 1);
35
36
  const definedAtString = files
36
- .map((source) => {
37
- const { filePathToShowToUser, fileExportPathToShowToUser } = source;
37
+ .map((definedAt) => {
38
+ if (definedAt.definedBy)
39
+ return getDefinedByString(definedAt, configName);
40
+ const { filePathToShowToUser, fileExportPathToShowToUser } = definedAt;
38
41
  let s = filePathToShowToUser;
39
42
  const exportPath = (0, getExportPath_js_1.getExportPath)(fileExportPathToShowToUser, configName);
40
43
  if (exportPath) {
@@ -45,3 +48,17 @@ function getDefinedAtString(definedAtData, configName) {
45
48
  .join(' / ');
46
49
  return definedAtString;
47
50
  }
51
+ function getDefinedByString(definedAt, configName) {
52
+ if (definedAt.definedBy === 'api') {
53
+ return `API call ${picocolors_1.default.cyan(`${definedAt.operation}({ vikeConfig: { ${configName} } })`)}`;
54
+ }
55
+ const { definedBy } = definedAt;
56
+ if (definedBy === 'cli') {
57
+ return `CLI option ${picocolors_1.default.cyan(`--${configName}`)}`;
58
+ }
59
+ if (definedBy === 'env') {
60
+ return `environment variable ${picocolors_1.default.cyan(`VIKE_CONFIG="{${configName}}"`)}`;
61
+ }
62
+ (0, utils_js_1.checkType)(definedBy);
63
+ (0, utils_js_1.assert)(false);
64
+ }
@@ -33,7 +33,7 @@ function getConfigValue(pageConfig, configName) {
33
33
  return {
34
34
  type: 'standard',
35
35
  value: configValueSource.value,
36
- definedAtData: getDefinedAtFile(configValueSource)
36
+ definedAtData: getDefinedAt(configValueSource)
37
37
  };
38
38
  }
39
39
  else {
@@ -53,13 +53,16 @@ function mergeCumulative(configValueSources) {
53
53
  (0, utils_js_1.assert)(configValueSource.configEnv.config === true);
54
54
  (0, utils_js_1.assert)(configValueSource.valueIsLoaded);
55
55
  value.push(configValueSource.value);
56
- definedAtData.push(getDefinedAtFile(configValueSource));
56
+ definedAtData.push(getDefinedAt(configValueSource));
57
57
  });
58
58
  return { value, definedAtData };
59
59
  }
60
- function getDefinedAtFile(configValueSource) {
60
+ function getDefinedAt(configValueSource) {
61
+ const { definedAt } = configValueSource;
62
+ if (definedAt.definedBy)
63
+ return definedAt;
61
64
  return {
62
- filePathToShowToUser: configValueSource.definedAtFilePath.filePathToShowToUser,
63
- fileExportPathToShowToUser: configValueSource.definedAtFilePath.fileExportPathToShowToUser
65
+ filePathToShowToUser: definedAt.filePathToShowToUser,
66
+ fileExportPathToShowToUser: definedAt.fileExportPathToShowToUser
64
67
  };
65
68
  }
@@ -14,7 +14,7 @@ function getConfigValueFilePathToShowToUser(definedAtData) {
14
14
  // A unique file path only exists if the config value isn't cumulative nor computed:
15
15
  // - cumulative config values have multiple file paths
16
16
  // - computed values don't have any file path
17
- if (!definedAtData || (0, utils_js_1.isArray)(definedAtData))
17
+ if (!definedAtData || (0, utils_js_1.isArray)(definedAtData) || definedAtData.definedBy)
18
18
  return null;
19
19
  const { filePathToShowToUser } = definedAtData;
20
20
  (0, utils_js_1.assert)(filePathToShowToUser);
@@ -6,10 +6,6 @@ const utils_js_1 = require("../../utils.js");
6
6
  const getConfigDefinedAt_js_1 = require("../getConfigDefinedAt.js");
7
7
  const parse_1 = require("@brillout/json-serializer/parse");
8
8
  const assertPlusFileExport_js_1 = require("../assertPlusFileExport.js");
9
- function parseConfigValuesSerialized(configValuesSerialized) {
10
- const configValues = parseConfigValuesSerialized_tmp(configValuesSerialized);
11
- return configValues;
12
- }
13
9
  function parsePageConfigs(pageConfigsSerialized, pageConfigGlobalSerialized) {
14
10
  // pageConfigs
15
11
  const pageConfigs = pageConfigsSerialized.map((pageConfigSerialized) => {
@@ -45,7 +41,7 @@ function assertRouteConfigValue(configValues) {
45
41
  }
46
42
  */
47
43
  }
48
- function parseConfigValuesSerialized_tmp(configValuesSerialized) {
44
+ function parseConfigValuesSerialized(configValuesSerialized) {
49
45
  const configValues = {};
50
46
  Object.entries(configValuesSerialized).forEach(([configName, configValueSeriliazed]) => {
51
47
  let configValue;
@@ -102,6 +98,7 @@ function parseValueSerialized(valueSerialized, configName, getDefinedAtFile) {
102
98
  if (valueSerialized.type === 'plus-file') {
103
99
  const definedAtFile = getDefinedAtFile();
104
100
  const { exportValues } = valueSerialized;
101
+ (0, utils_js_1.assert)(!definedAtFile.definedBy);
105
102
  (0, assertPlusFileExport_js_1.assertPlusFileExport)(exportValues, definedAtFile.filePathToShowToUser, configName);
106
103
  let value;
107
104
  let valueWasFound = false;
@@ -52,7 +52,7 @@ function serializeConfigValues(pageConfig, importStatements, filesEnv, isEnvMatc
52
52
  function getValueSerializedFromSource(configValueSource, configName, importStatements, filesEnv) {
53
53
  let valueData;
54
54
  if (configValueSource.valueIsLoaded && !configValueSource.valueIsLoadedWithImport) {
55
- valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements, filesEnv, configValueSource.configEnv);
55
+ valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAt, importStatements, filesEnv, configValueSource.configEnv);
56
56
  }
57
57
  else {
58
58
  valueData = getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName);
@@ -103,8 +103,9 @@ function serializeConfigValue(configValueBase, valueData, configName, lines, tab
103
103
  }
104
104
  function getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName) {
105
105
  (0, utils_js_1.assert)(!configValueSource.valueIsFilePath);
106
- const { valueIsDefinedByPlusValueFile, definedAtFilePath, configEnv } = configValueSource;
107
- const { filePathAbsoluteVite, fileExportName } = definedAtFilePath;
106
+ const { valueIsDefinedByPlusValueFile, definedAt, configEnv } = configValueSource;
107
+ (0, utils_js_1.assert)(!definedAt.definedBy);
108
+ const { filePathAbsoluteVite, fileExportName } = definedAt;
108
109
  if (valueIsDefinedByPlusValueFile)
109
110
  (0, utils_js_1.assert)(fileExportName === undefined);
110
111
  const { importName } = addImportStatement(importStatements, filePathAbsoluteVite, fileExportName || '*', filesEnv, configEnv, configName);
@@ -231,9 +232,12 @@ function getConfigValuesBase(pageConfig, isEnvMatch, isEager) {
231
232
  return [...fromComputed, ...fromSources].filter((r) => r !== 'SKIP');
232
233
  }
233
234
  function getDefinedAtFileSource(source) {
235
+ const { definedAt } = source;
236
+ if (definedAt.definedBy)
237
+ return definedAt;
234
238
  const definedAtFile = {
235
- filePathToShowToUser: source.definedAtFilePath.filePathToShowToUser,
236
- fileExportPathToShowToUser: source.definedAtFilePath.fileExportPathToShowToUser
239
+ filePathToShowToUser: definedAt.filePathToShowToUser,
240
+ fileExportPathToShowToUser: definedAt.fileExportPathToShowToUser
237
241
  };
238
242
  return definedAtFile;
239
243
  }
@@ -62,11 +62,11 @@ function getPageRoutes(filesystemRoots, pageFilesAll, pageConfigs, allPageIds) {
62
62
  if (!pageRoute) {
63
63
  const { routeFilesystem } = pageConfig;
64
64
  (0, utils_js_1.assert)(routeFilesystem);
65
- const { routeString, definedBy } = routeFilesystem;
65
+ const { routeString, definedAtLocation } = routeFilesystem;
66
66
  (0, utils_js_1.assert)(routeFilesystem.routeString.startsWith('/'));
67
67
  pageRoute = {
68
68
  pageId,
69
- routeFilesystemDefinedBy: definedBy,
69
+ routeFilesystemDefinedBy: definedAtLocation,
70
70
  comesFromV1PageConfig,
71
71
  routeString,
72
72
  routeDefinedAtString: null,
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.224';
5
+ exports.PROJECT_VERSION = '0.4.225-commit-2b7971f';
@@ -17,7 +17,7 @@ const assertSingleInstance_js_1 = require("./assertSingleInstance.js");
17
17
  const createErrorWithCleanStackTrace_js_1 = require("./createErrorWithCleanStackTrace.js");
18
18
  const getGlobalObject_js_1 = require("./getGlobalObject.js");
19
19
  const isObject_js_1 = require("./isObject.js");
20
- const projectInfo_js_1 = require("./projectInfo.js");
20
+ const PROJECT_VERSION_js_1 = require("./PROJECT_VERSION.js");
21
21
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
22
22
  const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('utils/assert.ts', {
23
23
  alreadyLogged: new Set(),
@@ -34,7 +34,7 @@ const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('utils/assert.ts'
34
34
  });
35
35
  (0, assertSingleInstance_js_1.assertSingleInstance_onAssertModuleLoad)();
36
36
  const projectTag = `[vike]`;
37
- const projectTagWithVersion = `[vike@${projectInfo_js_1.projectInfo.projectVersion}]`;
37
+ const projectTagWithVersion = `[vike@${PROJECT_VERSION_js_1.PROJECT_VERSION}]`;
38
38
  const bugTag = 'Bug';
39
39
  const numberOfStackTraceLinesToRemove = 2;
40
40
  function assert(condition, debugInfo) {
@@ -47,7 +47,7 @@ function assert(condition, debugInfo) {
47
47
  const debugInfoSerialized = typeof debugInfo === 'string' ? debugInfo : JSON.stringify(debugInfo);
48
48
  return picocolors_1.default.dim(`Debug info (for Vike maintainers; you can ignore this): ${debugInfoSerialized}`);
49
49
  })();
50
- const link = picocolors_1.default.blue('https://github.com/vikejs/vike/issues/new?template=bug.yml');
50
+ const link = picocolors_1.default.underline('https://github.com/vikejs/vike/issues/new?template=bug.yml');
51
51
  let errMsg = [
52
52
  `You stumbled upon a Vike bug. Go to ${link} and copy-paste this error. A maintainer will fix the bug (usually within 24 hours).`,
53
53
  debugStr
@@ -61,7 +61,7 @@ function assert(condition, debugInfo) {
61
61
  globalObject.onBeforeLog?.();
62
62
  throw internalError;
63
63
  }
64
- function assertUsage(condition, errMsg, { showStackTrace } = {}) {
64
+ function assertUsage(condition, errMsg, { showStackTrace, exitOnError } = {}) {
65
65
  if (condition)
66
66
  return;
67
67
  showStackTrace = showStackTrace || globalObject.alwaysShowStackTrace;
@@ -73,7 +73,13 @@ function assertUsage(condition, errMsg, { showStackTrace } = {}) {
73
73
  globalObject.showStackTraceList.add(usageError);
74
74
  }
75
75
  globalObject.onBeforeLog?.();
76
- throw usageError;
76
+ if (!exitOnError) {
77
+ throw usageError;
78
+ }
79
+ else {
80
+ console.error(showStackTrace ? usageError : errMsg);
81
+ process.exit(1);
82
+ }
77
83
  }
78
84
  function getProjectError(errMsg) {
79
85
  errMsg = addWhitespace(errMsg);
@@ -187,6 +193,7 @@ function overwriteAssertProductionLogger(logger) {
187
193
  function isBug(err) {
188
194
  return String(err).includes(`[${bugTag}]`);
189
195
  }
196
+ // Called upon `DEBUG=vike:error`
190
197
  function setAlwaysShowStackTrace() {
191
198
  globalObject.alwaysShowStackTrace = true;
192
199
  }
@@ -6,15 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.assertSingleInstance_onClientEntryServerRouting = assertSingleInstance_onClientEntryServerRouting;
7
7
  exports.assertSingleInstance_onClientEntryClientRouting = assertSingleInstance_onClientEntryClientRouting;
8
8
  exports.assertSingleInstance_onAssertModuleLoad = assertSingleInstance_onAssertModuleLoad;
9
- // - Throw error if there are two different versions of vike loaded
9
+ // - Show warning if there are two different Vike versions loaded
10
10
  // - Show warning if entry of Client Routing and entry of Server Routing are both loaded
11
- // - Show warning if vike is loaded twice
11
+ // - Show warning if Vike is loaded twice
12
12
  const unique_js_1 = require("./unique.js");
13
13
  const getGlobalObject_js_1 = require("./getGlobalObject.js");
14
- const projectInfo_js_1 = require("./projectInfo.js");
15
14
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
16
- /* Use original assertUsage() & assertWarning() after all CJS is removed from node_modules/vike/dist/
17
- import { assertUsage, assertWarning } from './assert.js'
15
+ const PROJECT_VERSION_js_1 = require("./PROJECT_VERSION.js");
16
+ /* Use original assertWarning() after all CJS is removed from node_modules/vike/dist/
17
+ import { assertWarning } from './assert.js'
18
18
  */
19
19
  const globalObject = (0, getGlobalObject_js_1.getGlobalObject)('utils/assertSingleInstance.ts', {
20
20
  instances: [],
@@ -25,9 +25,10 @@ const clientNotSingleInstance = 'Client runtime loaded twice https://vike.dev/cl
25
25
  function assertSingleInstance() {
26
26
  {
27
27
  const versions = (0, unique_js_1.unique)(globalObject.instances);
28
- assertUsage(versions.length <= 1,
29
- // DO *NOT* patch vike to remove this error: because of multiple conflicting versions, you *will* eventually encounter insidious issues that hard to debug and potentially a security hazard, see for example https://github.com/vikejs/vike/issues/1108
30
- `vike@${picocolors_1.default.bold(versions[0])} and vike@${picocolors_1.default.bold(versions[1])} loaded but it's forbidden to load different versions`);
28
+ assertWarning(versions.length <= 1,
29
+ // Do *NOT* patch Vike to remove this warning: you *will* eventually encounter the issues listed at https://vike.dev/warning/version-mismatch
30
+ // - This happened before: https://github.com/vikejs/vike/issues/1108#issuecomment-1719061509
31
+ `vike@${picocolors_1.default.bold(versions[0])} and vike@${picocolors_1.default.bold(versions[1])} loaded which is highly discouraged, see ${picocolors_1.default.underline('https://vike.dev/warning/version-mismatch')}`, { onlyOnce: true, showStackTrace: false });
31
32
  }
32
33
  if (globalObject.checkSingleInstance && globalObject.instances.length > 1) {
33
34
  /*/ Not sure whether circular dependency can cause problems? In principle not since client-side code is ESM.
@@ -67,21 +68,14 @@ function assertSingleInstance_onClientEntryClientRouting(isProduction) {
67
68
  }
68
69
  // Called by utils/assert.ts which is (most certainly) loaded by all entries. That way we don't have to call a callback for every entry. (There are a lot of entries: `client/router/`, `client/`, `node/runtime/`, `node/plugin/`, `node/cli`.)
69
70
  function assertSingleInstance_onAssertModuleLoad() {
70
- globalObject.instances.push(projectInfo_js_1.projectInfo.projectVersion);
71
+ globalObject.instances.push(PROJECT_VERSION_js_1.PROJECT_VERSION);
71
72
  assertSingleInstance();
72
73
  }
73
- function assertUsage(condition, errorMessage) {
74
- if (condition) {
75
- return;
76
- }
77
- const errMsg = `[vike][Wrong Usage] ${errorMessage}`;
78
- throw new Error(errMsg);
79
- }
80
74
  function assertWarning(condition, errorMessage, { onlyOnce, showStackTrace }) {
81
75
  if (condition) {
82
76
  return;
83
77
  }
84
- const msg = `[vike][Warning] ${errorMessage}`;
78
+ const msg = `[Vike][Warning] ${errorMessage}`;
85
79
  if (onlyOnce) {
86
80
  const { alreadyLogged } = globalObject;
87
81
  const key = onlyOnce === true ? msg : onlyOnce;
@@ -16,6 +16,8 @@ const isArray_js_1 = require("./isArray.js");
16
16
  // Avoid this to be loaded in the browser. For isomorphic code: instead of `import { createDebugger } from './utils.js'`, use `globalThis.createDebugger()`.
17
17
  (0, assert_js_1.assert)(!(0, isBrowser_js_1.isBrowser)());
18
18
  globalThis.__brillout_debug_createDebugger = createDebugger;
19
+ // We purposely read process.env.DEBUG early, in order to avoid users from the temptation to set process.env.DEBUG with JavaScript, since reading & writing process.env.DEBUG dynamically leads to inconsistencies: for example https://github.com/vikejs/vike/issues/2239
20
+ const DEBUG = getDEBUG() ?? '';
19
21
  const flags = [
20
22
  'vike:crawl',
21
23
  'vike:error',
@@ -150,7 +152,6 @@ function assertFlagsActivated() {
150
152
  });
151
153
  }
152
154
  function getFlagsActivated() {
153
- const DEBUG = getDEBUG() ?? '';
154
155
  const flagsActivated = DEBUG.match(flagRegex) ?? [];
155
156
  const all = DEBUG.includes('vike:*');
156
157
  return { flagsActivated, all };
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRandomId = getRandomId;
4
4
  const assert_js_1 = require("./assert.js");
5
5
  // https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
6
- function getRandomId(length) {
6
+ function getRandomId(length = 12) {
7
7
  let randomId = '';
8
8
  while (randomId.length < length) {
9
9
  randomId += Math.random().toString(36).slice(2);
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeHeaders = normalizeHeaders;
4
4
  const isObject_js_1 = require("./isObject.js");
5
5
  function normalizeHeaders(
6
- /* This type is precise, too precise which can be annoying: e.g. cannot pass a string[][] argument because it doesn't match the more precise [string,string][] type.
6
+ /* This type is too strict which is annoying: cannot pass `string[][]` because it doesn't match the more precise type `[string,string][]`.
7
7
  headersOriginal ConstructorParameters<typeof Headers>[0]
8
8
  */
9
9
  headersOriginal) {
@@ -5,9 +5,14 @@ const assert_js_1 = require("./assert.js");
5
5
  // Same as Object.assign() but:
6
6
  // - With type inference
7
7
  // - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()
8
- function objectAssign(obj, objAddendum) {
8
+ function objectAssign(obj, objAddendum, objAddendumCanBePageContextObject) {
9
9
  if (objAddendum) {
10
- (0, assert_js_1.assert)(!('_isPageContextObject' in objAddendum));
10
+ if (!objAddendumCanBePageContextObject) {
11
+ // We only need this assert() in the rare case when the user is expected to mutate `pageContext` after the Vike hook was executed (and its promise resolved).
12
+ // - The only use case I can think of is the user mutating `pageContext` after the onRenderClient() promise resolved (which can happen when client-side rendering finishes after onRenderClient() resolves). In that case, having Vike await async Vike hooks isn't enough.
13
+ // - IIRC this assert() was mostly needed for preserving the getters added by getPageContextUrlComputed() but we don't need this anymore.
14
+ (0, assert_js_1.assert)(!('_isPageContextObject' in objAddendum));
15
+ }
11
16
  Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
12
17
  }
13
18
  }
@@ -94,6 +94,7 @@ function modifyUrlPathname(url, modifier) {
94
94
  function removeUrlOrigin(url) {
95
95
  const { origin, pathnameOriginal, searchOriginal, hashOriginal } = (0, parseUrl_js_1.parseUrl)(url, '/');
96
96
  const urlModified = (0, parseUrl_js_1.createUrlFromComponents)(null, pathnameOriginal, searchOriginal, hashOriginal);
97
+ (0, assert_js_1.assert)(urlModified.startsWith('/'));
97
98
  return { urlModified, origin };
98
99
  }
99
100
  function setUrlOrigin(url, origin) {
@@ -1,5 +1,8 @@
1
1
  export { createPageContext };
2
2
  declare function createPageContext(urlOriginal: string): Promise<{
3
+ _isPageContextObject: boolean;
4
+ isClientSide: boolean;
5
+ isPrerendering: boolean;
3
6
  urlOriginal: string;
4
7
  _objectCreatedByVike: boolean;
5
8
  _urlHandler: null;
@@ -11,7 +14,6 @@ declare function createPageContext(urlOriginal: string): Promise<{
11
14
  _allPageIds: string[];
12
15
  _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
13
16
  _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
14
- _isPageContextObject: boolean;
15
17
  } & {
16
18
  urlParsed: import("./utils.js").UrlPublic;
17
19
  urlPathname: string;
@@ -4,7 +4,6 @@ import { getPageContextUrlComputed } from '../../shared/getPageContextUrlCompute
4
4
  import { loadPageRoutes } from '../../shared/route/loadPageRoutes.js';
5
5
  import { getBaseServer } from './getBaseServer.js';
6
6
  import { assert, isBaseServer, objectAssign } from './utils.js';
7
- // TODO/now: can we avoid optimizeDeps.exclude of client runtime?
8
7
  // @ts-ignore
9
8
  import * as virtualFileExports from 'virtual:vike:importUserCode:client:client-routing';
10
9
  const { pageFilesAll, allPageIds, pageConfigs, pageConfigGlobal } = getPageConfigsRuntime(virtualFileExports);
@@ -13,6 +12,9 @@ async function createPageContext(urlOriginal) {
13
12
  const baseServer = getBaseServer();
14
13
  assert(isBaseServer(baseServer));
15
14
  const pageContext = {
15
+ _isPageContextObject: true,
16
+ isClientSide: true,
17
+ isPrerendering: false,
16
18
  urlOriginal,
17
19
  _objectCreatedByVike: true,
18
20
  _urlHandler: null,
@@ -23,8 +25,7 @@ async function createPageContext(urlOriginal) {
23
25
  _pageConfigGlobal: pageConfigGlobal,
24
26
  _allPageIds: allPageIds,
25
27
  _pageRoutes: pageRoutes,
26
- _onBeforeRouteHook: onBeforeRouteHook,
27
- _isPageContextObject: true
28
+ _onBeforeRouteHook: onBeforeRouteHook
28
29
  };
29
30
  const pageContextUrlComputed = getPageContextUrlComputed(pageContext);
30
31
  objectAssign(pageContext, pageContextUrlComputed);
@@ -276,7 +276,7 @@ async function renderPageClientSide(renderArgs) {
276
276
  if ('err' in args) {
277
277
  const { err } = args;
278
278
  assert(!('errorWhileRendering' in pageContext));
279
- pageContext.errorWhileRendering = err;
279
+ objectAssign(pageContext, { errorWhileRendering: err });
280
280
  if (isAbortError(err)) {
281
281
  const errAbort = err;
282
282
  logAbortErrorHandled(err, !import.meta.env.DEV, pageContext);
@@ -1,12 +1,15 @@
1
1
  export { getPageContext };
2
2
  declare function getPageContext(): Promise<{
3
- pageId: string;
4
- routeParams: Record<string, string>;
5
- } & {
3
+ _isPageContextObject: boolean;
4
+ isPrerendering: boolean;
5
+ isClientSide: boolean;
6
6
  isHydration: true;
7
7
  isBackwardNavigation: null;
8
8
  _hasPageContextFromServer: true;
9
9
  _hasPageContextFromClient: false;
10
+ } & {
11
+ pageId: string;
12
+ routeParams: Record<string, string>;
10
13
  } & {
11
14
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
12
15
  _pageConfigs: import("../../__internal/index.js").PageConfig[];