vike 0.4.229 → 0.4.230-commit-8b60b8c

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 (235) 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 +2 -5
  4. package/dist/cjs/node/plugin/index.js +3 -1
  5. package/dist/cjs/node/plugin/onLoad.js +2 -0
  6. package/dist/cjs/node/plugin/plugins/build/pluginDistFileNames.js +1 -0
  7. package/dist/cjs/node/plugin/plugins/build/pluginModuleBanner.js +4 -4
  8. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -0
  9. package/dist/cjs/node/plugin/plugins/envVars.js +17 -19
  10. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -1
  11. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +2 -2
  12. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  13. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +1 -1
  14. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +5 -0
  15. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +2 -2
  16. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +12 -8
  17. package/dist/cjs/node/plugin/plugins/replaceConstants.js +76 -0
  18. package/dist/cjs/node/plugin/shared/applyRegExWithMagicString.js +10 -0
  19. package/dist/cjs/node/plugin/shared/findPageFiles.js +1 -1
  20. package/dist/cjs/node/plugin/shared/loggerNotProd.js +2 -2
  21. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  22. package/dist/cjs/node/prerender/runPrerender.js +42 -38
  23. package/dist/cjs/node/prerender/utils.js +1 -1
  24. package/dist/cjs/node/runtime/globalContext.js +13 -27
  25. package/dist/cjs/node/runtime/html/renderHtml.js +12 -2
  26. package/dist/cjs/node/runtime/html/serializeContext.js +4 -2
  27. package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +7 -5
  28. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +3 -4
  29. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +6 -9
  30. package/dist/cjs/node/runtime/renderPage/execHookServer.js +11 -0
  31. package/dist/cjs/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +14 -15
  32. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  33. package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +1 -1
  34. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +1 -1
  35. package/dist/cjs/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
  36. package/dist/cjs/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +10 -0
  37. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
  38. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +0 -2
  39. package/dist/cjs/node/runtime/renderPage.js +21 -12
  40. package/dist/cjs/node/runtime/utils.js +1 -1
  41. package/dist/cjs/shared/NOT_SERIALIZABLE.js +0 -1
  42. package/dist/cjs/shared/addIs404ToPageProps.js +0 -7
  43. package/dist/cjs/shared/createGlobalContextShared.js +37 -8
  44. package/dist/cjs/shared/createPageContextShared.js +14 -11
  45. package/dist/cjs/shared/getPageContext.js +3 -3
  46. package/dist/cjs/shared/getPageContextUrlComputed.js +2 -36
  47. package/dist/cjs/shared/getProxyForPublicUsage.js +56 -0
  48. package/dist/cjs/shared/hooks/execHook.js +170 -0
  49. package/dist/cjs/shared/hooks/getHook.js +23 -4
  50. package/dist/cjs/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +54 -47
  51. package/dist/cjs/shared/prepareGlobalContextForPublicUsage.js +10 -0
  52. package/dist/cjs/shared/preparePageContextForPublicUsage.js +80 -0
  53. package/dist/cjs/shared/route/abort.js +2 -2
  54. package/dist/cjs/shared/route/debug.js +17 -7
  55. package/dist/cjs/shared/route/executeGuardHook.js +4 -9
  56. package/dist/cjs/shared/route/executeOnBeforeRouteHook.js +4 -3
  57. package/dist/cjs/shared/route/index.js +2 -4
  58. package/dist/cjs/shared/route/loadPageRoutes.js +6 -0
  59. package/dist/cjs/shared/route/resolveRouteFunction.js +14 -10
  60. package/dist/cjs/shared/utils.js +1 -0
  61. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  62. package/dist/cjs/utils/debug.js +15 -6
  63. package/dist/cjs/utils/isDev.js +3 -1
  64. package/dist/cjs/utils/isScriptFile.js +24 -21
  65. package/dist/cjs/utils/objectAssign.js +3 -3
  66. package/dist/cjs/utils/objectDefineProperty.js +1 -1
  67. package/dist/cjs/utils/parseNpmPackage.js +1 -0
  68. package/dist/cjs/utils/parseUrl-extras.js +0 -1
  69. package/dist/cjs/utils/requireResolve.js +39 -19
  70. package/dist/esm/client/client-routing-runtime/{createPageContext.d.ts → createPageContextClientSide.d.ts} +21 -13
  71. package/dist/esm/client/client-routing-runtime/{createPageContext.js → createPageContextClientSide.js} +9 -11
  72. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +400 -15
  73. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +56 -54
  74. package/dist/esm/client/client-routing-runtime/globalContext.d.ts +11 -1
  75. package/dist/esm/client/client-routing-runtime/prefetch.d.ts +3 -8
  76. package/dist/esm/client/client-routing-runtime/prefetch.js +3 -3
  77. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.d.ts +11 -0
  78. package/dist/esm/client/client-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  79. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +135 -0
  80. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +72 -81
  81. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  82. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  83. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.d.ts +19 -13
  84. package/dist/esm/client/server-routing-runtime/createPageContextClientSide.js +15 -26
  85. package/dist/esm/client/server-routing-runtime/entry.js +4 -4
  86. package/dist/esm/client/server-routing-runtime/globalContext.d.ts +11 -1
  87. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.d.ts +9 -0
  88. package/dist/esm/client/server-routing-runtime/preparePageContextForPublicUsageClient.js +5 -0
  89. package/dist/esm/client/server-routing-runtime/utils.d.ts +1 -0
  90. package/dist/esm/client/server-routing-runtime/utils.js +1 -0
  91. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +11 -1
  92. package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +3 -3
  93. package/dist/esm/client/shared/executeOnRenderClientHook.js +4 -13
  94. package/dist/esm/client/shared/{loadUserFilesClientSide.d.ts → loadPageConfigsLazyClientSide.d.ts} +2 -2
  95. package/dist/esm/client/shared/{loadUserFilesClientSide.js → loadPageConfigsLazyClientSide.js} +4 -4
  96. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.d.ts +11 -0
  97. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +39 -0
  98. package/dist/esm/node/api/build.js +2 -2
  99. package/dist/esm/node/plugin/index.js +3 -1
  100. package/dist/esm/node/plugin/onLoad.js +2 -0
  101. package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.js +1 -0
  102. package/dist/esm/node/plugin/plugins/build/pluginModuleBanner.js +4 -4
  103. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +6 -1
  104. package/dist/esm/node/plugin/plugins/envVars.js +18 -20
  105. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +4 -2
  106. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.d.ts +1 -2
  107. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +2 -2
  108. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +5 -0
  109. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +2 -2
  110. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +6 -1
  111. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +3 -3
  112. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +1 -1
  113. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +12 -8
  114. package/dist/esm/node/plugin/plugins/replaceConstants.d.ts +3 -0
  115. package/dist/esm/node/plugin/plugins/replaceConstants.js +71 -0
  116. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.d.ts +3 -0
  117. package/dist/esm/node/plugin/shared/applyRegExWithMagicString.js +8 -0
  118. package/dist/esm/node/plugin/shared/findPageFiles.js +2 -2
  119. package/dist/esm/node/plugin/shared/loggerNotProd.js +1 -1
  120. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.d.ts +1 -1
  121. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  122. package/dist/esm/node/prerender/runPrerender.d.ts +37 -73
  123. package/dist/esm/node/prerender/runPrerender.js +42 -38
  124. package/dist/esm/node/prerender/utils.d.ts +1 -1
  125. package/dist/esm/node/prerender/utils.js +1 -1
  126. package/dist/esm/node/runtime/globalContext.d.ts +46 -251
  127. package/dist/esm/node/runtime/globalContext.js +14 -28
  128. package/dist/esm/node/runtime/html/renderHtml.js +12 -2
  129. package/dist/esm/node/runtime/html/serializeContext.d.ts +1 -1
  130. package/dist/esm/node/runtime/html/serializeContext.js +4 -2
  131. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.d.ts +1 -1
  132. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +7 -5
  133. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +2 -2
  134. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +3 -4
  135. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +26 -41
  136. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +7 -10
  137. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +12 -0
  138. package/dist/esm/node/runtime/renderPage/execHookServer.js +9 -0
  139. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -3
  140. package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.js +14 -15
  141. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.d.ts +4 -2
  142. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +8 -12
  143. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +1 -1
  144. package/dist/esm/node/runtime/renderPage/getPageAssets.js +1 -1
  145. package/dist/esm/node/runtime/renderPage/{loadUserFilesServerSide.d.ts → loadPageConfigsLazyServerSide.d.ts} +6 -6
  146. package/dist/esm/node/runtime/renderPage/{loadUserFilesServerSide.js → loadPageConfigsLazyServerSide.js} +4 -4
  147. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.d.ts +20 -0
  148. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +8 -0
  149. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +38 -74
  150. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +5 -5
  151. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +0 -2
  152. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +0 -1
  153. package/dist/esm/node/runtime/renderPage.d.ts +21 -39
  154. package/dist/esm/node/runtime/renderPage.js +22 -13
  155. package/dist/esm/node/runtime/utils.d.ts +1 -1
  156. package/dist/esm/node/runtime/utils.js +1 -1
  157. package/dist/esm/shared/NOT_SERIALIZABLE.js +0 -1
  158. package/dist/esm/shared/addIs404ToPageProps.d.ts +1 -6
  159. package/dist/esm/shared/addIs404ToPageProps.js +1 -8
  160. package/dist/esm/shared/createGlobalContextShared.d.ts +28 -6
  161. package/dist/esm/shared/createGlobalContextShared.js +37 -8
  162. package/dist/esm/shared/createPageContextShared.d.ts +7 -6
  163. package/dist/esm/shared/createPageContextShared.js +15 -12
  164. package/dist/esm/shared/getPageContext.d.ts +1 -1
  165. package/dist/esm/shared/getPageContext.js +1 -1
  166. package/dist/esm/shared/getPageContextUrlComputed.d.ts +2 -5
  167. package/dist/esm/shared/getPageContextUrlComputed.js +3 -37
  168. package/dist/esm/shared/getPageFiles.d.ts +1 -1
  169. package/dist/esm/shared/getProxyForPublicUsage.d.ts +4 -0
  170. package/dist/esm/shared/getProxyForPublicUsage.js +54 -0
  171. package/dist/esm/shared/hooks/execHook.d.ts +63 -0
  172. package/dist/esm/shared/hooks/execHook.js +168 -0
  173. package/dist/esm/shared/hooks/getHook.d.ts +10 -11
  174. package/dist/esm/shared/hooks/getHook.js +23 -4
  175. package/dist/esm/shared/page-configs/Config.d.ts +11 -4
  176. package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.d.ts → getUserFriendlyConfigs.d.ts} +8 -6
  177. package/dist/esm/shared/page-configs/{getPageConfigUserFriendly.js → getUserFriendlyConfigs.js} +55 -48
  178. package/dist/esm/shared/prepareGlobalContextForPublicUsage.d.ts +7 -0
  179. package/dist/esm/shared/prepareGlobalContextForPublicUsage.js +8 -0
  180. package/dist/esm/shared/preparePageContextForPublicUsage.d.ts +11 -0
  181. package/dist/esm/shared/preparePageContextForPublicUsage.js +78 -0
  182. package/dist/esm/shared/route/abort.js +1 -1
  183. package/dist/esm/shared/route/debug.d.ts +4 -1
  184. package/dist/esm/shared/route/debug.js +17 -7
  185. package/dist/esm/shared/route/executeGuardHook.d.ts +4 -3
  186. package/dist/esm/shared/route/executeGuardHook.js +4 -9
  187. package/dist/esm/shared/route/executeOnBeforeRouteHook.js +4 -3
  188. package/dist/esm/shared/route/index.js +2 -4
  189. package/dist/esm/shared/route/loadPageRoutes.d.ts +2 -1
  190. package/dist/esm/shared/route/loadPageRoutes.js +7 -1
  191. package/dist/esm/shared/route/resolveRouteFunction.d.ts +2 -2
  192. package/dist/esm/shared/route/resolveRouteFunction.js +14 -10
  193. package/dist/esm/shared/types.d.ts +14 -4
  194. package/dist/esm/shared/utils.d.ts +1 -0
  195. package/dist/esm/shared/utils.js +1 -0
  196. package/dist/esm/types/index.d.ts +1 -1
  197. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  198. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  199. package/dist/esm/utils/debug.d.ts +1 -1
  200. package/dist/esm/utils/debug.js +15 -6
  201. package/dist/esm/utils/isDev.js +3 -1
  202. package/dist/esm/utils/isScriptFile.d.ts +5 -5
  203. package/dist/esm/utils/isScriptFile.js +23 -20
  204. package/dist/esm/utils/objectAssign.d.ts +1 -1
  205. package/dist/esm/utils/objectAssign.js +3 -3
  206. package/dist/esm/utils/objectDefineProperty.d.ts +0 -1
  207. package/dist/esm/utils/objectDefineProperty.js +1 -1
  208. package/dist/esm/utils/parseNpmPackage.d.ts +2 -0
  209. package/dist/esm/utils/parseNpmPackage.js +1 -1
  210. package/dist/esm/utils/parseUrl-extras.js +0 -1
  211. package/dist/esm/utils/requireResolve.js +39 -19
  212. package/package.json +2 -2
  213. package/dist/cjs/client/shared/getPageContextProxyForUser.js +0 -16
  214. package/dist/cjs/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -16
  215. package/dist/cjs/shared/getPageConfigsRuntime.js +0 -23
  216. package/dist/cjs/shared/hooks/executeHook.js +0 -87
  217. package/dist/cjs/shared/hooks/executeHookGeneric.js +0 -18
  218. package/dist/cjs/shared/preparePageContextForUserConsumption.js +0 -34
  219. package/dist/cjs/utils/getPublicProxy.js +0 -27
  220. package/dist/esm/client/shared/getPageContextProxyForUser.d.ts +0 -2
  221. package/dist/esm/client/shared/getPageContextProxyForUser.js +0 -14
  222. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +0 -12
  223. package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.js +0 -44
  224. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +0 -24
  225. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.js +0 -14
  226. package/dist/esm/shared/getPageConfigsRuntime.d.ts +0 -14
  227. package/dist/esm/shared/getPageConfigsRuntime.js +0 -21
  228. package/dist/esm/shared/hooks/executeHook.d.ts +0 -21
  229. package/dist/esm/shared/hooks/executeHook.js +0 -85
  230. package/dist/esm/shared/hooks/executeHookGeneric.d.ts +0 -8
  231. package/dist/esm/shared/hooks/executeHookGeneric.js +0 -16
  232. package/dist/esm/shared/preparePageContextForUserConsumption.d.ts +0 -5
  233. package/dist/esm/shared/preparePageContextForUserConsumption.js +0 -32
  234. package/dist/esm/utils/getPublicProxy.d.ts +0 -2
  235. package/dist/esm/utils/getPublicProxy.js +0 -25
