vike 0.4.223 → 0.4.224-commit-00ed9fe

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 (183) hide show
  1. package/dist/cjs/node/api/build.js +4 -37
  2. package/dist/cjs/node/api/prepareViteApiCall.js +9 -3
  3. package/dist/cjs/node/plugin/index.js +8 -20
  4. package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -1
  5. package/dist/cjs/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +130 -52
  6. package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +145 -0
  7. package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +52 -0
  8. package/dist/cjs/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -84
  9. package/dist/cjs/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
  10. package/dist/cjs/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
  11. package/dist/cjs/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +6 -6
  12. package/dist/cjs/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
  13. package/dist/cjs/node/plugin/plugins/build.js +21 -0
  14. package/dist/cjs/node/plugin/plugins/commonConfig.js +22 -4
  15. package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  16. package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  17. package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
  18. package/dist/cjs/node/plugin/plugins/envVars.js +2 -2
  19. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +9 -9
  20. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  21. package/dist/cjs/node/plugin/plugins/fileEnv.js +5 -2
  22. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  23. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +2 -5
  24. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
  25. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
  26. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +16 -0
  27. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
  28. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
  29. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
  30. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +19 -7
  31. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +277 -212
  32. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  33. package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
  34. package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
  35. package/dist/cjs/node/plugin/shared/findPageFiles.js +3 -3
  36. package/dist/cjs/node/plugin/shared/getOutDirs.js +8 -7
  37. package/dist/cjs/node/plugin/shared/isViteServerBuild.js +47 -0
  38. package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  39. package/dist/cjs/node/plugin/utils.js +1 -0
  40. package/dist/cjs/node/prerender/context.js +3 -8
  41. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +30 -21
  42. package/dist/cjs/node/prerender/runPrerender.js +28 -30
  43. package/dist/cjs/node/prerender/utils.js +1 -0
  44. package/dist/cjs/node/runtime/html/stream.js +7 -0
  45. package/dist/cjs/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +13 -5
  46. package/dist/cjs/node/runtime/renderPage/createHttpResponse.js +2 -4
  47. package/dist/cjs/node/runtime/renderPage/logErrorHint.js +13 -2
  48. package/dist/cjs/node/runtime/renderPage.js +6 -10
  49. package/dist/cjs/shared/getPageContextUrlComputed.js +1 -1
  50. package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +2 -5
  51. package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +3 -1
  52. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +20 -9
  53. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  54. package/dist/cjs/utils/debug.js +2 -1
  55. package/dist/cjs/utils/findFile.js +1 -1
  56. package/dist/cjs/utils/findPackageJson.js +1 -1
  57. package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +10 -4
  58. package/dist/cjs/utils/parseUrl-extras.js +1 -0
  59. package/dist/cjs/utils/path.js +1 -0
  60. package/dist/cjs/utils/requireResolve.js +11 -4
  61. package/dist/cjs/utils/sorter.js +0 -3
  62. package/dist/esm/client/client-routing-runtime/index.d.ts +1 -0
  63. package/dist/esm/client/client-routing-runtime/index.js +1 -0
  64. package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +8 -0
  65. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +10 -1
  66. package/dist/esm/node/api/build.js +4 -4
  67. package/dist/esm/node/api/prepareViteApiCall.js +9 -3
  68. package/dist/esm/node/plugin/index.d.ts +2 -1
  69. package/dist/esm/node/plugin/index.js +4 -17
  70. package/dist/esm/node/plugin/plugins/baseUrls.js +3 -1
  71. package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.d.ts +18 -0
  72. package/dist/esm/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +131 -53
  73. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.d.ts +5 -0
  74. package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +140 -0
  75. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.d.ts +3 -0
  76. package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +50 -0
  77. package/dist/esm/node/plugin/plugins/{buildConfig.d.ts → build/pluginBuildConfig.d.ts} +3 -3
  78. package/dist/esm/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -81
  79. package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +7 -0
  80. package/dist/esm/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
  81. package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.d.ts +3 -0
  82. package/dist/esm/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
  83. package/dist/esm/node/plugin/plugins/build/pluginDistPackageJsonFile.d.ts +3 -0
  84. package/dist/esm/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +7 -6
  85. package/dist/esm/node/plugin/plugins/build/pluginSuppressRollupWarning.d.ts +3 -0
  86. package/dist/esm/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
  87. package/dist/esm/node/plugin/plugins/build.d.ts +3 -0
  88. package/dist/esm/node/plugin/plugins/build.js +19 -0
  89. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +16 -6
  90. package/dist/esm/node/plugin/plugins/commonConfig.js +22 -4
  91. package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
  92. package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
  93. package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
  94. package/dist/esm/node/plugin/plugins/envVars.js +2 -2
  95. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +10 -10
  96. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
  97. package/dist/esm/node/plugin/plugins/fileEnv.js +5 -2
  98. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
  99. package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -5
  100. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
  101. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
  102. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -0
  103. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +13 -0
  104. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
  105. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
  106. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
  107. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
  108. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +0 -1
  109. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +20 -8
  110. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +8 -6
  111. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +279 -214
  112. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
  113. package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
  114. package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
  115. package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
  116. package/dist/esm/node/plugin/shared/findPageFiles.js +3 -3
  117. package/dist/esm/node/plugin/shared/getHttpRequestAsyncStore.js +1 -3
  118. package/dist/esm/node/plugin/shared/getOutDirs.d.ts +2 -2
  119. package/dist/esm/node/plugin/shared/getOutDirs.js +8 -7
  120. package/dist/esm/node/plugin/shared/isViteServerBuild.d.ts +15 -0
  121. package/dist/esm/node/plugin/shared/isViteServerBuild.js +45 -0
  122. package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +1 -1
  123. package/dist/esm/node/plugin/utils.d.ts +1 -0
  124. package/dist/esm/node/plugin/utils.js +1 -0
  125. package/dist/esm/node/prerender/context.d.ts +0 -2
  126. package/dist/esm/node/prerender/context.js +4 -9
  127. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +11 -6
  128. package/dist/esm/node/prerender/resolvePrerenderConfig.js +31 -22
  129. package/dist/esm/node/prerender/runPrerender.d.ts +7 -25
  130. package/dist/esm/node/prerender/runPrerender.js +29 -31
  131. package/dist/esm/node/prerender/utils.d.ts +1 -0
  132. package/dist/esm/node/prerender/utils.js +1 -0
  133. package/dist/esm/node/runtime/globalContext.d.ts +3 -2
  134. package/dist/esm/node/runtime/html/stream.js +7 -0
  135. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.d.ts +3 -1
  136. package/dist/esm/node/runtime/renderPage/createHttpResponse/assertNoInfiniteHttpRedirect.js +14 -6
  137. package/dist/esm/node/runtime/renderPage/createHttpResponse.d.ts +3 -1
  138. package/dist/esm/node/runtime/renderPage/createHttpResponse.js +2 -4
  139. package/dist/esm/node/runtime/renderPage/logErrorHint.js +13 -2
  140. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +165 -5
  141. package/dist/esm/node/runtime/renderPage.js +7 -11
  142. package/dist/esm/shared/getPageContextUrlComputed.js +1 -1
  143. package/dist/esm/shared/page-configs/Config.d.ts +12 -2
  144. package/dist/esm/shared/page-configs/PageConfig.d.ts +5 -5
  145. package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +2 -5
  146. package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +3 -1
  147. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +2 -0
  148. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +20 -9
  149. package/dist/esm/types/index.d.ts +2 -0
  150. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  151. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  152. package/dist/esm/utils/debug.js +2 -1
  153. package/dist/esm/utils/findFile.js +1 -1
  154. package/dist/esm/utils/findPackageJson.js +1 -1
  155. package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +8 -2
  156. package/dist/esm/utils/parseUrl-extras.js +1 -0
  157. package/dist/esm/utils/path.js +1 -0
  158. package/dist/esm/utils/projectInfo.d.ts +1 -1
  159. package/dist/esm/utils/requireResolve.js +11 -4
  160. package/dist/esm/utils/sorter.d.ts +18 -5
  161. package/dist/esm/utils/sorter.js +0 -3
  162. package/package.json +9 -16
  163. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +0 -119
  164. package/dist/cjs/node/plugin/plugins/buildApp.js +0 -76
  165. package/dist/cjs/node/plugin/plugins/removeRequireHookPlugin.js +0 -17
  166. package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +0 -20
  167. package/dist/cjs/node/plugin/shared/viteIsSSR.js +0 -31
  168. package/dist/esm/node/plugin/plugins/autoFullBuild.d.ts +0 -3
  169. package/dist/esm/node/plugin/plugins/autoFullBuild.js +0 -114
  170. package/dist/esm/node/plugin/plugins/buildApp.d.ts +0 -3
  171. package/dist/esm/node/plugin/plugins/buildApp.js +0 -74
  172. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +0 -20
  173. package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +0 -8
  174. package/dist/esm/node/plugin/plugins/distFileNames.d.ts +0 -3
  175. package/dist/esm/node/plugin/plugins/packageJsonFile.d.ts +0 -3
  176. package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.d.ts +0 -3
  177. package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.js +0 -15
  178. package/dist/esm/node/plugin/plugins/suppressRollupWarning.d.ts +0 -3
  179. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.d.ts +0 -2
  180. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +0 -17
  181. package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +0 -11
  182. package/dist/esm/node/plugin/shared/viteIsSSR.js +0 -29
  183. package/dist-cjs-fixup.mjs +0 -41
