vike 0.4.232 → 0.4.233

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 (56) hide show
  1. package/dist/cjs/node/prerender/runPrerender.js +9 -4
  2. package/dist/cjs/node/runtime/renderPage/{executeOnBeforeRenderAndDataHooks.js → execHookDataAndOnBeforeRender.js} +2 -2
  3. package/dist/cjs/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js} +3 -3
  4. package/dist/cjs/node/runtime/renderPage/execHookServer.js +1 -4
  5. package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +18 -13
  6. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +11 -11
  7. package/dist/cjs/node/runtime/renderPage.js +55 -48
  8. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +0 -2
  9. package/dist/cjs/shared/createPageContextShared.js +1 -3
  10. package/dist/cjs/shared/hooks/execHook.js +31 -54
  11. package/dist/cjs/shared/route/{executeGuardHook.js → execHookGuard.js} +3 -3
  12. package/dist/cjs/shared/route/{executeOnBeforeRouteHook.js → execHookOnBeforeRoute.js} +4 -4
  13. package/dist/cjs/shared/route/index.js +3 -2
  14. package/dist/cjs/shared/route/resolveRouteFunction.js +1 -1
  15. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  16. package/dist/cjs/utils/styleFileRE.js +1 -0
  17. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.d.ts +2 -2
  18. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.js +9 -9
  19. package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +97 -62
  20. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +11 -4
  21. package/dist/esm/client/runtime-server-routing/entry.js +2 -2
  22. package/dist/esm/client/shared/{executeOnRenderClientHook.d.ts → execHookOnRenderClient.d.ts} +2 -2
  23. package/dist/esm/client/shared/{executeOnRenderClientHook.js → execHookOnRenderClient.js} +4 -4
  24. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +12 -4
  25. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +4 -4
  26. package/dist/esm/node/prerender/runPrerender.d.ts +250 -4
  27. package/dist/esm/node/prerender/runPrerender.js +11 -6
  28. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -1
  29. package/dist/esm/node/runtime/renderPage/execHookDataAndOnBeforeRender.d.ts +6 -0
  30. package/dist/esm/node/runtime/renderPage/{executeOnBeforeRenderAndDataHooks.js → execHookDataAndOnBeforeRender.js} +2 -2
  31. package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.d.ts → execHookOnRenderHtml.d.ts} +2 -2
  32. package/dist/esm/node/runtime/renderPage/{executeOnRenderHtmlHook.js → execHookOnRenderHtml.js} +4 -4
  33. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +3 -3
  34. package/dist/esm/node/runtime/renderPage/execHookServer.js +1 -4
  35. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +1 -1
  36. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +15 -6
  37. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +18 -13
  38. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +2 -2
  39. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +13 -13
  40. package/dist/esm/node/runtime/renderPage.js +57 -50
  41. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +0 -2
  42. package/dist/esm/shared/createPageContextShared.js +1 -3
  43. package/dist/esm/shared/hooks/execHook.d.ts +14 -28
  44. package/dist/esm/shared/hooks/execHook.js +31 -54
  45. package/dist/esm/shared/route/execHookGuard.d.ts +8 -0
  46. package/dist/esm/shared/route/{executeGuardHook.js → execHookGuard.js} +4 -4
  47. package/dist/esm/shared/route/{executeOnBeforeRouteHook.d.ts → execHookOnBeforeRoute.d.ts} +2 -2
  48. package/dist/esm/shared/route/{executeOnBeforeRouteHook.js → execHookOnBeforeRoute.js} +5 -5
  49. package/dist/esm/shared/route/index.js +3 -2
  50. package/dist/esm/shared/route/resolveRouteFunction.js +2 -2
  51. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  52. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  53. package/dist/esm/utils/styleFileRE.js +1 -0
  54. package/package.json +1 -1
  55. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +0 -6
  56. package/dist/esm/shared/route/executeGuardHook.d.ts +0 -8
@@ -13,7 +13,7 @@ import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.
13
13
  import { getPageConfig } from '../../shared/page-configs/helpers.js';
14
14
  import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValueRuntime.js';
15
15
  import { assertOnBeforeRenderHookReturn } from '../../shared/assertOnBeforeRenderHookReturn.js';
16
- import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
16
+ import { execHookGuard } from '../../shared/route/execHookGuard.js';
17
17
  import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
18
18
  import { pageContextInitIsPassedToClient } from '../../shared/misc/pageContextInitIsPassedToClient.js';
19
19
  import { isServerSideError } from '../../shared/misc/isServerSideError.js';