@@ -3,16 +3,14 @@ export { getPageContextFromHooks_serialized };
3
3
  export { getPageContextFromServerHooks };
4
4
  export { getPageContextFromClientHooks };
5
5
  export { setPageContextInitIsPassedToClient };
6
+ export { execHookClient };
6
7
  export type { PageContextFromServerHooks };
7
- export type { PageContextFromClientHooks };
8
8
  import type { PageConfigUserFriendlyOld, PageFile } from '../../shared/getPageFiles.js';
9
9
  import type { PageConfigRuntime } from '../../shared/page-configs/PageConfig.js';
10
- type PageContext = {
11
- urlOriginal: string;
12
- _urlRewrite: string | null;
13
- _pageFilesAll: PageFile[];
14
- _pageConfigs: PageConfigRuntime[];
15
- };
10
+ import type { HookName } from '../../shared/page-configs/Config.js';
11
+ import type { PageContextCreated } from './createPageContextClientSide.js';
12
+ import type { PageContextBegin } from './renderPageClientSide.js';
13
+ import { type PageContextForPublicUsageClient } from './preparePageContextForPublicUsageClient.js';
16
14
  type PageContextSerialized = {
17
15
  pageId: string;
18
16
  _hasPageContextFromServer: true;
@@ -21,29 +19,416 @@ declare function getPageContextFromHooks_serialized(): PageContextSerialized & {
21
19
  routeParams: Record<string, string>;
22
20
  _hasPageContextFromServer: true;
23
21
  };
24
- declare function getPageContextFromHooks_isHydration(pageContext: PageContextSerialized & PageContext & PageConfigUserFriendlyOld & {
22
+ declare function getPageContextFromHooks_isHydration(pageContext: PageContextSerialized & PageContextBegin & PageConfigUserFriendlyOld & {
25
23
  _hasPageContextFromServer: true;
26
- }): Promise<PageContextSerialized & PageContext & PageConfigUserFriendlyOld & {
24
+ } & PageContextForPublicUsageClient): Promise<PageContextSerialized & {
25
+ _isOriginalObject: true;
26
+ isPageContext: true;
27
+ } & {
28
+ isClientSide: true;
29
+ isPrerendering: false;
30
+ urlOriginal: string;
31
+ _globalContext: {
32
+ isGlobalContext: true;
33
+ _isOriginalObject: true;
34
+ _virtualFileExports: unknown;
35
+ _pageFilesAll: PageFile[];
36
+ _pageConfigs: PageConfigRuntime[];
37
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
38
+ _allPageIds: string[];
39
+ _userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
40
+ config: import("../../types/index.js").ConfigResolved;
41
+ pages: {
42
+ [k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
43
+ route: import("../../shared/page-configs/Config.js").Route;
44
+ isErrorPage?: undefined;
45
+ } | {
46
+ route?: undefined;
47
+ isErrorPage: true;
48
+ });
49
+ };
50
+ } & {
51
+ isClientSide: true;
52
+ } & {
53
+ _pageRoutes: import("../../__internal/index.js").PageRoutes;
54
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
55
+ };
56
+ _pageFilesAll: PageFile[];
57
+ _pageConfigs: PageConfigRuntime[];
58
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
59
+ _allPageIds: string[];
60
+ _pageRoutes: import("../../__internal/index.js").PageRoutes;
61
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
62
+ _urlHandler: null;
63
+ _urlRewrite: null | string;
64
+ _baseServer: string;
65
+ } & {
66
+ urlParsed: import("./utils.js").UrlPublic;
67
+ urlPathname: string;
68
+ url: string;
69
+ } & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & {
70
+ isBackwardNavigation: boolean | null;
71
+ isClientSideNavigation: boolean;
72
+ isHydration: boolean;
73
+ previousPageContext: ({
74
+ pageId: string;
75
+ } & PageConfigUserFriendlyOld & {
76
+ pageId: string;
77
+ routeParams: Record<string, string>;
78
+ } & import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum & import("../../shared/types.js").PageContextInternalClient & Omit<Partial<{
79
+ isPageContext: true;
80
+ Page: import("../../types/index.js").Config["Page"];
81
+ routeParams: Record<string, string>;
82
+ data: unknown;
83
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
84
+ configEntries: import("../../types/index.js").ConfigEntries;
85
+ exports: Record<string, unknown>;
86
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
87
+ urlOriginal: string;
88
+ headers: Record<string, string> | null;
89
+ headersOriginal?: unknown;
90
+ is404: boolean | null;
91
+ isClientSideNavigation: boolean;
92
+ abortReason?: unknown;
93
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
94
+ errorWhileRendering?: unknown;
95
+ pageId: string | null;
96
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
97
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
98
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
99
+ url: string;
100
+ pageExports: Record<string, unknown>;
101
+ isBaseMissing?: true;
102
+ }> & Pick<{
103
+ isPageContext: true;
104
+ Page: import("../../types/index.js").Config["Page"];
105
+ routeParams: Record<string, string>;
106
+ data: unknown;
107
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
108
+ configEntries: import("../../types/index.js").ConfigEntries;
109
+ exports: Record<string, unknown>;
110
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
111
+ urlOriginal: string;
112
+ headers: Record<string, string> | null;
113
+ headersOriginal?: unknown;
114
+ is404: boolean | null;
115
+ isClientSideNavigation: boolean;
116
+ abortReason?: unknown;
117
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
118
+ errorWhileRendering?: unknown;
119
+ pageId: string | null;
120
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
121
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
122
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
123
+ url: string;
124
+ pageExports: Record<string, unknown>;
125
+ isBaseMissing?: true;
126
+ }, "exports" | "pageId" | "Page" | "data" | "config" | "pageExports" | "routeParams" | "configEntries" | "exportsAll" | "abortReason" | "source" | "sources" | "from"> & {
127
+ isClientSide: true;
128
+ isPrerendering: false;
129
+ } & {
130
+ isHydration: boolean;
131
+ isBackwardNavigation: boolean | null;
132
+ previousPageContext: import("../../shared/types.js").PageContextClient<unknown> | null;
133
+ globalContext: import("./globalContext.js").GlobalContextClient;
134
+ } & {
135
+ urlOriginal: string;
136
+ } & {
137
+ urlParsed: import("./utils.js").UrlPublic;
138
+ urlPathname: string;
139
+ url: string;
140
+ }, ("globalContext" | "Page" | "data") | "previousPageContext"> & {
141
+ previousPageContext: {
142
+ pageId: string;
143
+ } | null;
144
+ } & {
145
+ urlOriginal: string;
146
+ }) | null;
147
+ } & PageConfigUserFriendlyOld & {
27
148
  _hasPageContextFromServer: true;
149
+ } & import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum & Omit<Partial<{
150
+ isPageContext: true;
151
+ Page: import("../../types/index.js").Config["Page"];
152
+ routeParams: Record<string, string>;
153
+ data: unknown;
154
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
155
+ configEntries: import("../../types/index.js").ConfigEntries;
156
+ exports: Record<string, unknown>;
157
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
158
+ urlOriginal: string;
159
+ headers: Record<string, string> | null;
160
+ headersOriginal?: unknown;
161
+ is404: boolean | null;
162
+ isClientSideNavigation: boolean;
163
+ abortReason?: unknown;
164
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
165
+ errorWhileRendering?: unknown;
166
+ pageId: string | null;
167
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
168
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
169
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
170
+ url: string;
171
+ pageExports: Record<string, unknown>;
172
+ isBaseMissing?: true;
173
+ }> & Pick<{
174
+ isPageContext: true;
175
+ Page: import("../../types/index.js").Config["Page"];
176
+ routeParams: Record<string, string>;
177
+ data: unknown;
178
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
179
+ configEntries: import("../../types/index.js").ConfigEntries;
180
+ exports: Record<string, unknown>;
181
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
182
+ urlOriginal: string;
183
+ headers: Record<string, string> | null;
184
+ headersOriginal?: unknown;
185
+ is404: boolean | null;
186
+ isClientSideNavigation: boolean;
187
+ abortReason?: unknown;
188
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
189
+ errorWhileRendering?: unknown;
190
+ pageId: string | null;
191
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
192
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
193
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
194
+ url: string;
195
+ pageExports: Record<string, unknown>;
196
+ isBaseMissing?: true;
197
+ }, "exports" | "pageId" | "Page" | "data" | "config" | "pageExports" | "routeParams" | "configEntries" | "exportsAll" | "abortReason" | "source" | "sources" | "from"> & {
198
+ isClientSide: true;
199
+ isPrerendering: false;
200
+ } & {
201
+ isHydration: boolean;
202
+ isBackwardNavigation: boolean | null;
203
+ previousPageContext: import("../../shared/types.js").PageContextClient<unknown> | null;
204
+ globalContext: import("./globalContext.js").GlobalContextClient;
205
+ } & {
206
+ urlOriginal: string;
207
+ } & {
208
+ urlParsed: import("./utils.js").UrlPublic;
209
+ urlPathname: string;
210
+ url: string;
211
+ }, ("globalContext" | "Page" | "data") | "previousPageContext"> & {
212
+ previousPageContext: {
213
+ pageId: string;
214
+ } | null;
28
215
  } & {
29
- _hasPageContextFromClient: boolean;
216
+ urlOriginal: string;
30
217
  }>;
31
218
  type PageContextFromServerHooks = {
32
219
  _hasPageContextFromServer: boolean;
33
220
  };
34
221
  declare function getPageContextFromServerHooks(pageContext: {
35
222
  pageId: string;
36
- } & PageContext, isErrorPage: boolean): Promise<{
223
+ } & PageContextCreated, isErrorPage: boolean): Promise<{
37
224
  is404ServerSideRouted: true;
38
225
  } | {
39
226
  is404ServerSideRouted?: undefined;
40
227
  pageContextFromServerHooks: PageContextFromServerHooks;
41
228
  }>;
