vike 0.4.235 → 0.4.236

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 (192) hide show
  1. package/dist/cjs/__internal/index.js +1 -1
  2. package/dist/cjs/client/shared/createGetGlobalContextClient.js +0 -1
  3. package/dist/cjs/client/shared/preparePageContextForPublicUsageClientShared.js +4 -4
  4. package/dist/cjs/node/api/prepareViteApiCall.js +1 -1
  5. package/dist/cjs/node/cli/index.js +1 -1
  6. package/dist/cjs/node/createPageRenderer.js +1 -1
  7. package/dist/cjs/node/importBuild.js +1 -1
  8. package/dist/cjs/node/prerender/context.js +1 -1
  9. package/dist/cjs/node/prerender/index.js +1 -1
  10. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +2 -2
  11. package/dist/cjs/node/prerender/runPrerender.js +9 -13
  12. package/dist/cjs/node/runtime/globalContext.js +29 -12
  13. package/dist/cjs/node/runtime/html/injectAssets/injectAssets__public.js +1 -1
  14. package/dist/cjs/node/runtime/html/injectAssets/injectHtmlTags.js +2 -0
  15. package/dist/cjs/node/runtime/html/serializeContext.js +73 -15
  16. package/dist/cjs/node/runtime/index-deprecated.js +1 -1
  17. package/dist/cjs/node/runtime/index.js +1 -1
  18. package/dist/cjs/node/runtime/page-files/setup.js +1 -1
  19. package/dist/cjs/node/runtime/renderPage/assertArguments.js +1 -1
  20. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +9 -6
  21. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +4 -4
  22. package/dist/cjs/node/runtime/renderPage/execHookDataAndOnBeforeRender.js +2 -2
  23. package/dist/cjs/node/runtime/renderPage/{createHttpResponse/getCacheControl.js → getCacheControl.js} +9 -9
  24. package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +4 -4
  25. package/dist/cjs/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +1 -1
  26. package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +34 -16
  27. package/dist/cjs/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +1 -1
  28. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -0
  29. package/dist/cjs/node/runtime/renderPage.js +4 -6
  30. package/dist/cjs/node/vite/onLoad.js +1 -1
  31. package/dist/cjs/node/vite/plugins/pluginBuild/pluginBuildConfig.js +1 -1
  32. package/dist/cjs/node/vite/plugins/pluginBuild/pluginBuildEntry.js +1 -1
  33. package/dist/cjs/node/vite/plugins/pluginCommon/assertResolveAlias.js +1 -1
  34. package/dist/cjs/node/vite/plugins/pluginCommon.js +8 -4
  35. package/dist/cjs/node/vite/plugins/pluginDev.js +1 -1
  36. package/dist/cjs/node/vite/plugins/pluginEnvVars.js +1 -1
  37. package/dist/cjs/node/vite/plugins/pluginFileEnv.js +1 -1
  38. package/dist/cjs/node/vite/plugins/pluginVirtualFiles.js +1 -1
  39. package/dist/cjs/node/vite/shared/addSsrMiddleware.js +1 -1
  40. package/dist/cjs/node/vite/shared/loggerNotProd.js +10 -6
  41. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +5 -1
  42. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/filesystemRouting.js +4 -6
  43. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +1 -1
  44. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal.js +6 -6
  45. package/dist/cjs/shared/RenderErrorPage.js +1 -1
  46. package/dist/cjs/shared/abort.js +1 -1
  47. package/dist/cjs/shared/createGlobalContextShared.js +20 -7
  48. package/dist/cjs/shared/createPageContextShared.js +1 -2
  49. package/dist/cjs/shared/determinePageIdOld.js +1 -1
  50. package/dist/cjs/shared/error-page.js +3 -3
  51. package/dist/cjs/shared/getPageContextUrlComputed.js +4 -4
  52. package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +1 -1
  53. package/dist/cjs/shared/getPageFiles/analyzePageClientSide/analyzeExports.js +1 -1
  54. package/dist/cjs/shared/getPageFiles/analyzePageClientSide/determineClientEntry.js +1 -1
  55. package/dist/cjs/shared/getPageFiles/analyzePageClientSide.js +2 -2
  56. package/dist/cjs/shared/getPageFiles/assert_exports_old_design.js +1 -1
  57. package/dist/cjs/shared/getPageFiles/fileTypes.js +1 -1
  58. package/dist/cjs/shared/getPageFiles/getAllPageIdFiles.js +1 -1
  59. package/dist/cjs/shared/getPageFiles/getPageFileObject.js +1 -1
  60. package/dist/cjs/shared/getPageFiles/parseVirtualFileExports.js +1 -1
  61. package/dist/cjs/shared/getProxyForPublicUsage.js +1 -1
  62. package/dist/cjs/shared/page-configs/getConfigDefinedAt.js +4 -3
  63. package/dist/cjs/shared/page-configs/resolveVikeConfigPublic.js +10 -10
  64. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +1 -1
  65. package/dist/cjs/shared/preparePageContextForPublicUsage.js +5 -5
  66. package/dist/cjs/shared/route/abort.js +1 -1
  67. package/dist/cjs/shared/route/deduceRouteStringFromFilesystemPath.js +1 -1
  68. package/dist/cjs/shared/route/execHookGuard.js +1 -1
  69. package/dist/cjs/shared/route/execHookOnBeforeRoute.js +1 -1
  70. package/dist/cjs/shared/route/index.js +1 -1
  71. package/dist/cjs/shared/route/loadPageRoutes.js +10 -4
  72. package/dist/cjs/shared/route/resolveRouteFunction.js +3 -3
  73. package/dist/cjs/shared/route/resolveRouteString.js +1 -1
  74. package/dist/cjs/shared/route/routing.js +1 -1
  75. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  76. package/dist/cjs/utils/assertSetup.js +3 -3
  77. package/dist/cjs/utils/debugGlob.js +1 -1
  78. package/dist/cjs/utils/parseNpmPackage.js +1 -1
  79. package/dist/esm/__internal/index.d.ts +1 -1
  80. package/dist/esm/__internal/index.js +1 -1
  81. package/dist/esm/client/runtime-client-routing/createPageContextClientSide.js +2 -2
  82. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.d.ts +8 -0
  83. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.js +6 -6
  84. package/dist/esm/client/runtime-client-routing/index.js +1 -1
  85. package/dist/esm/client/runtime-client-routing/isClientSideRoutable.js +1 -1
  86. package/dist/esm/client/runtime-client-routing/prefetch/getPrefetchSettings.js +6 -6
  87. package/dist/esm/client/runtime-client-routing/prefetch.js +10 -10
  88. package/dist/esm/client/runtime-client-routing/renderPageClientSide.d.ts +2 -0
  89. package/dist/esm/client/runtime-client-routing/renderPageClientSide.js +3 -3
  90. package/dist/esm/client/runtime-client-routing/skipLink.js +1 -1
  91. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +2 -2
  92. package/dist/esm/client/runtime-server-routing/index.js +1 -1
  93. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +5 -4
  94. package/dist/esm/client/shared/createGetGlobalContextClient.js +0 -1
  95. package/dist/esm/client/shared/execHookOnRenderClient.js +1 -1
  96. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +2 -2
  97. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.js +4 -4
  98. package/dist/esm/node/api/prepareViteApiCall.js +1 -1
  99. package/dist/esm/node/cli/index.js +1 -1
  100. package/dist/esm/node/createPageRenderer.js +1 -1
  101. package/dist/esm/node/importBuild.js +1 -1
  102. package/dist/esm/node/prerender/context.js +1 -1
  103. package/dist/esm/node/prerender/index.js +1 -1
  104. package/dist/esm/node/prerender/resolvePrerenderConfig.js +2 -2
  105. package/dist/esm/node/prerender/runPrerender.d.ts +2 -1
  106. package/dist/esm/node/prerender/runPrerender.js +9 -13
  107. package/dist/esm/node/runtime/globalContext.d.ts +14 -14
  108. package/dist/esm/node/runtime/globalContext.js +31 -14
  109. package/dist/esm/node/runtime/html/injectAssets/injectAssets__public.js +1 -1
  110. package/dist/esm/node/runtime/html/injectAssets/injectHtmlTags.js +2 -0
  111. package/dist/esm/node/runtime/html/serializeContext.d.ts +7 -1
  112. package/dist/esm/node/runtime/html/serializeContext.js +73 -15
  113. package/dist/esm/node/runtime/index-deprecated.js +1 -1
  114. package/dist/esm/node/runtime/index.js +1 -1
  115. package/dist/esm/node/runtime/page-files/setup.js +1 -1
  116. package/dist/esm/node/runtime/renderPage/assertArguments.js +1 -1
  117. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -0
  118. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +9 -6
  119. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +2 -2
  120. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +4 -4
  121. package/dist/esm/node/runtime/renderPage/execHookDataAndOnBeforeRender.js +2 -2
  122. package/dist/esm/node/runtime/renderPage/getCacheControl.d.ts +5 -0
  123. package/dist/esm/node/runtime/renderPage/{createHttpResponse/getCacheControl.js → getCacheControl.js} +8 -9
  124. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +4 -4
  125. package/dist/esm/node/runtime/renderPage/getPageAssets/retrieveAssetsProd.js +1 -1
  126. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +8 -4
  127. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +35 -17
  128. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.js +1 -1
  129. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +4 -2
  130. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +1 -0
  131. package/dist/esm/node/runtime/renderPage.d.ts +3 -3
  132. package/dist/esm/node/runtime/renderPage.js +4 -6
  133. package/dist/esm/node/vite/index.js +1 -1
  134. package/dist/esm/node/vite/onLoad.js +1 -1
  135. package/dist/esm/node/vite/plugins/pluginBuild/pluginBuildConfig.js +1 -1
  136. package/dist/esm/node/vite/plugins/pluginBuild/pluginBuildEntry.js +1 -1
  137. package/dist/esm/node/vite/plugins/pluginBuild/pluginDistPackageJsonFile.js +0 -1
  138. package/dist/esm/node/vite/plugins/pluginCommon/assertResolveAlias.js +1 -1
  139. package/dist/esm/node/vite/plugins/pluginCommon.js +8 -4
  140. package/dist/esm/node/vite/plugins/pluginDev.js +1 -1
  141. package/dist/esm/node/vite/plugins/pluginEnvVars.js +1 -1
  142. package/dist/esm/node/vite/plugins/pluginFileEnv.js +1 -1
  143. package/dist/esm/node/vite/plugins/pluginVirtualFiles.js +1 -1
  144. package/dist/esm/node/vite/shared/addSsrMiddleware.js +1 -1
  145. package/dist/esm/node/vite/shared/loggerNotProd.js +10 -0
  146. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +5 -1
  147. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/filesystemRouting.js +4 -6
  148. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/transpileAndExecuteFile.js +1 -1
  149. package/dist/esm/node/vite/shared/resolveVikeConfigInternal.js +6 -6
  150. package/dist/esm/shared/RenderErrorPage.js +1 -1
  151. package/dist/esm/shared/abort.js +1 -1
  152. package/dist/esm/shared/createGlobalContextShared.d.ts +3 -3
  153. package/dist/esm/shared/createGlobalContextShared.js +20 -7
  154. package/dist/esm/shared/createPageContextShared.d.ts +2 -3
  155. package/dist/esm/shared/createPageContextShared.js +1 -2
  156. package/dist/esm/shared/determinePageIdOld.js +1 -1
  157. package/dist/esm/shared/error-page.js +3 -3
  158. package/dist/esm/shared/getPageContextUrlComputed.js +4 -4
  159. package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
  160. package/dist/esm/shared/getPageFiles/analyzePageClientSide/analyzeExports.js +1 -1
  161. package/dist/esm/shared/getPageFiles/analyzePageClientSide/determineClientEntry.js +1 -1
  162. package/dist/esm/shared/getPageFiles/analyzePageClientSide.js +2 -2
  163. package/dist/esm/shared/getPageFiles/assert_exports_old_design.js +1 -1
  164. package/dist/esm/shared/getPageFiles/fileTypes.js +1 -1
  165. package/dist/esm/shared/getPageFiles/getAllPageIdFiles.js +1 -1
  166. package/dist/esm/shared/getPageFiles/getPageFileObject.js +1 -1
  167. package/dist/esm/shared/getPageFiles/parseVirtualFileExports.js +1 -1
  168. package/dist/esm/shared/getProxyForPublicUsage.js +1 -1
  169. package/dist/esm/shared/hooks/getHook.js +1 -1
  170. package/dist/esm/shared/page-configs/getConfigDefinedAt.js +4 -3
  171. package/dist/esm/shared/page-configs/resolveVikeConfigPublic.js +12 -12
  172. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +1 -1
  173. package/dist/esm/shared/preparePageContextForPublicUsage.js +5 -5
  174. package/dist/esm/shared/route/abort.js +1 -1
  175. package/dist/esm/shared/route/deduceRouteStringFromFilesystemPath.js +1 -1
  176. package/dist/esm/shared/route/execHookGuard.js +1 -1
  177. package/dist/esm/shared/route/execHookOnBeforeRoute.js +1 -1
  178. package/dist/esm/shared/route/index.js +1 -1
  179. package/dist/esm/shared/route/loadPageRoutes.d.ts +5 -0
  180. package/dist/esm/shared/route/loadPageRoutes.js +10 -4
  181. package/dist/esm/shared/route/resolveRouteFunction.js +3 -3
  182. package/dist/esm/shared/route/resolveRouteString.js +1 -1
  183. package/dist/esm/shared/route/routing.js +1 -1
  184. package/dist/esm/types/Config.d.ts +9 -1
  185. package/dist/esm/types/PageContext.d.ts +8 -2
  186. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  187. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  188. package/dist/esm/utils/assertSetup.js +3 -3
  189. package/dist/esm/utils/debugGlob.js +1 -1
  190. package/dist/esm/utils/parseNpmPackage.js +1 -1
  191. package/package.json +2 -5
  192. package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.d.ts +0 -5