@@ -34,7 +34,7 @@ function getPageContextFromHooks_serialized() {
34
34
  async function getPageContextFromHooks_isHydration(pageContext) {
35
35
  for (const hookName of ['data', 'onBeforeRender']) {
36
36
  if (hookClientOnlyExists(hookName, pageContext)) {
37
- await executeDataLikeHook(hookName, pageContext);
37
+ await execHookDataLike(hookName, pageContext);
38
38
  }
39
39
  }
40
40
  return pageContext;
@@ -78,7 +78,7 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
78
78
  !pageContext._hasPageContextFromServer) {
79
79
  // Should we really call the guard() hook on the client-side? Shouldn't we make the guard() hook a server-side
80
80
  // only hook? Or maybe make its env configurable like data() and onBeforeRender()?
81
- await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageClient(pageContext));
81
+ await execHookGuard(pageContext, (pageContext) => preparePageContextForPublicUsageClient(pageContext));
82
82
  }
83
83
  }
84
84
  else {
@@ -86,7 +86,7 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
86
86
  if (hookName === 'data')
87
87
  dataHookExec = true;
88
88
  // This won't do anything if no hook has been defined or if the hook's env.client is false.
89
- await executeDataLikeHook(hookName, pageContext);
89
+ await execHookDataLike(hookName, pageContext);
90
90
  }
91
91
  }
92
92
  }
@@ -101,17 +101,17 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
101
101
  async function execHookClient(hookName, pageContext) {
102
102
  return await execHook(hookName, pageContext, (p) => preparePageContextForPublicUsageClient(p));
103
103
  }