42
- type PageContextFromClientHooks = {
43
- _hasPageContextFromClient: boolean;
44
- };
45
229
  declare function getPageContextFromClientHooks(pageContext: {
46
230
  pageId: string;
47
231
  _hasPageContextFromServer: boolean;
48
- } & PageContext & PageConfigUserFriendlyOld, isErrorPage: boolean): Promise<PageContextFromClientHooks>;
232
+ } & PageContextBegin & PageConfigUserFriendlyOld & PageContextForPublicUsageClient, isErrorPage: boolean): Promise<{
233
+ pageId: string;
234
+ _hasPageContextFromServer: boolean;
235
+ } & {
236
+ _isOriginalObject: true;
237
+ isPageContext: true;
238
+ } & {
239
+ isClientSide: true;
240
+ isPrerendering: false;
241
+ urlOriginal: string;
242
+ _globalContext: {
243
+ isGlobalContext: true;
244
+ _isOriginalObject: true;
245
+ _virtualFileExports: unknown;
246
+ _pageFilesAll: PageFile[];
247
+ _pageConfigs: PageConfigRuntime[];
248
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
249
+ _allPageIds: string[];
250
+ _userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
251
+ config: import("../../types/index.js").ConfigResolved;
252
+ pages: {
253
+ [k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
254
+ route: import("../../shared/page-configs/Config.js").Route;
255
+ isErrorPage?: undefined;
256
+ } | {
257
+ route?: undefined;
258
+ isErrorPage: true;
259
+ });
260
+ };
261
+ } & {
262
+ isClientSide: true;
263
+ } & {
264
+ _pageRoutes: import("../../__internal/index.js").PageRoutes;
265
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
266
+ };
267
+ _pageFilesAll: PageFile[];
268
+ _pageConfigs: PageConfigRuntime[];
269
+ _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
270
+ _allPageIds: string[];
271
+ _pageRoutes: import("../../__internal/index.js").PageRoutes;
272
+ _onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
273
+ _urlHandler: null;
274
+ _urlRewrite: null | string;
275
+ _baseServer: string;
276
+ } & {
277
+ urlParsed: import("./utils.js").UrlPublic;
278
+ urlPathname: string;
279
+ url: string;
280
+ } & import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & {
281
+ isBackwardNavigation: boolean | null;
282
+ isClientSideNavigation: boolean;
283
+ isHydration: boolean;
284
+ previousPageContext: ({
285
+ pageId: string;
286
+ } & PageConfigUserFriendlyOld & {
287
+ pageId: string;
288
+ routeParams: Record<string, string>;
289
+ } & import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum & import("../../shared/types.js").PageContextInternalClient & Omit<Partial<{
290
+ isPageContext: true;
291
+ Page: import("../../types/index.js").Config["Page"];
292
+ routeParams: Record<string, string>;
293
+ data: unknown;
294
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
295
+ configEntries: import("../../types/index.js").ConfigEntries;
296
+ exports: Record<string, unknown>;
297
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
298
+ urlOriginal: string;
299
+ headers: Record<string, string> | null;
300
+ headersOriginal?: unknown;
301
+ is404: boolean | null;
302
+ isClientSideNavigation: boolean;
303
+ abortReason?: unknown;
304
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
305
+ errorWhileRendering?: unknown;
306
+ pageId: string | null;
307
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
308
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
309
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
310
+ url: string;
311
+ pageExports: Record<string, unknown>;
312
+ isBaseMissing?: true;
313
+ }> & Pick<{
314
+ isPageContext: true;
315
+ Page: import("../../types/index.js").Config["Page"];
316
+ routeParams: Record<string, string>;
317
+ data: unknown;
318
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
319
+ configEntries: import("../../types/index.js").ConfigEntries;
320
+ exports: Record<string, unknown>;
321
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
322
+ urlOriginal: string;
323
+ headers: Record<string, string> | null;
324
+ headersOriginal?: unknown;
325
+ is404: boolean | null;
326
+ isClientSideNavigation: boolean;
327
+ abortReason?: unknown;
328
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
329
+ errorWhileRendering?: unknown;
330
+ pageId: string | null;
331
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
332
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
333
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
334
+ url: string;
335
+ pageExports: Record<string, unknown>;
336
+ isBaseMissing?: true;
337
+ }, "exports" | "pageId" | "Page" | "data" | "config" | "pageExports" | "routeParams" | "configEntries" | "exportsAll" | "abortReason" | "source" | "sources" | "from"> & {
338
+ isClientSide: true;
339
+ isPrerendering: false;
340
+ } & {
341
+ isHydration: boolean;
342
+ isBackwardNavigation: boolean | null;
343
+ previousPageContext: import("../../shared/types.js").PageContextClient<unknown> | null;
344
+ globalContext: import("./globalContext.js").GlobalContextClient;
345
+ } & {
346
+ urlOriginal: string;
347
+ } & {
348
+ urlParsed: import("./utils.js").UrlPublic;
349
+ urlPathname: string;
350
+ url: string;
351
+ }, ("globalContext" | "Page" | "data") | "previousPageContext"> & {
352
+ previousPageContext: {
353
+ pageId: string;
354
+ } | null;
355
+ } & {
356
+ urlOriginal: string;
357
+ }) | null;
358
+ } & PageConfigUserFriendlyOld & import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum & Omit<Partial<{
359
+ isPageContext: true;
360
+ Page: import("../../types/index.js").Config["Page"];
361
+ routeParams: Record<string, string>;
362
+ data: unknown;
363
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
364
+ configEntries: import("../../types/index.js").ConfigEntries;
365
+ exports: Record<string, unknown>;
366
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
367
+ urlOriginal: string;
368
+ headers: Record<string, string> | null;
369
+ headersOriginal?: unknown;
370
+ is404: boolean | null;
371
+ isClientSideNavigation: boolean;
372
+ abortReason?: unknown;
373
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
374
+ errorWhileRendering?: unknown;
375
+ pageId: string | null;
376
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
377
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
378
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
379
+ url: string;
380
+ pageExports: Record<string, unknown>;
381
+ isBaseMissing?: true;
382
+ }> & Pick<{
383
+ isPageContext: true;
384
+ Page: import("../../types/index.js").Config["Page"];
385
+ routeParams: Record<string, string>;
386
+ data: unknown;
387
+ config: import("../../shared/page-configs/Config/PageContextConfig.js").PageContextConfig;
388
+ configEntries: import("../../types/index.js").ConfigEntries;
389
+ exports: Record<string, unknown>;
390
+ exportsAll: import("../../shared/getPageFiles.js").ExportsAll;
391
+ urlOriginal: string;
392
+ headers: Record<string, string> | null;
393
+ headersOriginal?: unknown;
394
+ is404: boolean | null;
395
+ isClientSideNavigation: boolean;
396
+ abortReason?: unknown;
397
+ abortStatusCode?: import("../../shared/route/abort.js").AbortStatusCode;
398
+ errorWhileRendering?: unknown;
399
+ pageId: string | null;
400
+ from: import("../../shared/page-configs/getUserFriendlyConfigs.js").From;
401
+ source: import("../../shared/page-configs/getUserFriendlyConfigs.js").Source;
402
+ sources: import("../../shared/page-configs/getUserFriendlyConfigs.js").Sources;
403
+ url: string;
404
+ pageExports: Record<string, unknown>;
405
+ isBaseMissing?: true;
406
+ }, "exports" | "pageId" | "Page" | "data" | "config" | "pageExports" | "routeParams" | "configEntries" | "exportsAll" | "abortReason" | "source" | "sources" | "from"> & {
407
+ isClientSide: true;
408
+ isPrerendering: false;
409
+ } & {
410
+ isHydration: boolean;
411
+ isBackwardNavigation: boolean | null;
412
+ previousPageContext: import("../../shared/types.js").PageContextClient<unknown> | null;
413
+ globalContext: import("./globalContext.js").GlobalContextClient;
414
+ } & {
415
+ urlOriginal: string;
416
+ } & {
417
+ urlParsed: import("./utils.js").UrlPublic;
418
+ urlPathname: string;
419
+ url: string;
420
+ }, ("globalContext" | "Page" | "data") | "previousPageContext"> & {
421
+ previousPageContext: {
422
+ pageId: string;
423
+ } | null;
424
+ } & {
425
+ urlOriginal: string;
426
+ }>;
427
+ type PageContextExecuteHookClient = PageConfigUserFriendlyOld & PageContextForPublicUsageClient;
428
+ declare function execHookClient(hookName: HookName, pageContext: PageContextExecuteHookClient): Promise<(import("../../shared/hooks/getHook.js").HookLoc & {
429
+ hookFn: (arg: import("../../shared/preparePageContextForPublicUsage.js").PageContextPrepareMinimum | import("../../shared/prepareGlobalContextForPublicUsage.js").GlobalContextPrepareMinimum) => unknown;
430
+ hookTimeout: import("../../shared/hooks/getHook.js").HookTimeout;
431
+ } & {
432
+ hookReturn: unknown;
433
+ })[]>;
49
434
  declare function setPageContextInitIsPassedToClient(pageContext: Record<string, unknown>): void;