@@ -2,19 +2,25 @@ export { getPageContextClientSerialized };
2
2
  export { getPageContextClientSerializedAbort };
3
3
  export { getGlobalContextClientSerialized };
4
4
  export type { PageContextSerialization };
5
+ export type { PassToClient };
5
6
  import type { UrlRedirect } from '../../../shared/route/abort.js';
6
7
  import type { GlobalContextServerInternal } from '../globalContext.js';
7
8
  type PageContextSerialization = {
8
9
  pageId: string;
9
10
  routeParams: Record<string, string>;
10
- _passToClient: string[];
11
+ _passToClient: PassToClient;
11
12
  is404: null | boolean;
12
13
  pageProps?: Record<string, unknown>;
13
14
  _pageContextInit: Record<string, unknown>;
14
15
  _globalContext: GlobalContextServerInternal;
16
+ isClientSideNavigation: boolean;
15
17
  };
16
18
  declare function getPageContextClientSerialized(pageContext: PageContextSerialization): string;
17
19
  declare function getGlobalContextClientSerialized(pageContext: PageContextSerialization): string;
20
+ type PassToClient = (string | {
21
+ prop: string;
22
+ once?: boolean;
23
+ })[];
18
24
  declare function getPageContextClientSerializedAbort(pageContext: Record<string, unknown> & ({
19
25
  _urlRedirect: UrlRedirect;
20
26
  } | {
@@ -27,20 +27,41 @@ const passToClientBuiltInPageContext = [
27
27
  const pageToClientBuiltInPageContextError = ['pageProps', 'is404', isServerSideError];
28
28
  function getPageContextClientSerialized(pageContext) {
29
29
  const passToClientPageContext = getPassToClientPageContext(pageContext);
30
- const pageContextClient = applyPassToClient(passToClientPageContext, pageContext);
31
- if (passToClientPageContext.some((prop) => getPropVal(pageContext._pageContextInit, prop))) {
30
+ const getObj = (passToClientEntry) => {
31
+ if (passToClientEntry.once)
32
+ return undefined; // pass it to client-side globalContext
33
+ return { obj: pageContext, objName: 'pageContext' };
34
+ };
35
+ const res = applyPassToClient(passToClientPageContext, getObj);
36
+ const pageContextClient = res.objClient;
37
+ const pageContextClientProps = res.objClientProps;
38
+ if (pageContextClientProps.some((prop) => getPropVal(pageContext._pageContextInit, prop))) {
32
39
  pageContextClient[pageContextInitIsPassedToClient] = true;
33
40
  }
34
- const pageContextClientSerialized = serializeObject(pageContextClient, 'pageContext', passToClientPageContext);
41
+ const pageContextClientSerialized = serializeObject(pageContextClient, passToClientPageContext, getObj);
35
42
  return pageContextClientSerialized;
36
43
  }
37
44
  function getGlobalContextClientSerialized(pageContext) {
38
45
  const passToClient = pageContext._passToClient;
39
- const globalContextClient = applyPassToClient(passToClient, pageContext._globalContext);
40
- const globalContextClientSerialized = serializeObject(globalContextClient, 'globalContext', passToClient);
46
+ const globalContext = pageContext._globalContext;
47
+ const getObj = ({ prop, once }) => {
48
+ if (once && getPropVal(pageContext, prop)) {
49
+ assert(typeof pageContext.isClientSideNavigation === 'boolean');
50
+ if (!pageContext.isClientSideNavigation) {
51
+ return { obj: pageContext, objName: 'pageContext' }; // pass it to client-side globalContext
52
+ }
53
+ else {
54
+ return undefined; // already passed to client-side
55
+ }
56
+ }
57
+ return { obj: globalContext, objName: 'globalContext' };
58
+ };
59
+ const res = applyPassToClient(passToClient, getObj);
60
+ const globalContextClient = res.objClient;
61
+ const globalContextClientSerialized = serializeObject(globalContextClient, passToClient, getObj);
41
62
  return globalContextClientSerialized;
42
63
  }
43
- function serializeObject(obj, objName, passToClient) {
64
+ function serializeObject(obj, passToClient, getObj) {
44
65
  let serialized;
45
66
  try {
46
67
  serialized = serializeValue(obj);
@@ -49,11 +70,15 @@ function serializeObject(obj, objName, passToClient) {
49
70
  const h = (s) => pc.cyan(s);
50
71
  let hasWarned = false;
51
72
  const propsNonSerializable = [];
52
- passToClient.forEach((prop) => {
73
+ passToClient.forEach((entry) => {
74
+ const entryNormalized = normalizePassToClientEntry(entry);
75
+ const { prop } = entryNormalized;
53
76
  const res = getPropVal(obj, prop);
54
77
  if (!res)
55
78
  return;
56
79
  const { value } = res;
80
+ const { objName } = getObj(entryNormalized) ?? {};
81
+ assert(objName);
57
82
  const varName = `${objName}${getPropKeys(prop).map(getPropAccessNotation).join('')}`;
58
83
  try {
59
84
  serializeValue(value, varName);
@@ -103,7 +128,20 @@ function serializeObject(obj, objName, passToClient) {
103
128
  return serialized;
104
129
  }
105
130
  function serializeValue(value, varName) {
106
- return stringify(value, { forbidReactElements: true, valueName: varName });
131
+ return stringify(value, {
132
+ forbidReactElements: true,
133
+ valueName: varName,
134
+ // Prevent Google from crawling URLs in JSON:
135
+ // - https://github.com/vikejs/vike/discussions/2541#discussioncomment-13660198
136
+ // - https://github.com/vikejs/vike/discussions/2277
137
+ // - https://github.com/vikejs/vike/pull/2542
138
+ replacer(_key, value) {
139
+ if (typeof value === 'string' && value.startsWith('/')) {
140
+ // No need to use a reviver: https://github.com/brillout/json-serializer/blob/70fc8ed3741306391b51655b05df24e6963d1fdb/test/main.spec.ts#L74-L80
141
+ return { replacement: (value = '!' + value) };
142
+ }
143
+ },
144
+ });
107
145
  }
108
146
  function getPassToClientPageContext(pageContext) {
109
147
  let passToClient = [...pageContext._passToClient, ...passToClientBuiltInPageContext];
@@ -139,7 +177,7 @@ function getPageContextClientSerializedAbort(pageContext) {
139
177
  assert(unknownProps.length === 0);
140
178
  }
141
179
  else {
142
- // TODO/v1-release: remove
180
+ // TO-DO/next-major-release: remove
143
181
  assertWarning(unknownProps.length === 0, [
144
182
  "The following pageContext values won't be available on the client-side:",
145
183
  unknownProps.map((p) => ` pageContext[${JSON.stringify(p)}]`),
@@ -150,16 +188,36 @@ function getPageContextClientSerializedAbort(pageContext) {
150
188
  }
151
189
  return serializeValue(pageContext);
152
190
  }
153
- function applyPassToClient(passToClient, pageContext) {
154
- const pageContextClient = {};
155
- passToClient.forEach((prop) => {
191
+ function applyPassToClient(passToClient, getObj) {
192
+ const objClient = {};
193
+ const objClientProps = [];
194
+ passToClient.forEach((entry) => {
195
+ const entryNormalized = normalizePassToClientEntry(entry);
196
+ const { prop } = entryNormalized;
197
+ const { obj } = getObj(entryNormalized) ?? {};
198
+ if (!obj)
199
+ return;
156
200
  // Get value from pageContext
157
- const res = getPropVal(pageContext, prop);
201
+ const res = getPropVal(obj, prop);
158
202
  if (!res)
159
203
  return;
160
204
  const { value } = res;
161
205
  // Set value to pageContextClient
162
- setPropVal(pageContextClient, prop, value);
206
+ setPropVal(objClient, prop, value);
207
+ objClientProps.push(prop);
163
208
  });
164
- return pageContextClient;
209
+ return { objClient, objClientProps };
210
+ }
211
+ function normalizePassToClientEntry(entry) {
212
+ let once;
213
+ let prop;
214
+ if (typeof entry === 'string') {
215
+ prop = entry;
216
+ once = false;
217
+ }
218
+ else {
219
+ prop = entry.prop;
220
+ once = entry.once ?? false;
221
+ }
222
+ return { prop, once };
165
223
  }
@@ -1,4 +1,4 @@
1
- // TO-DO/soon: point package.json#exports['./server'] to this file.
1
+ // TO-DO/eventually: point package.json#exports['./server'] to this file.
2
2
  // - Write migration guide, see comment below.
3
3
  export * from './index.js';
4
4
  import { assertWarning } from './utils.js';
@@ -7,7 +7,7 @@ export { pipeWebStream, pipeNodeStream, pipeStream, stampPipe } from './html/str
7
7
  export { PROJECT_VERSION as version } from './utils.js';
8
8
  export { getGlobalContext, getGlobalContextSync, getGlobalContextAsync } from './globalContext.js';
9
9
  export { createDevMiddleware } from '../runtime-dev/index.js';
10
- // TODO/v1-release: remove
10
+ // TO-DO/next-major-release: remove
11
11
  // Deprecated exports
12
12
  export * from '../../types/index-dreprecated.js';
13
13
  export { injectAssets__public as _injectAssets } from './html/injectAssets/injectAssets__public.js';
@@ -1,3 +1,3 @@
1
1
  export {};
2
- // TODO/v1-release: remove https://github.com/vikejs/vike/issues/2122
2
+ // TO-DO/next-major-release: remove https://github.com/vikejs/vike/issues/2122
3
3
  // This doesn't do anything anymore. (It's kept to avoid introducing a breaking change.)
@@ -10,7 +10,7 @@ function assertArguments(...args) {
10
10
  showStackTrace: true,
11
11
  });
12
12
  assertUsage(isObject(pageContextInit), `${prefix} called with ${pc.code(`typeof pageContextInit === ${JSON.stringify(typeof pageContextInit)}`)} but ${pc.code('pageContextInit')} should be an object.`, { showStackTrace: true });
13
- // TODO/v1-release: remove
13
+ // TO-DO/next-major-release: remove
14
14
  if ('url' in pageContextInit) {
15
15
  assertWarning(false, '`pageContextInit.url` has been renamed to `pageContextInit.urlOriginal`: replace `renderPage({ url })` with `renderPage({ urlOriginal })`. (See https://vike.dev/migration/0.4.23 for more information.)', { showStackTrace: true, onlyOnce: true });
16
16
  pageContextInit.urlOriginal = pageContextInit.url;
@@ -28,6 +28,7 @@ declare function createHttpResponsePage(htmlRender: HtmlRender, renderHook: null
28
28
  __getPageAssets: GetPageAssets;
29
29
  _globalContext: GlobalContextServerInternal;
30
30
  abortStatusCode?: AbortStatusCode;
31
+ headersResponse?: Headers;
31
32
  }): Promise<HttpResponse>;
32
33
  declare function createHttpResponse404(errMsg404: string): HttpResponse;
33
34
  declare function createHttpResponseBaseIsMissing(urlOriginal: string, baseServer: string): HttpResponse;
@@ -9,8 +9,8 @@ import { assert, assertWarning, escapeHtml } from '../utils.js';
9
9
  import { getErrorPageId, isErrorPage } from '../../../shared/error-page.js';
10
10
  import { getHttpResponseBody, getHttpResponseBodyStreamHandlers } from './getHttpResponseBody.js';
11
11
  import { getEarlyHints } from './getEarlyHints.js';
12
- import { getCacheControl } from './createHttpResponse/getCacheControl.js';
13
12
  import { assertNoInfiniteHttpRedirect } from './createHttpResponse/assertNoInfiniteHttpRedirect.js';
13
+ import { cacheControlDisable } from './getCacheControl.js';
14
14
  async function createHttpResponsePage(htmlRender, renderHook, pageContext) {
15
15
  let statusCode = pageContext.abortStatusCode;
16
16
  if (!statusCode) {
@@ -29,10 +29,13 @@ async function createHttpResponsePage(htmlRender, renderHook, pageContext) {
29
29
  }
30
30
  const earlyHints = getEarlyHints(await pageContext.__getPageAssets());
31
31
  const headers = [];
32
- const cacheControl = getCacheControl(pageContext.pageId, pageContext._globalContext._pageConfigs, statusCode);
33
- if (cacheControl) {
34
- headers.push(['Cache-Control', cacheControl]);
35
- }
32
+ const headersResponse = pageContext.headersResponse || new Headers();
33
+ headersResponse.forEach((value, key) => {
34
+ headers.push([key, value]);
35
+ });
36
+ // An 5xx error page shouldn't be cached (it should be temporary)
37
+ if (statusCode >= 500)
38
+ headersResponse.set('Cache-Control', cacheControlDisable);
36
39
  return createHttpResponse(statusCode, 'text/html;charset=utf-8', headers, htmlRender, earlyHints, renderHook);
37
40
  }
38
41
  function createHttpResponse404(errMsg404) {
@@ -102,7 +105,7 @@ function createHttpResponse(statusCode, contentType, headers, htmlRender, earlyH
102
105
  return {
103
106
  statusCode,
104
107
  headers,
105
- // TODO/v1-release: remove
108
+ // TO-DO/next-major-release: remove
106
109
  get contentType() {
107
110
  assertWarning(false, 'pageContext.httpResponse.contentType is deprecated and will be removed in the next major release. Use pageContext.httpResponse.headers instead, see https://vike.dev/migration/0.4.134', { onlyOnce: true });
108
111
  return contentType;
@@ -13,7 +13,7 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
13
13
  } | {
14
14
  isPrerendering: true;
15
15
  ssr?: undefined;
16
- }): Promise<{
16
+ }): {
17
17
  _isOriginalObject: true;
18
18
  isPageContext: true;
19
19
  } & {
@@ -125,7 +125,7 @@ declare function createPageContextServerSide(pageContextInit: PageContextInit, g
125
125
  url: string;
126
126
  } & {
127
127
  headers: Record<string, string> | null;
128
- }>;
128
+ };
129
129
  declare function createPageContextServerSideWithoutGlobalContext(pageContextInit: PageContextInit): {
130
130
  _isOriginalObject: true;
131
131
  isPageContext: true;
@@ -3,7 +3,7 @@ export { createPageContextServerSideWithoutGlobalContext };
3
3
  import { assert, assertUsage, assertWarning, augmentType, normalizeHeaders, objectAssign } from '../utils.js';
4
4
  import { getPageContextUrlComputed } from '../../../shared/getPageContextUrlComputed.js';
5
5
  import { createPageContextObject, createPageContextShared } from '../../../shared/createPageContextShared.js';
6
- async function createPageContextServerSide(pageContextInit, globalContext, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
6
+ function createPageContextServerSide(pageContextInit, globalContext, { isPrerendering, ssr: { urlHandler, isClientSideNavigation } = {
7
7
  urlHandler: null,
8
8
  isClientSideNavigation: false,
9
9
  }, }) {
@@ -11,7 +11,7 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
11
11
  const pageContextCreated = createPageContext(pageContextInit, isPrerendering);
12
12
  objectAssign(pageContextCreated, {
13
13
  _globalContext: globalContext,
14
- _pageFilesAll: globalContext._pageFilesAll, // TODO/v1-release: remove
14
+ _pageFilesAll: globalContext._pageFilesAll, // TO-DO/next-major-release: remove
15
15
  // We use pageContext._baseServer and pageContext._baseAssets instead of pageContext._globalContext.baseServer and pageContext._globalContext.baseAssets because the Base URLs can (eventually one day if needed) be made non-global
16
16
  _baseServer: globalContext.baseServer,
17
17
  _baseAssets: globalContext.baseAssets,
@@ -33,7 +33,7 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
33
33
  }
34
34
  else if (pageContextInit.headers) {
35
35
  headers = pageContextInit.headers;
36
- // TODO/next-major-release: remove
36
+ // TO-DO/next-major-release: remove
37
37
  assertWarning(false, 'Setting pageContextInit.headers is deprecated: set pageContextInit.headersOriginal instead, see https://vike.dev/headers', { onlyOnce: true });
38
38
  }
39
39
  else {
@@ -41,7 +41,7 @@ async function createPageContextServerSide(pageContextInit, globalContext, { isP
41
41
  }
42
42
  objectAssign(pageContextCreated, { headers });
43
43
  }
44
- const pageContextAugmented = await createPageContextShared(pageContextCreated, globalContext._pageConfigGlobal, globalContext._vikeConfigPublicGlobal);
44
+ const pageContextAugmented = createPageContextShared(pageContextCreated, globalContext._vikeConfigPublicGlobal);
45
45
  augmentType(pageContextCreated, pageContextAugmented);
46
46
  return pageContextCreated;
47
47
  }
@@ -6,7 +6,7 @@ async function execHookDataAndOnBeforeRender(pageContext) {
6
6
  return;
7
7
  }
8
8
  const hooks = await execHookServer('data', pageContext);
9
- const dataHook = hooks[0]; // TO-DO/soon: support cumulative
9
+ const dataHook = hooks[0]; // TO-DO/soon/cumulative-hooks: support cumulative
10
10
  if (dataHook) {
11
11
  // Note: hookReturn can be anything (e.g. an object) and is to be assigned to pageContext.data
12
12
  const pageContextFromHook = {
@@ -19,7 +19,7 @@ async function execHookDataAndOnBeforeRender(pageContext) {
19
19
  }
20
20
  }
21
21
  const res = await execHookServer('onBeforeRender', pageContext);
22
- const onBeforeRenderHook = res[0]; // TO-DO/soon: support cumulative
22
+ const onBeforeRenderHook = res[0]; // TO-DO/soon/cumulative-hooks: support cumulative
23
23
  if (onBeforeRenderHook) {
24
24
  const { hookReturn } = onBeforeRenderHook;
25
25
  assertOnBeforeRenderHookReturn(hookReturn, onBeforeRenderHook.hookFilePath);
@@ -0,0 +1,5 @@
1
+ export { getCacheControl };
2
+ export { cacheControlDisable };
3
+ import type { PageConfigRuntime } from '../../../types/PageConfig.js';
4
+ declare const cacheControlDisable = "no-store, max-age=0";
5
+ declare function getCacheControl(pageId: string | null, pageConfigs: PageConfigRuntime[]): string;
@@ -1,13 +1,12 @@
1
1
  export { getCacheControl };
2
- import { getPageConfig } from '../../../../shared/page-configs/helpers.js';
3
- import { getConfigValueRuntime } from '../../../../shared/page-configs/getConfigValueRuntime.js';
4
- const defaultValue = 'no-store, max-age=0';
5
- function getCacheControl(pageId, pageConfigs, statusCode) {
6
- // TODO/v1-release: remove
2
+ export { cacheControlDisable };
3
+ import { getPageConfig } from '../../../shared/page-configs/helpers.js';
4
+ import { getConfigValueRuntime } from '../../../shared/page-configs/getConfigValueRuntime.js';
5
+ const cacheControlDisable = 'no-store, max-age=0';
6
+ function getCacheControl(pageId, pageConfigs) {
7
+ // TO-DO/next-major-release: remove this line
7
8
  if (pageConfigs.length === 0)
8
- return defaultValue;
9
- if (statusCode > 499)
10
- return defaultValue;
9
+ return cacheControlDisable;
11
10
  if (pageId) {
12
11
  const pageConfig = getPageConfig(pageId, pageConfigs);
13
12
  const configValue = getConfigValueRuntime(pageConfig, 'cacheControl', 'string');
@@ -18,5 +17,5 @@ function getCacheControl(pageId, pageConfigs, statusCode) {
18
17
  // - Disabling caching by default is the safest strategy, because caching is problematic with authentication as described in https://github.com/vikejs/vike/issues/1275#issuecomment-1824366875
19
18
  // - Are there use cases when we don't need to disable caching?
20
19
  // - When there isn't any <script id="vike_pageContext" type="application/json"> then we can safely have caching. (We don't implement this exception because we're lazy and it's quite a rare situation.)
21
- return defaultValue;
20
+ return cacheControlDisable;
22
21
  }
@@ -56,7 +56,7 @@ function getHttpResponseBodyStreamHandlers(htmlRender, renderHook) {
56
56
  const body = await getHtmlString(htmlRender);
57
57
  return body;
58
58
  },
59
- // TODO/v1-release: remove
59
+ // TO-DO/next-major-release: remove
60
60
  async getNodeStream() {
61
61
  assertWarning(false, '`pageContext.httpResponse.getNodeStream()` is outdated, use `pageContext.httpResponse.getReadableNodeStream()` instead. ' +
62
62
  streamDocs, { onlyOnce: true, showStackTrace: true });
@@ -66,7 +66,7 @@ function getHttpResponseBodyStreamHandlers(htmlRender, renderHook) {
66
66
  }
67
67
  return nodeStream;
68
68
  },
69
- // TODO/v1-release: remove
69
+ // TO-DO/next-major-release: remove
70
70
  getWebStream() {
71
71
  assertWarning(false, '`pageContext.httpResponse.getWebStream(res)` is outdated, use `pageContext.httpResponse.getReadableWebStream(res)` instead. ' +
72
72
  streamDocs, { onlyOnce: true, showStackTrace: true });
@@ -76,7 +76,7 @@ function getHttpResponseBodyStreamHandlers(htmlRender, renderHook) {
76
76
  }
77
77
  return webStream;
78
78
  },
79
- // TODO/v1-release: remove
79
+ // TO-DO/next-major-release: remove
80
80
  pipeToWebWritable(writable) {
81
81
  assertWarning(false, '`pageContext.httpResponse.pipeToWebWritable(res)` is outdated, use `pageContext.httpResponse.pipe(res)` instead. ' +
82
82
  streamDocs, { onlyOnce: true, showStackTrace: true });
@@ -85,7 +85,7 @@ function getHttpResponseBodyStreamHandlers(htmlRender, renderHook) {
85
85
  assertUsage(false, getErrMsg(htmlRender, renderHook, 'pipeToWebWritable()'));
86
86
  }
87
87
  },
88
- // TODO/v1-release: remove
88
+ // TO-DO/next-major-release: remove
89
89
  pipeToNodeWritable(writable) {
90
90
  assertWarning(false, '`pageContext.httpResponse.pipeToNodeWritable(res)` is outdated, use `pageContext.httpResponse.pipe(res)` instead. ' +
91
91
  streamDocs, { onlyOnce: true, showStackTrace: true });
@@ -9,7 +9,7 @@ function retrieveAssetsProd(clientDependencies, assetsManifest, includeAssetsImp
9
9
  clientDependencies.forEach(({ id, onlyAssets, eagerlyImported }) => {
10
10
  if (eagerlyImported)
11
11
  return; // Eagerly imported assets aren't imported with import() and therefore don't create a new Rollup entry and aren't listed in the manifest file
12
- // TODO/v1-release: remove
12
+ // TO-DO/next-major-release: remove
13
13
  if (includeAssetsImportedByServer &&
14
14
  onlyAssets &&
15
15
  id.includes('.page.server.') &&
@@ -1,11 +1,13 @@
1
1
  export { loadPageConfigsLazyServerSideAndExecHook };
2
2
  export type { PageContext_loadPageConfigsLazyServerSide };
3
3
  export type { PageConfigsLazy };
4
+ import { type VikeConfigPublicPageLazy } from '../../../shared/getPageFiles.js';
4
5
  import { PromiseType } from '../utils.js';
5
6
  import { PageContextGetPageAssets, type PageAsset } from './getPageAssets.js';
6
7
  import { type PageContextDebugRouteMatches } from './debugPageFiles.js';
7
8
  import type { GlobalContextServerInternal } from '../globalContext.js';
8
9
  import { type PageContextExecHookServer } from './execHookServer.js';
10
+ import type { PassToClient } from '../html/serializeContext.js';
9
11
  type PageContextExecuteHook = Omit<PageContextExecHookServer, keyof Awaited<ReturnType<typeof loadPageConfigsLazyServerSide>>>;
10
12
  type PageContext_loadPageConfigsLazyServerSide = PageContextGetPageAssets & PageContextDebugRouteMatches & {
11
13
  pageId: string;
@@ -13,19 +15,21 @@ type PageContext_loadPageConfigsLazyServerSide = PageContextGetPageAssets & Page
13
15
  _globalContext: GlobalContextServerInternal;
14
16
  };
15
17
  type PageConfigsLazy = PromiseType<ReturnType<typeof loadPageConfigsLazyServerSide>>;
16
- declare function loadPageConfigsLazyServerSideAndExecHook<PageContext extends PageContext_loadPageConfigsLazyServerSide & PageContextExecuteHook>(pageContext: PageContext): Promise<PageContext & import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
18
+ declare function loadPageConfigsLazyServerSideAndExecHook<PageContext extends PageContext_loadPageConfigsLazyServerSide & PageContextExecuteHook>(pageContext: PageContext): Promise<PageContext & VikeConfigPublicPageLazy & {
17
19
  Page: unknown;
18
20
  _isHtmlOnly: boolean;
19
- _passToClient: string[];
21
+ _passToClient: PassToClient;
20
22
  _pageFilePathsLoaded: string[];
23
+ headersResponse: Headers;
21
24
  } & {
22
25
  __getPageAssets: () => Promise<PageAsset[]>;
23
26
  }>;
24
- declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPageConfigsLazyServerSide): Promise<import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
27
+ declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPageConfigsLazyServerSide): Promise<VikeConfigPublicPageLazy & {
25
28
  Page: unknown;
26
29
  _isHtmlOnly: boolean;
27
- _passToClient: string[];
30
+ _passToClient: PassToClient;
28
31
  _pageFilePathsLoaded: string[];
32
+ headersResponse: Headers;
29
33
  } & {
30
34
  __getPageAssets: () => Promise<PageAsset[]>;
31
35
  }>;
@@ -2,13 +2,14 @@ export { loadPageConfigsLazyServerSideAndExecHook };
2
2
  import { getPageFilesServerSide } from '../../../shared/getPageFiles.js';
3
3
  import { resolveVikeConfigPublicPageLazy } from '../../../shared/page-configs/resolveVikeConfigPublic.js';
4
4
  import { analyzePageClientSideInit } from '../../../shared/getPageFiles/analyzePageClientSide.js';
5
- import { assert, assertUsage, assertWarning, hasProp, isArrayOfStrings, objectAssign, isArray, } from '../utils.js';
5
+ import { assertUsage, assertWarning, hasProp, objectAssign } from '../utils.js';
6
6
  import { getPageAssets } from './getPageAssets.js';
7
7
  import { debugPageFiles } from './debugPageFiles.js';
8
8
  import { findPageConfig } from '../../../shared/page-configs/findPageConfig.js';
9
9
  import { analyzePage } from './analyzePage.js';
10
10
  import { loadConfigValues } from '../../../shared/page-configs/loadConfigValues.js';
11
11
  import { execHookServer } from './execHookServer.js';
12
+ import { getCacheControl } from './getCacheControl.js';
12
13
  async function loadPageConfigsLazyServerSideAndExecHook(pageContext) {
13
14
  const pageContextAddendum = await loadPageConfigsLazyServerSide(pageContext);
14
15
  objectAssign(pageContext, pageContextAddendum);
@@ -18,8 +19,8 @@ async function loadPageConfigsLazyServerSideAndExecHook(pageContext) {
18
19
  async function loadPageConfigsLazyServerSide(pageContext) {
19
20
  const pageConfig = findPageConfig(pageContext._globalContext._pageConfigs, pageContext.pageId); // Make pageConfig globally available as pageContext._pageConfig ?
20
21
  const globalContext = pageContext._globalContext;
21
- const [{ pageFilesLoaded, pageContextExports }] = await Promise.all([
22
- loadPageUserFiles(pageContext._globalContext._pageFilesAll, pageConfig, globalContext._pageConfigGlobal, pageContext.pageId, !globalContext._isProduction),
22
+ const [{ pageFilesLoaded, configPublicPageLazy }] = await Promise.all([
23
+ loadPageConfigFiles(pageContext._globalContext._pageFilesAll, pageConfig, globalContext._pageConfigGlobal, pageContext.pageId, !globalContext._isProduction),
23
24
  analyzePageClientSideInit(pageContext._globalContext._pageFilesAll, pageContext.pageId, {
24
25
  sharedPageFilesAlreadyLoaded: true,
25
26
  }),
@@ -29,28 +30,27 @@ async function loadPageConfigsLazyServerSide(pageContext) {
29
30
  const passToClient = [];
30
31
  const errMsg = ' should be an array of strings.';
31
32
  if (!isV1Design) {
32
- pageContextExports.exportsAll.passToClient?.forEach((e) => {
33
+ configPublicPageLazy.exportsAll.passToClient?.forEach((e) => {
33
34
  assertUsage(hasProp(e, 'exportValue', 'string[]'), `${e.exportSource}${errMsg}`);
34
35
  passToClient.push(...e.exportValue);
35
36
  });
36
37
  }
37
38
  else {
38
- pageContextExports.configEntries.passToClient?.forEach((e) => {
39
- const { configValue } = e;
40
- assert(isArray(configValue));
41
- const vals = configValue.flat(1);
42
- // TODO: improve error message by using (upcoming) new data structure instead of configEntries
43
- assertUsage(isArrayOfStrings(vals), `${e.configDefinedAt}${errMsg}`);
44
- passToClient.push(...vals);
39
+ configPublicPageLazy.from.configsCumulative.passToClient?.values.forEach((v) => {
40
+ const { value } = v;
41
+ // const { definedAt } = v
42
+ // assertUsage(isArrayOfStrings(value), `+passToClient value defined at ${definedAt}${errMsg}`)
43
+ passToClient.push(...value);
45
44
  });
46
45
  }
47
46
  const pageContextAddendum = {};
48
- objectAssign(pageContextAddendum, pageContextExports);
47
+ objectAssign(pageContextAddendum, configPublicPageLazy);
49
48
  objectAssign(pageContextAddendum, {
50
- Page: pageContextExports.exports.Page,
49
+ Page: configPublicPageLazy.exports.Page,
51
50
  _isHtmlOnly: isHtmlOnly,
52
51
  _passToClient: passToClient,
53
52
  _pageFilePathsLoaded: pageFilesLoaded.map((p) => p.filePath),
53
+ headersResponse: resolveHeadersResponse(pageContext, pageContextAddendum),
54
54
  });
55
55
  objectAssign(pageContextAddendum, {
56
56
  __getPageAssets: async () => {
@@ -64,7 +64,7 @@ async function loadPageConfigsLazyServerSide(pageContext) {
64
64
  }
65
65
  },
66
66
  });
67
- // TODO/v1-release: remove
67
+ // TO-DO/next-major-release: remove
68
68
  Object.assign(pageContextAddendum, {
69
69
  _getPageAssets: async () => {
70
70
  assertWarning(false, 'pageContext._getPageAssets() deprecated, see https://vike.dev/preloading', {
@@ -103,13 +103,31 @@ async function loadPageConfigsLazyServerSide(pageContext) {
103
103
  });
104
104
  return pageContextAddendum;
105
105
  }
106
- async function loadPageUserFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) {
106
+ async function loadPageConfigFiles(pageFilesAll, pageConfig, pageConfigGlobal, pageId, isDev) {
107
107
  const pageFilesServerSide = getPageFilesServerSide(pageFilesAll, pageId);
108
108
  const pageConfigLoaded = !pageConfig ? null : await loadConfigValues(pageConfig, isDev);
109
109
  await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.()));
110
- const pageContextExports = resolveVikeConfigPublicPageLazy(pageFilesServerSide, pageConfigLoaded, pageConfigGlobal);
110
+ const configPublicPageLazy = resolveVikeConfigPublicPageLazy(pageFilesServerSide, pageConfigLoaded, pageConfigGlobal);
111
111
  return {
112
- pageContextExports,
112
+ configPublicPageLazy,
113
113
  pageFilesLoaded: pageFilesServerSide,
114
114
  };
115
115
  }
116
+ function resolveHeadersResponse(pageContext, pageContextAddendum) {
117
+ const headersResponse = mergeHeaders(pageContextAddendum.config.headersResponse);
118
+ if (!headersResponse.get('Cache-Control')) {
119
+ const cacheControl = getCacheControl(pageContext.pageId, pageContext._globalContext._pageConfigs);
120
+ if (cacheControl)
121
+ headersResponse.set('Cache-Control', cacheControl);
122
+ }
123
+ return headersResponse;
124
+ }
125
+ function mergeHeaders(headersList = []) {
126
+ const headersMerged = new Headers();
127
+ headersList.forEach((headers) => {
128
+ new Headers(headers).forEach((value, key) => {
129
+ headersMerged.append(key, value);
130
+ });
131
+ });
132
+ return headersMerged;
133
+ }
@@ -1,7 +1,7 @@
1
1
  export { preparePageContextForPublicUsageServer };
2
2
  import { assertPropertyGetters, preparePageContextForPublicUsage, } from '../../../shared/preparePageContextForPublicUsage.js';
3
3
  function preparePageContextForPublicUsageServer(pageContext) {
4
- // TODO/next-major-release: after we remove supportVueReactiviy() we can call this later inside the agnostic preparePageContextForPublicUsage()
4
+ // TO-DO/next-major-release: after we remove supportVueReactiviy() we can call this later inside the agnostic preparePageContextForPublicUsage()
5
5
  assertPropertyGetters(pageContext);
6
6
  pageContext = preparePageContextForPublicUsage(pageContext);
7
7
  return pageContext;
@@ -143,8 +143,9 @@ declare function prerenderPage(pageContext: PageContextCreated & PageConfigsLazy
143
143
  } & import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
144
144
  Page: unknown;
145
145
  _isHtmlOnly: boolean;
146
- _passToClient: string[];
146
+ _passToClient: import("../html/serializeContext.js").PassToClient;
147
147
  _pageFilePathsLoaded: string[];
148
+ headersResponse: Headers;
148
149
  } & {
149
150
  __getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
150
151
  } & {
@@ -277,8 +278,9 @@ declare function prerenderPage(pageContext: PageContextCreated & PageConfigsLazy
277
278
  } & import("../../../shared/getPageFiles.js").VikeConfigPublicPageLazy & {
278
279
  Page: unknown;
279
280
  _isHtmlOnly: boolean;
280
- _passToClient: string[];
281
+ _passToClient: import("../html/serializeContext.js").PassToClient;
281
282
  _pageFilePathsLoaded: string[];
283
+ headersResponse: Headers;
282
284
  } & {
283
285
  __getPageAssets: () => Promise<import("./getPageAssets.js").PageAsset[]>;
284
286
  } & {
@@ -14,6 +14,7 @@ import { preparePageContextForPublicUsageServer } from './preparePageContextForP
14
14
  import { execHookGuard } from '../../../shared/route/execHookGuard.js';
15
15
  import pc from '@brillout/picocolors';
16
16
  import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
17
+ // TODO/now: rename?
17
18
  async function renderPageAlreadyRouted(pageContext) {
18
19
  // pageContext.pageId can either be the:
19
20
  // - ID of the page matching the routing, or the
@@ -10,7 +10,7 @@ type PageContextInit = Pick<PageContextInternalServer, 'urlOriginal' | 'headersO
10
10
  /** @deprecated Set `pageContextInit.urlOriginal` instead */ url?: string;
11
11
  /** @deprecated Set pageContextInit.headersOriginal instead */ headers?: Record<string, string>;
12
12
  };
13
- type PageContextBegin = Awaited<ReturnType<typeof getPageContextBegin>>;
13
+ type PageContextBegin = ReturnType<typeof getPageContextBegin>;
14
14
  declare function renderPage<PageContextUserAdded extends {}, PageContextInitUser extends PageContextInit>(pageContextInit: PageContextInitUser): Promise<PageContextInitUser & {
15
15
  httpResponse: HttpResponse;
16
16
  } & Partial<PageContextServer & PageContextUserAdded>>;
@@ -18,7 +18,7 @@ declare let asyncHookWrapper: <PageContext>(_httpRequestId: number, ret: () => P
18
18
  pageContextReturn: Awaited<PageContext>;
19
19
  }>;
20
20
  declare function renderPage_addAsyncHookwrapper(wrapper: typeof asyncHookWrapper): void;
21
- declare function getPageContextBegin(pageContextInit: PageContextInit, globalContext: GlobalContextServerInternal, httpRequestId: number): Promise<{
21
+ declare function getPageContextBegin(pageContextInit: PageContextInit, globalContext: GlobalContextServerInternal, httpRequestId: number): {
22
22
  _isOriginalObject: true;
23
23
  isPageContext: true;
24
24
  } & {
@@ -132,4 +132,4 @@ declare function getPageContextBegin(pageContextInit: PageContextInit, globalCon
132
132
  headers: Record<string, string> | null;
133
133
  } & {
134
134
  _httpRequestId: number;
135
- }>;
135
+ };