@@ -23,7 +23,6 @@ import type { ResolvedConfig, ViteDevServer } from 'vite';
23
23
  import type { PageConfigUserFriendly, PageConfigsUserFriendly } from '../../shared/page-configs/getPageConfigUserFriendly.js';
24
24
  import type { ConfigVitePluginServerEntry } from '@brillout/vite-plugin-server-entry/plugin';
25
25
  import { type BaseUrlsResolved } from '../shared/resolveBase.js';
26
- type GlobalContextPublic = Pick<GlobalContext, 'assetsManifest' | 'config' | 'viteConfig' | 'pages' | 'baseAssets' | 'baseServer'>;
27
26
  type PageRuntimeInfo = Awaited<ReturnType<typeof getUserFiles>>;
28
27
  type GlobalContextInternal = GlobalContext & {
29
28
  globalContext_public: GlobalContextPublic;
@@ -57,6 +56,8 @@ declare function getGlobalContextInternal(): Promise<GlobalContextInternal>;
57
56
  declare function getGlobalContextSync(): GlobalContextPublic;
58
57
  /** @experimental https://vike.dev/getGlobalContext */
59
58
  declare function getGlobalContextAsync(isProduction: boolean): Promise<GlobalContextPublic>;
59
+ type GlobalContextPublic = ReturnType<typeof makePublic>;
60
+ declare function makePublic(globalContext: GlobalContext): Pick<GlobalContext, "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
60
61
  declare function setGlobalContext_viteDevServer(viteDevServer: ViteDevServer): Promise<void>;
61
62
  declare function setGlobalContext_viteConfig(viteConfig: ResolvedConfig, outDirRoot: string): void;
62
63
  declare function setGlobalContext_isPrerendering(): void;
@@ -74,7 +75,7 @@ declare function getUserFiles(): Promise<{
74
75
  pageRoutes: import("../../shared/route/loadPageRoutes.js").PageRoutes;
75
76
  onBeforeRouteHook: import("../../shared/hooks/getHook.js").Hook | null;
76
77
  pages: PageConfigsUserFriendly;
77
- config: import("../../shared/page-configs/Config/PageContextConfig.js").ConfigResolved;
78
+ config: import("../../types/index.js").ConfigResolved;
78
79
  }>;
79
80
  declare function setGlobalContext_buildEntry(buildEntry: unknown): Promise<void>;
80
81
  type BuildInfo = {
@@ -159,6 +159,13 @@ function getStreamReadableWeb(htmlRender) {
159
159
  if (isStreamReadableWeb(htmlRender)) {
160
160
  return htmlRender;
161
161
  }
162
+ if (isStreamPipeWeb(htmlRender)) {
163
+ const streamPipeWeb = getStreamPipeWeb(htmlRender);
164
+ assert(streamPipeWeb);
165
+ const { readable, writable } = new TransformStream();
166
+ streamPipeWeb(writable);
167
+ return readable;
168
+ }
162
169
  return null;
163
170
  }
164
171
  function pipeToStreamWritableWeb(htmlRender, writable) {
@@ -1,2 +1,4 @@
1
1
  export { assertNoInfiniteHttpRedirect };
2
- declare function assertNoInfiniteHttpRedirect(urlRedirectTarget: string, urlLogical: string): void;
2
+ declare function assertNoInfiniteHttpRedirect(urlRedirectTarget: string, pageContextInit: {
3
+ urlOriginal: string;
4
+ }): void;
@@ -1,23 +1,31 @@
1
1
  export { assertNoInfiniteHttpRedirect };
2
- import { assert, assertUsage, getGlobalObject } from '../../utils.js';
2
+ import { assert, assertUsage, getGlobalObject, removeUrlOrigin } from '../../utils.js';
3
3
  import pc from '@brillout/picocolors';
4
4
  const globalObject = getGlobalObject('createHttpResponse/assertNoInfiniteHttpRedirect.ts', {
5
5
  redirectGraph: {}
6
6
  });
7
- function assertNoInfiniteHttpRedirect(urlRedirectTarget, urlLogical) {
7
+ // It's too strict, see https://github.com/vikejs/vike/issues/1270#issuecomment-1820608999
8
+ // - Let's create a new setting `+doNotCatchInfiniteRedirect` if someone complains.
9
+ function assertNoInfiniteHttpRedirect(
10
+ // The exact URL that the user will be redirected to.
11
+ // - It includes the Base URL as well as the locale (i18n) base.
12
+ urlRedirectTarget,
13
+ // Rationale for checking against `pageContextInit.urlOriginal`: https://github.com/vikejs/vike/pull/2264#issuecomment-2713890263
14
+ pageContextInit) {
8
15
  if (!urlRedirectTarget.startsWith('/')) {
9
- // We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (in itself).
10
- // - There isn't a reliable way to check whether the redirect points to an external origin or the same origin. For same origins, we assume/hope the user to pass the URL without origin.
16
+ // We assume that urlRedirectTarget points to an origin that is external (not the same origin), and we can therefore assume that the app doesn't define an infinite loop (at least not in itself).
17
+ // - There isn't a reliable way to check whether the redirect points to an external origin or the same origin; we hope/assume the user sets the URL without origin.
11
18
  // ```js
12
19
  // // For same-origin, the user usually/hopefully passes a URL without origin
13
20
  // renderPage({ urlOriginal: '/some/pathname' })
14
21
  // ```
15
22
  return;
16
23
  }
17
- assert(urlLogical.startsWith('/'));
24
+ const urlOriginalNormalized = removeUrlOrigin(pageContextInit.urlOriginal).urlModified;
25
+ assert(urlOriginalNormalized.startsWith('/'));
18
26
  const graph = copy(globalObject.redirectGraph);
19
27
  graph[urlRedirectTarget] ?? (graph[urlRedirectTarget] = new Set());
20
- graph[urlRedirectTarget].add(urlLogical);
28
+ graph[urlRedirectTarget].add(urlOriginalNormalized);
21
29
  validate(graph);
22
30
  globalObject.redirectGraph = graph;
23
31
  }
@@ -35,4 +35,6 @@ declare function createHttpResponseError(pageContext: null | {
35
35
  _pageConfigs: PageConfigRuntime[];
36
36
  }): HttpResponse;
37
37
  declare function createHttpResponsePageContextJson(pageContextSerialized: string): Promise<HttpResponse>;
38
- declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, urlLogical: string): HttpResponse;
38
+ declare function createHttpResponseRedirect({ url, statusCode }: UrlRedirect, pageContextInit: {
39
+ urlOriginal: string;
40
+ }): HttpResponse;
@@ -82,10 +82,8 @@ async function createHttpResponsePageContextJson(pageContextSerialized) {
82
82
  const httpResponse = createHttpResponse(200, 'application/json', [], pageContextSerialized, [], null);
83
83
  return httpResponse;
84
84
  }
85
- function createHttpResponseRedirect({ url, statusCode },
86
- // The URL we assume the redirect to be logically based on
87
- urlLogical) {
88
- assertNoInfiniteHttpRedirect(url, urlLogical);
85
+ function createHttpResponseRedirect({ url, statusCode }, pageContextInit) {
86
+ assertNoInfiniteHttpRedirect(url, pageContextInit);
89
87
  assert(url);
90
88
  assert(statusCode);
91
89
  assert(300 <= statusCode && statusCode <= 399);
@@ -23,15 +23,25 @@ const errorsMisc = [
23
23
  errMsg: 'assets.json',
24
24
  link: 'https://vike.dev/getGlobalContext',
25
25
  mustMentionNodeModules: false
26
+ },
27
+ {
28
+ errMsg: 'ERR_UNKNOWN_FILE_EXTENSION',
29
+ link: 'https://vike.dev/broken-npm-package#err-unknown-file-extension'
26
30
  }
27
31
  ];
32
+ const reactInvalidEelement = 'https://vike.dev/broken-npm-package#react-invalid-component';
28
33
  const errorsReact = [
29
34
  {
30
35
  errMsg: 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components)',
31
- link: 'https://vike.dev/broken-npm-package#react-invalid-component',
36
+ link: reactInvalidEelement,
32
37
  // The stack trace can be user-land while the import is coming from node_modules
33
38
  mustMentionNodeModules: false
34
39
  },
40
+ {
41
+ errMsg: 'Objects are not valid as a React child',
42
+ link: reactInvalidEelement,
43
+ mustMentionNodeModules: false
44
+ },
35
45
  {
36
46
  // React's "Invalid hook call.", see https://github.com/vikejs/vike/discussions/1637#discussioncomment-9424712
37
47
  errMsg: "Cannot read properties of null (reading 'useContext')"
@@ -67,7 +77,8 @@ const errorsCjsEsm = [
67
77
  { errMsg: 'exports is not defined' },
68
78
  { errMsg: 'module is not defined' },
69
79
  { errMsg: 'not defined in ES' },
70
- { errMsg: "Unexpected token 'export'" }
80
+ { errMsg: "Unexpected token 'export'" },
81
+ { errMsg: 'Failed to resolve entry for package' }
71
82
  ];
72
83
  function logErrorHint(error) {
73
84
  /* Collect errors for ./logErrorHint.spec.ts
@@ -48,7 +48,39 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
48
48
  _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
49
49
  _globalContext: GlobalContextInternal;
50
50
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
51
- globalContext: import("../globalContext.js").GlobalContextPublic;
51
+ globalContext: Pick<{
52
+ viteConfigRuntime: {
53
+ _baseViteOriginal: null | string;
54
+ };
55
+ config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
56
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
57
+ } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
58
+ pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
59
+ pageConfigs: import("../../../__internal/index.js").PageConfig[];
60
+ pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
61
+ allPageIds: string[];
62
+ pageRoutes: import("../../../__internal/index.js").PageRoutes;
63
+ onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
64
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
65
+ config: import("../../../types/index.js").ConfigResolved;
66
+ } & ({
67
+ isProduction: false;
68
+ isPrerendering: false;
69
+ viteConfig: import("vite").ResolvedConfig;
70
+ viteDevServer: import("vite").ViteDevServer;
71
+ assetsManifest: null;
72
+ } | ({
73
+ isProduction: true;
74
+ assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
75
+ viteDevServer: null;
76
+ } & ({
77
+ isPrerendering: false;
78
+ viteConfig: null;
79
+ } | {
80
+ isPrerendering: true;
81
+ usesClientRouter: boolean;
82
+ viteConfig: import("vite").ResolvedConfig;
83
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
52
84
  _pageContextInit: {
53
85
  urlOriginal: string;
54
86
  headersOriginal?: unknown;
@@ -102,7 +134,39 @@ declare function prerenderPage(pageContext: PageContextInitEnhanced & PageFiles
102
134
  _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
103
135
  _globalContext: GlobalContextInternal;
104
136
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
105
- globalContext: import("../globalContext.js").GlobalContextPublic;
137
+ globalContext: Pick<{
138
+ viteConfigRuntime: {
139
+ _baseViteOriginal: null | string;
140
+ };
141
+ config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
142
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
143
+ } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
144
+ pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
145
+ pageConfigs: import("../../../__internal/index.js").PageConfig[];
146
+ pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
147
+ allPageIds: string[];
148
+ pageRoutes: import("../../../__internal/index.js").PageRoutes;
149
+ onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
150
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
151
+ config: import("../../../types/index.js").ConfigResolved;
152
+ } & ({
153
+ isProduction: false;
154
+ isPrerendering: false;
155
+ viteConfig: import("vite").ResolvedConfig;
156
+ viteDevServer: import("vite").ViteDevServer;
157
+ assetsManifest: null;
158
+ } | ({
159
+ isProduction: true;
160
+ assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
161
+ viteDevServer: null;
162
+ } & ({
163
+ isPrerendering: false;
164
+ viteConfig: null;
165
+ } | {
166
+ isPrerendering: true;
167
+ usesClientRouter: boolean;
168
+ viteConfig: import("vite").ResolvedConfig;
169
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
106
170
  _pageContextInit: {
107
171
  urlOriginal: string;
108
172
  headersOriginal?: unknown;
@@ -157,7 +221,39 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
157
221
  _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
158
222
  _globalContext: GlobalContextInternal;
159
223
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
160
- globalContext: import("../globalContext.js").GlobalContextPublic;
224
+ globalContext: Pick<{
225
+ viteConfigRuntime: {
226
+ _baseViteOriginal: null | string;
227
+ };
228
+ config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
229
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
230
+ } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
231
+ pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
232
+ pageConfigs: import("../../../__internal/index.js").PageConfig[];
233
+ pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
234
+ allPageIds: string[];
235
+ pageRoutes: import("../../../__internal/index.js").PageRoutes;
236
+ onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
237
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
238
+ config: import("../../../types/index.js").ConfigResolved;
239
+ } & ({
240
+ isProduction: false;
241
+ isPrerendering: false;
242
+ viteConfig: import("vite").ResolvedConfig;
243
+ viteDevServer: import("vite").ViteDevServer;
244
+ assetsManifest: null;
245
+ } | ({
246
+ isProduction: true;
247
+ assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
248
+ viteDevServer: null;
249
+ } & ({
250
+ isPrerendering: false;
251
+ viteConfig: null;
252
+ } | {
253
+ isPrerendering: true;
254
+ usesClientRouter: boolean;
255
+ viteConfig: import("vite").ResolvedConfig;
256
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
161
257
  _pageContextInit: {
162
258
  urlOriginal: string;
163
259
  headersOriginal?: unknown;
@@ -211,7 +307,39 @@ declare function prerender404Page(pageContextInit_: Record<string, unknown> | nu
211
307
  _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
212
308
  _globalContext: GlobalContextInternal;
213
309
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
214
- globalContext: import("../globalContext.js").GlobalContextPublic;
310
+ globalContext: Pick<{
311
+ viteConfigRuntime: {
312
+ _baseViteOriginal: null | string;
313
+ };
314
+ config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
315
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
316
+ } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
317
+ pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
318
+ pageConfigs: import("../../../__internal/index.js").PageConfig[];
319
+ pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
320
+ allPageIds: string[];
321
+ pageRoutes: import("../../../__internal/index.js").PageRoutes;
322
+ onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
323
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
324
+ config: import("../../../types/index.js").ConfigResolved;
325
+ } & ({
326
+ isProduction: false;
327
+ isPrerendering: false;
328
+ viteConfig: import("vite").ResolvedConfig;
329
+ viteDevServer: import("vite").ViteDevServer;
330
+ assetsManifest: null;
331
+ } | ({
332
+ isProduction: true;
333
+ assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
334
+ viteDevServer: null;
335
+ } & ({
336
+ isPrerendering: false;
337
+ viteConfig: null;
338
+ } | {
339
+ isPrerendering: true;
340
+ usesClientRouter: boolean;
341
+ viteConfig: import("vite").ResolvedConfig;
342
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
215
343
  _pageContextInit: {
216
344
  urlOriginal: string;
217
345
  headersOriginal?: unknown;
@@ -274,7 +402,39 @@ declare function getPageContextInitEnhanced(pageContextInit: {
274
402
  _onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
275
403
  _globalContext: GlobalContextInternal;
276
404
  /** @experimental This is a beta feature https://vike.dev/getGlobalContext */
277
- globalContext: import("../globalContext.js").GlobalContextPublic;
405
+ globalContext: Pick<{
406
+ viteConfigRuntime: {
407
+ _baseViteOriginal: null | string;
408
+ };
409
+ config: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigUserFriendly["config"];
410
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
411
+ } & import("../../shared/resolveBase.js").BaseUrlsResolved & ({
412
+ pageFilesAll: import("../../../shared/getPageFiles.js").PageFile[];
413
+ pageConfigs: import("../../../__internal/index.js").PageConfig[];
414
+ pageConfigGlobal: import("../../../shared/page-configs/PageConfig.js").PageConfigGlobalRuntime;
415
+ allPageIds: string[];
416
+ pageRoutes: import("../../../__internal/index.js").PageRoutes;
417
+ onBeforeRouteHook: import("../../../shared/hooks/getHook.js").Hook | null;
418
+ pages: import("../../../shared/page-configs/getPageConfigUserFriendly.js").PageConfigsUserFriendly;
419
+ config: import("../../../types/index.js").ConfigResolved;
420
+ } & ({
421
+ isProduction: false;
422
+ isPrerendering: false;
423
+ viteConfig: import("vite").ResolvedConfig;
424
+ viteDevServer: import("vite").ViteDevServer;
425
+ assetsManifest: null;
426
+ } | ({
427
+ isProduction: true;
428
+ assetsManifest: import("../../shared/ViteManifest.js").ViteManifest;
429
+ viteDevServer: null;
430
+ } & ({
431
+ isPrerendering: false;
432
+ viteConfig: null;
433
+ } | {
434
+ isPrerendering: true;
435
+ usesClientRouter: boolean;
436
+ viteConfig: import("vite").ResolvedConfig;
437
+ })))), "pages" | "baseServer" | "baseAssets" | "config" | "assetsManifest" | "viteConfig">;
278
438
  _pageContextInit: {
279
439
  urlOriginal: string;
280
440
  headersOriginal?: unknown;
@@ -2,7 +2,7 @@ export { renderPage };
2
2
  export { renderPage_addAsyncHookwrapper };
3
3
  import { getPageContextInitEnhanced, renderPageAlreadyRouted } from './renderPage/renderPageAlreadyRouted.js';
4
4
  import { route } from '../../shared/route/index.js';
5
- import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, createUrlFromComponents, isUri, getUrlPretty } from './utils.js';
5
+ import { assert, hasProp, objectAssign, isUrl, parseUrl, onSetupRuntime, assertWarning, getGlobalObject, checkType, assertUsage, normalizeUrlPathname, removeBaseServer, modifyUrlPathname, prependBase, removeUrlOrigin, setUrlOrigin, isUri, getUrlPretty } from './utils.js';
6
6
  import { assertNoInfiniteAbortLoop, getPageContextFromAllRewrites, isAbortError, logAbortErrorHandled } from '../../shared/route/abort.js';
7
7
  import { getGlobalContextInternal, initGlobalContext_renderPage } from './globalContext.js';
8
8
  import { handlePageContextRequestUrl } from './renderPage/handlePageContextRequestUrl.js';
@@ -341,7 +341,7 @@ async function normalizeUrl(pageContextInit, globalContext, httpRequestId) {
341
341
  if (!urlNormalized)
342
342
  return null;
343
343
  logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
344
- const httpResponse = createHttpResponseRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit.urlOriginal);
344
+ const httpResponse = createHttpResponseRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit);
345
345
  const pageContextHttpResponse = createPageContext(pageContextInit);
346
346
  objectAssign(pageContextHttpResponse, { httpResponse });
347
347
  return pageContextHttpResponse;
@@ -383,7 +383,7 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
383
383
  assert(urlTarget !== pageContextInit.urlOriginal);
384
384
  }
385
385
  logRuntimeInfo?.(`Permanent redirection defined by config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
386
- const httpResponse = createHttpResponseRedirect({ url: urlTarget, statusCode: 301 }, urlWithoutBase);
386
+ const httpResponse = createHttpResponseRedirect({ url: urlTarget, statusCode: 301 }, pageContextInit);
387
387
  const pageContextHttpResponse = createPageContext(pageContextInit);
388
388
  objectAssign(pageContextHttpResponse, { httpResponse });
389
389
  return pageContextHttpResponse;
@@ -391,7 +391,9 @@ async function getPermanentRedirect(pageContextInit, globalContext, httpRequestI
391
391
  function normalize(url) {
392
392
  return url || '/';
393
393
  }
394
- async function handleAbortError(errAbort, pageContextsFromRewrite, pageContextInit,
394
+ async function handleAbortError(errAbort, pageContextsFromRewrite,
395
+ // The original `pageContextInit` object passed to `renderPage(pageContextInit)`
396
+ pageContextInit,
395
397
  // handleAbortError() creates a new pageContext object and we don't merge pageContextNominalPageInit to it: we only use some pageContextNominalPageInit information.
396
398
  pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalContext) {
397
399
  logAbortErrorHandled(errAbort, globalContext.isProduction, pageContextNominalPageInit);
@@ -429,13 +431,7 @@ pageContextNominalPageInit, httpRequestId, pageContextErrorPageInit, globalConte
429
431
  if (pageContextAbort._urlRedirect) {
430
432
  const pageContextReturn = createPageContext(pageContextInit);
431
433
  objectAssign(pageContextReturn, pageContextAbort);
432
- const httpResponse = createHttpResponseRedirect(pageContextAbort._urlRedirect, (() => {
433
- const { pathname, searchOriginal } = pageContextNominalPageInit.urlParsed;
434
- const urlLogical = createUrlFromComponents(null, pathname, searchOriginal,
435
- // The server-side doesn't have access to the hash
436
- null);
437
- return urlLogical;
438
- })());
434
+ const httpResponse = createHttpResponseRedirect(pageContextAbort._urlRedirect, pageContextInit);
439
435
  objectAssign(pageContextReturn, { httpResponse });
440
436
  return { pageContextReturn };
441
437
  }
@@ -37,7 +37,7 @@ function getUrlParsed(pageContext) {
37
37
  // 6. The value of pageContext.urlPathname is now '/login': the pathname of `pageContext.urlLogical`. (While pageContext.urlOriginal is still '/fr-FR/admin'.)
38
38
  // Reproduction: https://github.com/vikejs/vike/discussions/1436#discussioncomment-8142023
39
39
  // Determine logical URL
40
- const assertUrlResolved = (src) => assert(urlResolved && typeof urlResolved === 'string',
40
+ const assertUrlResolved = (src) => assert(typeof urlResolved === 'string',
41
41
  // TODO/eventually: remove debug logs, see:
42
42
  // - https://github.com/vikejs/vike/issues/2138#issuecomment-2631713411
43
43
  // - https://github.com/vikejs/vike/commit/5c7810f3080ab62536950f26e019bb2a3a517082
@@ -296,6 +296,14 @@ type ConfigBuiltIn = {
296
296
  * @default false
297
297
  */
298
298
  disableAutoRun?: boolean;
299
+ /**
300
+ * Set prerender settings without enabling pre-rendering.
301
+ *
302
+ * https://vike.dev/prerender#value
303
+ *
304
+ * @default true
305
+ */
306
+ value?: boolean | null;
299
307
  };
300
308
  /**
301
309
  * Install Vike extensions.
@@ -422,10 +430,12 @@ type ConfigBuiltIn = {
422
430
  includeAssetsImportedByServer?: boolean;
423
431
  /** @deprecated See https://vike.dev/disableAutoFullBuild */
424
432
  disableAutoFullBuild?: boolean | 'prerender';
425
- /** Use Vite Environment API to orchestrate the build process.
433
+ /**
434
+ * Use builder.buildApp() to orchestrate the build process.
435
+ *
426
436
  * @experimental
427
437
  */
428
- viteEnvironmentAPI?: boolean;
438
+ vite6BuilderApp?: boolean;
429
439
  /** The Base URL of your server.
430
440
  *
431
441
  * https://vike.dev/base-url
@@ -22,7 +22,7 @@ import type { ConfigValueSerialized } from './serialize/PageConfigSerialized.js'
22
22
  import type { LocationId } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js';
23
23
  import type { FilePath } from './FilePath.js';
24
24
  import type { ConfigDefinitions } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
25
- import type { PlusFile, PlusFilesByLocationId } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js';
25
+ import type { PlusFile } from '../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js';
26
26
  type PageConfigCommon = {
27
27
  pageId: string;
28
28
  } & PageConfigRoute;
@@ -49,7 +49,7 @@ type PageConfigGlobalRuntime = {
49
49
  /** Page config, build-time data structure */
50
50
  type PageConfigBuildTime = PageConfigCommon & {
51
51
  configDefinitions: ConfigDefinitions;
52
- plusFiles: PlusFilesByLocationId;
52
+ plusFiles: PlusFile[];
53
53
  configValueSources: ConfigValueSources;
54
54
  configValuesComputed: ConfigValuesComputed;
55
55
  };
@@ -92,12 +92,12 @@ type ConfigValueSource = {
92
92
  definedAtFilePath: DefinedAtFilePath;
93
93
  plusFile: PlusFile | null;
94
94
  locationId: LocationId;
95
- isOverriden: boolean;
96
95
  /** Wether the config value is loaded at runtime, for example config.Page or config.onBeforeRender */
97
- valueIsImportedAtRuntime: boolean;
96
+ valueIsLoadedWithImport: boolean;
98
97
  /** Whether the config value is a file path, for example config.client */
99
98
  valueIsFilePath?: true;
100
- valueIsDefinedByPlusFile: boolean;
99
+ /** Whether the config value is defined by a +{configName}.js file */
100
+ valueIsDefinedByPlusValueFile: boolean;
101
101
  } & ({
102
102
  valueIsLoaded: false;
103
103
  } | {
@@ -27,9 +27,7 @@ function getConfigValue(pageConfig, configName) {
27
27
  if (!configDef.cumulative) {
28
28
  const configValueSource = sources[0];
29
29
  assert(configValueSource);
30
- assert(configValueSource.isOverriden === false);
31
- assert(sources.slice(1).every((s) => s.isOverriden === true));
32
- assert('value' in configValueSource);
30
+ assert(configValueSource.valueIsLoaded);
33
31
  return {
34
32
  type: 'standard',
35
33
  value: configValueSource.value,
@@ -50,9 +48,8 @@ function mergeCumulative(configValueSources) {
50
48
  const value = [];
51
49
  const definedAtData = [];
52
50
  configValueSources.forEach((configValueSource) => {
53
- assert(configValueSource.isOverriden === false);
54
51
  assert(configValueSource.configEnv.config === true);
55
- assert('value' in configValueSource);
52
+ assert(configValueSource.valueIsLoaded);
56
53
  value.push(configValueSource.value);
57
54
  definedAtData.push(getDefinedAtFile(configValueSource));
58
55
  });
@@ -64,7 +64,9 @@ function parseConfigValuesSerialized_tmp(configValuesSerialized) {
64
64
  const { valueSerialized, ...common } = configValueSeriliazed;
65
65
  const { value, sideExports } = parseValueSerialized(valueSerialized, configName, () => {
66
66
  assert(configValueSeriliazed.type !== 'computed');
67
- return configValueSeriliazed.definedAtData;
67
+ const { definedAtData } = configValueSeriliazed;
68
+ const definedAtFile = Array.isArray(definedAtData) ? definedAtData[0] : definedAtData;
69
+ return definedAtFile;
68
70
  });
69
71
  addSideExports(sideExports);
70
72
  configValue = { value, ...common };
@@ -1,8 +1,10 @@
1
1
  export { serializeConfigValues };
2
2
  export { getConfigValuesBase };
3
+ export { isJsonValue };
3
4
  export type { FilesEnv };
4
5
  import type { ConfigEnvInternal, ConfigValueSource, DefinedAtFile, PageConfigBuildTime, PageConfigGlobalBuildTime } from '../PageConfig.js';
5
6
  declare function serializeConfigValues(pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime, importStatements: string[], filesEnv: FilesEnv, isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, tabspace: string, isEager: boolean | null): string[];
7
+ declare function isJsonValue(value: unknown): boolean;
6
8
  declare function getConfigValuesBase(pageConfig: PageConfigBuildTime | PageConfigGlobalBuildTime, isEnvMatch: (configEnv: ConfigEnvInternal) => boolean, isEager: boolean | null): ConfigValuesBase;
7
9
  type ConfigValuesBase = ({
8
10
  configValueBase: {
@@ -1,11 +1,14 @@
1
1
  export { serializeConfigValues };
2
2
  export { getConfigValuesBase };
3
+ export { isJsonValue };
3
4
  import { assertIsNotProductionRuntime } from '../../../utils/assertSetup.js';
4
5
  import { assert, assertPosixPath, assertUsage, deepEqual, getPropAccessNotation } from '../../../node/plugin/utils.js';
5
6
  import { parsePointerImportData } from '../../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transformPointerImports.js';
6
7
  import { getConfigValueFilePathToShowToUser } from '../helpers.js';
7
8
  import { stringify } from '@brillout/json-serializer/stringify';
8
9
  import pc from '@brillout/picocolors';
10
+ import { isOverriden } from '../../../node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
11
+ const stringifyOptions = { forbidReactElements: true };
9
12
  const REPLACE_ME_BEFORE = '__VIKE__REPLACE_ME_BEFORE__';
10
13
  const REPLACE_ME_AFTER = '__VIKE__REPLACE_ME_AFTER__';
11
14
  // This file is never loaded on the client-side but we save it under the vike/shared/ directory in order to collocate it with parsePageConfigs()
@@ -42,9 +45,8 @@ function serializeConfigValues(pageConfig, importStatements, filesEnv, isEnvMatc
42
45
  return lines;
43
46
  }
44
47
  function getValueSerializedFromSource(configValueSource, configName, importStatements, filesEnv) {
45
- assert(configValueSource.isOverriden === false);
46
48
  let valueData;
47
- if ('value' in configValueSource) {
49
+ if (configValueSource.valueIsLoaded && !configValueSource.valueIsLoadedWithImport) {
48
50
  valueData = getValueSerializedWithJson(configValueSource.value, configName, configValueSource.definedAtFilePath, importStatements, filesEnv, configValueSource.configEnv);
49
51
  }
50
52
  else {
@@ -96,14 +98,13 @@ function serializeConfigValue(configValueBase, valueData, configName, lines, tab
96
98
  }
97
99
  function getValueSerializedWithImport(configValueSource, importStatements, filesEnv, configName) {
98
100
  assert(!configValueSource.valueIsFilePath);
99
- const { valueIsImportedAtRuntime, valueIsDefinedByPlusFile, definedAtFilePath, configEnv } = configValueSource;
100
- assert(valueIsImportedAtRuntime);
101
+ const { valueIsDefinedByPlusValueFile, definedAtFilePath, configEnv } = configValueSource;
101
102
  const { filePathAbsoluteVite, fileExportName } = definedAtFilePath;
102
- if (valueIsDefinedByPlusFile)
103
+ if (valueIsDefinedByPlusValueFile)
103
104
  assert(fileExportName === undefined);
104
105
  const { importName } = addImportStatement(importStatements, filePathAbsoluteVite, fileExportName || '*', filesEnv, configEnv, configName);
105
106
  return {
106
- type: valueIsDefinedByPlusFile ? 'plus-file' : 'pointer-import',
107
+ type: valueIsDefinedByPlusValueFile ? 'plus-file' : 'pointer-import',
107
108
  valueAsJsCode: importName
108
109
  };
109
110
  }
@@ -120,7 +121,7 @@ function valueToJson(value, configName, definedAtData, importStatements, filesEn
120
121
  try {
121
122
  configValueSerialized = stringify(value, {
122
123
  valueName,
123
- forbidReactElements: true,
124
+ ...stringifyOptions,
124
125
  // Replace import strings with import variables.
125
126
  // - We don't need this anymore and could remove it.
126
127
  // - We temporarily needed it for nested document configs (`config.document.{title,description,favicon}`), but we finally decided to go for flat document configs instead (`config.{title,description,favicon}`).
@@ -147,6 +148,15 @@ function valueToJson(value, configName, definedAtData, importStatements, filesEn
147
148
  assert(!configValueSerialized.includes(REPLACE_ME_AFTER));
148
149
  return configValueSerialized;
149
150
  }
151
+ function isJsonValue(value) {
152
+ try {
153
+ stringify(value, stringifyOptions);
154
+ }
155
+ catch (err) {
156
+ return false;
157
+ }
158
+ return true;
159
+ }
150
160
  function logJsonSerializeError(err, configName, definedAtData) {
151
161
  /*
152
162
  // import { isJsonSerializerError } from '@brillout/json-serializer/stringify'
@@ -186,7 +196,6 @@ function getConfigValuesBase(pageConfig, isEnvMatch, isEager) {
186
196
  if (!configDef.cumulative) {
187
197
  const source = sources[0];
188
198
  assert(source);
189
- assert(sources.slice(1).every((s) => s.isOverriden === true));
190
199
  if (!isEnvMatch(source.configEnv))
191
200
  return 'SKIP';
192
201
  const definedAtFile = getDefinedAtFileSource(source);
@@ -197,7 +206,9 @@ function getConfigValuesBase(pageConfig, isEnvMatch, isEager) {
197
206
  return { configValueBase, sourceRelevant: source, configName };
198
207
  }
199
208
  else {
200
- const sourcesRelevant = sources.filter((source) => !source.isOverriden && isEnvMatch(source.configEnv));
209
+ const sourcesRelevant = sources
210
+ .filter((source) => !isOverriden(source, configName, pageConfig))
211
+ .filter((source) => isEnvMatch(source.configEnv));
201
212
  if (sourcesRelevant.length === 0)
202
213
  return 'SKIP';
203
214
  const definedAtData = [];
@@ -8,9 +8,11 @@ export type { PageContextBuiltInServer } from '../shared/types.js';
8
8
  export type { PageContextBuiltInClientWithClientRouting } from '../shared/types.js';
9
9
  export type { PageContextBuiltInClientWithServerRouting } from '../shared/types.js';
10
10
  export type { Config, ConfigMeta as Meta, ImportString, DataAsync, DataSync, GuardAsync, GuardSync, OnBeforePrerenderStartAsync, OnBeforePrerenderStartSync, OnBeforeRenderAsync, OnBeforeRenderSync, OnBeforeRouteAsync, OnBeforeRouteSync, OnHydrationEndAsync, OnHydrationEndSync, OnPageTransitionEndAsync, OnPageTransitionEndSync, OnPageTransitionStartAsync, OnPageTransitionStartSync, OnPrerenderStartAsync, OnPrerenderStartSync, OnRenderClientAsync, OnRenderClientSync, OnRenderHtmlAsync, OnRenderHtmlSync, RouteAsync, RouteSync, KeepScrollPosition } from '../shared/page-configs/Config.js';
11
+ export type { ConfigResolved } from '../shared/page-configs/Config/PageContextConfig.js';
11
12
  export type { ConfigEnv } from '../shared/page-configs/PageConfig.js';
12
13
  export type { ConfigDefinition, ConfigEffect } from '../node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js';
13
14
  export type { ConfigEntries } from '../shared/page-configs/getPageConfigUserFriendly.js';
15
+ export type { VikeConfigPublic as VikeConfig } from '../node/plugin/plugins/commonConfig.js';
14
16
  export type { UrlPublic as Url } from '../utils/parseUrl.js';
15
17
  export type { InjectFilterEntry } from '../node/runtime/html/injectAssets/getHtmlTags.js';
16
18
  export { defineConfig } from './defineConfig.js';
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.223";
1
+ export declare const PROJECT_VERSION: "0.4.224-commit-00ed9fe";