@@ -3,12 +3,11 @@ export { getPageContextFromHooks_serialized };
3
3
  export { getPageContextFromServerHooks };
4
4
  export { getPageContextFromClientHooks };
5
5
  export { setPageContextInitIsPassedToClient };
6
+ export { execHookClient };
6
7
  import { assert, assertUsage, hasProp, objectAssign, getProjectError, redirectHard, isObject, getGlobalObject } from './utils.js';
7
8
  import { parse } from '@brillout/json-serializer/parse';
8
9
  import { getPageContextSerializedInHtml } from '../shared/getJsonSerializedInHtml.js';
9
10
  import { analyzePageServerSide } from '../../shared/getPageFiles/analyzePageServerSide.js';
10
- import { getHookFromPageContext } from '../../shared/hooks/getHook.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,9 +17,10 @@ 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 { executeHook } 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
- // TODO/eventually: rename
23
+ // TO-DO/eventually: rename
24
24
  function getPageContextFromHooks_serialized() {
25
25
  const pageContextSerialized = getPageContextSerializedInHtml();
26
26
  assertUsage(!('urlOriginal' in pageContextSerialized), "Adding 'urlOriginal' to passToClient is forbidden");
@@ -30,16 +30,11 @@ function getPageContextFromHooks_serialized() {
30
30
  });
