vike 0.4.238 → 0.4.239-commit-050a4a3

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 (191) hide show
  1. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +3 -2
  2. package/dist/cjs/node/runtime/globalContext.js +1 -0
  3. package/dist/cjs/node/runtime/index.js +3 -3
  4. package/dist/cjs/node/runtime/page-files/setup.js +3 -1
  5. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -9
  6. package/dist/cjs/node/runtime/renderPage/createPageContextServerSide.js +2 -2
  7. package/dist/cjs/node/runtime/renderPage/csp.js +47 -0
  8. package/dist/cjs/node/runtime/renderPage/execHookOnRenderHtml.js +2 -2
  9. package/dist/cjs/node/runtime/renderPage/getEarlyHints.js +1 -1
  10. package/dist/cjs/node/runtime/renderPage/getHttpResponseBody.js +2 -2
  11. package/dist/cjs/node/runtime/renderPage/headersResponse.js +48 -0
  12. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/getHtmlTags.js +16 -13
  13. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/getViteDevScript.js +1 -1
  14. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/inferHtmlTags.js +8 -6
  15. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/injectAssets__public.js +1 -1
  16. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/injectHtmlTags.js +1 -1
  17. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/mergeScriptTags.js +5 -3
  18. package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets.js +2 -2
  19. package/dist/cjs/node/runtime/{html → renderPage/html}/propKeys.js +1 -1
  20. package/dist/cjs/node/runtime/{html → renderPage/html}/renderHtml.js +1 -1
  21. package/dist/cjs/node/runtime/{html → renderPage/html}/serializeContext.js +6 -6
  22. package/dist/cjs/node/runtime/{html → renderPage/html}/stream/react-streaming.js +1 -1
  23. package/dist/cjs/node/runtime/{html → renderPage/html}/stream.js +1 -1
  24. package/dist/cjs/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +17 -38
  25. package/dist/cjs/node/runtime/renderPage/renderPageAfterRoute.js +2 -2
  26. package/dist/cjs/node/runtime/renderPage.js +1 -1
  27. package/dist/cjs/node/vite/onLoad.js +1 -1
  28. package/dist/cjs/node/vite/plugins/pluginBaseUrls.js +32 -28
  29. package/dist/cjs/node/vite/plugins/pluginBuild/handleAssetsManifest.js +1 -1
  30. package/dist/cjs/node/vite/plugins/pluginBuild/pluginBuildApp.js +24 -20
  31. package/dist/cjs/node/vite/plugins/pluginBuild/pluginBuildConfig.js +4 -2
  32. package/dist/cjs/node/vite/plugins/pluginBuild/pluginDistFileNames.js +76 -74
  33. package/dist/cjs/node/vite/plugins/pluginBuild/pluginDistPackageJsonFile.js +18 -14
  34. package/dist/cjs/node/vite/plugins/pluginBuild/pluginModuleBanner.js +4 -2
  35. package/dist/cjs/node/vite/plugins/pluginBuild/pluginProdBuildEntry.js +4 -2
  36. package/dist/cjs/node/vite/plugins/pluginBuild/pluginSuppressRollupWarning.js +20 -18
  37. package/dist/cjs/node/vite/plugins/pluginCommon.js +7 -21
  38. package/dist/cjs/node/vite/plugins/pluginDev.js +51 -47
  39. package/dist/cjs/node/vite/plugins/pluginEnvVars.js +63 -57
  40. package/dist/cjs/node/vite/plugins/pluginExtractAssets.js +101 -91
  41. package/dist/cjs/node/vite/plugins/pluginExtractExportNames.js +24 -16
  42. package/dist/cjs/node/vite/plugins/pluginFileEnv.js +67 -57
  43. package/dist/cjs/node/vite/plugins/pluginNonRunnableDev.js +26 -19
  44. package/dist/cjs/node/vite/plugins/pluginPreview.js +30 -24
  45. package/dist/cjs/node/vite/plugins/pluginReplaceConstants.js +41 -33
  46. package/dist/cjs/node/vite/plugins/pluginSetGlobalContext.js +4 -2
  47. package/dist/cjs/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +1 -1
  48. package/dist/cjs/node/vite/plugins/pluginVirtualFiles.js +50 -37
  49. package/dist/cjs/node/vite/plugins/pluginWorkaroundCssModuleHmr.js +8 -6
  50. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +3 -0
  51. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal/crawlPlusFiles.js +1 -1
  52. package/dist/cjs/node/vite/shared/resolveVikeConfigInternal.js +20 -22
  53. package/dist/cjs/shared/createGlobalContextShared.js +4 -22
  54. package/dist/cjs/shared/createPageContextShared.js +2 -2
  55. package/dist/cjs/shared/page-configs/resolveVikeConfigPublic.js +62 -43
  56. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  57. package/dist/cjs/utils/assert.js +16 -1
  58. package/dist/cjs/utils/assertNodeVersion.js +3 -1
  59. package/dist/cjs/utils/assertVersion.js +26 -5
  60. package/dist/cjs/utils/joinEnglish.js +2 -1
  61. package/dist/esm/client/runtime-client-routing/createPageContextClientSide.d.ts +39 -16
  62. package/dist/esm/client/runtime-client-routing/createPageContextClientSide.js +1 -1
  63. package/dist/esm/client/runtime-client-routing/getPageContextCurrent.d.ts +2 -2
  64. package/dist/esm/client/runtime-client-routing/getPageContextFromHooks.d.ts +97 -83
  65. package/dist/esm/client/runtime-client-routing/globalContext.d.ts +38 -10
  66. package/dist/esm/client/runtime-client-routing/prefetch/getPrefetchSettings.d.ts +2 -2
  67. package/dist/esm/client/runtime-client-routing/prefetch.d.ts +2 -2
  68. package/dist/esm/client/runtime-client-routing/prefetch.js +2 -2
  69. package/dist/esm/client/runtime-client-routing/preparePageContextForPublicUsageClient.d.ts +2 -2
  70. package/dist/esm/client/runtime-client-routing/renderPageClientSide.d.ts +43 -28
  71. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.d.ts +39 -16
  72. package/dist/esm/client/runtime-server-routing/createPageContextClientSide.js +1 -1
  73. package/dist/esm/client/runtime-server-routing/globalContext.d.ts +38 -10
  74. package/dist/esm/client/runtime-server-routing/preparePageContextForPublicUsageClient.d.ts +2 -2
  75. package/dist/esm/client/shared/createGetGlobalContextClient.d.ts +38 -10
  76. package/dist/esm/client/shared/execHookOnRenderClient.d.ts +2 -2
  77. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.d.ts +1 -1
  78. package/dist/esm/client/shared/loadPageConfigsLazyClientSide.js +2 -3
  79. package/dist/esm/client/shared/preparePageContextForPublicUsageClientShared.d.ts +2 -2
  80. package/dist/esm/node/prerender/resolvePrerenderConfig.js +4 -3
  81. package/dist/esm/node/prerender/runPrerender.d.ts +57 -14
  82. package/dist/esm/node/runtime/globalContext.d.ts +154 -40
  83. package/dist/esm/node/runtime/globalContext.js +1 -0
  84. package/dist/esm/node/runtime/index.d.ts +3 -3
  85. package/dist/esm/node/runtime/index.js +3 -3
  86. package/dist/esm/node/runtime/page-files/setup.js +3 -1
  87. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +1 -1
  88. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -9
  89. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.d.ts +52 -10
  90. package/dist/esm/node/runtime/renderPage/createPageContextServerSide.js +2 -2
  91. package/dist/esm/node/runtime/renderPage/csp.d.ts +12 -0
  92. package/dist/esm/node/runtime/renderPage/csp.js +45 -0
  93. package/dist/esm/node/runtime/renderPage/execHookOnRenderHtml.d.ts +2 -2
  94. package/dist/esm/node/runtime/renderPage/execHookOnRenderHtml.js +2 -2
  95. package/dist/esm/node/runtime/renderPage/execHookServer.d.ts +2 -2
  96. package/dist/esm/node/runtime/renderPage/getEarlyHints.js +1 -1
  97. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.d.ts +2 -2
  98. package/dist/esm/node/runtime/renderPage/getHttpResponseBody.js +2 -2
  99. package/dist/esm/node/runtime/renderPage/headersResponse.d.ts +10 -0
  100. package/dist/esm/node/runtime/renderPage/headersResponse.js +46 -0
  101. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/getHtmlTags.d.ts +1 -1
  102. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/getHtmlTags.js +16 -13
  103. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/getViteDevScript.d.ts +1 -1
  104. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/getViteDevScript.js +1 -1
  105. package/dist/esm/node/runtime/renderPage/html/injectAssets/inferHtmlTags.d.ts +10 -0
  106. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/inferHtmlTags.js +7 -5
  107. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/injectAssets__public.js +1 -1
  108. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/injectHtmlTags.js +1 -1
  109. package/dist/esm/node/runtime/renderPage/html/injectAssets/mergeScriptTags.d.ts +3 -0
  110. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/mergeScriptTags.js +6 -4
  111. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets.d.ts +2 -2
  112. package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets.js +2 -2
  113. package/dist/esm/node/runtime/{html → renderPage/html}/propKeys.js +1 -1
  114. package/dist/esm/node/runtime/{html → renderPage/html}/renderHtml.d.ts +1 -1
  115. package/dist/esm/node/runtime/{html → renderPage/html}/renderHtml.js +1 -1
  116. package/dist/esm/node/runtime/{html → renderPage/html}/serializeContext.d.ts +6 -5
  117. package/dist/esm/node/runtime/{html → renderPage/html}/serializeContext.js +6 -6
  118. package/dist/esm/node/runtime/{html → renderPage/html}/stream/react-streaming.js +1 -1
  119. package/dist/esm/node/runtime/{html → renderPage/html}/stream.js +1 -1
  120. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.d.ts +62 -15
  121. package/dist/esm/node/runtime/renderPage/loadPageConfigsLazyServerSide.js +18 -39
  122. package/dist/esm/node/runtime/renderPage/preparePageContextForPublicUsageServer.d.ts +2 -2
  123. package/dist/esm/node/runtime/renderPage/renderPageAfterRoute.d.ts +114 -28
  124. package/dist/esm/node/runtime/renderPage/renderPageAfterRoute.js +2 -2
  125. package/dist/esm/node/runtime/renderPage.d.ts +52 -10
  126. package/dist/esm/node/runtime/renderPage.js +1 -1
  127. package/dist/esm/node/vite/onLoad.js +1 -1
  128. package/dist/esm/node/vite/plugins/pluginBaseUrls.js +32 -28
  129. package/dist/esm/node/vite/plugins/pluginBuild/handleAssetsManifest.js +1 -1
  130. package/dist/esm/node/vite/plugins/pluginBuild/pluginBuildApp.js +24 -20
  131. package/dist/esm/node/vite/plugins/pluginBuild/pluginBuildConfig.js +4 -2
  132. package/dist/esm/node/vite/plugins/pluginBuild/pluginDistFileNames.js +76 -74
  133. package/dist/esm/node/vite/plugins/pluginBuild/pluginDistPackageJsonFile.js +18 -14
  134. package/dist/esm/node/vite/plugins/pluginBuild/pluginModuleBanner.js +4 -2
  135. package/dist/esm/node/vite/plugins/pluginBuild/pluginProdBuildEntry.js +4 -2
  136. package/dist/esm/node/vite/plugins/pluginBuild/pluginSuppressRollupWarning.js +20 -18
  137. package/dist/esm/node/vite/plugins/pluginCommon.js +8 -22
  138. package/dist/esm/node/vite/plugins/pluginDev.js +51 -47
  139. package/dist/esm/node/vite/plugins/pluginEnvVars.js +63 -57
  140. package/dist/esm/node/vite/plugins/pluginExtractAssets.js +101 -91
  141. package/dist/esm/node/vite/plugins/pluginExtractExportNames.js +24 -16
  142. package/dist/esm/node/vite/plugins/pluginFileEnv.js +67 -57
  143. package/dist/esm/node/vite/plugins/pluginNonRunnableDev.js +26 -19
  144. package/dist/esm/node/vite/plugins/pluginPreview.js +30 -24
  145. package/dist/esm/node/vite/plugins/pluginReplaceConstants.js +41 -33
  146. package/dist/esm/node/vite/plugins/pluginSetGlobalContext.js +4 -2
  147. package/dist/esm/node/vite/plugins/pluginVirtualFiles/generateVirtualFileGlobalEntryWithOldDesign.js +2 -2
  148. package/dist/esm/node/vite/plugins/pluginVirtualFiles.js +51 -38
  149. package/dist/esm/node/vite/plugins/pluginWorkaroundCssModuleHmr.js +8 -6
  150. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/configDefinitionsBuiltIn.js +3 -0
  151. package/dist/esm/node/vite/shared/resolveVikeConfigInternal/crawlPlusFiles.js +2 -2
  152. package/dist/esm/node/vite/shared/resolveVikeConfigInternal.d.ts +4 -8
  153. package/dist/esm/node/vite/shared/resolveVikeConfigInternal.js +22 -24
  154. package/dist/esm/shared/createGlobalContextShared.d.ts +73 -17
  155. package/dist/esm/shared/createGlobalContextShared.js +5 -23
  156. package/dist/esm/shared/createPageContextShared.d.ts +2 -7
  157. package/dist/esm/shared/createPageContextShared.js +2 -2
  158. package/dist/esm/shared/getPageFiles.d.ts +1 -1
  159. package/dist/esm/shared/hooks/execHook.d.ts +2 -2
  160. package/dist/esm/shared/hooks/getHook.d.ts +3 -3
  161. package/dist/esm/shared/page-configs/resolveVikeConfigPublic.d.ts +91 -31
  162. package/dist/esm/shared/page-configs/resolveVikeConfigPublic.js +62 -43
  163. package/dist/esm/types/Config/ConfigResolved.d.ts +8 -0
  164. package/dist/esm/types/Config.d.ts +14 -6
  165. package/dist/esm/types/PageContext.d.ts +8 -25
  166. package/dist/esm/types/VikeNamespace.d.ts +0 -27
  167. package/dist/esm/types/index.d.ts +2 -2
  168. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  169. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  170. package/dist/esm/utils/assert.js +16 -1
  171. package/dist/esm/utils/assertNodeVersion.js +3 -1
  172. package/dist/esm/utils/assertVersion.d.ts +4 -3
  173. package/dist/esm/utils/assertVersion.js +23 -5
  174. package/dist/esm/utils/joinEnglish.js +2 -1
  175. package/package.json +2 -2
  176. package/dist/cjs/types/Config/helpers.js +0 -2
  177. package/dist/esm/node/runtime/html/injectAssets/inferHtmlTags.d.ts +0 -9
  178. package/dist/esm/node/runtime/html/injectAssets/mergeScriptTags.d.ts +0 -2
  179. package/dist/esm/types/Config/PageContextConfig.d.ts +0 -15
  180. package/dist/esm/types/Config/helpers.d.ts +0 -10
  181. package/dist/esm/types/Config/helpers.js +0 -1
  182. /package/dist/cjs/node/runtime/{html → renderPage/html}/injectAssets/sanitizeJson.js +0 -0
  183. /package/dist/cjs/types/Config/{PageContextConfig.js → ConfigResolved.js} +0 -0
  184. /package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/injectAssets__public.d.ts +0 -0
  185. /package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/injectHtmlTags.d.ts +0 -0
  186. /package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/sanitizeJson.d.ts +0 -0
  187. /package/dist/esm/node/runtime/{html → renderPage/html}/injectAssets/sanitizeJson.js +0 -0
  188. /package/dist/esm/node/runtime/{html → renderPage/html}/propKeys.d.ts +0 -0
  189. /package/dist/esm/node/runtime/{html → renderPage/html}/stream/react-streaming.d.ts +0 -0
  190. /package/dist/esm/node/runtime/{html → renderPage/html}/stream.d.ts +0 -0
  191. /package/dist/esm/types/Config/{PageContextConfig.js → ConfigResolved.js} +0 -0
