vike 0.4.232-commit-134207d → 0.4.232-commit-ec54a7e

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 (25) hide show
  1. package/dist/cjs/node/prerender/runPrerender.js +2 -1
  2. package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +17 -12
  3. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -1
  4. package/dist/cjs/node/runtime/renderPage.js +55 -48
  5. package/dist/cjs/shared/createPageContextShared.js +1 -3
  6. package/dist/cjs/shared/route/index.js +1 -0
  7. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  8. package/dist/esm/client/runtime-client-routing/prefetch.js +2 -2
  9. package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +21 -9
  10. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +11 -4
  11. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +12 -2
  12. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +2 -2
  13. package/dist/esm/node/prerender/runPrerender.d.ts +250 -4
  14. package/dist/esm/node/prerender/runPrerender.js +2 -1
  15. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +14 -5
  16. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +17 -12
  17. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
  18. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +2 -2
  19. package/dist/esm/node/runtime/renderPage.js +56 -49
  20. package/dist/esm/shared/createPageContextShared.js +1 -3
  21. package/dist/esm/shared/hooks/execHook.d.ts +3 -2
  22. package/dist/esm/shared/route/index.js +1 -0
  23. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  24. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  25. package/package.json +1 -1
@@ -67,6 +67,7 @@ const getOutDirs_js_1 = require("../vite/shared/getOutDirs.js");
67
67
  const node_fs_1 = __importDefault(require("node:fs"));
68
68
  const getProxyForPublicUsage_js_1 = require("../../shared/getProxyForPublicUsage.js");
69
69
  const resolveRedirects_js_1 = require("../runtime/renderPage/resolveRedirects.js");
70
+ const utils_js_2 = require("../runtime/utils.js");
70
71
  const docLink = 'https://vike.dev/i18n#pre-rendering';
71
72
  async function runPrerender(options = {}, trigger) {
72
73
  (0, context_js_1.setWasPrerenderRun)(trigger);
@@ -360,7 +361,7 @@ async function createPageContextPrerendering(urlOriginal, prerenderContext, glob
360
361
  routeParams: {},
361
362
  });
362
363
  }
363
- (0, utils_js_1.objectAssign)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
364
+ (0, utils_js_2.augmentType)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
364
365
  let usesClientRouter;
365
366
  {
366
367
  const { pageId } = pageContext;
@@ -10,7 +10,14 @@ const debugPageFiles_js_1 = require("./debugPageFiles.js");
10
10
  const findPageConfig_js_1 = require("../../../shared/page-configs/findPageConfig.js");
11
11
  const analyzePage_js_1 = require("./analyzePage.js");
12
12
  const loadConfigValues_js_1 = require("../../../shared/page-configs/loadConfigValues.js");
13
+ const execHookServer_js_1 = require("./execHookServer.js");
13
14
  async function loadPageConfigsLazyServerSide(pageContext) {
15
+ const pageContextAddendum = await loadPageConfigsLazy(pageContext);
16
+ (0, utils_js_1.objectAssign)(pageContext, pageContextAddendum);
17
+ await (0, execHookServer_js_1.execHookServer)('onCreatePageContext', pageContext);
18
+ return pageContext;
19
+ }
20
+ async function loadPageConfigsLazy(pageContext) {
14
21
  const pageConfig = (0, findPageConfig_js_1.findPageConfig)(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ?
15
22
  const globalContext = pageContext._globalContext;
16
23
  const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
@@ -86,18 +93,16 @@ async function loadPageConfigsLazyServerSide(pageContext) {
86
93
  return pageAssetsOldFormat;
87
94
  },
88
95
  });
89
- {
90
- (0, debugPageFiles_js_1.debugPageFiles)({
91
- pageContext,
92
- isHtmlOnly,
93
- isClientRouting,
94
- pageFilesLoaded,
95
- pageFilesClientSide,
96
- pageFilesServerSide,
97
- clientEntries,
98
- clientDependencies,
99
- });
100
- }
96
+ (0, debugPageFiles_js_1.debugPageFiles)({
97
+ pageContext,
98
+ isHtmlOnly,
99
+ isClientRouting,
100
+ pageFilesLoaded,
101
+ pageFilesClientSide,
102
+ pageFilesServerSide,
103
+ clientEntries,
104
+ clientDependencies,
105
+ });
101
106
  return pageContextAddendum;
102
107
  }