31
31
  return pageContextSerialized;
32
32
  }
33
- // TODO/eventually: rename
33
+ // TO-DO/eventually: rename
34
34
  async function getPageContextFromHooks_isHydration(pageContext) {
35
- objectAssign(pageContext, {
36
- _hasPageContextFromClient: false
37
- });
38
35
  for (const hookName of ['data', 'onBeforeRender']) {
39
36
  if (hookClientOnlyExists(hookName, pageContext)) {
40
- const pageContextFromHook = await executeHookClientSide(hookName, pageContext);
41
- assert(!('urlOriginal' in pageContextFromHook));
42
- Object.assign(pageContext, pageContextFromHook);
37
+ await executeDataLikeHook(hookName, pageContext);
43
38
  }
44
39
  }
45
40
  return pageContext;
@@ -70,9 +65,7 @@ async function getPageContextFromServerHooks(pageContext, isErrorPage) {
70
65
  return { pageContextFromServerHooks };
71
66
  }
72
67
  async function getPageContextFromClientHooks(pageContext, isErrorPage) {
73
- objectAssign(pageContext, {
74
- _hasPageContextFromClient: false
75
- });
68
+ let dataHookExec = false;
76
69
  // At this point, we need to call the client-side guard(), data() and onBeforeRender() hooks, if they exist on client
77
70
  // env. However if we have fetched pageContext from the server, some of them might have run already on the
78
71
  // server-side, so we run only the client-only ones in this case.
@@ -85,50 +78,60 @@ async function getPageContextFromClientHooks(pageContext, isErrorPage) {
85
78
  !pageContext._hasPageContextFromServer) {
86
79
  // Should we really call the guard() hook on the client-side? Shouldn't we make the guard() hook a server-side
87
80
  // only hook? Or maybe make its env configurable like data() and onBeforeRender()?
88
- await executeGuardHook(pageContext, (pageContext) => preparePageContextForUserConsumptionClientSide(pageContext, true));
81
+ await executeGuardHook(pageContext, (pageContext) => preparePageContextForPublicUsageClient(pageContext));
89
82
  }
90
83
  }
91
84
  else {
92
- assert(hookName === 'data' || hookName === 'onBeforeRender');
93
85
  if (hookClientOnlyExists(hookName, pageContext) || !pageContext._hasPageContextFromServer) {
86
+ if (hookName === 'data')
87
+ dataHookExec = true;
94
88
  // This won't do anything if no hook has been defined or if the hook's env.client is false.
95
- const pageContextFromHook = await executeHookClientSide(hookName, pageContext);
96
- assert(!('urlOriginal' in pageContextFromHook));
97
- Object.assign(pageContext, pageContextFromHook);
89
+ await executeDataLikeHook(hookName, pageContext);
98
90
  }
99
91
  }
100
92
  }
