vike 0.4.229-commit-7056ef0 → 0.4.229-commit-5da80bf

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 (149) hide show
  1. package/dist/cjs/client/server-routing-runtime/utils.js +1 -0
  2. package/dist/cjs/client/shared/{preparePageContextForUserConsumptionClientSide.js → preparePageContextForPublicUsageClientShared.js} +15 -19
  3. package/dist/cjs/node/api/build.js +1 -5
  4. package/dist/cjs/node/plugin/shared/loggerNotProd.js +2 -2
  5. package/dist/cjs/node/prerender/runPrerender.js +40 -36
  6. package/dist/cjs/node/prerender/utils.js +1 -1
  7. package/dist/cjs/node/runtime/globalContext.js +13 -27
  8. package/dist/cjs/node/runtime/html/serializeContext.js +1 -1
  9. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +4 -8
  10. package/dist/cjs/node/runtime/renderPage/execHookServer.js +11 -0
  11. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +9 -9
  12. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  13. package/dist/cjs/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +10 -0
  14. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  15. package/dist/cjs/node/runtime/renderPage.js +7 -5
  16. package/dist/cjs/node/runtime/utils.js +1 -1
  17. package/dist/cjs/shared/NOT_SERIALIZABLE.js +0 -1
  18. package/dist/cjs/shared/addIs404ToPageProps.js +0 -7
  19. package/dist/cjs/shared/createGlobalContextShared.js +6 -3
  20. package/dist/cjs/shared/createPageContextShared.js +14 -3
  21. package/dist/cjs/shared/getPageContext.js +3 -3
  22. package/dist/cjs/shared/getPageContextUrlComputed.js +2 -36
  23. package/dist/cjs/shared/getProxyForPublicUsage.js +106 -0
  24. package/dist/cjs/shared/hooks/execHook.js +164 -0
  25. package/dist/cjs/shared/page-configs/getUserFriendlyConfigs.js +17 -15
  26. package/dist/cjs/shared/prepareGlobalContextForPublicUsage.js +10 -0
  27. package/dist/cjs/shared/preparePageContextForPublicUsage.js +75 -0
  28. package/dist/cjs/shared/route/abort.js +2 -2
  29. package/dist/cjs/shared/route/executeGuardHook.js +4 -9
  30. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +4 -3
  31. package/dist/cjs/shared/route/index.js +2 -4
  32. package/dist/cjs/shared/route/loadPageRoutes.js +6 -0
  33. package/dist/cjs/shared/route/resolveRouteFunction.js +14 -10
  34. package/dist/cjs/shared/utils.js +2 -0
  35. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  36. package/dist/cjs/utils/objectAssign.js +3 -3
  37. package/dist/cjs/utils/objectDefineProperty.js +1 -1
  38. package/dist/esm/client/client-routing-runtime/createPageContextClientSide.d.ts +10 -7
  39. package/dist/esm/client/client-routing-runtime/createPageContextClientSide.js +8 -10
  40. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +397 -20
  41. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +15 -15
  42. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +1 -0
  43. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +3 -8
  44. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.d.ts +11 -0
  45. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  46. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +135 -0
  47. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +66 -72
  48. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  49. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  50. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +8 -6
  51. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +8 -10
  52. package/dist/esm/client/server-routing-runtime/entry.js +4 -6
  53. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +1 -0
  54. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.d.ts +9 -0
  55. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  56. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
  57. package/dist/esm/client/server-routing-runtime/utils.js +1 -0
  58. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +1 -0
  59. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +3 -3
  60. package/dist/esm/client/shared/executeOnRenderClientHook.js +4 -13
  61. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.d.ts +11 -0
  62. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +40 -0
  63. package/dist/esm/node/api/build.js +1 -2
  64. package/dist/esm/node/plugin/shared/loggerNotProd.js +1 -1
  65. package/dist/esm/node/prerender/runPrerender.d.ts +15 -115
  66. package/dist/esm/node/prerender/runPrerender.js +40 -36
  67. package/dist/esm/node/prerender/utils.d.ts +1 -1
  68. package/dist/esm/node/prerender/utils.js +1 -1
  69. package/dist/esm/node/runtime/globalContext.d.ts +5 -373
  70. package/dist/esm/node/runtime/globalContext.js +14 -28
  71. package/dist/esm/node/runtime/html/serializeContext.d.ts +1 -1
  72. package/dist/esm/node/runtime/html/serializeContext.js +1 -1
  73. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +15 -62
  74. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +5 -9
  75. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +12 -0
  76. package/dist/esm/node/runtime/renderPage/execHookServer.js +9 -0
  77. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +1 -1
  78. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +9 -9
  79. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +4 -2
  80. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  81. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.d.ts +20 -0
  82. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +8 -0
  83. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +15 -115
  84. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
  85. package/dist/esm/node/runtime/renderPage.d.ts +10 -60
  86. package/dist/esm/node/runtime/renderPage.js +7 -5
  87. package/dist/esm/node/runtime/utils.d.ts +1 -1
  88. package/dist/esm/node/runtime/utils.js +1 -1
  89. package/dist/esm/shared/NOT_SERIALIZABLE.js +0 -1
  90. package/dist/esm/shared/addIs404ToPageProps.d.ts +1 -6
  91. package/dist/esm/shared/addIs404ToPageProps.js +1 -8
  92. package/dist/esm/shared/createGlobalContextShared.d.ts +2 -0
  93. package/dist/esm/shared/createGlobalContextShared.js +7 -4
  94. package/dist/esm/shared/createPageContextShared.d.ts +6 -2
  95. package/dist/esm/shared/createPageContextShared.js +15 -4
  96. package/dist/esm/shared/getPageContext.d.ts +1 -1
  97. package/dist/esm/shared/getPageContext.js +1 -1
  98. package/dist/esm/shared/getPageContextUrlComputed.d.ts +2 -5
  99. package/dist/esm/shared/getPageContextUrlComputed.js +3 -37
  100. package/dist/esm/shared/getProxyForPublicUsage.d.ts +12 -0
  101. package/dist/esm/shared/getProxyForPublicUsage.js +104 -0
  102. package/dist/esm/shared/hooks/execHook.d.ts +63 -0
  103. package/dist/esm/shared/hooks/execHook.js +162 -0
  104. package/dist/esm/shared/hooks/getHook.d.ts +3 -1
  105. package/dist/esm/shared/page-configs/Config.d.ts +3 -3
  106. package/dist/esm/shared/page-configs/getUserFriendlyConfigs.js +18 -16
  107. package/dist/esm/shared/prepareGlobalContextForPublicUsage.d.ts +7 -0
  108. package/dist/esm/shared/prepareGlobalContextForPublicUsage.js +8 -0
  109. package/dist/esm/shared/preparePageContextForPublicUsage.d.ts +12 -0
  110. package/dist/esm/shared/preparePageContextForPublicUsage.js +73 -0
  111. package/dist/esm/shared/route/abort.js +1 -1
  112. package/dist/esm/shared/route/executeGuardHook.d.ts +4 -3
  113. package/dist/esm/shared/route/executeGuardHook.js +4 -9
  114. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +4 -3
  115. package/dist/esm/shared/route/index.js +2 -4
  116. package/dist/esm/shared/route/loadPageRoutes.d.ts +2 -1
  117. package/dist/esm/shared/route/loadPageRoutes.js +7 -1
  118. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  119. package/dist/esm/shared/route/resolveRouteFunction.js +14 -10
  120. package/dist/esm/shared/types.d.ts +13 -3
  121. package/dist/esm/shared/utils.d.ts +2 -0
  122. package/dist/esm/shared/utils.js +2 -0
  123. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  124. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  125. package/dist/esm/utils/objectAssign.d.ts +1 -1
  126. package/dist/esm/utils/objectAssign.js +3 -3
  127. package/dist/esm/utils/objectDefineProperty.d.ts +0 -1
  128. package/dist/esm/utils/objectDefineProperty.js +1 -1
  129. package/package.json +2 -2
  130. package/dist/cjs/client/shared/getPageContextProxyForUser.js +0 -16
  131. package/dist/cjs/node/runtime/renderPage/executeHookServer.js +0 -11
  132. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -16
  133. package/dist/cjs/shared/hooks/executeHook.js +0 -108
  134. package/dist/cjs/shared/preparePageContextForUserConsumption.js +0 -34
  135. package/dist/cjs/utils/getPublicProxy.js +0 -27
  136. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +0 -2
  137. package/dist/esm/client/shared/getPageContextProxyForUser.js +0 -14
  138. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +0 -12
  139. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.js +0 -44
  140. package/dist/esm/node/runtime/renderPage/executeHookServer.d.ts +0 -13
  141. package/dist/esm/node/runtime/renderPage/executeHookServer.js +0 -9
  142. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +0 -24
  143. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -14
  144. package/dist/esm/shared/hooks/executeHook.d.ts +0 -34
  145. package/dist/esm/shared/hooks/executeHook.js +0 -106
  146. package/dist/esm/shared/preparePageContextForUserConsumption.d.ts +0 -5
  147. package/dist/esm/shared/preparePageContextForUserConsumption.js +0 -32
  148. package/dist/esm/utils/getPublicProxy.d.ts +0 -2
  149. package/dist/esm/utils/getPublicProxy.js +0 -25
