vike 0.4.229-commit-7056ef0 → 0.4.229-commit-e27d672

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} +14 -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 +4 -4
  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 +12 -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 +55 -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 +1 -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 +13 -0
  62. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +39 -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 +4 -4
  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 +13 -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 +4 -0
  101. package/dist/esm/shared/getProxyForPublicUsage.js +53 -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 +13 -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 +1 -0
  122. package/dist/esm/shared/utils.js +1 -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,12 +3,11 @@ export { getPageContextFromHooks_serialized };
3
3
  export { getPageContextFromServerHooks };
4
4
  export { getPageContextFromClientHooks };
5
5
  export { setPageContextInitIsPassedToClient };
6
- export { executeHookClient };
6
+ export { execHookClient };
7
7
  import { assert, assertUsage, hasProp, objectAssign, getProjectError, redirectHard, isObject, getGlobalObject } from './utils.js';
8
8
  import { parse } from '@brillout/json-serializer/parse';
9
9
  import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
10
10
  import { analyzePageServerSide } from '../../shared/getPageFiles/analyzePageServerSide.js';
11
- import { preparePageContextForUserConsumptionClientSide } from '../shared/preparePageContextForUserConsumptionClientSide.js';
12
11
  import { removeBuiltInOverrides } from './getPageContext/removeBuiltInOverrides.js';
13
12
  import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
14
13
  import { getPageConfig } from '../../shared/page-configs/helpers.js';
@@ -18,7 +17,8 @@ import { executeGuardHook } from '../../shared/route/executeGuardHook.js';
18
17
  import { AbortRender, isAbortPageContext } from '../../shared/route/abort.js';
19
18
  import { pageContextInitIsPassedToClient } from '../../shared/misc/pageContextInitIsPassedToClient.js';
20
19
  import { isServerSideError } from '../../shared/misc/isServerSideError.js';
21
- import { executeHookNew } from '../../shared/hooks/executeHook.js';
20
+ import { execHook } from '../../shared/hooks/execHook.js';
21
+ import { preparePageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
22
22
  const globalObject = getGlobalObject('client-routing-runtime/getPageContextFromHooks.ts', {});
23
23
  // TO-DO/eventually: rename
24
24
  function getPageContextFromHooks_serialized() {
@@ -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) => preparePageContextForUserConsumptionClientSide(pageContext, true));
81
+ await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageClient(pageContext));
82
82
  }
83
83
  }
84
84
  else {
@@ -92,13 +92,13 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
92
92
  }
93
93
  // Execute +onData
94
94
  if (dataHookExists) {
95
- await executeHookClient('onData', pageContext);
95
+ await execHookClient('onData', pageContext);
96
96
  }
97
97
  const pageContextFromClientHooks = pageContext;
98
98
  return pageContextFromClientHooks;
99
99
  }
100
- async function executeHookClient(hookName, pageContext) {
101
- return await executeHookNew(hookName, pageContext, (p) => preparePageContextForUserConsumptionClientSide(p, true));
100
+ async function execHookClient(hookName, pageContext) {
101
+ return await execHook(hookName, pageContext, (p) => preparePageContextForPublicUsageClient(p));
102
102
  }
103
103
  async function executeDataLikeHook(hookName, pageContext) {
104
104
  let pageContextFromHook;
@@ -111,24 +111,24 @@ async function executeDataLikeHook(hookName, pageContext) {
111
111
  Object.assign(pageContext, pageContextFromHook);
112
112
  }
113
113
  async function executeDataHook(pageContext) {
114
- const res = await executeHookClient('data', pageContext);
114
+ const res = await execHookClient('data', pageContext);
115
115
  const hook = res[0]; // TO-DO/soon: support cumulative
116
116
  if (!hook)
117
117
  return;
118
- const { hookResult } = hook;
119
- const pageContextAddendum = { data: hookResult };
118
+ const { hookReturn } = hook;
119
+ const pageContextAddendum = { data: hookReturn };
120
120
  return pageContextAddendum;
121
121
  }
122
122
  async function executeOnBeforeRenderHook(pageContext) {
123
- const res = await executeHookClient('onBeforeRender', pageContext);
123
+ const res = await execHookClient('onBeforeRender', pageContext);
124
124
  const hook = res[0]; // TO-DO/soon: support cumulative
125
125
  if (!hook)
126
126
  return;
127
- const { hookResult, hookFilePath } = hook;
127
+ const { hookReturn, hookFilePath } = hook;
128
128
  const pageContextFromHook = {};
129
- assertOnBeforeRenderHookReturn(hookResult, hookFilePath);
130
- // Note: hookResult looks like { pageContext: { ... } }
131
- const pageContextFromOnBeforeRender = hookResult?.pageContext;
129
+ assertOnBeforeRenderHookReturn(hookReturn, hookFilePath);
130
+ // Note: hookReturn looks like { pageContext: { ... } }
131
+ const pageContextFromOnBeforeRender = hookReturn?.pageContext;
132
132
  if (pageContextFromOnBeforeRender) {
133
133
  objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
134
134
  }
@@ -5,6 +5,7 @@ type GlobalContextClient = GlobalContextSharedPublic & Pick<GlobalContextClientI
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[];
@@ -5,17 +5,12 @@ export { populatePageContextPrefetchCache };
5
5
  export { addLinkPrefetchHandlers };
6
6
  export { addLinkPrefetchHandlers_watch };
7
7
  export { addLinkPrefetchHandlers_unwatch };
8
+ import { type PageContextCreated } from './createPageContextClientSide.js';
8
9
  import { type PageContextFromServerHooks, getPageContextFromServerHooks } from './getPageContextFromHooks.js';
9
- import type { PageConfigUserFriendlyOld, PageFile } from '../../shared/getPageFiles.js';
10
- import { type PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
10
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
11
11
  type ResultPageContextFromServer = Awaited<ReturnType<typeof getPageContextFromServerHooks>>;
12
- type PageContextForPrefetch = {
13
- urlOriginal: string;
14
- urlPathname: string;
12
+ type PageContextForPrefetch = PageContextCreated & {
15
13
  pageId: string;
16
- _urlRewrite: null;
17
- _pageFilesAll: PageFile[];
18
- _pageConfigs: PageConfigRuntime[];
19
14
  };
20
15
  declare function getPageContextPrefetched(pageContext: {
21
16
  urlPathname: string;
@@ -0,0 +1,11 @@
1
+ export { preparePageContextForPublicUsageClient };
2
+ export type { PageContextForPublicUsageClient };
3
+ import type { PageConfigUserFriendlyOld } from '../../shared/getPageFiles.js';
4
+ import type { PageContextInternalClient_ClientRouting } from '../../shared/types.js';
5
+ import type { PageContextPrepareMinimum } from '../../shared/preparePageContextForPublicUsage.js';
6
+ type PageContextForPublicUsageClient = PageContextPrepareMinimum & PageContextInternalClient_ClientRouting & PageConfigUserFriendlyOld & {
7
+ urlOriginal: string;
8
+ };
9
+ declare function preparePageContextForPublicUsageClient<PageContext extends PageContextForPublicUsageClient>(pageContext: PageContext): PageContext & {
10
+ Page: unknown;
11
+ };
@@ -0,0 +1,5 @@
1
+ export { preparePageContextForPublicUsageClient };
2
+ import { preparePageContextForPublicUsageClientShared } from '../shared/preparePageContextForPublicUsageClientShared.js';
3
+ function preparePageContextForPublicUsageClient(pageContext) {
4
+ return preparePageContextForPublicUsageClientShared(pageContext);
5
+ }
@@ -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
+ };