93
+ // Execute +onData
94
+ const dataHookEnv = getHookEnv('data', pageContext);
95
+ if ((dataHookExec && dataHookEnv.client) || (pageContext._hasPageContextFromServer && dataHookEnv.server)) {
96
+ await execHookClient('onData', pageContext);
97
+ }
101
98
  const pageContextFromClientHooks = pageContext;
102
99
  return pageContextFromClientHooks;
103
100
  }
104
- async function executeHookClientSide(hookName, pageContext) {
105
- const hook = getHookFromPageContext(pageContext, hookName);
106
- if (!hook) {
107
- // No hook defined or hook's env.client is false
108
- return {};
109
- }
110
- const pageContextForUserConsumption = preparePageContextForUserConsumptionClientSide(pageContext, true);
111
- const hookResult = await executeHook(() => hook.hookFn(pageContextForUserConsumption), hook, pageContext);
112
- const pageContextFromHook = {};
113
- if (hookName === 'onBeforeRender') {
114
- assertOnBeforeRenderHookReturn(hookResult, hook.hookFilePath);
115
- // Note: hookResult looks like { pageContext: { ... } }
116
- const pageContextFromOnBeforeRender = hookResult?.pageContext;
117
- if (pageContextFromOnBeforeRender) {
118
- objectAssign(pageContextFromHook, { _hasPageContextFromClient: true });
119
- objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
120
- }
101
+ async function execHookClient(hookName, pageContext) {
102
+ return await execHook(hookName, pageContext, (p) => preparePageContextForPublicUsageClient(p));
103
+ }
104
+ async function executeDataLikeHook(hookName, pageContext) {
105
+ let pageContextFromHook;
106
+ if (hookName === 'data') {
107
+ pageContextFromHook = await executeDataHook(pageContext);
121
108
  }
122
109
  else {
123
- assert(hookName === 'data');
124
- // Note: hookResult can be anything (e.g. an object) and is to be assigned to pageContext.data
125
- const pageContextFromData = {
126
- data: hookResult
127
- };
128
- if (hookResult) {
129
- objectAssign(pageContextFromHook, { _hasPageContextFromClient: true });
130
- }
131
- objectAssign(pageContextFromHook, pageContextFromData);
110
+ pageContextFromHook = await executeOnBeforeRenderHook(pageContext);
111
+ }
112
+ Object.assign(pageContext, pageContextFromHook);
113
+ }
114
+ async function executeDataHook(pageContext) {
115
+ const res = await execHookClient('data', pageContext);
116
+ const hook = res[0]; // TO-DO/soon: support cumulative
117
+ if (!hook)
118
+ return;
119
+ const { hookReturn } = hook;
120
+ const pageContextAddendum = { data: hookReturn };
121
+ return pageContextAddendum;
122
+ }
123
+ async function executeOnBeforeRenderHook(pageContext) {
124
+ const res = await execHookClient('onBeforeRender', pageContext);
125
+ const hook = res[0]; // TO-DO/soon: support cumulative
126
+ if (!hook)
127
+ return;
128
+ const { hookReturn, hookFilePath } = hook;
129
+ const pageContextFromHook = {};
130
+ assertOnBeforeRenderHookReturn(hookReturn, hookFilePath);
131
+ // Note: hookReturn looks like { pageContext: { ... } }
132
+ const pageContextFromOnBeforeRender = hookReturn?.pageContext;
133
+ if (pageContextFromOnBeforeRender) {
134
+ objectAssign(pageContextFromHook, pageContextFromOnBeforeRender);
132
135
  }
133
136
  return pageContextFromHook;
134
137
  }
@@ -186,23 +189,22 @@ async function hookServerOnlyExists(hookName, pageContext) {
186
189
  return hasOnBeforeRenderServerSideOnlyHook;
187
190
  }
188
191
  }
189
- /**
190
- * @param hookName
191
- * @param pageContext
192
- * @returns `true` if the given page has a `hookName` hook defined with a client-only env.
193
- */
194
192
  function hookClientOnlyExists(hookName, pageContext) {
193
+ const hookEnv = getHookEnv(hookName, pageContext);
194
+ return !!hookEnv.client && !hookEnv.server;
195
+ }
196
+ function getHookEnv(hookName, pageContext) {
195
197
  if (pageContext._pageConfigs.length > 0) {
196
198
  // V1
197
199
  const pageConfig = getPageConfig(pageContext.pageId, pageContext._pageConfigs);
198
- const hookEnv = getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {};
199
- assert(isObject(hookEnv));
200
- return !!hookEnv.client && !hookEnv.server;
200
+ // No runtime validation to save client-side KBs
201
+ const hookEnv = (getConfigValueRuntime(pageConfig, `${hookName}Env`)?.value ?? {});
202
+ return hookEnv;
201
203
  }
202
204
  else {
203
205
  // TODO/v1-release: remove
204
206
  // Client-only onBeforeRender() or data() hooks were never supported for the V0.4 design
205
- return false;
207
+ return { client: false, server: true };
206
208
  }
207
209
  }
208
210
  async function fetchPageContextFromServer(pageContext) {
@@ -5,13 +5,23 @@ 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[];
11
12
  _pageConfigGlobal: import("../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
12
13
  _allPageIds: string[];
14
+ _userFriendlyConfigsGlobal: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly;
13
15
  config: import("../../types/index.js").ConfigResolved;
14
- pages: import("../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
16
+ pages: {
17
+ [k: string]: import("../../shared/page-configs/getUserFriendlyConfigs.js").PageConfigUserFriendly & ({
18
+ route: import("../../shared/page-configs/Config.js").Route;
19
+ isErrorPage?: undefined;
20
+ } | {
21
+ route?: undefined;
22
+ isErrorPage: true;
23
+ });
24
+ };
15
25
  } & {
16
26
  isClientSide: true;
17
27
  } & {