@@ -0,0 +1,46 @@
1
+ export { resolveHeadersResponseEarly };
2
+ export { resolveHeadersResponseFinal };
3
+ import { addCspResponseHeader } from './csp.js';
4
+ import { isCallable } from '../utils.js';
5
+ import { cacheControlDisable, getCacheControl } from './getCacheControl.js';
6
+ function resolveHeadersResponseFinal(pageContext, statusCode) {
7
+ const headersResponse = pageContext.headersResponse || new Headers();
8
+ // 5xx error pages are temporary and shouldn't be cached.
9
+ // This overrides any previously set Cache-Control value.
10
+ if (statusCode >= 500)
11
+ headersResponse.set('Cache-Control', cacheControlDisable);
12
+ const headers = [];
13
+ headersResponse.forEach((value, key) => {
14
+ headers.push([key, value]);
15
+ });
16
+ return headers;
17
+ }
18
+ async function resolveHeadersResponseEarly(pageContext) {
19
+ const headersResponse = await resolveHeadersResponseConfig(pageContext);
20
+ if (!headersResponse.get('Cache-Control')) {
21
+ const cacheControl = getCacheControl(pageContext.pageId, pageContext._globalContext._pageConfigs);
22
+ if (cacheControl)
23
+ headersResponse.set('Cache-Control', cacheControl);
24
+ }
25
+ addCspResponseHeader(pageContext, headersResponse);
26
+ const pageContextAddendum = {
27
+ headersResponse,
28
+ };
29
+ return pageContextAddendum;
30
+ }
31
+ async function resolveHeadersResponseConfig(pageContext) {
32
+ const headersMerged = new Headers();
33
+ await Promise.all((pageContext.config.headersResponse ?? []).map(async (headers) => {
34
+ let headersInit;
35
+ if (isCallable(headers)) {
36
+ headersInit = await headers(pageContext);
37
+ }
38
+ else {
39
+ headersInit = headers;
40
+ }
41
+ new Headers(headersInit).forEach((value, key) => {
42
+ headersMerged.append(key, value);
43
+ });
44
+ }));
45
+ return headersMerged;
46
+ }
@@ -4,7 +4,7 @@ export type { PreloadFilter };
4
4
  export type { InjectFilterEntry };
