vike 0.4.144-commit-de18325 → 0.4.145

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 (44) hide show
  1. package/dist/cjs/node/prerender/runPrerender.js +9 -5
  2. package/dist/cjs/node/runtime/renderPage/log404/index.js +2 -1
  3. package/dist/cjs/shared/route/noRouteMatch.js +4 -0
  4. package/dist/cjs/utils/isExternalLink.js +7 -0
  5. package/dist/cjs/utils/onPageVisibilityChange.js +19 -0
  6. package/dist/cjs/utils/projectInfo.js +1 -1
  7. package/dist/esm/client/client-routing-runtime/createPageContext.js +0 -1
  8. package/dist/esm/client/client-routing-runtime/getBaseServer.d.ts +2 -1
  9. package/dist/esm/client/client-routing-runtime/getBaseServer.js +2 -1
  10. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +39 -0
  11. package/dist/esm/client/client-routing-runtime/{getPageContext.js → getPageContextFromHooks.js} +48 -74
  12. package/dist/esm/client/client-routing-runtime/installClientRouter.d.ts +0 -19
  13. package/dist/esm/client/client-routing-runtime/installClientRouter.js +11 -488
  14. package/dist/esm/client/client-routing-runtime/isClientSideRoutable.d.ts +3 -3
  15. package/dist/esm/client/client-routing-runtime/isClientSideRoutable.js +4 -7
  16. package/dist/esm/client/client-routing-runtime/navigate.js +2 -3
  17. package/dist/esm/client/client-routing-runtime/onBrowserHistoryNavigation.d.ts +4 -0
  18. package/dist/esm/client/client-routing-runtime/onBrowserHistoryNavigation.js +63 -0
  19. package/dist/esm/client/client-routing-runtime/onLinkClick.d.ts +2 -0
  20. package/dist/esm/client/client-routing-runtime/onLinkClick.js +40 -0
  21. package/dist/esm/client/client-routing-runtime/prefetch.js +7 -8
  22. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +19 -0
  23. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +347 -0
  24. package/dist/esm/client/client-routing-runtime/scrollRestoration.d.ts +6 -0
  25. package/dist/esm/client/client-routing-runtime/scrollRestoration.js +25 -0
  26. package/dist/esm/client/client-routing-runtime/setScrollPosition.d.ts +7 -0
  27. package/dist/esm/client/client-routing-runtime/setScrollPosition.js +77 -0
  28. package/dist/esm/client/client-routing-runtime/skipLink.js +9 -4
  29. package/dist/esm/client/client-routing-runtime/utils.d.ts +2 -0
  30. package/dist/esm/client/client-routing-runtime/utils.js +2 -0
  31. package/dist/esm/node/prerender/runPrerender.js +9 -5
  32. package/dist/esm/node/runtime/renderPage/log404/index.js +2 -1
  33. package/dist/esm/shared/route/noRouteMatch.d.ts +1 -0
  34. package/dist/esm/shared/route/noRouteMatch.js +1 -0
  35. package/dist/esm/utils/onPageVisibilityChange.d.ts +4 -0
  36. package/dist/esm/utils/onPageVisibilityChange.js +16 -0
  37. package/dist/esm/utils/projectInfo.d.ts +1 -1
  38. package/dist/esm/utils/projectInfo.js +1 -1
  39. package/package.json +1 -1
  40. package/dist/esm/client/client-routing-runtime/getPageContext.d.ts +0 -28
  41. package/dist/esm/client/client-routing-runtime/navigationState.d.ts +0 -5
  42. package/dist/esm/client/client-routing-runtime/navigationState.js +0 -14
  43. /package/dist/esm/{client/client-routing-runtime → utils}/isExternalLink.d.ts +0 -0
  44. /package/dist/esm/{client/client-routing-runtime → utils}/isExternalLink.js +0 -0