@@ -3,10 +3,17 @@ export { getRenderCount };
3
3
  export { disableClientRouting };
4
4
  export { firstRenderStartPromise };
5
5
  export { getPageContextClient };
6
+ export type { PageContextBegin };
6
7
  import { type PageContextFromRewrite } from '../../shared/route/abort.js';
7
8
  import { type ScrollTarget } from './setScrollPosition.js';
9
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
8
10
  import type { PageContextClient } from '../../shared/types.js';
9
11
  declare const firstRenderStartPromise: Promise<void>;
12
+ type PageContextRouted = {
13
+ pageId: string;
14
+ routeParams: Record<string, string>;
15
+ };
16
+ type PageContextBegin = Awaited<ReturnType<typeof getPageContextBegin>>;
10
17
  type RenderArgs = {
11
18
  scrollTarget: ScrollTarget;
12
19
  isBackwardNavigation: boolean | null;
@@ -19,6 +26,134 @@ type RenderArgs = {
19
26
  pageContextInitClient?: Record<string, unknown>;
20
27
  };
21
28
  declare function renderPageClientSide(renderArgs: RenderArgs): Promise<void>;
29
+ declare function getPageContextBegin(isForErrorPage: boolean, { urlOriginal, isBackwardNavigation, pageContextsFromRewrite, isClientSideNavigation, pageContextInitClient, isFirstRender }: {
30
+ urlOriginal: string;
31
+ isBackwardNavigation: boolean | null;
32
+ pageContextsFromRewrite: PageContextFromRewrite[];
33
+ isClientSideNavigation: boolean;
34
+ pageContextInitClient: Record<string, unknown> | undefined;
35
+ isFirstRender: boolean;
36
+ }): Promise<{
37
+ _isOriginalObject: true;
38
+ isPageContext: true;
39
+ } & {
40
+ isClientSide: true;
41
+ isPrerendering: false;
42
+ urlOriginal: string;
43
+ _globalContext: {
44
+ isGlobalContext: true;
45
+ _isOriginalObject: true;
46
+ _virtualFileExports: unknown;
47
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
48
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
49
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
50
+ _allPageIds: string[];
51
+ _userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
52
+ config: import("../../types/index.js").ConfigResolved;
53
+ pages: {
54
+ [k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
55
+ route: import("../../shared/page-configs/Config.js").Route;
56
+ isErrorPage?: undefined;
57
+ } | {
58
+ route?: undefined;
59
+ isErrorPage: true;
60
+ });
61
+ };
62
+ } & {
63
+ isClientSide: true;
64
+ } & {
65
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
66
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
67
+ };
68
+ _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
69
+ _pageConfigs: import("../../__internal/index.js").PageConfig[];
70
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
71
+ _allPageIds: string[];
72
+ _pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
73
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
74
+ _urlHandler: null;
75
+ _urlRewrite: null | string;
76
+ _baseServer: string;
77
+ } & {
78
+ urlParsed: import("./utils.js").UrlPublic;
79
+ urlPathname: string;
80
+ url: string;
81
+ } & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & {
82
+ isBackwardNavigation: boolean | null;
83
+ isClientSideNavigation: boolean;
84
+ isHydration: boolean;
85
+ previousPageContext: ({
86
+ pageId: string;
87
+ } & PageConfigUserFriendlyOld & PageContextRouted & import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum & import("../../shared/types.js").PageContextInternalClient & Omit<Partial<{
88
+ isPageContext: true;
89
+ Page: import("../../types/index.js").Config["Page"];
90
+ routeParams: Record<string, string>;
91
+ data: unknown;
92
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
93
+ configEntries: import("../../types/index.js").ConfigEntries;
94
+ exports: Record<string, unknown>;
95
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
96
+ urlOriginal: string;
97
+ headers: Record<string, string> | null;
98
+ headersOriginal?: unknown;
99
+ is404: boolean | null;
100
+ isClientSideNavigation: boolean;
101
+ abortReason?: unknown;
102
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
103
+ errorWhileRendering?: unknown;
104
+ pageId: string | null;
105
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
106
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
107
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
108
+ url: string;
109
+ pageExports: Record<string, unknown>;
110
+ isBaseMissing?: true;
111
+ }> & Pick<{
112
+ isPageContext: true;
113
+ Page: import("../../types/index.js").Config["Page"];
114
+ routeParams: Record<string, string>;
115
+ data: unknown;
116
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
117
+ configEntries: import("../../types/index.js").ConfigEntries;
118
+ exports: Record<string, unknown>;
119
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
120
+ urlOriginal: string;
121
+ headers: Record<string, string> | null;
122
+ headersOriginal?: unknown;
123
+ is404: boolean | null;
124
+ isClientSideNavigation: boolean;
125
+ abortReason?: unknown;
126
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
127
+ errorWhileRendering?: unknown;
128
+ pageId: string | null;
129
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
130
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
131
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
132
+ url: string;
133
+ pageExports: Record<string, unknown>;
134
+ isBaseMissing?: true;
135
+ }, "exports" | "pageId" | "Page" | "data" | "config" | "pageExports" | "routeParams" | "configEntries" | "exportsAll" | "abortReason" | "source" | "sources" | "from"> & {
136
+ isClientSide: true;
137
+ isPrerendering: false;
138
+ } & {
139
+ isHydration: boolean;
140
+ isBackwardNavigation: boolean | null;
141
+ previousPageContext: PageContextClient<unknown> | null;
142
+ globalContext: import("./globalContext.js").GlobalContextClient;
143
+ } & {
144
+ urlOriginal: string;
145
+ } & {
146
+ urlParsed: import("./utils.js").UrlPublic;
147
+ urlPathname: string;
148
+ url: string;
149
+ }, ("globalContext" | "Page" | "data") | "previousPageContext"> & {
150
+ previousPageContext: {
151
+ pageId: string;
152
+ } | null;
153
+ } & {
154
+ urlOriginal: string;
155
+ }) | null;
156
+ }>;
22
157
  declare global {
23
158
  var _vike: {
24
159
  fullyRenderedUrl?: string;
@@ -4,12 +4,11 @@ export { disableClientRouting };
4
4
  export { firstRenderStartPromise };
5
5
  export { getPageContextClient };
6
6
  import { assert, isSameErrorMessage, objectAssign, redirectHard, getGlobalObject, hasProp, augmentType, genPromise, isCallable, catchInfiniteLoop } from './utils.js';
7
- import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient, executeHookClient } from './getPageContextFromHooks.js';
7
+ import { getPageContextFromClientHooks, getPageContextFromServerHooks, getPageContextFromHooks_isHydration, getPageContextFromHooks_serialized, setPageContextInitIsPassedToClient, execHookClient } from './getPageContextFromHooks.js';
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
11
  import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
12
- import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
13
12
  import { isErrorFetchingStaticAssets, loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
14
13
  import { pushHistoryState } from './history.js';
15
14
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
@@ -21,7 +20,10 @@ import { getErrorPageId } from '../../shared/error-page.js';
21
20
  import { setPageContextCurrent } from './getPageContextCurrent.js';
22
21
  import { getRouteStringParameterList } from '../../shared/route/resolveRouteString.js';
23
22
  import { getCurrentUrl } from '../shared/getCurrentUrl.js';
24
- import { executeHook } from '../../shared/hooks/executeHook.js';
23
+ import { execHooksErrorHandling, execHookErrorHandling } from '../../shared/hooks/execHook.js';
24
+ import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
25
+ import { getHookFromPageContextNew } from '../../shared/hooks/getHook.js';
26
+ import { preparePageContextForPublicUsageClientMinimal } from '../shared/preparePageContextForPublicUsageClientShared.js';
25
27
  const globalObject = getGlobalObject('client-routing-runtime/renderPageClientSide.ts', (() => {
26
28
  const { promise: firstRenderStartPromise, resolve: firstRenderStartPromiseResolve } = genPromise();
27
29
  return {
@@ -39,6 +41,14 @@ async function renderPageClientSide(renderArgs) {
39
41
  addLinkPrefetchHandlers_unwatch();
40
42
  const { isRenderOutdated, setHydrationCanBeAborted, isFirstRender } = getIsRenderOutdated();
41
43
  assertNoInfiniteAbortLoop(pageContextsFromRewrite.length, redirectCount);
44
+ const pageContextBeginArgs = {
45
+ urlOriginal,
46
+ isBackwardNavigation,
47
+ pageContextsFromRewrite,
48
+ isClientSideNavigation,
49
+ pageContextInitClient,
50
+ isFirstRender
51
+ };
42
52
  if (globalObject.clientRoutingIsDisabled) {
43
53
  redirectHard(urlOriginal);
44
54
  return;
@@ -52,7 +62,7 @@ async function renderPageClientSide(renderArgs) {
52
62
  const onError = async (err) => {
53
63
  await renderErrorPage({ err });
54
64
  };
55
- const pageContext = await getPageContextBegin(false);
65
+ const pageContext = await getPageContextBegin(false, pageContextBeginArgs);
56
66
  if (isRenderOutdated())
57
67
  return;
58
68
  // onPageTransitionStart()
@@ -62,20 +72,14 @@ async function renderPageClientSide(renderArgs) {
62
72
  // https://github.com/vikejs/vike/issues/1560
63
73
  if (!globalObject.isTransitioning) {
64
74
  globalObject.isTransitioning = true;
65
- const onPageTransitionStartHook = getHookFromPageContext(previousPageContext, 'onPageTransitionStart');
66
- if (onPageTransitionStartHook) {
67
- const hook = onPageTransitionStartHook;
68
- const { hookFn } = hook;
69
- try {
70
- await executeHook(() => hookFn(pageContext), hook, pageContext);
71
- }
72
- catch (err) {
73
- await onError(err);
74
- return;
75
- }
76
- if (isRenderOutdated())
77
- return;
75
+ const hooks = getHookFromPageContextNew('onPageTransitionStart', previousPageContext);
76
+ const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClientMinimal);
77
+ if ('err' in res) {
78
+ await onError(res.err);
79
+ return;
78
80
  }
81
+ if (isRenderOutdated())
82
+ return;
79
83
  }
80
84
  }
81
85
  // Route
@@ -201,7 +205,7 @@ async function renderPageClientSide(renderArgs) {
201
205
  objectAssign(pageContext, pageContextFromServerHooks);
202
206
  // Execute +onData
203
207
  try {
204
- await executeHookClient('onData', pageContext);
208
+ await execHookClient('onData', pageContext);
205
209
  }
206
210
  catch (err) {
207
211
  await onError(err);
@@ -224,33 +228,6 @@ async function renderPageClientSide(renderArgs) {
224
228
  await renderPageView(pageContext);
225
229
  }
226
230
  }
227
- async function getPageContextBegin(isForErrorPage) {
228
- const pageContext = await createPageContextClientSide(urlOriginal);
229
- objectAssign(pageContext, {
230
- isBackwardNavigation,
231
- isClientSideNavigation,
232
- isHydration: isFirstRender && !isForErrorPage,
233
- previousPageContext,
234
- ...pageContextInitClient
235
- });
236
- // TODO/next-major-release: remove
237
- Object.defineProperty(pageContext, '_previousPageContext', {
238
- get() {
239
- assertWarning(false, 'pageContext._previousPageContext has been renamed pageContext.previousPageContext', {
240
- showStackTrace: true,
241
- onlyOnce: true
242
- });
243
- return previousPageContext;
244
- },
245
- enumerable: false
246
- });
247
- {
248
- const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
249
- assert(!('urlOriginal' in pageContextFromAllRewrites));
250
- objectAssign(pageContext, pageContextFromAllRewrites);
251
- }
252
- return pageContext;
253
- }
254
231
  async function renderErrorPage(args) {
255
232
  const onError = (err) => {
256
233
  if (!isSameErrorMessage(err, args.err)) {
@@ -276,9 +253,10 @@ async function renderPageClientSide(renderArgs) {
276
253
  // We handle the abort error down below.
277
254
  }
278
255
  }
279
- const pageContext = await getPageContextBegin(true);
256
+ const pageContext = await getPageContextBegin(true, pageContextBeginArgs);
280
257
  if (isRenderOutdated())
281
258
  return;
259
+ objectAssign(pageContext, { routeParams: {} });
282
260
  if (args.is404)
283
261
  objectAssign(pageContext, { is404: true });
284
262
  if (args.pageContextError)
@@ -388,7 +366,6 @@ async function renderPageClientSide(renderArgs) {
388
366
  if (isRenderOutdated())
389
367
  return;
390
368
  augmentType(pageContext, pageContextFromClientHooks);
391
- objectAssign(pageContext, { routeParams: {} });
392
369
  await renderPageView(pageContext, args);
393
370
  }
394
371
  async function renderPageView(pageContext, isErrorPage) {
@@ -416,7 +393,7 @@ async function renderPageClientSide(renderArgs) {
416
393
  const onRenderClientPromise = (async () => {
417
394
  let onRenderClientError;
418
395
  try {
419
- await executeOnRenderClientHook(pageContext, true);
396
+ await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
420
397
  }
421
398
  catch (err) {
422
399
  onRenderClientError = err;
@@ -438,20 +415,14 @@ async function renderPageClientSide(renderArgs) {
438
415
  */
439
416
  // onHydrationEnd()
440
417
  if (isFirstRender && !onRenderClientError) {
441
- const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
442
- if (hook) {
443
- const { hookFn } = hook;
444
- try {
445
- await executeHook(() => hookFn(pageContext), hook, pageContext);
446
- }
447
- catch (err) {
448
- await onError(err);
449
- if (!isErrorPage)
450
- return;
451
- }
452
- if (isRenderOutdated(true))
418
+ const res = await execHookErrorHandling('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
419
+ if ('err' in res) {
420
+ await onError(res.err);
421
+ if (!isErrorPage)
453
422
  return;
454
423
  }
424
+ if (isRenderOutdated(true))
425
+ return;
455
426
  }
456
427
  // We purposely abort *after* onHydrationEnd() is called (see comment above).
457
428
  if (isRenderOutdated(true))
@@ -460,20 +431,15 @@ async function renderPageClientSide(renderArgs) {
460
431
  if (globalObject.isTransitioning) {
461
432
  globalObject.isTransitioning = undefined;
462
433
  assert(previousPageContext);
463
- const hook = getHookFromPageContext(previousPageContext, 'onPageTransitionEnd');
464
- if (hook) {
465
- const { hookFn } = hook;
466
- try {
467
- await executeHook(() => hookFn(pageContext), hook, pageContext);
468
- }
469
- catch (err) {
470
- await onError(err);
471
- if (!isErrorPage)
472
- return;
473
- }
474
- if (isRenderOutdated(true))
434
+ const hooks = getHookFromPageContextNew('onPageTransitionEnd', previousPageContext);
435
+ const res = await execHooksErrorHandling(hooks, pageContext, preparePageContextForPublicUsageClient);
436
+ if ('err' in res) {
437
+ await onError(res.err);
438
+ if (!isErrorPage)
475
439
  return;
476
440
  }
441
+ if (isRenderOutdated(true))
442
+ return;
477
443
  }
478
444
  if (!scrollTarget && previousPageContext) {
479
445
  const keepScrollPositionPrev = getKeepScrollPositionSetting(previousPageContext);
@@ -496,6 +462,34 @@ async function renderPageClientSide(renderArgs) {
496
462
  stampFinished(urlOriginal);
497
463
  }
498
464
  }
465
+ async function getPageContextBegin(isForErrorPage, { urlOriginal, isBackwardNavigation, pageContextsFromRewrite, isClientSideNavigation, pageContextInitClient, isFirstRender }) {
466
+ const previousPageContext = globalObject.previousPageContext ?? null;
467
+ const pageContext = await createPageContextClientSide(urlOriginal);
468
+ objectAssign(pageContext, {
469
+ isBackwardNavigation,
470
+ isClientSideNavigation,
471
+ isHydration: isFirstRender && !isForErrorPage,
472
+ previousPageContext,
473
+ ...pageContextInitClient
474
+ });
475
+ // TODO/next-major-release: remove
476
+ Object.defineProperty(pageContext, '_previousPageContext', {
477
+ get() {
478
+ assertWarning(false, 'pageContext._previousPageContext has been renamed pageContext.previousPageContext', {
479
+ showStackTrace: true,
480
+ onlyOnce: true
481
+ });
482
+ return previousPageContext;
483
+ },
484
+ enumerable: false
485
+ });
486
+ {
487
+ const pageContextFromAllRewrites = getPageContextFromAllRewrites(pageContextsFromRewrite);
488
+ assert(!('urlOriginal' in pageContextFromAllRewrites));
489
+ objectAssign(pageContext, pageContextFromAllRewrites);
490
+ }
491
+ return pageContext;
492
+ }
499
493
  // For Vike tests (but also potentially for Vike users)
500
494
  // https://github.com/vikejs/vike/blob/ffbc5cf16407bcc075f414447e50d997c87c0c94/test/playground/pages/nested-layout/e2e-test.ts#L59
501
495
  function stampFinished(urlOriginal) {
@@ -21,3 +21,4 @@ export * from '../../utils/augmentType.js';
21
21
  export * from '../../utils/PROJECT_VERSION.js';
22
22
  export * from '../../utils/genPromise.js';
23
23
  export * from '../../utils/catchInfiniteLoop.js';
24
+ export * from '../../utils/changeEnumerable.js';
@@ -25,3 +25,4 @@ export * from '../../utils/augmentType.js';
25
25
  export * from '../../utils/PROJECT_VERSION.js';
26
26
  export * from '../../utils/genPromise.js';
27
27
  export * from '../../utils/catchInfiniteLoop.js';
28
+ export * from '../../utils/changeEnumerable.js';
@@ -1,7 +1,14 @@
1
1
  export { createPageContextClientSide };
2
2
  declare function createPageContextClientSide(): Promise<{
3
- globalContext: {
3
+ _isOriginalObject: true;
4
+ isPageContext: true;
5
+ } & {
6
+ isClientSide: true;
7
+ isPrerendering: false;
8
+ isHydration: true;
9
+ _globalContext: {
4
10
  isGlobalContext: true;
11
+ _isOriginalObject: true;
5
12
  _virtualFileExports: unknown;
6
13
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
7
14
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
@@ -25,16 +32,11 @@ declare function createPageContextClientSide(): Promise<{
25
32
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
26
33
  _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
27
34
  _allPageIds: string[];
28
- isPrerendering: boolean;
29
- isClientSide: boolean;
30
- isHydration: true;
31
35
  isBackwardNavigation: null;
32
36
  _hasPageContextFromServer: true;
33
37
  } & {
34
38
  pageId: string;
35
39
  routeParams: Record<string, string>;
36
- } & {
37
- isPageContext: true;
38
40
  } & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & import("../../shared/getPageFiles.js").PageConfigUserFriendlyOld & {
39
41
  _pageFilesLoaded: import("../../shared/getPageFiles.js").PageFile[];
40
42
  }>;
@@ -3,26 +3,24 @@ import { assertUsage, augmentType, objectAssign } from './utils.js';
3
3
  import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
4
4
  import { loadPageConfigsLazyClientSide } from '../shared/loadPageConfigsLazyClientSide.js';
5
5
  import { getCurrentUrl } from '../shared/getCurrentUrl.js';
6
- import { createPageContextShared } from '../../shared/createPageContextShared.js';
6
+ import { createPageContextObject, createPageContextShared } from '../../shared/createPageContextShared.js';
7
7
  import { getGlobalContextClientInternal } from './globalContext.js';
8
8
  const urlFirst = getCurrentUrl({ withoutHash: true });
9
9
  async function createPageContextClientSide() {
10
10
  const globalContext = await getGlobalContextClientInternal();
11
- const pageContextCreated = {
12
- /* Don't spread globalContext for now? Or never spread it as it leads to confusion? The convenience isn't worth the added confusion?
13
- ...globalContext, // least precedence
14
- */
15
- globalContext,
11
+ const pageContextCreated = createPageContextObject();
12
+ objectAssign(pageContextCreated, {
13
+ isClientSide: true,
14
+ isPrerendering: false,
15
+ isHydration: true,
16
+ _globalContext: globalContext,
16
17
  _pageFilesAll: globalContext._pageFilesAll,
17
18
  _pageConfigs: globalContext._pageConfigs,
18
19
  _pageConfigGlobal: globalContext._pageConfigGlobal,
19
20
  _allPageIds: globalContext._allPageIds,
20
- isPrerendering: false,
21
- isClientSide: true,
22
- isHydration: true,
23
21
  isBackwardNavigation: null,
24
22
  _hasPageContextFromServer: true
25
- };
23
+ });
26
24
  objectAssign(pageContextCreated, getPageContextSerializedInHtml());
27
25
  // Sets pageContext.config to global configs
28
26
  const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._userFriendlyConfigsGlobal);
@@ -2,10 +2,10 @@ import { assertServerRouting } from '../../utils/assertRoutingType.js';
2
2
  assertServerRouting();
3
3
  import { createPageContextClientSide } from './createPageContextClientSide.js';
4
4
  import { executeOnRenderClientHook } from '../shared/executeOnRenderClientHook.js';
5
- import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
6
5
  import { assertSingleInstance_onClientEntryServerRouting } from './utils.js';
7
6
  import { removeFoucBuster } from '../shared/removeFoucBuster.js';
8
- import { executeHook } from '../../shared/hooks/executeHook.js';
7
+ import { execHook } from '../../shared/hooks/execHook.js';
8
+ import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
9
9
  // @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
10
10
  const isProd = import.meta.env.PROD;
11
11
  assertSingleInstance_onClientEntryServerRouting(isProd);
@@ -14,8 +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, false);
18
- const hook = getHookFromPageContext(pageContext, 'onHydrationEnd');
19
- if (hook)
20
- await executeHook(() => hook.hookFn(pageContext), hook, pageContext);
17
+ await executeOnRenderClientHook(pageContext, preparePageContextForPublicUsageClient);
18
+ await execHook('onHydrationEnd', pageContext, preparePageContextForPublicUsageClient);
21
19
  }
@@ -5,6 +5,7 @@ type GlobalContextClientWithServerRouting = GlobalContextSharedPublic & Pick<Glo
5
5
  type GlobalContextClientInternal = Awaited<ReturnType<typeof getGlobalContextClientInternal>>;
6
6
  declare const getGlobalContextClientInternal: () => Promise<{
7
7
  isGlobalContext: true;
8
+ _isOriginalObject: true;
8
9
  _virtualFileExports: unknown;
9
10
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
10
11
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
@@ -0,0 +1,9 @@
1
+ export { preparePageContextForPublicUsageClient };
2
+ export type { PageContextForPublicUsageClient };
3
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
4
+ import type { PageContextInternalClient_ServerRouting } from '../../shared/types.js';
5
+ import type { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
6
+ type PageContextForPublicUsageClient = PageContextPrepareMinimum & PageContextInternalClient_ServerRouting & PageConfigUserFriendlyOld;
7
+ declare function preparePageContextForPublicUsageClient<PageContext extends PageContextForPublicUsageClient>(pageContext: PageContext): PageContext & {
8
+ Page: unknown;
9
+ };
@@ -0,0 +1,5 @@
1
+ export { preparePageContextForPublicUsageClient };
2
+ import { preparePageContextForPublicUsageClientShared } from '../shared/preparePageContextForPublicUsageClientShared.js';
3
+ function preparePageContextForPublicUsageClient(pageContext) {
4
+ return preparePageContextForPublicUsageClientShared(pageContext);
5
+ }
@@ -11,3 +11,4 @@ export * from '../../utils/slice.js';
11
11
  export * from '../../utils/unique.js';
12
12
  export * from '../../utils/getPropAccessNotation.js';
13
13
  export * from '../../utils/augmentType.js';
14
+ export * from '../../utils/changeEnumerable.js';
@@ -15,3 +15,4 @@ export * from '../../utils/slice.js';
15
15
  export * from '../../utils/unique.js'; // Only used by Server Routing (not needed for Client Routing)
16
16
  export * from '../../utils/getPropAccessNotation.js';
17
17
  export * from '../../utils/augmentType.js';
18
+ export * from '../../utils/changeEnumerable.js';
@@ -4,6 +4,7 @@ export { createGetGlobalContextClient };
4
4
  import { type GlobalContextShared } from '../../shared/createGlobalContextShared.js';
5
5
  declare function createGetGlobalContextClient<GlobalContextAddendum extends object>(virtualFileExports: unknown, isClientRouting: boolean, addGlobalContext?: (globalContext: GlobalContextShared) => Promise<GlobalContextAddendum>): () => Promise<{
6
6
  isGlobalContext: true;
7
+ _isOriginalObject: true;
7
8
  _virtualFileExports: unknown;
8
9
  _pageFilesAll: import("../../shared/getPageFiles.js").PageFile[];
9
10
  _pageConfigs: import("../../__internal/index.js").PageConfig[];
@@ -1,7 +1,7 @@
1
1
  export { executeOnRenderClientHook };
2
2
  export type { PageContextBeforeRenderClient };
3
3
  import type { PageFile, PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
4
- import { type PageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
4
+ import type { PageContextForPublicUsageClientShared } from './preparePageContextForPublicUsageClientShared.js';
5
5
  import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
6
6
  type PageContextBeforeRenderClient = {
7
7
  _pageFilesLoaded: PageFile[];
@@ -9,5 +9,5 @@ type PageContextBeforeRenderClient = {
9
9
  urlPathname?: string;
10
10
  pageId: string;
11
11
  _pageConfigs: PageConfigRuntime[];
12
- } & PageConfigUserFriendlyOld & PageContextForUserConsumptionClientSide;
13
- declare function executeOnRenderClientHook<PC extends PageContextBeforeRenderClient>(pageContext: PC, isClientRouting: boolean): Promise<void>;
12
+ } & PageConfigUserFriendlyOld & PageContextForPublicUsageClientShared;
13
+ declare function executeOnRenderClientHook<PageContext extends PageContextBeforeRenderClient>(pageContext: PageContext, prepareForPublicUsage: (pageConfig: PageContext) => PageContext): Promise<void>;
@@ -1,22 +1,17 @@
1
1
  export { executeOnRenderClientHook };
2
2
  import { assert, assertUsage } from '../server-routing-runtime/utils.js';
3
3
  import { getHookFromPageContext } from '../../shared/hooks/getHook.js';
4
- import { preparePageContextForUserConsumptionClientSide } from './preparePageContextForUserConsumptionClientSide.js';
5
- import { executeHook } from '../../shared/hooks/executeHook.js';
6
- async function executeOnRenderClientHook(pageContext, isClientRouting) {
7
- const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, isClientRouting);
4
+ import { execHookSingle } from '../../shared/hooks/execHook.js';
5
+ async function executeOnRenderClientHook(pageContext, prepareForPublicUsage) {
8
6
  let hook = null;
9
- let hookName;
10
7
  {
11
8
  const renderHook = getHookFromPageContext(pageContext, 'render');
12
9
  hook = renderHook;
13
- hookName = 'render';
14
10
  }
15
11
  {
16
12
  const renderHook = getHookFromPageContext(pageContext, 'onRenderClient');
17
13
  if (renderHook) {
18
14
  hook = renderHook;
19
- hookName = 'onRenderClient';
20
15
  }
21
16
  }
22
17
  if (!hook) {
@@ -42,16 +37,12 @@ async function executeOnRenderClientHook(pageContext, isClientRouting) {
42
37
  assertUsage(false, errMsg);
43
38
  }
44
39
  }
45
- assert(hook);
46
- const renderHook = hook.hookFn;
47
- assert(hookName);
48
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.)
49
- const hookResult = await executeHook(() => renderHook(pageContextForUserConsumption), hook, pageContext);
50
- assertUsage(hookResult === undefined, `The ${hookName}() hook defined by ${hook.hookFilePath} isn't allowed to return a value`);
41
+ await execHookSingle(hook, pageContext, prepareForPublicUsage);
51
42
  }
52
43
  function getUrlToShowToUser(pageContext) {
53
44
  let url;
54
- // try/catch to avoid passToClient assertUsage() (although: this may not be needed anymore, since we're now accessing pageContext and not pageContextForUserConsumption)
45
+ // try/catch to avoid passToClient assertUsage() (although: this may not be needed anymore, since we're now accessing pageContext and not pageContextForPublicUsage)
55
46
  try {
56
47
  url =
57
48
  // Client Routing
@@ -0,0 +1,11 @@
1
+ export { preparePageContextForPublicUsageClientShared };
2
+ export { preparePageContextForPublicUsageClientMinimal };
3
+ export type { PageContextForPublicUsageClientShared };
4
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
5
+ import { type PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
6
+ import type { PageContextInternalClient } from '../../shared/types.js';
7
+ type PageContextForPublicUsageClientShared = PageContextPrepareMinimum & PageContextInternalClient & PageConfigUserFriendlyOld;
8
+ declare function preparePageContextForPublicUsageClientShared<PageContext extends PageContextForPublicUsageClientShared>(pageContext: PageContext): PageContext & {
9
+ Page: unknown;
10
+ };
11
+ declare function preparePageContextForPublicUsageClientMinimal<PageContext extends PageContextPrepareMinimum>(pageContext: PageContext): never;