104
- async function executeDataLikeHook(hookName, pageContext) {
104
+ async function execHookDataLike(hookName, pageContext) {
105
105
  let pageContextFromHook;
106
106
  if (hookName === 'data') {
107
- pageContextFromHook = await executeDataHook(pageContext);
107
+ pageContextFromHook = await execHookData(pageContext);
108
108
  }
109
109
  else {
110
- pageContextFromHook = await executeOnBeforeRenderHook(pageContext);
110
+ pageContextFromHook = await execHookOnBeforeRender(pageContext);
111
111
  }
112
112
  Object.assign(pageContext, pageContextFromHook);
113
113
  }
114
- async function executeDataHook(pageContext) {
114
+ async function execHookData(pageContext) {
115
115
  const res = await execHookClient('data', pageContext);
116
116
  const hook = res[0]; // TO-DO/soon: support cumulative
117
117
  if (!hook)
@@ -120,7 +120,7 @@ async function executeDataHook(pageContext) {
120
120
  const pageContextAddendum = { data: hookReturn };
121
121
  return pageContextAddendum;
122
122
  }
123
- async function executeOnBeforeRenderHook(pageContext) {
123
+ async function execHookOnBeforeRender(pageContext) {
124
124
  const res = await execHookClient('onBeforeRender', pageContext);
125
125
  const hook = res[0]; // TO-DO/soon: support cumulative
126
126
  if (!hook)
@@ -8,8 +8,8 @@ import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageCo
8
8
  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
- import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
12
- import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
11
+ import { execHookOnRenderClient } from '../shared/execHookOnRenderClient.js';
12
+ import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide, } 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 { execHookDirect, 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())
@@ -73,9 +73,11 @@ async function renderPageClientSide(renderArgs) {
73
73
  if (!globalObject.isTransitioning) {
74
74
  globalObject.isTransitioning = true;
75
75
  const hooks = getHookFromPageContextNew('onPageTransitionStart', previousPageContext);
76
- const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClientMinimal);
77
- if ('err' in res) {
78
- await onError(res.err);
76
+ try {
77
+ await execHookDirect(hooks, pageContext, preparePageContextForPublicUsageClientMinimal);
78
+ }
79
+ catch (err) {
80
+ await onError(err);
79
81
  return;
80
82
  }
81
83
  if (isRenderOutdated())
@@ -134,21 +136,17 @@ async function renderPageClientSide(renderArgs) {
134
136
  assert(!('urlOriginal' in pageContextFromRoute));
135
137
  objectAssign(pageContext, pageContextFromRoute);
136
138
  }
137
- try {
138
- objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal));
139
- }
140
- catch (err) {
141
- if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
142
- return;
143
- }
144
- else {
145
- // A user file has a syntax error
146
- await onError(err);
147
- return;
148
- }
149
- }
150
- if (isRenderOutdated())
139
+ const res = await loadPageConfigsLazyClientSideAndExecHook(pageContext, isFirstRender, isRenderOutdated);
140
+ /* Already called inside loadPageConfigsLazyClientSideAndExecHook()
141
+ if (isRenderOutdated()) return
142
+ */
143
+ if (res.skip)
151
144
  return;
145
+ if ('err' in res) {
146
+ await onError(res.err);
147
+ return;
148
+ }
149
+ augmentType(pageContext, res.pageContext);
152
150
  setPageContextCurrent(pageContext);
153
151
  // Set global hydrationCanBeAborted
154
152
  if (pageContext.exports.hydrationCanBeAborted) {
@@ -218,7 +216,11 @@ async function renderPageClientSide(renderArgs) {
218
216
  await renderPageView(pageContext);
219
217
  }
220
218
  }
221
- async function renderErrorPage(args) {
219
+ // When the normal page threw an error
220
+ // - Can be a URL rewrite upon `throw render('/some-url')`
221
+ // - Can be rendering the error page
222
+ // - Can be rendering Vike's generic error page (if no error page is defined, or if the error page throws an error)
223
+ async function renderPageOnError(args) {
222
224
  const onError = (err) => {
223
225
  if (!isSameErrorMessage(err, args.err)) {
224
226
  /* When we can't render the error page, we prefer showing a blank page over letting the server-side try because otherwise:
@@ -247,8 +249,6 @@ async function renderPageClientSide(renderArgs) {
247
249
  if (isRenderOutdated())
248
250
  return;
249
251
  objectAssign(pageContext, { routeParams: {} });
250
- if (args.is404)
251
- objectAssign(pageContext, { is404: true });
252
252
  if (args.pageContextError)
253
253
  objectAssign(pageContext, args.pageContextError);
254
254
  if ('err' in args) {
@@ -313,21 +313,17 @@ async function renderPageClientSide(renderArgs) {
313
313
  redirectHard(urlOriginal);
314
314
  return;
315
315
  }
316
- try {
317
- objectAssign(pageContext, await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal));
318
- }
319
- catch (err) {
320
- if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
321
- return;
322
- }
323
- else {
324
- // A user file has a syntax error
325
- onError(err);
326
- return;
327
- }
328
- }
329
- if (isRenderOutdated())
316
+ const res = await loadPageConfigsLazyClientSideAndExecHook(pageContext, isFirstRender, isRenderOutdated);
317
+ /* Already called inside loadPageConfigsLazyClientSideAndExecHook()
318
+ if (isRenderOutdated()) return
319
+ */
320
+ if (res.skip)
330
321
  return;
322
+ if ('err' in res) {
323
+ onError(res.err);
324
+ return;
325
+ }
326
+ augmentType(pageContext, res.pageContext);
331
327
  setPageContextCurrent(pageContext);
332
328
  let pageContextFromServerHooks;
333
329
  try {
@@ -361,7 +357,7 @@ async function renderPageClientSide(renderArgs) {
361
357
  async function renderPageView(pageContext, isErrorPage) {
362
358
  const onError = async (err) => {
363
359
  if (!isErrorPage) {
364
- await renderErrorPage({ err });
360
+ await renderPageOnError({ err });
365
361
  }
366
362
  else {
367
363
  if (!isSameErrorMessage(err, isErrorPage.err)) {
@@ -383,7 +379,7 @@ async function renderPageClientSide(renderArgs) {
383
379
  const onRenderClientPromise = (async () => {
384
380
  let onRenderClientError;
385
381
  try {
386
- await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
382
+ await execHookOnRenderClient(pageContext, preparePageContextForPublicUsageClient);
387
383
  }
388
384
  catch (err) {
389
385
  onRenderClientError = err;
@@ -405,9 +401,11 @@ async function renderPageClientSide(renderArgs) {
405
401
  */
406
402
  // onHydrationEnd()
407
403
  if (isFirstRender && !onRenderClientError) {
408
- const res = await execHookErrorHandling('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
409
- if ('err' in res) {
410
- await onError(res.err);
404
+ try {
405
+ await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
406
+ }
407
+ catch (err) {
408
+ await onError(err);
411
409
  if (!isErrorPage)
412
410
  return;
413
411
  }
@@ -422,9 +420,11 @@ async function renderPageClientSide(renderArgs) {
422
420
  globalObject.isTransitioning = undefined;
423
421
  assert(previousPageContext);
424
422
  const hooks = getHookFromPageContextNew('onPageTransitionEnd', previousPageContext);
425
- const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClient);
426
- if ('err' in res) {
427
- await onError(res.err);
423
+ try {
424
+ await execHookDirect(hooks, pageContext, preparePageContextForPublicUsageClient);
425
+ }
426
+ catch (err) {
427
+ await onError(err);
428
428
  if (!isErrorPage)
429
429
  return;
430
430
  }
@@ -491,22 +491,6 @@ function changeUrl(url, overwriteLastHistoryEntry) {
491
491
  return;
492
492
  pushHistoryState(url, overwriteLastHistoryEntry);
493
493
  }
494
- function handleErrorFetchingStaticAssets(err, pageContext, isFirstRender) {
495
- if (!isErrorFetchingStaticAssets(err)) {
496
- return false;
497
- }
498
- if (isFirstRender) {
499
- disableClientRouting(err, false);
500
- // This may happen if the frontend was newly deployed during hydration.
501
- // Ideally: re-try a couple of times by reloading the page (not entirely trivial to implement since `localStorage` is needed.)
502
- throw err;
503
- }
504
- else {
505
- disableClientRouting(err, true);
506
- }
507
- redirectHard(pageContext.urlOriginal);
508
- return true;
509
- }
510
494
  function disableClientRouting(err, log) {
511
495
  assert(isErrorFetchingStaticAssets(err));
512
496
  globalObject.clientRoutingIsDisabled = true;
@@ -596,3 +580,54 @@ function areKeysEqual(key1, key2) {
596
580
  function getPageContextClient() {
597
581
  return globalObject.renderedPageContext ?? null;
598
582
  }
583
+ async function loadPageConfigsLazyClientSideAndExecHook(pageContext, isFirstRender, isRenderOutdated) {
584
+ let hasErr = false;
585
+ let err;
586
+ let pageContextAddendum;
587
+ try {
588
+ pageContextAddendum = await loadPageConfigsLazyClientSide(pageContext.pageId, pageContext._pageFilesAll, pageContext._globalContext._pageConfigs, pageContext._globalContext._pageConfigGlobal);
589
+ }
590
+ catch (err_) {
591
+ err = err_;
592
+ hasErr = true;
593
+ if (handleErrorFetchingStaticAssets(err, pageContext, isFirstRender)) {
594
+ return { skip: true };
595
+ }
596
+ else {
597
+ // Syntax error in user file
598
+ }
599
+ }
600
+ if (isRenderOutdated())
601
+ return { skip: true };
602
+ if (hasErr)
603
+ return { err };
604
+ objectAssign(pageContext, pageContextAddendum);
605
+ try {
606
+ await execHook('onCreatePageContext', pageContext, preparePageContextForPublicUsageClient);
607
+ }
608
+ catch (err_) {
609
+ err = err;
610
+ hasErr = true;
611
+ }
612
+ if (isRenderOutdated())
613
+ return { skip: true };
614
+ if (hasErr)
615
+ return { err };
616
+ return { pageContext };
617
+ }
618
+ function handleErrorFetchingStaticAssets(err, pageContext, isFirstRender) {
619
+ if (!isErrorFetchingStaticAssets(err)) {
620
+ return false;
621
+ }
622
+ if (isFirstRender) {
623
+ disableClientRouting(err, false);
624
+ // This may happen if the frontend was newly deployed during hydration.
625
+ // Ideally: re-try a couple of times by reloading the page (not entirely trivial to implement since `localStorage` is needed.)
626
+ throw err;
627
+ }
628
+ else {
629
+ disableClientRouting(err, true);
630
+ }
631
+ redirectHard(pageContext.urlOriginal);
632
+ return true;
633
+ }
@@ -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 { loadPageConfigsLazyClientSide, } 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 loadPageConfigsLazyClientSideAndExecHook(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 loadPageConfigsLazyClientSideAndExecHook(pageContext) {
36
+ const pageContextAddendum = await loadPageConfigsLazyClientSide(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,7 +1,7 @@
1
1
  import { assertServerRouting } from '../../utils/assertRoutingType.js';
2
2
  assertServerRouting();
3
3
  import { createPageContextClientSide } from './createPageContextClientSide.js';
4
- import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
4
+ import { execHookOnRenderClient } from '../shared/execHookOnRenderClient.js';
5
5
  import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
6
6
  import { removeFoucBuster } from '../shared/removeFoucBuster.js';
7
7
  import { execHook } from '../../shared/hooks/execHook.js';
@@ -14,6 +14,6 @@ if (import.meta.env.DEV)
14
14
  hydrate();
15
15
  async function hydrate() {
16
16
  const pageContext = await createPageContextClientSide();
17
- await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
17
+ await execHookOnRenderClient(pageContext, preparePageContextForPublicUsageClient);
18
18
  await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
19
19
  }
@@ -1,4 +1,4 @@
1
- export { executeOnRenderClientHook };
1
+ export { execHookOnRenderClient };
2
2
  export type { PageContextBeforeRenderClient };
3
3
  import type { PageFile, VikeConfigPublicPageLazy } from '../../shared/getPageFiles.js';
4
4
  import type { PageContextForPublicUsageClientShared } from './preparePageContextForPublicUsageClientShared.js';
@@ -10,4 +10,4 @@ type PageContextBeforeRenderClient = {
10
10
  pageId: string;
11
11
  _globalContext: GlobalContextClientInternalShared;
12
12
  } & VikeConfigPublicPageLazy & PageContextForPublicUsageClientShared;
13
- declare function executeOnRenderClientHook<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
13
+ declare function execHookOnRenderClient<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
@@ -1,8 +1,8 @@
1
- export { executeOnRenderClientHook };
1
+ export { execHookOnRenderClient };
2
2
  import { assert, assertUsage } from '../runtime-server-routing/utils.js';
3
3
  import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
4
- import { execHookSingle } from '../../shared/hooks/execHook.js';
5
- async function executeOnRenderClientHook(pageContext, prepareForPublicUsage) {
4
+ import { execHookDirectSingle } from '../../shared/hooks/execHook.js';
5
+ async function execHookOnRenderClient(pageContext, prepareForPublicUsage) {
6
6
  let hook = null;
7
7
  {
8
8
  const renderHook = getHookFromPageContext(pageContext, 'render');
@@ -38,7 +38,7 @@ async function executeOnRenderClientHook(pageContext, prepareForPublicUsage) {
38
38
  }
39
39
  }
40
40
  // We don't use a try-catch wrapper because rendering errors are usually handled by the UI framework. (E.g. React's Error Boundaries.)
41
- await execHookSingle(hook, pageContext, prepareForPublicUsage);
41
+ await execHookDirectSingle(hook, pageContext, prepareForPublicUsage);
42
42
  }
43
43
  function getUrlToShowToUser(pageContext) {
44
44
  let url;
@@ -1,9 +1,17 @@
1
1
  export { loadPageConfigsLazyClientSide };
2
+ export type { PageContext_loadPageConfigsLazyClientSide };
2
3
  export { isErrorFetchingStaticAssets };
3
- import { type PageFile, type VikeConfigPublicPageLazy } from '../../shared/getPageFiles.js';
4
+ import { type PageFile } from '../../shared/getPageFiles.js';
4
5
  import type { PageConfigGlobalRuntime, PageConfigRuntime } from '../../types/PageConfig.js';
5
- type PageContextUserFilesLoaded = VikeConfigPublicPageLazy & {
6
- _pageFilesLoaded: PageFile[];
6
+ type PageContext_loadPageConfigsLazyClientSide = {
7
+ pageId: string;
8
+ _pageFilesAll: PageFile[];
9
+ _globalContext: {
10
+ _pageConfigs: PageConfigRuntime[];
11
+ _pageConfigGlobal: PageConfigGlobalRuntime;
12
+ };
7
13
  };
8
- declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<PageContextUserFilesLoaded>;
14
+ declare function loadPageConfigsLazyClientSide(pageId: string, pageFilesAll: PageFile[], pageConfigs: PageConfigRuntime[], pageConfigGlobal: PageConfigGlobalRuntime): Promise<import("../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
15
+ _pageFilesLoaded: PageFile[];
16
+ }>;
9
17
  declare function isErrorFetchingStaticAssets(err: unknown): boolean;
@@ -5,7 +5,7 @@ import { resolveVikeConfigPublicPageLazy } from '../../shared/page-configs/resol
5
5
  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
- const stamp = '__whileFetchingAssets';
8
+ const errStamp = '_isAssetsError';
9
9
  async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
10
10
  const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
11
11
  const pageConfig = findPageConfig(pageConfigs, pageId);
@@ -23,10 +23,10 @@ async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs,
23
23
  }
24
24
  catch (err) {
25
25
  if (isFetchError(err)) {
26
- Object.assign(err, { [stamp]: true });
26
+ Object.assign(err, { [errStamp]: true });
27
27
  }
28
28
  else {
29
- // A user file has a syntax error
29
+ // Syntax error in user file
30
30
  }
31
31
  throw err;
32
32
  }
@@ -40,7 +40,7 @@ function isErrorFetchingStaticAssets(err) {
40
40
  if (!err) {
41
41
  return false;
42
42
  }
43
- return err[stamp] === true;
43
+ return err[errStamp] === true;
44
44
  }
45
45
  // https://stackoverflow.com/questions/75928310/how-to-detect-that-import-some-url-failed-because-some-url-isnt-a-javasc
46
46
  function isFetchError(err) {