5
5
  import type { PageContextInjectAssets } from '../injectAssets.js';
6
6
  import type { StreamFromReactStreamingPackage } from '../stream/react-streaming.js';
7
- import type { PageAsset } from '../../renderPage/getPageAssets.js';
7
+ import type { PageAsset } from '../../getPageAssets.js';
8
8
  type PreloadFilter = null | ((assets: InjectFilterEntry[]) => InjectFilterEntry[]);
9
9
  type PreloadFilterInject = false | 'HTML_BEGIN' | 'HTML_END';
10
10
  /** Filter what assets vike injects in the HTML.
@@ -1,15 +1,16 @@
1
1
  export { getHtmlTags };
2
- import { assert, assertWarning, assertUsage, isObject, freezePartial } from '../../utils.js';
2
+ import { assert, assertWarning, assertUsage, isObject, freezePartial } from '../../../utils.js';
3
3
  import { getGlobalContextClientSerialized, getPageContextClientSerialized, } from '../serializeContext.js';
4
4
  import { sanitizeJson } from './sanitizeJson.js';
5
5
  import { inferAssetTag, inferPreloadTag } from './inferHtmlTags.js';
6
6
  import { mergeScriptTags } from './mergeScriptTags.js';
7
- import { getPageConfig } from '../../../../shared/page-configs/helpers.js';
8
- import { getConfigValueRuntime } from '../../../../shared/page-configs/getConfigValueRuntime.js';
7
+ import { getPageConfig } from '../../../../../shared/page-configs/helpers.js';
8
+ import { getConfigValueRuntime } from '../../../../../shared/page-configs/getConfigValueRuntime.js';
9
9
  import pc from '@brillout/picocolors';
10
- import { getConfigDefinedAt } from '../../../../shared/page-configs/getConfigDefinedAt.js';
11
- import { htmlElementId_globalContext, htmlElementId_pageContext } from '../../../../shared/htmlElementIds.js';
12
- import { isFontFallback } from '../../renderPage/isFontFallback.js';
10
+ import { getConfigDefinedAt } from '../../../../../shared/page-configs/getConfigDefinedAt.js';
11
+ import { htmlElementId_globalContext, htmlElementId_pageContext } from '../../../../../shared/htmlElementIds.js';
12
+ import { isFontFallback } from '../../isFontFallback.js';
13
+ import { inferNonceAttr } from '../../csp.js';
13
14
  const stamp = '__injectFilterEntry';
14
15
  async function getHtmlTags(pageContext, streamFromReactStreamingPackage, injectFilter, pageAssets, viteDevScript, isStream) {
15
16
  assert([true, false].includes(pageContext._isHtmlOnly));
@@ -76,7 +77,7 @@ async function getHtmlTags(pageContext, streamFromReactStreamingPackage, injectF
76
77
  .forEach((asset) => {
77
78
  if (!asset.inject)
78
79
  return;
79
- const htmlTag = asset.isEntry ? inferAssetTag(asset) : inferPreloadTag(asset);
80
+ const htmlTag = asset.isEntry ? inferAssetTag(asset, pageContext) : inferPreloadTag(asset);
80
81
  htmlTags.push({ htmlTag, position: asset.inject });
81
82
  });
82
83
  // ==========
@@ -137,7 +138,7 @@ async function getHtmlTags(pageContext, streamFromReactStreamingPackage, injectF
137
138
  });
138
139
  }
139
140
  // The JavaScript entry <script> tag
140
- const scriptEntry = mergeScriptEntries(pageAssets, viteDevScript);
141
+ const scriptEntry = mergeScriptEntries(pageAssets, viteDevScript, pageContext);
141
142
  if (scriptEntry) {
142
143
  htmlTags.push({
143
144
  htmlTag: scriptEntry,
@@ -158,9 +159,9 @@ async function getHtmlTags(pageContext, streamFromReactStreamingPackage, injectF
158
159
  });
159
160
  return htmlTags;
160
161
  }
161
- function mergeScriptEntries(pageAssets, viteDevScript) {
162
+ function mergeScriptEntries(pageAssets, viteDevScript, pageContext) {
162
163
  const scriptEntries = pageAssets.filter((pageAsset) => pageAsset.isEntry && pageAsset.assetType === 'script');
163
- let scriptEntry = `${viteDevScript}${scriptEntries.map((asset) => inferAssetTag(asset)).join('')}`;
164
+ let scriptEntry = `${viteDevScript}${scriptEntries.map((asset) => inferAssetTag(asset, pageContext)).join('')}`;
164
165
  // We merge scripts to avoid the infamous HMR preamble error.
165
166
  // - Infamous HMR preamble error:
166
167
  // ```browser-console
@@ -178,12 +179,13 @@ function mergeScriptEntries(pageAssets, viteDevScript) {
178
179
  // ```
179
180
  // - Maybe an alternative would be to make Vike's client runtime entry <script> tag non-async. Would that work? Would it be a performance issue?
180
181
  // - The entry <script> shouldn't be `<script defer>` upon HTML streaming, otherwise progressive hydration while SSR streaming won't work.
181
- scriptEntry = mergeScriptTags(scriptEntry);
182
+ scriptEntry = mergeScriptTags(scriptEntry, pageContext);
182
183
  return scriptEntry;
183
184
  }
184
185
  function getPageContextJsonScriptTag(pageContext) {
185
186
  const pageContextClientSerialized = sanitizeJson(getPageContextClientSerialized(pageContext, true));
186
- const htmlTag = `<script id="${htmlElementId_pageContext}" type="application/json">${pageContextClientSerialized}</script>`;
187
+ const nonceAttr = inferNonceAttr(pageContext);
188
+ const htmlTag = `<script id="${htmlElementId_pageContext}" type="application/json"${nonceAttr}>${pageContextClientSerialized}</script>`;
187
189
  // Used by contra.com https://github.com/gajus
188
190
  // @ts-expect-error
189
191
  pageContext._pageContextHtmlTag = htmlTag;
@@ -191,7 +193,8 @@ function getPageContextJsonScriptTag(pageContext) {
191
193
  }
192
194
  function getGlobalContextJsonScriptTag(pageContext) {
193
195
  const globalContextClientSerialized = sanitizeJson(getGlobalContextClientSerialized(pageContext, true));
194
- const htmlTag = `<script id="${htmlElementId_globalContext}" type="application/json">${globalContextClientSerialized}</script>`;
196
+ const nonceAttr = inferNonceAttr(pageContext);
197
+ const htmlTag = `<script id="${htmlElementId_globalContext}" type="application/json"${nonceAttr}>${globalContextClientSerialized}</script>`;
195
198
  return htmlTag;
196
199
  }
197
200
  function assertInjectFilterEntries(injectFilterEntries) {
@@ -1,5 +1,5 @@
1
1
  export { getViteDevScript };
2
- import type { GlobalContextServerInternal } from '../../globalContext.js';
2
+ import type { GlobalContextServerInternal } from '../../../globalContext.js';
3
3
  declare function getViteDevScript(pageContext: {
4
4
  _globalContext: GlobalContextServerInternal;
5
5
  }): Promise<string>;
@@ -1,5 +1,5 @@
1
1
  export { getViteDevScript };
2
- import { assert, assertUsage, assertWarning, getViteRPC } from '../../utils.js';
2
+ import { assert, assertUsage, assertWarning, getViteRPC } from '../../../utils.js';
3
3
  import pc from '@brillout/picocolors';
4
4
  const reachOutCTA = 'Create a new GitHub issue to discuss a solution.';
5
5
  async function getViteDevScript(pageContext) {
@@ -0,0 +1,10 @@
1
+ export { inferAssetTag };
2
+ export { inferPreloadTag };
3
+ export { inferEarlyHintLink };
4
+ export { scriptCommonAttrs };
5
+ import type { PageAsset } from '../../getPageAssets.js';
6
+ import { type PageContextCspNonce } from '../../csp.js';
7
+ declare const scriptCommonAttrs = "type=\"module\" async";
8
+ declare function inferPreloadTag(pageAsset: PageAsset): string;
9
+ declare function inferAssetTag(pageAsset: PageAsset, pageContext: PageContextCspNonce): string;
10
+ declare function inferEarlyHintLink(pageAsset: PageAsset): string;
@@ -1,10 +1,11 @@
1
1
  export { inferAssetTag };
2
2
  export { inferPreloadTag };
3
3
  export { inferEarlyHintLink };
4
- export { scriptAttrs };
5
- import { assert } from '../../utils.js';
4
+ export { scriptCommonAttrs };
5
+ import { assert } from '../../../utils.js';
6
+ import { inferNonceAttr } from '../../csp.js';
6
7
  // We can't use `defer` here. With `defer`, the entry script won't start before `</body>` has been parsed, preventing progressive hydration during SSR streaming, see https://github.com/vikejs/vike/pull/1271
7
- const scriptAttrs = 'type="module" async';
8
+ const scriptCommonAttrs = 'type="module" async';
8
9
  function inferPreloadTag(pageAsset) {
9
10
  const { src, assetType, mediaType } = pageAsset;
10
11
  const rel = getRel(pageAsset);
@@ -20,11 +21,12 @@ function inferPreloadTag(pageAsset) {
20
21
  .join(' ');
21
22
  return `<link ${attributes}>`;
22
23
  }
23
- function inferAssetTag(pageAsset) {
24
+ function inferAssetTag(pageAsset, pageContext) {
24
25
  const { src, assetType, mediaType } = pageAsset;
25
26
  if (assetType === 'script') {
26
27
  assert(mediaType === 'text/javascript');
27
- return `<script src="${src}" ${scriptAttrs}></script>`;
28
+ const nonceAttr = inferNonceAttr(pageContext);
29
+ return `<script src="${src}" ${scriptCommonAttrs}${nonceAttr}></script>`;
28
30
  }
29
31
  if (assetType === 'style') {
30
32
  // WARNING: if changing following line, then also update https://github.com/vikejs/vike/blob/fae90a15d88e5e87ca9fcbb54cf2dc8773d2f229/vike/client/shared/removeFoucBuster.ts#L29
@@ -1,5 +1,5 @@
1
1
  export { injectAssets__public };
2
- import { assertUsage, assertWarning, castProp, hasProp } from '../../utils.js';
2
+ import { assertUsage, assertWarning, castProp, hasProp } from '../../../utils.js';
3
3
  import { injectHtmlTagsToString } from '../injectAssets.js';
4
4
  // TO-DO/next-major-release: remove
5
5
  async function injectAssets__public(htmlString, pageContext) {
@@ -6,7 +6,7 @@ export { joinHtmlTags };
6
6
  // Only needed for unit tests
7
7
  export { injectAtOpeningTag };
8
8
  export { injectAtClosingTag };
9
- import { assert, assertUsage, slice } from '../../utils.js';
9
+ import { assert, assertUsage, slice } from '../../../utils.js';
10
10
  function injectHtmlTags(htmlString, htmlTags, position) {
11
11
  const htmlFragment = joinHtmlTags(htmlTags.filter((h) => h.position === position));
12
12
  if (htmlFragment) {
@@ -0,0 +1,3 @@
1
+ export { mergeScriptTags };
2
+ import { type PageContextCspNonce } from '../../csp.js';
3
+ declare function mergeScriptTags(scriptTagsHtml: string, pageContext: PageContextCspNonce): string;
@@ -1,10 +1,11 @@
1
1
  export { mergeScriptTags };
2
- import { assert } from '../../utils.js';
3
- import { scriptAttrs } from './inferHtmlTags.js';
2
+ import { inferNonceAttr } from '../../csp.js';
3
+ import { assert } from '../../../utils.js';
4
+ import { scriptCommonAttrs } from './inferHtmlTags.js';
4
5
  const scriptRE = /(<script\b(?:\s[^>]*>|>))(.*?)<\/script>/gims;
5
6
  const srcRE = /\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
6
7
  const typeRE = /\btype\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s'">]+))/im;
7
- function mergeScriptTags(scriptTagsHtml) {
8
+ function mergeScriptTags(scriptTagsHtml, pageContext) {
8
9
  let scriptTag = '';
9
10
  const scripts = parseScripts(scriptTagsHtml);
10
11
  // We need to merge module scripts to ensure execution order
@@ -33,7 +34,8 @@ function mergeScriptTags(scriptTagsHtml) {
33
34
  }
34
35
  });
35
36
  if (contents.length > 0) {
36
- scriptTag += `<script ${scriptAttrs}>\n${contents.join('\n')}\n</script>`;
37
+ const nonceAttr = inferNonceAttr(pageContext);
38
+ scriptTag += `<script ${scriptCommonAttrs}${nonceAttr}>\n${contents.join('\n')}\n</script>`;
37
39
  }
38
40
  }
39
41
  }
@@ -2,12 +2,12 @@ export { injectHtmlTagsToString };
2
2
  export { injectHtmlTagsToStream };
3
3
  export type { PageContextInjectAssets };
4
4
  export type { PageContextPromise };
5
- import type { PageAsset } from '../renderPage/getPageAssets.js';
5
+ import type { PageAsset } from '../getPageAssets.js';
6
6
  import type { HtmlPart } from './renderHtml.js';
7
7
  import { type PreloadFilter } from './injectAssets/getHtmlTags.js';
8
8
  import type { StreamFromReactStreamingPackage } from './stream/react-streaming.js';
9
9
  import type { PageContextSerialization } from './serializeContext.js';
10
- import type { GlobalContextServerInternal } from '../globalContext.js';
10
+ import type { GlobalContextServerInternal } from '../../globalContext.js';
11
11
  type PageContextInjectAssets = {
12
12
  urlPathname: string;
13
13
  __getPageAssets: () => Promise<PageAsset[]>;
@@ -1,7 +1,7 @@
1
1
  export { injectHtmlTagsToString };
2
2
  export { injectHtmlTagsToStream };
3
- import { assert, isCallable, isPromise } from '../utils.js';
4
- import { assertPageContextProvidedByUser } from '../../../shared/assertPageContextProvidedByUser.js';
3
+ import { assert, isCallable, isPromise } from '../../utils.js';
4
+ import { assertPageContextProvidedByUser } from '../../../../shared/assertPageContextProvidedByUser.js';
5
5
  import { joinHtmlTags, injectHtmlTags, createHtmlHeadIfMissing, injectHtmlTagsUsingStream, } from './injectAssets/injectHtmlTags.js';
6
6
  import { getHtmlTags } from './injectAssets/getHtmlTags.js';
7
7
  import { getViteDevScript } from './injectAssets/getViteDevScript.js';
@@ -1,7 +1,7 @@
1
1
  export { getPropVal };
2
2
  export { setPropVal };
3
3
  export { getPropKeys };
4
- import { isObject } from '../utils.js';
4
+ import { isObject } from '../../utils.js';
5
5
  // Get a nested property from an object using a dot-separated path such as 'user.id'
6
6
  function getPropVal(obj, prop) {
7
7
  const keys = getPropKeys(prop);
@@ -9,7 +9,7 @@ export type { DocumentHtml };
9
9
  export type { TemplateWrapped };
10
10
  import type { PageContextInjectAssets } from './injectAssets.js';
11
11
  import { StreamProviderAny, StreamTypePatch, StreamProviderNormalized } from './stream.js';
12
- import type { PageAsset } from '../renderPage/getPageAssets.js';
12
+ import type { PageAsset } from '../getPageAssets.js';
13
13
  import type { PreloadFilter } from './injectAssets/getHtmlTags.js';
14
14
  type DocumentHtml = TemplateWrapped | EscapedString | StreamProviderAny;
15
15
  type HtmlRender = string | StreamProviderNormalized;
@@ -3,7 +3,7 @@ export { dangerouslySkipEscape };
3
3
  export { renderDocumentHtml };
4
4
  export { isDocumentHtml };
5
5
  export { getHtmlString };
6
- import { assert, assertUsage, assertWarning, checkType, escapeHtml, hasProp, isHtml, isPromise, objectAssign, } from '../utils.js';
6
+ import { assert, assertUsage, assertWarning, checkType, escapeHtml, hasProp, isHtml, isPromise, objectAssign, } from '../../utils.js';
7
7
  import { injectHtmlTagsToString, injectHtmlTagsToStream } from './injectAssets.js';
8
8
  import { processStream, isStream, streamToString, } from './stream.js';
9
9
  import { isStreamFromReactStreamingPackage } from './stream/react-streaming.js';
@@ -4,10 +4,11 @@ export { getGlobalContextClientSerialized };
4
4
  export type { PageContextSerialization };
5
5
  export type { PassToClient };
6
6
  export type { PassToClientPublic };
7
- import type { UrlRedirect } from '../../../shared/route/abort.js';
8
- import type { GlobalContextServerInternal } from '../globalContext.js';
9
- import type { PageContextCreated } from '../renderPage/createPageContextServerSide.js';
10
- import type { PageContextBegin } from '../renderPage.js';
7
+ import type { UrlRedirect } from '../../../../shared/route/abort.js';
8
+ import type { GlobalContextServerInternal } from '../../globalContext.js';
9
+ import type { PageContextCreated } from '../createPageContextServerSide.js';
10
+ import type { PageContextBegin } from '../../renderPage.js';
11
+ import type { PageContextCspNonce } from '../csp.js';
11
12
  type PageContextSerialization = PageContextCreated & {
12
13
  pageId: string;
13
14
  routeParams: Record<string, string>;
@@ -17,7 +18,7 @@ type PageContextSerialization = PageContextCreated & {
17
18
  _pageContextInit: Record<string, unknown>;
18
19
  _globalContext: GlobalContextServerInternal;
19
20
  _isPageContextJsonRequest: null | PageContextBegin['_isPageContextJsonRequest'];
20
- };
21
+ } & PageContextCspNonce;
21
22
  declare function getPageContextClientSerialized(pageContext: PageContextSerialization, isHtmlJsonScript: boolean): string;
22
23
  declare function getGlobalContextClientSerialized(pageContext: PageContextSerialization, isHtmlJsonScript: boolean): string;
23
24
  type PassToClient = string[];
@@ -2,13 +2,13 @@ export { getPageContextClientSerialized };
2
2
  export { getPageContextClientSerializedAbort };
3
3
  export { getGlobalContextClientSerialized };
4
4
  import { stringify, isJsonSerializerError } from '@brillout/json-serializer/stringify';
5
- import { assert, assertUsage, assertWarning, getPropAccessNotation, hasProp, unique } from '../utils.js';
6
- import { isErrorPage } from '../../../shared/error-page.js';
7
- import { addIs404ToPageProps } from '../../../shared/addIs404ToPageProps.js';
5
+ import { assert, assertUsage, assertWarning, getPropAccessNotation, hasProp, unique } from '../../utils.js';
6
+ import { isErrorPage } from '../../../../shared/error-page.js';
7
+ import { addIs404ToPageProps } from '../../../../shared/addIs404ToPageProps.js';
8
8
  import pc from '@brillout/picocolors';
9
- import { NOT_SERIALIZABLE } from '../../../shared/NOT_SERIALIZABLE.js';
10
- import { pageContextInitIsPassedToClient } from '../../../shared/misc/pageContextInitIsPassedToClient.js';
11
- import { isServerSideError } from '../../../shared/misc/isServerSideError.js';
9
+ import { NOT_SERIALIZABLE } from '../../../../shared/NOT_SERIALIZABLE.js';
10
+ import { pageContextInitIsPassedToClient } from '../../../../shared/misc/pageContextInitIsPassedToClient.js';
11
+ import { isServerSideError } from '../../../../shared/misc/isServerSideError.js';
12
12
  import { getPropKeys, getPropVal, setPropVal } from './propKeys.js';
13
13
  const passToClientBuiltInPageContext = [
14
14
  'abortReason',
@@ -2,7 +2,7 @@
2
2
  export { isStreamFromReactStreamingPackage };
3
3
  export { streamFromReactStreamingPackageToString };
4
4
  export { getStreamOfReactStreamingPackage };
5
- import { assert, assertUsage, hasProp, isVikeReactApp } from '../../utils.js';
5
+ import { assert, assertUsage, hasProp, isVikeReactApp } from '../../../utils.js';
6
6
  import { streamPipeNodeToString, streamReadableWebToString } from '../stream.js';
7
7
  function streamFromReactStreamingPackageToString(stream) {
8
8
  if (stream.pipe) {
@@ -19,7 +19,7 @@ export { streamReadableWebToString };
19
19
  export { streamPipeNodeToString };
20
20
  export { isStreamWritableWeb };
21
21
  export { isStreamWritableNode };
22
- import { assert, assertUsage, checkType, isObject, hasProp, objectAssign, capitalizeFirstLetter, assertWarning, isCallable, createDebugger, isBug, } from '../utils.js';
22
+ import { assert, assertUsage, checkType, isObject, hasProp, objectAssign, capitalizeFirstLetter, assertWarning, isCallable, createDebugger, isBug, } from '../../utils.js';
23
23
  import { getStreamOfReactStreamingPackage, isStreamFromReactStreamingPackage, streamFromReactStreamingPackageToString, } from './stream/react-streaming.js';
24
24
  import { import_ } from '@brillout/import';
25
25
  import pc from '@brillout/picocolors';
@@ -1,11 +1,12 @@
1
1
  export { loadPageConfigsLazyServerSide };
2
2
  export type { PageContext_loadPageConfigsLazyServerSide };
3
3
  export type { PageConfigsLazy };
4
- import { type VikeConfigPublicPageLazyLoaded } from '../../../shared/getPageFiles.js';
4
+ export type { PageContextAfterPageEntryLoaded };
5
+ import { type PageContextConfig } from '../../../shared/getPageFiles.js';
5
6
  import { PromiseType } from '../utils.js';
6
7
  import { type PageAsset } from './getPageAssets.js';
7
8
  import type { PageConfigRuntime } from '../../../types/PageConfig.js';
8
- import type { PassToClient } from '../html/serializeContext.js';
9
+ import type { PassToClient } from './html/serializeContext.js';
9
10
  import type { PageContextAfterRoute } from '../../../shared/route/index.js';
10
11
  import type { PageContextCreated } from './createPageContextServerSide.js';
11
12
  type PageContext_loadPageConfigsLazyServerSide = PageContextCreated & PageContextAfterRoute & {
@@ -24,23 +25,51 @@ declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPage
24
25
  headers?: Record<string, string>;
25
26
  } & {
26
27
  _globalContext: {
27
- isGlobalContext: true;
28
- _isOriginalObject: true;
29
- _virtualFileExportsGlobalEntry: unknown;
30
- _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
31
- _pageConfigs: PageConfigRuntime[];
32
- _pageConfigGlobal: import("../../../types/PageConfig.js").PageConfigGlobalRuntime;
33
- _allPageIds: string[];
34
- _vikeConfigPublicGlobal: {
28
+ _globalConfigPublic: {
29
+ pages: {
30
+ [k: string]: {
31
+ config: import("../../../types/index.js").ConfigResolved;
32
+ _source: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Source;
33
+ _sources: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
34
+ _from: import("../../../shared/page-configs/resolveVikeConfigPublic.js").From;
35
+ } & ({
36
+ route: import("../../../types/Config.js").Route;
37
+ isErrorPage?: undefined;
38
+ } | {
39
+ route?: undefined;
40
+ isErrorPage: true;
41
+ });
42
+ };
35
43
  config: import("../../../types/index.js").ConfigResolved;
36
44
  _source: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Source;
37
45
  _sources: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
38
46
  _from: import("../../../shared/page-configs/resolveVikeConfigPublic.js").From;
39
47
  };
40
- config: import("../../../types/index.js").ConfigResolved;
41
48
  pages: {
42
- [k: string]: import("../../../shared/page-configs/resolveVikeConfigPublic.js").VikeConfigPublicPageEagerLoaded;
49
+ [k: string]: {
50
+ config: import("../../../types/index.js").ConfigResolved;
51
+ _source: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Source;
52
+ _sources: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
53
+ _from: import("../../../shared/page-configs/resolveVikeConfigPublic.js").From;
54
+ } & ({
55
+ route: import("../../../types/Config.js").Route;
56
+ isErrorPage?: undefined;
57
+ } | {
58
+ route?: undefined;
59
+ isErrorPage: true;
60
+ });
43
61
  };
62
+ config: import("../../../types/index.js").ConfigResolved;
63
+ _source: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Source;
64
+ _sources: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
65
+ _from: import("../../../shared/page-configs/resolveVikeConfigPublic.js").From;
66
+ isGlobalContext: true;
67
+ _isOriginalObject: true;
68
+ _virtualFileExportsGlobalEntry: unknown;
69
+ _pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
70
+ _pageConfigs: PageConfigRuntime[];
71
+ _pageConfigGlobal: import("../../../types/PageConfig.js").PageConfigGlobalRuntime;
72
+ _allPageIds: string[];
44
73
  } & (({
45
74
  _isProduction: false;
46
75
  _isPrerendering: false;
@@ -92,6 +121,20 @@ declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPage
92
121
  _urlHandler: ((url: string) => string) | null;
93
122
  isClientSideNavigation: boolean;
94
123
  } & {
124
+ pages: {
125
+ [k: string]: {
126
+ config: import("../../../types/index.js").ConfigResolved;
127
+ _source: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Source;
128
+ _sources: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
129
+ _from: import("../../../shared/page-configs/resolveVikeConfigPublic.js").From;
130
+ } & ({
131
+ route: import("../../../types/Config.js").Route;
132
+ isErrorPage?: undefined;
133
+ } | {
134
+ route?: undefined;
135
+ isErrorPage: true;
136
+ });
137
+ };
95
138
  config: import("../../../types/index.js").ConfigResolved;
96
139
  _source: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Source;
97
140
  _sources: import("../../../shared/page-configs/resolveVikeConfigPublic.js").Sources;
@@ -107,15 +150,19 @@ declare function loadPageConfigsLazyServerSide(pageContext: PageContext_loadPage
107
150
  pageId: string;
108
151
  } & {
109
152
  _pageConfig: PageConfigRuntime | null;
110
- } & {
111
- _pageConfig: null | PageConfigRuntime;
112
- } & VikeConfigPublicPageLazyLoaded & {
153
+ } & PageContextConfig & {
113
154
  _pageConfig: null | PageConfigRuntime;
155
+ } & {
156
+ cspNonce: string | null;
114
157
  } & {
115
158
  Page: unknown;
116
159
  _isHtmlOnly: boolean;
117
160
  _passToClient: PassToClient;
161
+ } & {
118
162
  headersResponse: Headers;
119
163
  } & {
120
164
  __getPageAssets: () => Promise<PageAsset[]>;
121
165
  }>;
166
+ type PageContextAfterPageEntryLoaded = PageContext_loadPageConfigsLazyServerSide & {
167
+ _pageConfig: null | PageConfigRuntime;
168
+ } & PageContextConfig;
@@ -1,6 +1,6 @@
1
1
  export { loadPageConfigsLazyServerSide };
2
2
  import { getPageFilesServerSide } from '../../../shared/getPageFiles.js';
3
- import { resolveVikeConfigPublicPageLazyLoaded } from '../../../shared/page-configs/resolveVikeConfigPublic.js';
3
+ import { resolvePageContextConfig } from '../../../shared/page-configs/resolveVikeConfigPublic.js';
4
4
  import { analyzePageClientSideInit } from '../../../shared/getPageFiles/analyzePageClientSide.js';
5
5
  import { assertUsage, assertWarning, hasProp, isArray, isObject, objectAssign, updateType, } from '../utils.js';
6
6
  import { getPageAssets } from './getPageAssets.js';
@@ -8,13 +8,14 @@ import { findPageConfig } from '../../../shared/page-configs/findPageConfig.js';
8
8
  import { analyzePage } from './analyzePage.js';
9
9
  import { loadAndParseVirtualFilePageEntry } from '../../../shared/page-configs/loadAndParseVirtualFilePageEntry.js';
10
10
  import { execHookServer } from './execHookServer.js';
11
- import { getCacheControl } from './getCacheControl.js';
11
+ import { resolveHeadersResponseEarly } from './headersResponse.js';
12
+ import { resolvePageContextCspNone } from './csp.js';
12
13
  async function loadPageConfigsLazyServerSide(pageContext) {
13
14
  objectAssign(pageContext, {
14
15
  _pageConfig: findPageConfig(pageContext._globalContext._pageConfigs, pageContext.pageId),
15
16
  });
16
17
  // Load the page's + files
17
- updateType(pageContext, await loadPageUserFiles(pageContext));
18
+ objectAssign(pageContext, await loadPageUserFiles(pageContext));
18
19
  // Resolve new computed pageContext properties
19
20
  updateType(pageContext, await resolvePageContext(pageContext));
20
21
  // Execute +onCreatePageContext
@@ -53,12 +54,13 @@ async function resolvePageContext(pageContext) {
53
54
  passToClient.push(...valS);
54
55
  });
55
56
  }
57
+ objectAssign(pageContext, await resolvePageContextCspNone(pageContext));
56
58
  objectAssign(pageContext, {
57
59
  Page: pageContext.exports.Page,
58
60
  _isHtmlOnly: isHtmlOnly,
59
61
  _passToClient: passToClient,
60
- headersResponse: resolveHeadersResponse(pageContext),
61
62
  });
63
+ objectAssign(pageContext, await resolveHeadersResponseEarly(pageContext));
62
64
  objectAssign(pageContext, {
63
65
  __getPageAssets: async () => {
64
66
  if ('_pageAssets' in pageContext) {
@@ -101,43 +103,20 @@ async function resolvePageContext(pageContext) {
101
103
  return pageContext;
102
104
  }
103
105
  async function loadPageUserFiles(pageContext) {
104
- const [{ configPublicPageLazy }] = await Promise.all([
105
- loadPageUserFiles_v1Design(pageContext),
106
+ const [{ pageContextAddendum }] = await Promise.all([
107
+ (async () => {
108
+ const pageFilesServerSide = getPageFilesServerSide(pageContext._pageFilesAll, pageContext.pageId);
109
+ const isDev = !pageContext._globalContext._isProduction;
110
+ const pageConfigLoaded = !pageContext._pageConfig
111
+ ? null
112
+ : await loadAndParseVirtualFilePageEntry(pageContext._pageConfig, isDev);
113
+ await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.()));
114
+ const pageContextAddendum = resolvePageContextConfig(pageFilesServerSide, pageConfigLoaded, pageContext._globalContext._pageConfigGlobal);
115
+ return { pageContextAddendum };
116
+ })(),
106
117
  analyzePageClientSideInit(pageContext._globalContext._pageFilesAll, pageContext.pageId, {
107
118
  sharedPageFilesAlreadyLoaded: true,
108
119
  }),
109
120
  ]);
110
- objectAssign(pageContext, configPublicPageLazy);
111
- return pageContext;
112
- }
113
- async function loadPageUserFiles_v1Design(pageContext) {
114
- const pageFilesServerSide = getPageFilesServerSide(pageContext._pageFilesAll, pageContext.pageId);
115
- const isDev = !pageContext._globalContext._isProduction;
116
- const pageConfigLoaded = !pageContext._pageConfig
117
- ? null
118
- : await loadAndParseVirtualFilePageEntry(pageContext._pageConfig, isDev);
119
- await Promise.all(pageFilesServerSide.map((p) => p.loadFile?.()));
120
- const configPublicPageLazy = resolveVikeConfigPublicPageLazyLoaded(pageFilesServerSide, pageConfigLoaded, pageContext._globalContext._pageConfigGlobal);
121
- return {
122
- configPublicPageLazy,
123
- pageFilesLoaded: pageFilesServerSide,
124
- };
125
- }
126
- function resolveHeadersResponse(pageContext) {
127
- const headersResponse = mergeHeaders(pageContext.config.headersResponse);
128
- if (!headersResponse.get('Cache-Control')) {
129
- const cacheControl = getCacheControl(pageContext.pageId, pageContext._globalContext._pageConfigs);
130
- if (cacheControl)
131
- headersResponse.set('Cache-Control', cacheControl);
132
- }
133
- return headersResponse;
134
- }
135
- function mergeHeaders(headersList = []) {
136
- const headersMerged = new Headers();
137
- headersList.forEach((headers) => {
138
- new Headers(headers).forEach((value, key) => {
139
- headersMerged.append(key, value);
140
- });
141
- });
142
- return headersMerged;
121
+ return pageContextAddendum;
143
122
  }
@@ -1,10 +1,10 @@
1
1
  export { preparePageContextForPublicUsageServer };
2
2
  export type { PageContextForPublicUsageServer };
3
3
  import type { PageContextUrlInternal } from '../../../shared/getPageContextUrlComputed.js';
4
- import type { VikeConfigPublicPageLazyLoaded } from '../../../shared/page-configs/resolveVikeConfigPublic.js';
4
+ import type { PageContextConfig } from '../../../shared/page-configs/resolveVikeConfigPublic.js';
5
5
  import type { PageContextInternalServer } from '../../../types/PageContext.js';
6
6
  import type { GlobalContextServerInternal } from '../globalContext.js';
7
- type PageContextForPublicUsageServer = PageContextInternalServer & VikeConfigPublicPageLazyLoaded & {
7
+ type PageContextForPublicUsageServer = PageContextInternalServer & PageContextConfig & {
8
8
  urlOriginal: string;
9
9
  /** @deprecated */
10
10
  url: string;