@@ -49,6 +49,7 @@ const assertPathIsFilesystemAbsolute_js_1 = require("../../utils/assertPathIsFil
49
49
  const abort_js_1 = require("../../shared/route/abort.js");
50
50
  const loadPageFilesServerSide_js_1 = require("../runtime/renderPage/loadPageFilesServerSide.js");
51
51
  const getHook_js_1 = require("../../shared/hooks/getHook.js");
52
+ const noRouteMatch_js_1 = require("../../shared/route/noRouteMatch.js");
52
53
  async function prerenderFromAPI(options = {}) {
53
54
  await runPrerender(options, 'prerender()');
54
55
  }
@@ -450,7 +451,7 @@ async function routeAndPrerender(prerenderContext, htmlFiles, prerenderPageIds,
450
451
  }
451
452
  if (hookName) {
452
453
  (0, utils_js_1.assert)(hookFilePath);
453
- (0, utils_js_1.assertUsage)(false, `The ${hookName}() hook defined by ${hookFilePath} returns a URL ${picocolors_1.default.cyan(urlOriginal)} that doesn't match the route of any of your pages. Make sure that the URLs returned by ${hookName}() always match the route of a page.`);
454
+ (0, utils_js_1.assertUsage)(false, `The ${hookName}() hook defined by ${hookFilePath} returns a URL ${picocolors_1.default.cyan(urlOriginal)} that ${noRouteMatch_js_1.noRouteMatch}. Make sure that the URLs returned by ${hookName}() always match the route of a page.`);
454
455
  }
455
456
  else {
456
457
  // `prerenderHookFile` is `null` when the URL was deduced by the Filesytem Routing of `.page.js` files. The `onBeforeRoute()` can override Filesystem Routing; it is therefore expected that the deduced URL may not match any page.
@@ -514,15 +515,18 @@ function warnContradictoryNoPrerenderList(prerenderPageIds, doNotPrerenderList)
514
515
  }
515
516
  function warnMissingPages(prerenderPageIds, doNotPrerenderList, renderContext, partial) {
516
517
  const isV1 = renderContext.pageConfigs.length > 0;
517
- const hookName = isV1 ? 'prerender' : 'onBeforePrerenderStart';
518
- const getPageAt = isV1 ? (pageId) => `defined at ${pageId}` : (pageId) => `\`${pageId}.page.*\``;
518
+ const hookName = isV1 ? 'onBeforePrerenderStart' : 'prerender';
519
+ /* TODO/after-v1-design-release: document setting `prerender: false` as an alternative to using prerender.partial (both in the warnings and the docs)
520
+ const optOutName = isV1 ? 'prerender' : 'doNotPrerender'
521
+ const msgAddendum = `Explicitly opt-out by setting the config ${optOutName} to ${isV1 ? 'false' : 'true'} or use the option prerender.partial`
522
+ */
519
523
  renderContext.allPageIds
520
524
  .filter((pageId) => !prerenderPageIds[pageId])
521
525
  .filter((pageId) => !doNotPrerenderList.find((p) => p.pageId === pageId))
522
526
  .filter((pageId) => !(0, error_page_js_1.isErrorPage)(pageId, renderContext.pageConfigs))
523
527
  .forEach((pageId) => {
524
- const pageAt = getPageAt(pageId);
525
- (0, utils_js_1.assertWarning)(partial, `Cannot pre-render page ${pageAt} because it has a non-static route, and no ${hookName}() hook returned (an) URL(s) matching the page's route. Either use a ${hookName}() hook to pre-render the page, or use the option ${picocolors_1.default.cyan('prerender.partial')} to suppress this warning, see https://vike.dev/prerender-config`, { onlyOnce: true });
528
+ const pageAt = isV1 ? pageId : `\`${pageId}.page.*\``;
529
+ (0, utils_js_1.assertWarning)(partial, `Cannot pre-render page ${pageAt} because it has a non-static route, while no ${hookName}() hook returned any URL matching the page's route. You need to use a ${hookName}() hook (https://vike.dev/${hookName}) providing a list of URLs for ${pageAt} that should be pre-rendered. If you don't want to pre-render ${pageAt} then use the option prerender.partial (https://vike.dev/prerender-config#partial) to suppress this warning.`, { onlyOnce: true });
526
530
  });
527
531
  }
528
532
  async function prerender404(htmlFiles, renderContext, prerenderContext) {
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getRoutesInfo = exports.log404 = void 0;
7
+ const noRouteMatch_js_1 = require("../../../../shared/route/noRouteMatch.js");
7
8
  const globalContext_js_1 = require("../../globalContext.js");
8
9
  const utils_js_1 = require("../../utils.js");
9
10
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
@@ -18,7 +19,7 @@ async function log404(pageContext) {
18
19
  const globalContext = (0, globalContext_js_1.getGlobalContext)();
19
20
  if (!globalContext.isProduction && !isFileRequest(urlPathname) && !pageContext.isClientSideNavigation) {
20
21
  const routesInfo = getRoutesInfo(pageRoutes);
21
- let msg = `URL ${picocolors_1.default.cyan(urlPathname)} doesn't match the route of any of your pages`;
22
+ let msg = `URL ${picocolors_1.default.cyan(urlPathname)} ${noRouteMatch_js_1.noRouteMatch}`;
22
23
  const outro = 'See https://vike.dev/routing for more information about routing.';
23
24
  if (!routesInfo) {
24
25
  msg = `${msg}. ${picocolors_1.default.dim(outro)}`;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.noRouteMatch = void 0;
4
+ exports.noRouteMatch = "doesn't match the route of any of your pages";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isExternalLink = void 0;
4
+ function isExternalLink(url) {
5
+ return !url.startsWith('/') && !url.startsWith('.') && !url.startsWith('?') && url !== '';
6
+ }
7
+ exports.isExternalLink = isExternalLink;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onPageShow = exports.onPageHide = void 0;
4
+ function onPageHide(listener) {
5
+ window.addEventListener('visibilitychange', () => {
6
+ if (document.visibilityState === 'hidden') {
7
+ listener();
8
+ }
9
+ });
10
+ }
11
+ exports.onPageHide = onPageHide;
12
+ function onPageShow(listener) {
13
+ window.addEventListener('visibilitychange', () => {
14
+ if (document.visibilityState === 'visible') {
15
+ listener();
16
+ }
17
+ });
18
+ }
19
+ exports.onPageShow = onPageShow;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectInfo = void 0;
4
4
  const assertSingleInstance_js_1 = require("./assertSingleInstance.js");
5
- const PROJECT_VERSION = '0.4.144-commit-de18325';
5
+ const PROJECT_VERSION = '0.4.145';
6
6
  const projectInfo = {
7
7
  projectName: 'Vike',
8
8
  projectVersion: PROJECT_VERSION,
@@ -22,7 +22,6 @@ async function createPageContext(urlOriginal) {
22
22
  _urlRewrite: null,
23
23
  _baseServer: baseServer,
24
24
  _isProduction: isProd,
25
- // TODO: use GlobalContext instead
26
25
  _pageFilesAll: pageFilesAll,
27
26
  _pageConfigs: pageConfigs,
28
27
  _pageConfigGlobal: pageConfigGlobal,
@@ -1 +1,2 @@
1
- export declare function getBaseServer(): string;
1
+ export { getBaseServer };
2
+ declare function getBaseServer(): string;
@@ -1,5 +1,6 @@
1
+ export { getBaseServer };
1
2
  import { assert } from '../server-routing-runtime/utils.js';
2
- export function getBaseServer() {
3
+ function getBaseServer() {
3
4
  // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
4
5
  const baseServer = import.meta.env.BASE_SERVER;
5
6
  assert(isBaseServer(baseServer));
@@ -0,0 +1,39 @@
1
+ export { getPageContextFromHooks_firstRender };
2
+ export { getPageContextFromHooks_uponNavigation };
3
+ export { getPageContextFromHooks_errorPage };
4
+ export { isAlreadyServerSideRouted };
5
+ export type { PageContextFromHooks };
6
+ import type { PageContextExports, PageFile } from '../../shared/getPageFiles.js';
7
+ import type { PageContextUrlComputedPropsInternal } from '../../shared/addUrlComputedProps.js';
8
+ import type { PageContextForRoute } from '../../shared/route/index.js';
9
+ import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
10
+ import type { PageContextForPassToClientWarning } from '../shared/getPageContextProxyForUser.js';
11
+ /** - pageContext set by user hooks
12
+ * - pageContext set by loadPageFilesClientSide()
13
+ * - misc:
14
+ * - pageContext.isHydration
15
+ * - pageContext._pageId
16
+ * - pageContext._hasPageContextFromClient
17
+ * - pageContext._hasPageContextFromServer
18
+ */
19
+ type PageContextFromHooks = {
20
+ _pageId: string;
21
+ isHydration: boolean;
22
+ _pageFilesLoaded: PageFile[];
23
+ } & PageContextExports & PageContextForPassToClientWarning;
24
+ type PageContext = PageContextUrlComputedPropsInternal & PageContextForRoute & {
25
+ _allPageIds: string[];
26
+ _pageFilesAll: PageFile[];
27
+ _pageConfigs: PageConfigRuntime[];
28
+ isBackwardNavigation: boolean | null;
29
+ };
30
+ declare function getPageContextFromHooks_firstRender(pageContext: {
31
+ urlOriginal: string;
32
+ } & PageContext): Promise<PageContextFromHooks>;
33
+ declare function getPageContextFromHooks_errorPage(pageContext: {
34
+ urlOriginal: string;
35
+ } & PageContext): Promise<PageContextFromHooks>;
36
+ declare function getPageContextFromHooks_uponNavigation(pageContext: {
37
+ _pageId: string;
38
+ } & PageContext): Promise<PageContextFromHooks>;
39
+ declare function isAlreadyServerSideRouted(err: unknown): boolean;
@@ -1,13 +1,11 @@
1
- export { getPageContext };
2
- export { getPageContextErrorPage };
3
- export { checkIf404 };
1
+ export { getPageContextFromHooks_firstRender };
2
+ export { getPageContextFromHooks_uponNavigation };
3
+ export { getPageContextFromHooks_errorPage };
4
4
  export { isAlreadyServerSideRouted };
5
- import { navigationState } from './navigationState.js';
6
5
  import { assert, assertUsage, hasProp, objectAssign, getProjectError, serverSideRouteTo, executeHook, isObject, getGlobalObject } from './utils.js';
7
6
  import { parse } from '@brillout/json-serializer/parse';
8
7
  import { getPageContextSerializedInHtml } from '../shared/getPageContextSerializedInHtml.js';
9
8
  import { analyzePageServerSide } from '../../shared/getPageFiles/analyzePageServerSide.js';
10
- import { route } from '../../shared/route/index.js';
11
9
  import { getErrorPageId } from '../../shared/error-page.js';
12
10
  import { getHook } from '../../shared/hooks/getHook.js';
13
11
  import { preparePageContextForUserConsumptionClientSide } from '../shared/preparePageContextForUserConsumptionClientSide.js';
@@ -19,85 +17,75 @@ import { assertOnBeforeRenderHookReturn } from '../../shared/assertOnBeforeRende
19
17
  import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
20
18
  import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
21
19
  const globalObject = getGlobalObject('router/getPageContext.ts', {});
22
- async function getPageContext(pageContext) {
23
- if (pageContext._isFirstRenderAttempt && navigationState.isFirstUrl(pageContext.urlOriginal)) {
24
- const pageContextAddendum = await getPageContextFirstRender(pageContext);
25
- setPageContextInitHasClientData(pageContextAddendum);
26
- return pageContextAddendum;
27
- }
28
- else {
29
- const pageContextAddendum = await getPageContextUponNavigation(pageContext);
30
- setPageContextInitHasClientData(pageContextAddendum);
31
- return pageContextAddendum;
32
- }
33
- }
34
- async function getPageContextFirstRender(pageContext) {
35
- const pageContextAddendum = getPageContextSerializedInHtml();
36
- removeBuiltInOverrides(pageContextAddendum);
37
- objectAssign(pageContextAddendum, {
20
+ async function getPageContextFromHooks_firstRender(pageContext) {
21
+ const pageContextFromHooks = getPageContextSerializedInHtml();
22
+ removeBuiltInOverrides(pageContextFromHooks);
23
+ objectAssign(pageContextFromHooks, {
38
24
  isHydration: true,
39
25
  _hasPageContextFromClient: false
40
26
  });
41
- objectAssign(pageContextAddendum, await loadPageFilesClientSide(pageContextAddendum._pageId, pageContext));
27
+ objectAssign(pageContextFromHooks, await loadPageFilesClientSide(pageContextFromHooks._pageId, pageContext));
42
28
  {
43
- const pageContextForHook = { ...pageContext, ...pageContextAddendum };
29
+ const pageContextForHook = { ...pageContext, ...pageContextFromHooks };
44
30
  if (await onBeforeRenderClientOnlyExists(pageContextForHook)) {
45
31
  const pageContextFromHook = await executeOnBeforeRenderHookClientSide(pageContextForHook);
46
- objectAssign(pageContextAddendum, pageContextFromHook);
32
+ objectAssign(pageContextFromHooks, pageContextFromHook);
47
33
  }
48
34
  }
49
- return pageContextAddendum;
35
+ setPageContextInitHasClientData(pageContextFromHooks);
36
+ return pageContextFromHooks;
50
37
  }
51
- async function getPageContextErrorPage(pageContext) {
38
+ async function getPageContextFromHooks_errorPage(pageContext) {
52
39
  const errorPageId = getErrorPageId(pageContext._pageFilesAll, pageContext._pageConfigs);
53
40
  if (!errorPageId)
54
41
  throw new Error('No error page defined.');
55
- const pageContextAddendum = {
42
+ const pageContextFromHooks = {
56
43
  isHydration: false,
57
44
  _pageId: errorPageId
58
45
  };
59
- objectAssign(pageContextAddendum, await getPageContextAlreadyRouted({ ...pageContext, ...pageContextAddendum }, true));
60
- return pageContextAddendum;
46
+ objectAssign(pageContextFromHooks, await getPageContextAlreadyRouted({ ...pageContext, ...pageContextFromHooks }, true));
47
+ return pageContextFromHooks;
61
48
  }
62
- async function getPageContextUponNavigation(pageContext) {
63
- const pageContextAddendum = {
64
- isHydration: false
49
+ async function getPageContextFromHooks_uponNavigation(pageContext) {
50
+ const pageContextFromHooks = {
51
+ isHydration: false,
52
+ _pageId: pageContext._pageId
65
53
  };
66
- objectAssign(pageContextAddendum, await getPageContextFromRoute(pageContext));
67
- objectAssign(pageContextAddendum, await getPageContextAlreadyRouted({ ...pageContext, ...pageContextAddendum }, false));
68
- return pageContextAddendum;
54
+ objectAssign(pageContextFromHooks, await getPageContextAlreadyRouted({ ...pageContext, ...pageContextFromHooks }, false));
55
+ setPageContextInitHasClientData(pageContextFromHooks);
56
+ return pageContextFromHooks;
69
57
  }
70
58
  async function getPageContextAlreadyRouted(pageContext, isErrorPage) {
71
- let pageContextAddendum = {};
72
- objectAssign(pageContextAddendum, await loadPageFilesClientSide(pageContext._pageId, pageContext));
59
+ let pageContextFromHooks = {};
60
+ objectAssign(pageContextFromHooks, await loadPageFilesClientSide(pageContext._pageId, pageContext));
73
61
  // Needs to be called before any client-side hook, because it may contain pageContextInit.user which is needed for guard() and onBeforeRender()
74
62
  if (
75
63
  // For the error page, we cannot fetch pageContext from the server because the pageContext JSON request is based on the URL
76
64
  !isErrorPage &&
77
- (await hasPageContextServer({ ...pageContext, ...pageContextAddendum }))) {
65
+ (await hasPageContextServer({ ...pageContext, ...pageContextFromHooks }))) {
78
66
  const pageContextFromServer = await fetchPageContextFromServer(pageContext);
79
67
  if (!pageContextFromServer['_isError']) {
80
- objectAssign(pageContextAddendum, pageContextFromServer);
68
+ objectAssign(pageContextFromHooks, pageContextFromServer);
81
69
  }
82
70
  else {
83
71
  const errorPageId = getErrorPageId(pageContext._pageFilesAll, pageContext._pageConfigs);
84
72
  assert(errorPageId);
85
- pageContextAddendum = {};
86
- objectAssign(pageContextAddendum, {
73
+ pageContextFromHooks = {};
74
+ objectAssign(pageContextFromHooks, {
87
75
  isHydration: false,
88
76
  _pageId: errorPageId
89
77
  });
90
- objectAssign(pageContextAddendum, await loadPageFilesClientSide(pageContextAddendum._pageId, pageContext));
78
+ objectAssign(pageContextFromHooks, await loadPageFilesClientSide(pageContextFromHooks._pageId, pageContext));
91
79
  assert(hasProp(pageContextFromServer, 'is404', 'boolean'));
92
80
  assert(hasProp(pageContextFromServer, 'pageProps', 'object'));
93
81
  assert(hasProp(pageContextFromServer.pageProps, 'is404', 'boolean'));
94
82
  // When the user hasn't define a `_error.page.js` file: the mechanism with `serverSideError: true` is used instead
95
83
  assert(!('serverSideError' in pageContextFromServer));
96
- objectAssign(pageContextAddendum, pageContextFromServer);
84
+ objectAssign(pageContextFromHooks, pageContextFromServer);
97
85
  }
98
86
  }
99
87
  else {
100
- objectAssign(pageContextAddendum, { _hasPageContextFromServer: false });
88
+ objectAssign(pageContextFromHooks, { _hasPageContextFromServer: false });
101
89
  // We don't need to call guard() on the client-side if we fetch pageContext from the server side. (Because the `${url}.pageContext.json` HTTP request will already trigger the routing and guard() hook on the serve-side.)
102
90
  // We cannot call guard() before retrieving pageContext from server, since the server-side may define pageContextInit.user which is paramount for guard() hooks
103
91
  if (!isErrorPage) {
@@ -105,41 +93,41 @@ async function getPageContextAlreadyRouted(pageContext, isErrorPage) {
105
93
  await executeGuardHook({
106
94
  _hasPageContextFromClient: false,
107
95
  ...pageContext,
108
- ...pageContextAddendum
96
+ ...pageContextFromHooks
109
97
  }, (pageContext) => preparePageContextForUserConsumptionClientSide(pageContext, true));
110
98
  }
111
99
  }
112
100
  {
113
101
  // For the error page, we also execute the client-side onBeforeRender() hook, but maybe we shouldn't? The server-side does it as well (but maybe it shouldn't).
114
- const pageContextFromHook = await executeOnBeforeRenderHookClientSide({ ...pageContext, ...pageContextAddendum });
115
- objectAssign(pageContextAddendum, pageContextFromHook);
102
+ const pageContextFromOnBeforeRender = await executeOnBeforeRenderHookClientSide({
103
+ ...pageContext,
104
+ ...pageContextFromHooks
105
+ });
106
+ objectAssign(pageContextFromHooks, pageContextFromOnBeforeRender);
116
107
  }
117
- return pageContextAddendum;
108
+ return pageContextFromHooks;
118
109
  }
119
110
  async function executeOnBeforeRenderHookClientSide(pageContext) {
120
111
  const hook = getHook(pageContext, 'onBeforeRender');
121
112
  if (!hook) {
122
- const pageContextAddendum = {
113
+ const pageContextFromOnBeforeRender = {
123
114
  _hasPageContextFromClient: false
124
115
  };
125
- return pageContextAddendum;
116
+ return pageContextFromOnBeforeRender;
126
117
  }
127
118
  const onBeforeRender = hook.hookFn;
128
- const pageContextAddendum = {
119
+ const pageContextFromOnBeforeRender = {
129
120
  _hasPageContextFromClient: true
130
121
  };
131
122
  const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide({
132
123
  ...pageContext,
133
- ...pageContextAddendum
124
+ ...pageContextFromOnBeforeRender
134
125
  }, true);
135
126
  const hookResult = await executeHook(() => onBeforeRender(pageContextForUserConsumption), 'onBeforeRender', hook.hookFilePath);
136
127
  assertOnBeforeRenderHookReturn(hookResult, hook.hookFilePath);
137
128
  const pageContextFromHook = hookResult?.pageContext;
138
- objectAssign(pageContextAddendum, pageContextFromHook);
139
- return pageContextAddendum;
140
- }
141
- async function hasPageContextServer(pageContext) {
142
- return !!globalObject.pageContextInitHasClientData || (await onBeforeRenderServerOnlyExists(pageContext));
129
+ objectAssign(pageContextFromOnBeforeRender, pageContextFromHook);
130
+ return pageContextFromOnBeforeRender;
143
131
  }
144
132
  // Workaround for the fact that the client-side cannot known whether a pageContext JSON request is needed in order to fetch pageContextInit data passed to the client.
145
133
  // - The workaround is reliable as long as the user sets additional pageContextInit to undefined instead of not defining the property:
@@ -158,6 +146,9 @@ function setPageContextInitHasClientData(pageContext) {
158
146
  globalObject.pageContextInitHasClientData = true;
159
147
  }
160
148
  }
149
+ async function hasPageContextServer(pageContext) {
150
+ return !!globalObject.pageContextInitHasClientData || (await onBeforeRenderServerOnlyExists(pageContext));
151
+ }
161
152
  async function onBeforeRenderServerOnlyExists(pageContext) {
162
153
  if (pageContext._pageConfigs.length > 0) {
163
154
  // V1
@@ -182,23 +173,6 @@ async function onBeforeRenderClientOnlyExists(pageContext) {
182
173
  return false;
183
174
  }
184
175
  }
185
- async function getPageContextFromRoute(pageContext) {
186
- const pageContextFromRoute = await route(pageContext);
187
- // We'll be able to remove this once async route functions are deprecated (because we'll be able to skip link hijacking if a link doesn't match a route (because whether to call event.preventDefault() needs to be determined synchronously))
188
- if (!pageContextFromRoute._pageId) {
189
- const err = new Error('No routing match');
190
- markIs404(err);
191
- throw err;
192
- }
193
- assert(hasProp(pageContextFromRoute, '_pageId', 'string'));
194
- return pageContextFromRoute;
195
- }
196
- function markIs404(err) {
197
- objectAssign(err, { _is404: true });
198
- }
199
- function checkIf404(err) {
200
- return isObject(err) && err._is404 === true;
201
- }
202
176
  async function fetchPageContextFromServer(pageContext) {
203
177
  const pageContextUrl = getPageContextRequestUrl(pageContext._urlRewrite ?? pageContext.urlOriginal);
204
178
  const response = await fetch(pageContextUrl);
@@ -1,21 +1,2 @@
1
1
  export { installClientRouter };
2
- export { disableClientRouting };
3
- export { isDisableAutomaticLinkInterception };
4
- export { renderPageClientSide };
5
- import { ScrollPosition } from './history.js';
6
- import { PageContextFromRewrite } from '../../shared/route/abort.js';
7
2
  declare function installClientRouter(): void;
8
- type RenderArgs = {
9
- scrollTarget: ScrollTarget;
10
- isBackwardNavigation: boolean | null;
11
- urlOriginal?: string;
12
- overwriteLastHistoryEntry?: boolean;
13
- checkIfClientSideRenderable?: boolean;
14
- pageContextsFromRewrite?: PageContextFromRewrite[];
15
- redirectCount?: number;
16
- isUserLandNavigation?: boolean;
17
- };
18
- declare function renderPageClientSide(renderArgs: RenderArgs): Promise<void>;
19
- type ScrollTarget = ScrollPosition | 'scroll-to-top-or-hash' | 'preserve-scroll';
20
- declare function isDisableAutomaticLinkInterception(): boolean;
21
- declare function disableClientRouting(err: unknown, log: boolean): void;