103
108
  async function loadPageUserFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) {
@@ -28,7 +28,7 @@ async function renderPageAlreadyRouted(pageContext) {
28
28
  (0, utils_js_1.assert)(isError ===
29
29
  (pageContext.pageId ===
30
30
  (0, error_page_js_1.getErrorPageId)(pageContext._globalContext._pageFilesAll, pageContext._globalContext._pageConfigs)));
31
- (0, utils_js_1.objectAssign)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
31
+ (0, utils_js_1.augmentType)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
32
32
  if (!isError) {
33
33
  await (0, executeGuardHook_js_1.executeGuardHook)(pageContext, (pageContext) => (0, preparePageContextForPublicUsageServer_js_1.preparePageContextForPublicUsageServer)(pageContext));
34
34
  }
@@ -143,59 +143,66 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
143
143
  else {
144
144
  (0, utils_js_1.assert)(errNominalPage);
145
145
  (0, utils_js_1.assert)(pageContextNominalPageSuccess === undefined);
146
- (0, utils_js_1.assert)(pageContextNominalPageBegin);
147
- (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageContextNominalPageBegin, 'urlOriginal', 'string'));
148
- const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
149
- // Handle `throw redirect()` and `throw render()` while rendering nominal page
150
- if ((0, abort_js_1.isAbortError)(errNominalPage)) {
151
- const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
152
- if (handled.pageContextReturn) {
153
- // - throw redirect()
154
- // - throw render(url)
155
- // - throw render(abortStatusCode) if .pageContext.json request
156
- return handled.pageContextReturn;
157
- }
158
- else {
159
- // - throw render(abortStatusCode) if not .pageContext.json request
160
- }
161
- Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
146
+ return await renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite);
147
+ }
148
+ }
149
+ // When the normal page threw an error
150
+ // - Can be a URL rewrite upon `throw render('/some-url')`
151
+ // - Can be rendering the error page
152
+ // - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
153
+ async function renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite) {
154
+ (0, utils_js_1.assert)(pageContextNominalPageBegin);
155
+ (0, utils_js_1.assert)((0, utils_js_1.hasProp)(pageContextNominalPageBegin, 'urlOriginal', 'string'));
156
+ const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
157
+ // Handle `throw redirect()` and `throw render()` while rendering nominal page
158
+ if ((0, abort_js_1.isAbortError)(errNominalPage)) {
159
+ const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
160
+ if (handled.pageContextReturn) {
161
+ // - throw redirect()
162
+ // - throw render(url)
163
+ // - throw render(abortStatusCode) if .pageContext.json request
164
+ return handled.pageContextReturn;
162
165
  }
163
- {
164
- const errorPageId = (0, error_page_js_1.getErrorPageId)(globalContext._pageFilesAll, globalContext._pageConfigs);
165
- if (!errorPageId) {
166
- (0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: null });
167
- return (0, handleErrorWithoutErrorPage_js_1.handleErrorWithoutErrorPage)(pageContextErrorPageInit);
168
- }
169
- else {
170
- (0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: errorPageId });
171
- }
166
+ else {
167
+ // - throw render(abortStatusCode) if not .pageContext.json request
172
168
  }
173
- let pageContextErrorPage;
174
- try {
175
- pageContextErrorPage = await (0, renderPageAlreadyRouted_js_1.renderPageAlreadyRouted)(pageContextErrorPageInit);
169
+ Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
170
+ }
171
+ {
172
+ const errorPageId = (0, error_page_js_1.getErrorPageId)(globalContext._pageFilesAll, globalContext._pageConfigs);
173
+ if (!errorPageId) {
174
+ (0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: null });
175
+ return (0, handleErrorWithoutErrorPage_js_1.handleErrorWithoutErrorPage)(pageContextErrorPageInit);
176
176
  }
177
- catch (errErrorPage) {
178
- // Handle `throw redirect()` and `throw render()` while rendering error page
179
- if ((0, abort_js_1.isAbortError)(errErrorPage)) {
180
- const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
181
- // throw render(abortStatusCode)
182
- if (!handled.pageContextReturn) {
183
- const pageContextAbort = errErrorPage._pageContextAbort;
184
- (0, utils_js_1.assertWarning)(false, `Failed to render error page because ${picocolors_1.default.cyan(pageContextAbort._abortCall)} was called: make sure ${picocolors_1.default.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
185
- const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
186
- return pageContextHttpWithError;
187
- }
188
- // `throw redirect()` / `throw render(url)`
189
- return handled.pageContextReturn;
190
- }
191
- if ((0, isNewError_js_1.isNewError)(errErrorPage, errNominalPage)) {
192
- (0, loggerRuntime_js_1.logRuntimeError)(errErrorPage, httpRequestId);
177
+ else {
178
+ (0, utils_js_1.objectAssign)(pageContextErrorPageInit, { pageId: errorPageId });
179
+ }
180
+ }
181
+ let pageContextErrorPage;
182
+ try {
183
+ pageContextErrorPage = await (0, renderPageAlreadyRouted_js_1.renderPageAlreadyRouted)(pageContextErrorPageInit);
184
+ }
185
+ catch (errErrorPage) {
186
+ // Handle `throw redirect()` and `throw render()` while rendering error page
187
+ if ((0, abort_js_1.isAbortError)(errErrorPage)) {
188
+ const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
189
+ // throw render(abortStatusCode)
190
+ if (!handled.pageContextReturn) {
191
+ const pageContextAbort = errErrorPage._pageContextAbort;
192
+ (0, utils_js_1.assertWarning)(false, `Failed to render error page because ${picocolors_1.default.cyan(pageContextAbort._abortCall)} was called: make sure ${picocolors_1.default.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
193
+ const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
194
+ return pageContextHttpWithError;
193
195
  }
194
- const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
195
- return pageContextWithError;
196
+ // `throw redirect()` / `throw render(url)`
197
+ return handled.pageContextReturn;
196
198
  }
197
- return pageContextErrorPage;
199
+ if ((0, isNewError_js_1.isNewError)(errErrorPage, errNominalPage)) {
200
+ (0, loggerRuntime_js_1.logRuntimeError)(errErrorPage, httpRequestId);
201
+ }
202
+ const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
203
+ return pageContextWithError;
198
204
  }
205
+ return pageContextErrorPage;
199
206
  }
200
207
  function logHttpRequest(urlOriginal, httpRequestId) {
201
208
  (0, loggerRuntime_js_1.logRuntimeInfo)?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
@@ -417,7 +424,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
417
424
  (0, utils_js_1.objectAssign)(pageContext, { pageId: errorPageId });
418
425
  (0, utils_js_1.objectAssign)(pageContext, pageContextAbort);
419
426
  (0, utils_js_1.objectAssign)(pageContext, pageContextErrorPageInit, true);
420
- (0, utils_js_1.objectAssign)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
427
+ (0, utils_js_1.augmentType)(pageContext, await (0, loadPageConfigsLazyServerSide_js_1.loadPageConfigsLazyServerSide)(pageContext));
421
428
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
422
429
  pageContextSerialized = (0, serializeContext_js_1.getPageContextClientSerialized)(pageContext);
423
430
  }
@@ -2,12 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createPageContextShared = createPageContextShared;
4
4
  exports.createPageContextObject = createPageContextObject;
5
- const execHook_js_1 = require("./hooks/execHook.js");
6
- const preparePageContextForPublicUsage_js_1 = require("./preparePageContextForPublicUsage.js");
7
5
  const utils_js_1 = require("./utils.js");
6
+ // TODO/now: make this and parents sync
8
7
  async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
9
8
  (0, utils_js_1.objectAssign)(pageContextCreated, vikeConfigPublicGlobal);
10
- await (0, execHook_js_1.execHookGlobal)('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage_js_1.preparePageContextForPublicUsage);
11
9
  return pageContextCreated;
12
10
  }
13
11
  function createPageContextObject() {
@@ -17,6 +17,7 @@ const resolveRouteFunction_js_1 = require("./resolveRouteFunction.js");
17
17
  const executeOnBeforeRouteHook_js_1 = require("./executeOnBeforeRouteHook.js");
18
18
  const debug_js_1 = require("./debug.js");
19
19
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
20
+ // TODO/next-major-release: make it sync
20
21
  async function route(pageContext, skipOnBeforeRouteHook) {
21
22
  (0, debug_js_1.debug)('Pages routes:', pageContext._globalContext._pageRoutes);
22
23
  const pageContextFromRoute = {};
@@ -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.232-commit-134207d';
5
+ exports.PROJECT_VERSION = '0.4.232-commit-ec54a7e';
@@ -6,7 +6,7 @@ export { addLinkPrefetchHandlers };
6
6
  export { addLinkPrefetchHandlers_watch };
7
7
  export { addLinkPrefetchHandlers_unwatch };
8
8
  import { assert, assertClientRouting, assertUsage, assertWarning, checkIfClientRouting, getGlobalObject, hasProp, objectAssign, } from './utils.js';
9
- import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
9
+ import { isErrorFetchingStaticAssets, loadPageConfigsLazy } from '../shared/loadPageConfigsLazyClientSide.js';
10
10
  import { skipLink } from './skipLink.js';
11
11
  import { disableClientRouting } from './renderPageClientSide.js';
12
12
  import { isClientSideRoutable } from './isClientSideRoutable.js';
@@ -45,7 +45,7 @@ function getPageContextPrefetched(pageContext) {
45
45
  }
46
46
  async function prefetchAssets(pageContextLink) {
47
47
  try {
48
- await loadPageConfigsLazyClientSide(pageContextLink.pageId, pageContextLink._pageFilesAll, pageContextLink._globalContext._pageConfigs, pageContextLink._globalContext._pageConfigGlobal);
48
+ await loadPageConfigsLazy(pageContextLink.pageId, pageContextLink._pageFilesAll, pageContextLink._globalContext._pageConfigs, pageContextLink._globalContext._pageConfigGlobal);
49
49
  }
50
50
  catch (err) {
51
51
  if (isErrorFetchingStaticAssets(err)) {
@@ -9,7 +9,7 @@ import { createPageContextClientSide } from './createPageContextClientSide.js';
9
9
  import { addLinkPrefetchHandlers, addLinkPrefetchHandlers_unwatch, addLinkPrefetchHandlers_watch, getPageContextPrefetched, populatePageContextPrefetchCache, } from './prefetch.js';
10
10
  import { assertInfo, assertWarning, isReact } from './utils.js';
11
11
  import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
12
- import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
12
+ import { isErrorFetchingStaticAssets, loadPageConfigsLazy, } from '../shared/loadPageConfigsLazyClientSide.js';
13
13
  import { pushHistoryState } from './history.js';
14
14
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled, } from '../../shared/route/abort.js';
15
15
  import { route } from '../../shared/route/index.js';
@@ -20,7 +20,7 @@ import { getErrorPageId } from '../../shared/error-page.js';
20
20
  import { setPageContextCurrent } from './getPageContextCurrent.js';
21
21
  import { getRouteStringParameterList } from '../../shared/route/resolveRouteString.js';
22
22
  import { getCurrentUrl } from '../shared/getCurrentUrl.js';
23
- import { execHooksErrorHandling, execHookErrorHandling, } from '../../shared/hooks/execHook.js';
23
+ import { execHooksErrorHandling, execHookErrorHandling, execHook, } from '../../shared/hooks/execHook.js';
24
24
  import { preparePageContextForPublicUsageClient, } from './preparePageContextForPublicUsageClient.js';
25
25
  import { getHookFromPageContextNew } from '../../shared/hooks/getHook.js';
26
26
  import { preparePageContextForPublicUsageClientMinimal } from '../shared/preparePageContextForPublicUsageClientShared.js';
@@ -60,7 +60,7 @@ async function renderPageClientSide(renderArgs) {
60
60
  return;
61
61
  async function renderPageNominal() {
62
62
  const onError = async (err) => {
63
- await renderErrorPage({ err });
63
+ await renderPageOnError({ err });
64
64
  };
65
65
  const pageContext = await getPageContextBegin(false, pageContextBeginArgs);
66
66
  if (isRenderOutdated())
@@ -134,8 +134,9 @@ async function renderPageClientSide(renderArgs) {
134
134
  assert(!('urlOriginal' in pageContextFromRoute));
135
135
  objectAssign(pageContext, pageContextFromRoute);
136
136
  }
137
+ let pageContextAugmented;
137
138
  try {
138
- objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal));
139
+ pageContextAugmented = await loadPageConfigsLazyClientSide(pageContext);
139
140
  }
140
141
  catch (err) {
141
142
  if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
@@ -147,6 +148,7 @@ async function renderPageClientSide(renderArgs) {
147
148
  return;
148
149
  }
149
150
  }
151
+ augmentType(pageContext, pageContextAugmented);
150
152
  if (isRenderOutdated())
151
153
  return;
152
154
  setPageContextCurrent(pageContext);
@@ -218,7 +220,11 @@ async function renderPageClientSide(renderArgs) {
218
220
  await renderPageView(pageContext);
219
221
  }
220
222
  }
221
- async function renderErrorPage(args) {
223
+ // When the normal page threw an error
224
+ // - Can be a URL rewrite upon `throw render('/some-url')`
225
+ // - Can be rendering the error page
226
+ // - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
227
+ async function renderPageOnError(args) {
222
228
  const onError = (err) => {
223
229
  if (!isSameErrorMessage(err, args.err)) {
224
230
  /* When we can't render the error page, we prefer showing a blank page over letting the server-side try because otherwise:
@@ -247,8 +253,6 @@ async function renderPageClientSide(renderArgs) {
247
253
  if (isRenderOutdated())
248
254
  return;
249
255
  objectAssign(pageContext, { routeParams: {} });
250
- if (args.is404)
251
- objectAssign(pageContext, { is404: true });
252
256
  if (args.pageContextError)
253
257
  objectAssign(pageContext, args.pageContextError);
254
258
  if ('err' in args) {
@@ -313,8 +317,9 @@ async function renderPageClientSide(renderArgs) {
313
317
  redirectHard(urlOriginal);
314
318
  return;
315
319
  }
320
+ let pageContextAugmented;
316
321
  try {
317
- objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal));
322
+ pageContextAugmented = await loadPageConfigsLazyClientSide(pageContext);
318
323
  }
319
324
  catch (err) {
320
325
  if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
@@ -326,6 +331,7 @@ async function renderPageClientSide(renderArgs) {
326
331
  return;
327
332
  }
328
333
  }
334
+ augmentType(pageContext, pageContextAugmented);
329
335
  if (isRenderOutdated())
330
336
  return;
331
337
  setPageContextCurrent(pageContext);
@@ -361,7 +367,7 @@ async function renderPageClientSide(renderArgs) {
361
367
  async function renderPageView(pageContext, isErrorPage) {
362
368
  const onError = async (err) => {
363
369
  if (!isErrorPage) {
364
- await renderErrorPage({ err });
370
+ await renderPageOnError({ err });
365
371
  }
366
372
  else {
367
373
  if (!isSameErrorMessage(err, isErrorPage.err)) {
@@ -596,3 +602,9 @@ function areKeysEqual(key1, key2) {
596
602
  function getPageContextClient() {
597
603
  return globalObject.renderedPageContext ?? null;
598
604
  }
605
+ async function loadPageConfigsLazyClientSide(pageContext) {
606
+ const pageContextAddendum = await loadPageConfigsLazy(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
607
+ objectAssign(pageContext, pageContextAddendum);
608
+ await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
609
+ return pageContext;
610
+ }
@@ -1,10 +1,12 @@
1
1
  export { createPageContextClientSide };
2
2
  import { assertUsage, augmentType, objectAssign } from './utils.js';
3
3
  import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
4
- import { loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
4
+ import { loadPageConfigsLazy, } from '../shared/loadPageConfigsLazyClientSide.js';
5
5
  import { getCurrentUrl } from '../shared/getCurrentUrl.js';
6
6
  import { createPageContextObject, createPageContextShared } from '../../shared/createPageContextShared.js';
7
7
  import { getGlobalContextClientInternal } from './globalContext.js';
8
+ import { preparePageContextForPublicUsageClient, } from './preparePageContextForPublicUsageClient.js';
9
+ import { execHook } from '../../shared/hooks/execHook.js';
8
10
  const urlFirst = getCurrentUrl({ withoutHash: true });
9
11
  async function createPageContextClientSide() {
10
12
  const globalContext = await getGlobalContextClientInternal();
@@ -20,10 +22,9 @@ async function createPageContextClientSide() {
20
22
  });
21
23
  objectAssign(pageContextCreated, getPageContextSerializedInHtml());
22
24
  // Sets pageContext.config to global configs
23
- const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal);
24
- augmentType(pageContextCreated, pageContextAugmented);
25
+ augmentType(pageContextCreated, await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal));
25
26
  // Sets pageContext.config to local configs (overrides the pageContext.config set above)
26
- objectAssign(pageContextCreated, await loadPageConfigsLazyClientSide(pageContextCreated.pageId, globalContext._pageFilesAll, globalContext._pageConfigs, globalContext._pageConfigGlobal));
27
+ augmentType(pageContextCreated, await loadPageConfigsLazyClientSide(pageContextCreated));
27
28
  assertPristineUrl();
28
29
  return pageContextCreated;
29
30
  }
@@ -31,3 +32,9 @@ function assertPristineUrl() {
31
32
  const urlCurrent = getCurrentUrl({ withoutHash: true });
32
33
  assertUsage(urlFirst === urlCurrent, `The URL was manipulated before the hydration finished ('${urlFirst}' to '${urlCurrent}'). Ensure the hydration has finished before manipulating the URL. Consider using the onHydrationEnd() hook.`);
33
34
  }
35
+ async function loadPageConfigsLazyClientSide(pageContext) {
36
+ const pageContextAddendum = await loadPageConfigsLazy(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
37
+ objectAssign(pageContext, pageContextAddendum);
38
+ await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
39
+ return pageContext;
40
+ }
@@ -1,9 +1,19 @@
1
- export { loadPageConfigsLazyClientSide };
1
+ export { loadPageConfigsLazy };
2
+ export type { PageContext_loadPageConfigsLazyClientSide };
2
3
  export { isErrorFetchingStaticAssets };
3
4
  import { type PageFile, type VikeConfigPublicPageLazy } from '../../shared/getPageFiles.js';
4
5
  import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../../types/PageConfig.js';
6
+ import { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
7
+ type PageContext_loadPageConfigsLazyClientSide = {
8
+ pageId: string;
9
+ _pageFilesAll: PageFile[];
10
+ _globalContext: {
11
+ _pageConfigs: PageConfigRuntime[];
12
+ _pageConfigGlobal: PageConfigGlobalRuntime;
13
+ };
14
+ } & PageContextPrepareMinimum;
5
15
  type PageContextUserFilesLoaded = VikeConfigPublicPageLazy & {
6
16
  _pageFilesLoaded: PageFile[];
7
17
  };
8
- declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
18
+ declare function loadPageConfigsLazy(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
9
19
  declare function isErrorFetchingStaticAssets(err: unknown): boolean;
@@ -1,4 +1,4 @@
1
- export { loadPageConfigsLazyClientSide };
1
+ export { loadPageConfigsLazy };
2
2
  export { isErrorFetchingStaticAssets };
3
3
  import { getPageFilesClientSide } from '../../shared/getPageFiles.js';
4
4
  import { resolveVikeConfigPublicPageLazy } from '../../shared/page-configs/resolveVikeConfigPublic.js';
@@ -6,7 +6,7 @@ import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
6
6
  import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
7
7
  import { objectAssign } from '../runtime-server-routing/utils.js';
8
8
  const stamp = '__whileFetchingAssets';
9
- async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
9
+ async function loadPageConfigsLazy(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
10
10
  const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
11
11
  const pageConfig = findPageConfig(pageConfigs, pageId);
12
12
  let pageConfigLoaded;
@@ -171,7 +171,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
171
171
  _sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
172
172
  _from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
173
173
  } & {
174
- urlParsed: import("../shared/utils.js").UrlPublic;
174
+ urlParsed: import("../runtime/utils.js").UrlPublic;
175
175
  urlPathname: string;
176
176
  url: string;
177
177
  } & {
@@ -292,7 +292,7 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
292
292
  _sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
293
293
  _from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
294
294
  } & {
295
- urlParsed: import("../shared/utils.js").UrlPublic;
295
+ urlParsed: import("../runtime/utils.js").UrlPublic;
296
296
  urlPathname: string;
297
297
  url: string;
298
298
  } & {
@@ -310,13 +310,259 @@ declare function createPageContextPrerendering(urlOriginal: string, prerenderCon
310
310
  pageId: string;
311
311
  _debugRouteMatches: never[];
312
312
  routeParams: {};
313
- })) & import("../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
313
+ })) & (((({
314
+ _isOriginalObject: true;
315
+ isPageContext: true;
316
+ } & {
317
+ isClientSide: false;
318
+ isPrerendering: boolean;
319
+ } & Pick<import("../../types/PageContext.js").PageContextInternalServer, "urlOriginal" | "headersOriginal"> & {
320
+ url?: string;
321
+ headers?: Record<string, string>;
322
+ } & {
323
+ _globalContext: {
324
+ isGlobalContext: true;
325
+ _isOriginalObject: true;
326
+ _virtualFileExports: unknown;
327
+ _pageFilesAll: PageFile[];
328
+ _pageConfigs: import("../../types/PageConfig.js").PageConfigRuntime[];
329
+ _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
330
+ _allPageIds: string[];
331
+ _vikeConfigPublicGlobal: {
332
+ config: import("../../types/index.js").ConfigResolved;
333
+ _source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
334
+ _sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
335
+ _from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
336
+ };
337
+ config: import("../../types/index.js").ConfigResolved;
338
+ pages: {
339
+ [k: string]: import("../../shared/page-configs/resolveVikeConfigPublic.js").VikeConfigPublicPageEager;
340
+ };
341
+ } & ({
342
+ _isProduction: false;
343
+ _isPrerendering: false;
344
+ assetsManifest: null;
345
+ _viteDevServer: import("vite").ViteDevServer;
346
+ viteConfig: ResolvedConfig;
347
+ viteConfigRuntime: {
348
+ root: string;
349
+ build: {
350
+ outDir: string;
351
+ };
352
+ _baseViteOriginal: string;
353
+ vitePluginServerEntry: {
354
+ inject: boolean | undefined;
355
+ };
356
+ };
357
+ baseServer: string;
358
+ baseAssets: string;
359
+ isClientSide: false;
360
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
361
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
362
+ } | {
363
+ _isPrerendering: true;
364
+ viteConfig: ResolvedConfig;
365
+ _isProduction: true;
366
+ assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
367
+ _viteDevServer: null;
368
+ viteConfigRuntime: {
369
+ root: string;
370
+ build: {
371
+ outDir: string;
372
+ };
373
+ _baseViteOriginal: string;
374
+ vitePluginServerEntry: {
375
+ inject: boolean | undefined;
376
+ };
377
+ };
378
+ _usesClientRouter: boolean;
379
+ baseServer: string;
380
+ baseAssets: string;
381
+ isClientSide: false;
382
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
383
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
384
+ } | {
385
+ _isPrerendering: false;
386
+ viteConfig: null;
387
+ _isProduction: true;
388
+ assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
389
+ _viteDevServer: null;
390
+ viteConfigRuntime: {
391
+ root: string;
392
+ build: {
393
+ outDir: string;
394
+ };
395
+ _baseViteOriginal: string;
396
+ vitePluginServerEntry: {
397
+ inject: boolean | undefined;
398
+ };
399
+ };
400
+ _usesClientRouter: boolean;
401
+ baseServer: string;
402
+ baseAssets: string;
403
+ isClientSide: false;
404
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
405
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
406
+ });
407
+ _pageFilesAll: PageFile[];
408
+ _baseServer: string;
409
+ _baseAssets: string;
410
+ _pageContextInit: import("../runtime/renderPage.js").PageContextInit;
411
+ _urlRewrite: null;
412
+ _urlHandler: ((url: string) => string) | null;
413
+ isClientSideNavigation: boolean;
414
+ } & {
415
+ config: import("../../types/index.js").ConfigResolved;
416
+ _source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
417
+ _sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
418
+ _from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
419
+ } & {
420
+ urlParsed: import("../runtime/utils.js").UrlPublic;
421
+ urlPathname: string;
422
+ url: string;
423
+ } & {
424
+ headers: Record<string, string> | null;
425
+ } & {
426
+ _urlHandler: null;
427
+ _httpRequestId: null;
428
+ _urlRewrite: null;
429
+ _noExtraDir: boolean | null;
430
+ _prerenderContext: PrerenderContext;
431
+ _providedByHook: ProvidedByHook;
432
+ _urlOriginalModifiedByHook: ProvidedByHookTransformer;
433
+ is404: boolean;
434
+ } & import("../../shared/route/index.js").PageContextFromRoute & Record<"pageId", string>) | ({
435
+ _isOriginalObject: true;
436
+ isPageContext: true;
437
+ } & {
438
+ isClientSide: false;
439
+ isPrerendering: boolean;
440
+ } & Pick<import("../../types/PageContext.js").PageContextInternalServer, "urlOriginal" | "headersOriginal"> & {
441
+ url?: string;
442
+ headers?: Record<string, string>;
443
+ } & {
444
+ _globalContext: {
445
+ isGlobalContext: true;
446
+ _isOriginalObject: true;
447
+ _virtualFileExports: unknown;
448
+ _pageFilesAll: PageFile[];
449
+ _pageConfigs: import("../../types/PageConfig.js").PageConfigRuntime[];
450
+ _pageConfigGlobal: import("../../types/PageConfig.js").PageConfigGlobalRuntime;
451
+ _allPageIds: string[];
452
+ _vikeConfigPublicGlobal: {
453
+ config: import("../../types/index.js").ConfigResolved;
454
+ _source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
455
+ _sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
456
+ _from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
457
+ };
458
+ config: import("../../types/index.js").ConfigResolved;
459
+ pages: {
460
+ [k: string]: import("../../shared/page-configs/resolveVikeConfigPublic.js").VikeConfigPublicPageEager;
461
+ };
462
+ } & ({
463
+ _isProduction: false;
464
+ _isPrerendering: false;
465
+ assetsManifest: null;
466
+ _viteDevServer: import("vite").ViteDevServer;
467
+ viteConfig: ResolvedConfig;
468
+ viteConfigRuntime: {
469
+ root: string;
470
+ build: {
471
+ outDir: string;
472
+ };
473
+ _baseViteOriginal: string;
474
+ vitePluginServerEntry: {
475
+ inject: boolean | undefined;
476
+ };
477
+ };
478
+ baseServer: string;
479
+ baseAssets: string;
480
+ isClientSide: false;
481
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
482
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
483
+ } | {
484
+ _isPrerendering: true;
485
+ viteConfig: ResolvedConfig;
486
+ _isProduction: true;
487
+ assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
488
+ _viteDevServer: null;
489
+ viteConfigRuntime: {
490
+ root: string;
491
+ build: {
492
+ outDir: string;
493
+ };
494
+ _baseViteOriginal: string;
495
+ vitePluginServerEntry: {
496
+ inject: boolean | undefined;
497
+ };
498
+ };
499
+ _usesClientRouter: boolean;
500
+ baseServer: string;
501
+ baseAssets: string;
502
+ isClientSide: false;
503
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
504
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
505
+ } | {
506
+ _isPrerendering: false;
507
+ viteConfig: null;
508
+ _isProduction: true;
509
+ assetsManifest: import("../../types/ViteManifest.js").ViteManifest;
510
+ _viteDevServer: null;
511
+ viteConfigRuntime: {
512
+ root: string;
513
+ build: {
514
+ outDir: string;
515
+ };
516
+ _baseViteOriginal: string;
517
+ vitePluginServerEntry: {
518
+ inject: boolean | undefined;
519
+ };
520
+ };
521
+ _usesClientRouter: boolean;
522
+ baseServer: string;
523
+ baseAssets: string;
524
+ isClientSide: false;
525
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
526
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
527
+ });
528
+ _pageFilesAll: PageFile[];
529
+ _baseServer: string;
530
+ _baseAssets: string;
531
+ _pageContextInit: import("../runtime/renderPage.js").PageContextInit;
532
+ _urlRewrite: null;
533
+ _urlHandler: ((url: string) => string) | null;
534
+ isClientSideNavigation: boolean;
535
+ } & {
536
+ config: import("../../types/index.js").ConfigResolved;
537
+ _source: import("../../shared/page-configs/resolveVikeConfigPublic.js").Source;
538
+ _sources: import("../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
539
+ _from: import("../../shared/page-configs/resolveVikeConfigPublic.js").From;
540
+ } & {
541
+ urlParsed: import("../runtime/utils.js").UrlPublic;
542
+ urlPathname: string;
543
+ url: string;
544
+ } & {
545
+ headers: Record<string, string> | null;
546
+ } & {
547
+ _urlHandler: null;
548
+ _httpRequestId: null;
549
+ _urlRewrite: null;
550
+ _noExtraDir: boolean | null;
551
+ _prerenderContext: PrerenderContext;
552
+ _providedByHook: ProvidedByHook;
553
+ _urlOriginalModifiedByHook: ProvidedByHookTransformer;
554
+ is404: boolean;
555
+ } & {
556
+ pageId: string;
557
+ _debugRouteMatches: never[];
558
+ routeParams: {};
559
+ })) & import("../../shared/getPageFiles.js").VikeConfigPublicPageLazy) & {
314
560
  Page: unknown;
315
561
  _isHtmlOnly: boolean;
316
562
  _passToClient: string[];
317
563
  _pageFilePathsLoaded: string[];
318
564
  } & {
319
565
  __getPageAssets: () => Promise<import("../runtime/renderPage/getPageAssets.js").PageAsset[]>;
320
- }) & {
566
+ })) & {
321
567
  _usesClientRouter: boolean;
322
568
  }>;
@@ -29,6 +29,7 @@ import { getOutDirs } from '../vite/shared/getOutDirs.js';
29
29
  import fs from 'node:fs';
30
30
  import { getProxyForPublicUsage } from '../../shared/getProxyForPublicUsage.js';
31
31
  import { getStaticRedirectsForPrerender } from '../runtime/renderPage/resolveRedirects.js';
32
+ import { augmentType } from '../runtime/utils.js';
32
33
  const docLink = 'https://vike.dev/i18n#pre-rendering';
33
34
  async function runPrerender(options = {}, trigger) {
34
35
  setWasPrerenderRun(trigger);
@@ -322,7 +323,7 @@ async function createPageContextPrerendering(urlOriginal, prerenderContext, glob
322
323
  routeParams: {},
323
324
  });
324
325
  }
325
- objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
326
+ augmentType(pageContext, await loadPageConfigsLazyServerSide(pageContext));
326
327
  let usesClientRouter;
327
328
  {
328
329
  const { pageId } = pageContext;
@@ -1,18 +1,27 @@
1
1
  export { loadPageConfigsLazyServerSide };
2
- export type { PageFiles };
3
2
  export type { PageContext_loadPageConfigsLazyServerSide };
3
+ export type { PageConfigsLazy };
4
4
  import { PromiseType } from '../utils.js';
5
5
  import { PageContextGetPageAssets, type PageAsset } from './getPageAssets.js';
6
6
  import { type PageContextDebugRouteMatches } from './debugPageFiles.js';
7
7
  import type { GlobalContextServerInternal } from '../globalContext.js';
8
+ import { type PageContextExecuteHookServer } from './execHookServer.js';
9
+ type PageContextExecute = Omit<PageContextExecuteHookServer, keyof Awaited<ReturnType<typeof loadPageConfigsLazy>>>;
8
10
  type PageContext_loadPageConfigsLazyServerSide = PageContextGetPageAssets & PageContextDebugRouteMatches & {
11
+ pageId: string;
9
12
  urlOriginal: string;
10
13
  _globalContext: GlobalContextServerInternal;
11
14
  };
12
- type PageFiles = PromiseType<ReturnType<typeof loadPageConfigsLazyServerSide>>;
13
- declare function loadPageConfigsLazyServerSide(pageContext: {
14
- pageId: string;
15
- } & PageContext_loadPageConfigsLazyServerSide): Promise<import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
15
+ type PageConfigsLazy = PromiseType<ReturnType<typeof loadPageConfigsLazy>>;
16
+ declare function loadPageConfigsLazyServerSide<PageContext extends PageContext_loadPageConfigsLazyServerSide & PageContextExecute>(pageContext: PageContext): Promise<PageContext & import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
17
+ Page: unknown;
18
+ _isHtmlOnly: boolean;
19
+ _passToClient: string[];
20
+ _pageFilePathsLoaded: string[];
21
+ } & {
22
+ __getPageAssets: () => Promise<PageAsset[]>;
23
+ }>;
24
+ declare function loadPageConfigsLazy(pageContext: PageContext_loadPageConfigsLazyServerSide): Promise<import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
16
25
  Page: unknown;
17
26
  _isHtmlOnly: boolean;
18
27
  _passToClient: string[];
@@ -8,7 +8,14 @@ import { debugPageFiles } from './debugPageFiles.js';
8
8
  import { findPageConfig } from '../../../shared/page-configs/findPageConfig.js';
9
9
  import { analyzePage } from './analyzePage.js';
10
10
  import { loadConfigValues } from '../../../shared/page-configs/loadConfigValues.js';
11
+ import { execHookServer } from './execHookServer.js';
11
12
  async function loadPageConfigsLazyServerSide(pageContext) {
13
+ const pageContextAddendum = await loadPageConfigsLazy(pageContext);
14
+ objectAssign(pageContext, pageContextAddendum);
15
+ await execHookServer('onCreatePageContext', pageContext);
16
+ return pageContext;
17
+ }
18
+ async function loadPageConfigsLazy(pageContext) {
12
19
  const pageConfig = findPageConfig(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ?
13
20
  const globalContext = pageContext._globalContext;
14
21
  const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
@@ -84,18 +91,16 @@ async function loadPageConfigsLazyServerSide(pageContext) {
84
91
  return pageAssetsOldFormat;
85
92
  },
86
93
  });
87
- {
88
- debugPageFiles({
89
- pageContext,
90
- isHtmlOnly,
91
- isClientRouting,
92
- pageFilesLoaded,
93
- pageFilesClientSide,
94
- pageFilesServerSide,
95
- clientEntries,
96
- clientDependencies,
97
- });
98
- }
94
+ debugPageFiles({
95
+ pageContext,
96
+ isHtmlOnly,
97
+ isClientRouting,
98
+ pageFilesLoaded,
99
+ pageFilesClientSide,
100
+ pageFilesServerSide,
101
+ clientEntries,
102
+ clientDependencies,
103
+ });
99
104
  return pageContextAddendum;
100
105
  }
101
106
  async function loadPageUserFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) {
@@ -3,7 +3,7 @@ export { prerenderPage };
3
3
  export type { PageContextAfterRender };
4
4
  import { type PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
5
5
  import { HttpResponse } from './createHttpResponse.js';
6
- import { PageContext_loadPageConfigsLazyServerSide, type PageFiles } from './loadPageConfigsLazyServerSide.js';
6
+ import { PageContext_loadPageConfigsLazyServerSide, type PageConfigsLazy } from './loadPageConfigsLazyServerSide.js';
7
7
  import type { PageContextCreated } from './createPageContextServerSide.js';
8
8
  type PageContextAfterRender = {
9
9
  httpResponse: HttpResponse;
@@ -17,7 +17,7 @@ declare function renderPageAlreadyRouted<PageContext extends {
17
17
  errorWhileRendering: null | Error;
18
18
  _httpRequestId: number;
19
19
  } & PageContextCreated & PageContextUrlInternal & PageContext_loadPageConfigsLazyServerSide>(pageContext: PageContext): Promise<PageContext & PageContextAfterRender>;
20
- declare function prerenderPage(pageContext: PageContextCreated & PageFiles & {
20
+ declare function prerenderPage(pageContext: PageContextCreated & PageConfigsLazy & {
21
21
  routeParams: Record<string, string>;
22
22
  pageId: string;
23
23
  _urlRewrite: null;
@@ -2,7 +2,7 @@ export { renderPageAlreadyRouted };
2
2
  export { prerenderPage };
3
3
  import { getErrorPageId } from '../../../shared/error-page.js';
4
4
  import { getHtmlString } from '../html/renderHtml.js';
5
- import { assert, assertUsage, hasProp, objectAssign } from '../utils.js';
5
+ import { assert, assertUsage, augmentType, hasProp, objectAssign } from '../utils.js';
6
6
  import { getPageContextClientSerialized } from '../html/serializeContext.js';
7
7
  import { createHttpResponsePage, createHttpResponsePageContextJson } from './createHttpResponse.js';
8
8
  import { loadPageConfigsLazyServerSide, } from './loadPageConfigsLazyServerSide.js';
@@ -23,7 +23,7 @@ async function renderPageAlreadyRouted(pageContext) {
23
23
  assert(isError ===
24
24
  (pageContext.pageId ===
25
25
  getErrorPageId(pageContext._globalContext._pageFilesAll, pageContext._globalContext._pageConfigs)));
26
- objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
26
+ augmentType(pageContext, await loadPageConfigsLazyServerSide(pageContext));
27
27
  if (!isError) {
28
28
  await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageServer(pageContext));
29
29
  }
@@ -3,7 +3,7 @@ export { renderPage_addAsyncHookwrapper };
3
3
  import { renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
4
4
  import { createPageContextServerSide, createPageContextServerSideWithoutGlobalContext, } from './renderPage/createPageContextServerSide.js';
5
5
  import { route } from '../../shared/route/index.js';
6
- import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty, } from './utils.js';
6
+ import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty, augmentType, } from './utils.js';
7
7
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled, } from '../../shared/route/abort.js';
8
8
  import { getGlobalContextServerInternal, initGlobalContext_renderPage, } from './globalContext.js';
9
9
  import { handlePageContextRequestUrl } from './renderPage/handlePageContextRequestUrl.js';
@@ -138,59 +138,66 @@ async function renderPageAlreadyPrepared(pageContextBegin, globalContext, httpRe
138
138
  else {
139
139
  assert(errNominalPage);
140
140
  assert(pageContextNominalPageSuccess === undefined);
141
- assert(pageContextNominalPageBegin);
142
- assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
143
- const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
144
- // Handle `throw redirect()` and `throw render()` while rendering nominal page
145
- if (isAbortError(errNominalPage)) {
146
- const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
147
- if (handled.pageContextReturn) {
148
- // - throw redirect()
149
- // - throw render(url)
150
- // - throw render(abortStatusCode) if .pageContext.json request
151
- return handled.pageContextReturn;
152
- }
153
- else {
154
- // - throw render(abortStatusCode) if not .pageContext.json request
155
- }
156
- Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
141
+ return await renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite);
142
+ }
143
+ }
144
+ // When the normal page threw an error
145
+ // - Can be a URL rewrite upon `throw render('/some-url')`
146
+ // - Can be rendering the error page
147
+ // - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
148
+ async function renderPageOnError(errNominalPage, pageContextBegin, pageContextNominalPageBegin, globalContext, httpRequestId, pageContextsFromRewrite) {
149
+ assert(pageContextNominalPageBegin);
150
+ assert(hasProp(pageContextNominalPageBegin, 'urlOriginal', 'string'));
151
+ const pageContextErrorPageInit = await getPageContextErrorPageInit(pageContextBegin, errNominalPage, pageContextNominalPageBegin);
152
+ // Handle `throw redirect()` and `throw render()` while rendering nominal page
153
+ if (isAbortError(errNominalPage)) {
154
+ const handled = await handleAbortError(errNominalPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
155
+ if (handled.pageContextReturn) {
156
+ // - throw redirect()
157
+ // - throw render(url)
158
+ // - throw render(abortStatusCode) if .pageContext.json request
159
+ return handled.pageContextReturn;
157
160
  }
158
- {
159
- const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
160
- if (!errorPageId) {
161
- objectAssign(pageContextErrorPageInit, { pageId: null });
162
- return handleErrorWithoutErrorPage(pageContextErrorPageInit);
163
- }
164
- else {
165
- objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
166
- }
161
+ else {
162
+ // - throw render(abortStatusCode) if not .pageContext.json request
167
163
  }
168
- let pageContextErrorPage;
169
- try {
170
- pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
164
+ Object.assign(pageContextErrorPageInit, handled.pageContextAbort);
165
+ }
166
+ {
167
+ const errorPageId = getErrorPageId(globalContext._pageFilesAll, globalContext._pageConfigs);
168
+ if (!errorPageId) {
169
+ objectAssign(pageContextErrorPageInit, { pageId: null });
170
+ return handleErrorWithoutErrorPage(pageContextErrorPageInit);
171
171
  }
172
- catch (errErrorPage) {
173
- // Handle `throw redirect()` and `throw render()` while rendering error page
174
- if (isAbortError(errErrorPage)) {
175
- const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
176
- // throw render(abortStatusCode)
177
- if (!handled.pageContextReturn) {
178
- const pageContextAbort = errErrorPage._pageContextAbort;
179
- assertWarning(false, `Failed to render error page because ${pc.cyan(pageContextAbort._abortCall)} was called: make sure ${pc.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
180
- const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
181
- return pageContextHttpWithError;
182
- }
183
- // `throw redirect()` / `throw render(url)`
184
- return handled.pageContextReturn;
185
- }
186
- if (isNewError(errErrorPage, errNominalPage)) {
187
- logRuntimeError(errErrorPage, httpRequestId);
172
+ else {
173
+ objectAssign(pageContextErrorPageInit, { pageId: errorPageId });
174
+ }
175
+ }
176
+ let pageContextErrorPage;
177
+ try {
178
+ pageContextErrorPage = await renderPageAlreadyRouted(pageContextErrorPageInit);
179
+ }
180
+ catch (errErrorPage) {
181
+ // Handle `throw redirect()` and `throw render()` while rendering error page
182
+ if (isAbortError(errErrorPage)) {
183
+ const handled = await handleAbortError(errErrorPage, pageContextsFromRewrite, pageContextBegin, pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalContext);
184
+ // throw render(abortStatusCode)
185
+ if (!handled.pageContextReturn) {
186
+ const pageContextAbort = errErrorPage._pageContextAbort;
187
+ assertWarning(false, `Failed to render error page because ${pc.cyan(pageContextAbort._abortCall)} was called: make sure ${pc.cyan(pageContextAbort._abortCaller)} doesn't occur while the error page is being rendered.`, { onlyOnce: false });
188
+ const pageContextHttpWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
189
+ return pageContextHttpWithError;
188
190
  }
189
- const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
190
- return pageContextWithError;
191
+ // `throw redirect()` / `throw render(url)`
192
+ return handled.pageContextReturn;
191
193
  }
192
- return pageContextErrorPage;
194
+ if (isNewError(errErrorPage, errNominalPage)) {
195
+ logRuntimeError(errErrorPage, httpRequestId);
196
+ }
197
+ const pageContextWithError = getPageContextHttpResponseError(errNominalPage, pageContextBegin);
198
+ return pageContextWithError;
193
199
  }
200
+ return pageContextErrorPage;
194
201
  }
195
202
  function logHttpRequest(urlOriginal, httpRequestId) {
196
203
  logRuntimeInfo?.(getRequestInfoMessage(urlOriginal), httpRequestId, 'info');
@@ -412,7 +419,7 @@ pageContextNominalPageBegin, httpRequestId, pageContextErrorPageInit, globalCont
412
419
  objectAssign(pageContext, { pageId: errorPageId });
413
420
  objectAssign(pageContext, pageContextAbort);
414
421
  objectAssign(pageContext, pageContextErrorPageInit, true);
415
- objectAssign(pageContext, await loadPageConfigsLazyServerSide(pageContext));
422
+ augmentType(pageContext, await loadPageConfigsLazyServerSide(pageContext));
416
423
  // We include pageContextInit: we don't only serialize pageContextAbort because the error page may need to access pageContextInit
417
424
  pageContextSerialized = getPageContextClientSerialized(pageContext);
418
425
  }
@@ -1,11 +1,9 @@
1
1
  export { createPageContextShared };
2
2
  export { createPageContextObject };
3
- import { execHookGlobal } from './hooks/execHook.js';
4
- import { preparePageContextForPublicUsage } from './preparePageContextForPublicUsage.js';
5
3
  import { changeEnumerable, objectAssign } from './utils.js';
4
+ // TODO/now: make this and parents sync
6
5
  async function createPageContextShared(pageContextCreated, pageConfigGlobal, vikeConfigPublicGlobal) {
7
6
  objectAssign(pageContextCreated, vikeConfigPublicGlobal);
8
- await execHookGlobal('onCreatePageContext', pageConfigGlobal, pageContextCreated, pageContextCreated, preparePageContextForPublicUsage);
9
7
  return pageContextCreated;
10
8
  }
11
9
  function createPageContextObject() {
@@ -19,6 +19,7 @@ import type { PageContextForPublicUsageServer } from '../../node/runtime/renderP
19
19
  import type { PageContextForPublicUsageClientShared } from '../../client/shared/preparePageContextForPublicUsageClientShared.js';
20
20
  import { type PageContextPrepareMinimum } from '../preparePageContextForPublicUsage.js';
21
21
  import type { GlobalContextPrepareMinimum } from '../prepareGlobalContextForPublicUsage.js';
22
+ type PageContextPrepareMinimum2 = PageContextPrepareMinimum & VikeConfigPublicPageLazy;
22
23
  type PageContextExecuteHook = VikeConfigPublicPageLazy & PageContextForPublicUsage;
23
24
  type PageContextForPublicUsage = PageContextForPublicUsageServer | PageContextForPublicUsageClientShared;
24
25
  type HookWithResult = Hook & {
@@ -28,8 +29,8 @@ declare function execHookSingle<PageContext extends PageContextExecuteHook>(hook
28
29
  declare function execHookSingleWithReturn<PageContext extends PageContextExecuteHook>(hook: Hook, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
29
30
  hookReturn: unknown;
30
31
  }>;
31
- declare function execHook<PageContext extends PageContextExecuteHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
32
- declare function execHookErrorHandling<PageContext extends PageContextExecuteHook>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
32
+ declare function execHook<PageContext extends PageContextPrepareMinimum2>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<HookWithResult[]>;
33
+ declare function execHookErrorHandling<PageContext extends PageContextPrepareMinimum2>(hookName: HookName, pageContext: PageContext, preparePageContextForPublicUsage: (pageContext: PageContext) => PageContext): Promise<{
33
34
  hooks: HookWithResult[];
34
35
  err?: undefined;
35
36
  } | {
@@ -12,6 +12,7 @@ import { resolveRouteFunction } from './resolveRouteFunction.js';
12
12
  import { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';
13
13
  import { debug } from './debug.js';
14
14
  import pc from '@brillout/picocolors';
15
+ // TODO/next-major-release: make it sync
15
16
  async function route(pageContext, skipOnBeforeRouteHook) {
16
17
  debug('Pages routes:', pageContext._globalContext._pageRoutes);
17
18
  const pageContextFromRoute = {};
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.232-commit-134207d";
1
+ export declare const PROJECT_VERSION: "0.4.232-commit-ec54a7e";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.232-commit-134207d';
2
+ export const PROJECT_VERSION = '0.4.232-commit-ec54a7e';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.232-commit-134207d",
3
+ "version": "0.4.232-commit-ec54a7e",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {