vike 0.4.220 → 0.4.221-commit-ab9e52a

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 (296) hide show
  1. package/dist/cjs/__internal/index.js +5 -23
  2. package/dist/cjs/node/api/build.js +33 -24
  3. package/dist/cjs/node/api/context.js +6 -8
  4. package/dist/cjs/node/api/prepareViteApiCall.js +23 -21
  5. package/dist/cjs/node/api/prerender.js +1 -0
  6. package/dist/cjs/node/api/utils.js +2 -1
  7. package/dist/cjs/node/cli/context.js +16 -0
  8. package/dist/cjs/node/cli/entry.js +2 -0
  9. package/dist/cjs/node/cli/utils.js +1 -0
  10. package/dist/cjs/node/plugin/index.js +4 -8
  11. package/dist/cjs/node/plugin/onLoad.js +6 -1
  12. package/dist/cjs/node/plugin/plugins/autoFullBuild.js +34 -33
  13. package/dist/cjs/node/plugin/plugins/baseUrls.js +2 -2
  14. package/dist/cjs/node/plugin/plugins/buildApp.js +72 -0
  15. package/dist/cjs/node/plugin/plugins/buildConfig/fixServerAssets.js +12 -12
  16. package/dist/cjs/node/plugin/plugins/buildConfig.js +17 -12
  17. package/dist/cjs/node/plugin/plugins/buildEntry/index.js +28 -24
  18. package/dist/cjs/node/plugin/plugins/commonConfig.js +9 -7
  19. package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +7 -4
  20. package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -1
  21. package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +15 -10
  22. package/dist/cjs/node/plugin/plugins/importUserCode/index.js +11 -6
  23. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{assertExtensions.js → getVikeConfig/assertExtensions.js} +41 -36
  24. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +59 -22
  25. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{getConfigFileExport.js → getVikeConfig/getConfigFileExport.js} +2 -2
  26. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +159 -0
  27. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +40 -23
  28. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +9 -64
  29. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +11 -5
  30. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +403 -590
  31. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{debug.js → virtual-files/debug.js} +1 -1
  32. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigValuesAll.js → virtual-files/getVirtualFilePageConfigValuesAll.js} +12 -9
  33. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigs.js → virtual-files/getVirtualFilePageConfigs.js} +13 -11
  34. package/dist/cjs/node/plugin/plugins/packageJsonFile.js +2 -2
  35. package/dist/cjs/node/plugin/plugins/previewConfig.js +7 -7
  36. package/dist/cjs/node/plugin/plugins/setGlobalContext.js +3 -5
  37. package/dist/cjs/node/plugin/shared/findPageFiles.js +2 -1
  38. package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +20 -0
  39. package/dist/cjs/{utils → node/plugin/shared}/getOutDirs.js +70 -61
  40. package/dist/cjs/node/plugin/{resolveClientEntriesDev.js → shared/resolveClientEntriesDev.js} +5 -8
  41. package/dist/cjs/{utils → node/plugin/shared}/viteIsSSR.js +2 -2
  42. package/dist/cjs/node/plugin/utils.js +1 -2
  43. package/dist/cjs/node/prerender/context.js +31 -0
  44. package/dist/cjs/node/prerender/resolvePrerenderConfig.js +46 -0
  45. package/dist/cjs/node/prerender/runPrerender.js +89 -68
  46. package/dist/cjs/node/prerender/utils.js +2 -2
  47. package/dist/cjs/node/runtime/globalContext.js +222 -150
  48. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +11 -7
  49. package/dist/cjs/node/runtime/html/injectAssets/getViteDevScript.js +2 -3
  50. package/dist/cjs/node/runtime/html/injectAssets.js +4 -4
  51. package/dist/cjs/node/runtime/html/renderHtml.js +4 -5
  52. package/dist/cjs/node/runtime/page-files/setup.js +1 -1
  53. package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -3
  54. package/dist/cjs/node/runtime/renderPage/getEarlyHints.js +2 -27
  55. package/dist/cjs/node/runtime/renderPage/getPageAssets/sortPageAssetsForEarlyHintsHeader.js +2 -4
  56. package/dist/cjs/node/runtime/renderPage/getPageAssets.js +4 -4
  57. package/dist/cjs/node/runtime/renderPage/handleErrorWithoutErrorPage.js +3 -5
  58. package/dist/cjs/node/runtime/renderPage/isFontFallback.js +29 -0
  59. package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +5 -4
  60. package/dist/cjs/node/runtime/renderPage/log404/index.js +1 -2
  61. package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +14 -10
  62. package/dist/cjs/node/runtime/renderPage/resolveRedirects.js +6 -5
  63. package/dist/cjs/node/runtime/renderPage.js +31 -29
  64. package/dist/cjs/node/runtime/utils.js +3 -3
  65. package/dist/cjs/node/runtime-dev/createDevMiddleware.js +5 -3
  66. package/dist/cjs/node/shared/resolveBase.js +7 -0
  67. package/dist/cjs/shared/getPageConfigsRuntime.js +20 -0
  68. package/dist/cjs/shared/getPageContextUrlComputed.js +6 -1
  69. package/dist/cjs/shared/getPageFiles/fileTypes.js +0 -1
  70. package/dist/cjs/shared/getPageFiles/getAllPageIdFiles.js +0 -3
  71. package/dist/cjs/shared/getPageFiles/getPageFileObject.js +0 -5
  72. package/dist/cjs/shared/getPageFiles/parseGlobResults.js +4 -3
  73. package/dist/cjs/shared/getPageFiles.js +1 -3
  74. package/dist/cjs/shared/page-configs/getPageConfigUserFriendly.js +15 -6
  75. package/dist/cjs/shared/page-configs/loadConfigValues.js +5 -1
  76. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +69 -18
  77. package/dist/cjs/shared/route/loadPageRoutes.js +1 -0
  78. package/dist/cjs/shared/utils.js +0 -1
  79. package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
  80. package/dist/cjs/utils/assertSetup.js +1 -1
  81. package/dist/cjs/utils/catchInfiniteLoop.js +34 -0
  82. package/dist/cjs/utils/debug.js +8 -6
  83. package/dist/cjs/utils/findFile.js +4 -3
  84. package/dist/cjs/utils/isDev.js +2 -2
  85. package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +2 -2
  86. package/dist/cjs/utils/makePublicCopy.js +32 -0
  87. package/dist/cjs/utils/objectAssignSafe.js +7 -0
  88. package/dist/cjs/utils/path.js +48 -0
  89. package/dist/cjs/utils/requireResolve.js +3 -3
  90. package/dist/esm/__internal/index.d.ts +2 -2
  91. package/dist/esm/__internal/index.js +7 -26
  92. package/dist/esm/client/client-routing-runtime/createPageContext.js +5 -9
  93. package/dist/esm/client/client-routing-runtime/history.d.ts +3 -1
  94. package/dist/esm/client/client-routing-runtime/history.js +23 -18
  95. package/dist/esm/client/client-routing-runtime/index.d.ts +0 -1
  96. package/dist/esm/client/client-routing-runtime/index.js +0 -1
  97. package/dist/esm/client/client-routing-runtime/initClientRouter.js +2 -2
  98. package/dist/esm/client/client-routing-runtime/initOnLinkClick.d.ts +0 -4
  99. package/dist/esm/client/client-routing-runtime/initOnLinkClick.js +0 -11
  100. package/dist/esm/client/client-routing-runtime/initOnPopState.d.ts +0 -10
  101. package/dist/esm/client/client-routing-runtime/initOnPopState.js +50 -70
  102. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +15 -15
  103. package/dist/esm/client/client-routing-runtime/scrollRestoration.d.ts +4 -6
  104. package/dist/esm/client/client-routing-runtime/scrollRestoration.js +17 -12
  105. package/dist/esm/client/client-routing-runtime/setScrollPosition.d.ts +1 -1
  106. package/dist/esm/client/client-routing-runtime/setScrollPosition.js +29 -5
  107. package/dist/esm/client/client-routing-runtime/skipLink.d.ts +0 -2
  108. package/dist/esm/client/client-routing-runtime/skipLink.js +0 -1
  109. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  110. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  111. package/dist/esm/client/server-routing-runtime/getPageContext.js +3 -4
  112. package/dist/esm/client/shared/loadUserFilesClientSide.js +3 -2
  113. package/dist/esm/node/api/build.d.ts +1 -6
  114. package/dist/esm/node/api/build.js +31 -25
  115. package/dist/esm/node/api/context.d.ts +4 -4
  116. package/dist/esm/node/api/context.js +6 -9
  117. package/dist/esm/node/api/prepareViteApiCall.d.ts +4 -3
  118. package/dist/esm/node/api/prepareViteApiCall.js +24 -22
  119. package/dist/esm/node/api/prerender.js +1 -0
  120. package/dist/esm/node/api/utils.d.ts +2 -1
  121. package/dist/esm/node/api/utils.js +2 -1
  122. package/dist/esm/node/cli/context.d.ts +5 -0
  123. package/dist/esm/node/cli/context.js +14 -0
  124. package/dist/esm/node/cli/entry.js +2 -0
  125. package/dist/esm/node/cli/parseCli.d.ts +3 -1
  126. package/dist/esm/node/cli/utils.d.ts +1 -0
  127. package/dist/esm/node/cli/utils.js +1 -0
  128. package/dist/esm/node/plugin/index.d.ts +29 -1
  129. package/dist/esm/node/plugin/index.js +5 -9
  130. package/dist/esm/node/plugin/onLoad.js +7 -2
  131. package/dist/esm/node/plugin/plugins/autoFullBuild.js +35 -34
  132. package/dist/esm/node/plugin/plugins/baseUrls.js +2 -2
  133. package/dist/esm/node/plugin/plugins/buildApp.d.ts +3 -0
  134. package/dist/esm/node/plugin/plugins/buildApp.js +70 -0
  135. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +0 -2
  136. package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.js +11 -11
  137. package/dist/esm/node/plugin/plugins/buildConfig.js +16 -11
  138. package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +3 -3
  139. package/dist/esm/node/plugin/plugins/buildEntry/index.js +28 -24
  140. package/dist/esm/node/plugin/plugins/commonConfig.d.ts +8 -2
  141. package/dist/esm/node/plugin/plugins/commonConfig.js +7 -5
  142. package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +6 -3
  143. package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -1
  144. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +2 -2
  145. package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +14 -9
  146. package/dist/esm/node/plugin/plugins/importUserCode/index.js +11 -6
  147. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.d.ts +6 -0
  148. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{assertExtensions.js → getVikeConfig/assertExtensions.js} +41 -36
  149. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +2 -2
  150. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +58 -21
  151. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getConfigFileExport.js → getVikeConfig/getConfigFileExport.js} +2 -2
  152. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.d.ts +39 -0
  153. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +154 -0
  154. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.d.ts +15 -9
  155. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +41 -24
  156. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.d.ts +8 -18
  157. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolvePointerImport.js +10 -65
  158. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +6 -2
  159. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +12 -6
  160. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +10 -122
  161. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +407 -594
  162. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{debug.js → virtual-files/debug.js} +1 -1
  163. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigValuesAll.js → virtual-files/getVirtualFilePageConfigValuesAll.js} +12 -9
  164. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigs.js → virtual-files/getVirtualFilePageConfigs.js} +13 -11
  165. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{isRuntimeEnvMatch.d.ts → virtual-files/isRuntimeEnvMatch.d.ts} +1 -1
  166. package/dist/esm/node/plugin/plugins/packageJsonFile.js +1 -1
  167. package/dist/esm/node/plugin/plugins/previewConfig.js +5 -5
  168. package/dist/esm/node/plugin/plugins/setGlobalContext.js +4 -6
  169. package/dist/esm/node/plugin/shared/findPageFiles.js +2 -1
  170. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.d.ts +2 -0
  171. package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +17 -0
  172. package/dist/esm/{utils → node/plugin/shared}/getOutDirs.d.ts +1 -1
  173. package/dist/esm/{utils → node/plugin/shared}/getOutDirs.js +52 -43
  174. package/dist/esm/node/plugin/{resolveClientEntriesDev.js → shared/resolveClientEntriesDev.js} +5 -8
  175. package/dist/esm/{utils → node/plugin/shared}/viteIsSSR.d.ts +2 -5
  176. package/dist/esm/{utils → node/plugin/shared}/viteIsSSR.js +2 -2
  177. package/dist/esm/node/plugin/utils.d.ts +0 -1
  178. package/dist/esm/node/plugin/utils.js +1 -2
  179. package/dist/esm/node/prerender/context.d.ts +11 -0
  180. package/dist/esm/node/prerender/context.js +29 -0
  181. package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +12 -0
  182. package/dist/esm/node/prerender/resolvePrerenderConfig.js +44 -0
  183. package/dist/esm/node/prerender/runPrerender.d.ts +42 -1
  184. package/dist/esm/node/prerender/runPrerender.js +90 -69
  185. package/dist/esm/node/prerender/utils.d.ts +2 -2
  186. package/dist/esm/node/prerender/utils.js +2 -2
  187. package/dist/esm/node/runtime/globalContext.d.ts +44 -36
  188. package/dist/esm/node/runtime/globalContext.js +223 -151
  189. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.d.ts +1 -1
  190. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +11 -7
  191. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.d.ts +4 -1
  192. package/dist/esm/node/runtime/html/injectAssets/getViteDevScript.js +2 -3
  193. package/dist/esm/node/runtime/html/injectAssets.d.ts +2 -0
  194. package/dist/esm/node/runtime/html/injectAssets.js +4 -4
  195. package/dist/esm/node/runtime/html/renderHtml.js +4 -5
  196. package/dist/esm/node/runtime/page-files/setup.js +1 -1
  197. package/dist/esm/node/runtime/renderPage/analyzePage.d.ts +2 -1
  198. package/dist/esm/node/runtime/renderPage/analyzePage.js +2 -3
  199. package/dist/esm/node/runtime/renderPage/getEarlyHints.js +1 -26
  200. package/dist/esm/node/runtime/renderPage/getPageAssets/sortPageAssetsForEarlyHintsHeader.d.ts +1 -1
  201. package/dist/esm/node/runtime/renderPage/getPageAssets/sortPageAssetsForEarlyHintsHeader.js +2 -4
  202. package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +3 -1
  203. package/dist/esm/node/runtime/renderPage/getPageAssets.js +4 -4
  204. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.d.ts +2 -0
  205. package/dist/esm/node/runtime/renderPage/handleErrorWithoutErrorPage.js +3 -5
  206. package/dist/esm/node/runtime/renderPage/isFontFallback.d.ts +3 -0
  207. package/dist/esm/node/runtime/renderPage/isFontFallback.js +27 -0
  208. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +2 -0
  209. package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +6 -5
  210. package/dist/esm/node/runtime/renderPage/log404/index.d.ts +2 -0
  211. package/dist/esm/node/runtime/renderPage/log404/index.js +1 -2
  212. package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +3 -0
  213. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +26 -10
  214. package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +14 -10
  215. package/dist/esm/node/runtime/renderPage/resolveRedirects.d.ts +2 -0
  216. package/dist/esm/node/runtime/renderPage/resolveRedirects.js +5 -5
  217. package/dist/esm/node/runtime/renderPage.js +32 -30
  218. package/dist/esm/node/runtime/utils.d.ts +3 -3
  219. package/dist/esm/node/runtime/utils.js +3 -3
  220. package/dist/esm/node/runtime-dev/createDevMiddleware.js +5 -3
  221. package/dist/esm/node/shared/resolveBase.d.ts +5 -1
  222. package/dist/esm/node/shared/resolveBase.js +7 -0
  223. package/dist/esm/shared/getPageConfigsRuntime.d.ts +13 -0
  224. package/dist/esm/shared/getPageConfigsRuntime.js +18 -0
  225. package/dist/esm/shared/getPageContextUrlComputed.js +6 -1
  226. package/dist/esm/shared/getPageFiles/fileTypes.js +1 -2
  227. package/dist/esm/shared/getPageFiles/getAllPageIdFiles.js +0 -3
  228. package/dist/esm/shared/getPageFiles/getPageFileObject.js +0 -5
  229. package/dist/esm/shared/getPageFiles/parseGlobResults.d.ts +1 -1
  230. package/dist/esm/shared/getPageFiles/parseGlobResults.js +4 -3
  231. package/dist/esm/shared/getPageFiles.d.ts +0 -1
  232. package/dist/esm/shared/getPageFiles.js +0 -1
  233. package/dist/esm/shared/page-configs/Config.d.ts +83 -3
  234. package/dist/esm/shared/page-configs/PageConfig.d.ts +30 -18
  235. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.d.ts +6 -8
  236. package/dist/esm/shared/page-configs/getPageConfigUserFriendly.js +15 -6
  237. package/dist/esm/shared/page-configs/loadConfigValues.js +6 -2
  238. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +7 -1
  239. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +70 -19
  240. package/dist/esm/shared/route/loadPageRoutes.js +1 -0
  241. package/dist/esm/shared/utils.d.ts +0 -1
  242. package/dist/esm/shared/utils.js +0 -1
  243. package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
  244. package/dist/esm/utils/PROJECT_VERSION.js +1 -1
  245. package/dist/esm/utils/assertSetup.js +1 -1
  246. package/dist/esm/utils/catchInfiniteLoop.d.ts +2 -0
  247. package/dist/esm/utils/catchInfiniteLoop.js +32 -0
  248. package/dist/esm/utils/debug.d.ts +1 -1
  249. package/dist/esm/utils/debug.js +8 -6
  250. package/dist/esm/utils/findFile.js +2 -1
  251. package/dist/esm/utils/isDev.js +3 -3
  252. package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +1 -1
  253. package/dist/esm/utils/makePublicCopy.d.ts +3 -0
  254. package/dist/esm/utils/makePublicCopy.js +30 -0
  255. package/dist/esm/utils/objectAssignSafe.d.ts +1 -0
  256. package/dist/esm/utils/objectAssignSafe.js +4 -0
  257. package/dist/esm/utils/path.d.ts +14 -0
  258. package/dist/esm/utils/path.js +46 -0
  259. package/dist/esm/utils/projectInfo.d.ts +1 -1
  260. package/dist/esm/utils/requireResolve.js +1 -1
  261. package/package.json +2 -2
  262. package/dist/cjs/node/plugin/plugins/buildEntry/getVikeManifest.js +0 -17
  263. package/dist/cjs/node/plugin/plugins/importUserCode/addImportStatement.js +0 -29
  264. package/dist/cjs/node/prerender/isPrerenderAutoRunEnabled.js +0 -16
  265. package/dist/cjs/node/shared/assertPluginManifest.js +0 -20
  266. package/dist/cjs/node/shared/assertRuntimeManifest.js +0 -16
  267. package/dist/cjs/shared/assertPageFilePath.js +0 -11
  268. package/dist/cjs/shared/getPageFiles/getPageFiles.js +0 -48
  269. package/dist/cjs/utils/filesystemPathHandling.js +0 -18
  270. package/dist/cjs/utils/path-shim.js +0 -19
  271. package/dist/esm/node/plugin/plugins/buildEntry/getVikeManifest.d.ts +0 -5
  272. package/dist/esm/node/plugin/plugins/buildEntry/getVikeManifest.js +0 -15
  273. package/dist/esm/node/plugin/plugins/importUserCode/addImportStatement.d.ts +0 -14
  274. package/dist/esm/node/plugin/plugins/importUserCode/addImportStatement.js +0 -27
  275. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/assertExtensions.d.ts +0 -5
  276. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.d.ts +0 -5
  277. package/dist/esm/node/prerender/isPrerenderAutoRunEnabled.js +0 -14
  278. package/dist/esm/node/shared/assertPluginManifest.d.ts +0 -12
  279. package/dist/esm/node/shared/assertPluginManifest.js +0 -18
  280. package/dist/esm/node/shared/assertRuntimeManifest.d.ts +0 -10
  281. package/dist/esm/node/shared/assertRuntimeManifest.js +0 -14
  282. package/dist/esm/shared/assertPageFilePath.d.ts +0 -2
  283. package/dist/esm/shared/assertPageFilePath.js +0 -9
  284. package/dist/esm/shared/getPageFiles/getPageFiles.d.ts +0 -15
  285. package/dist/esm/shared/getPageFiles/getPageFiles.js +0 -46
  286. package/dist/esm/utils/filesystemPathHandling.d.ts +0 -4
  287. package/dist/esm/utils/filesystemPathHandling.js +0 -16
  288. package/dist/esm/utils/path-shim.d.ts +0 -2
  289. package/dist/esm/utils/path-shim.js +0 -17
  290. /package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{isRuntimeEnvMatch.js → virtual-files/isRuntimeEnvMatch.js} +0 -0
  291. /package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getConfigFileExport.d.ts → getVikeConfig/getConfigFileExport.d.ts} +0 -0
  292. /package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{debug.d.ts → virtual-files/debug.d.ts} +0 -0
  293. /package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigValuesAll.d.ts → virtual-files/getVirtualFilePageConfigValuesAll.d.ts} +0 -0
  294. /package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigs.d.ts → virtual-files/getVirtualFilePageConfigs.d.ts} +0 -0
  295. /package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{isRuntimeEnvMatch.js → virtual-files/isRuntimeEnvMatch.js} +0 -0
  296. /package/dist/esm/node/plugin/{resolveClientEntriesDev.d.ts → shared/resolveClientEntriesDev.d.ts} +0 -0
@@ -7,31 +7,26 @@ exports.vikeConfigDependencies = void 0;
7
7
  exports.getVikeConfig = getVikeConfig;
8
8
  exports.getVikeConfig2 = getVikeConfig2;
9
9
  exports.reloadVikeConfig = reloadVikeConfig;
10
- exports.isVikeConfigFile = isVikeConfigFile;
11
10
  exports.isV1Design = isV1Design;
12
- exports.getConfigValueInterfaceFile = getConfigValueInterfaceFile;
11
+ exports.getConfVal = getConfVal;
12
+ exports.getConfigDefinitionOptional = getConfigDefinitionOptional;
13
13
  const utils_js_1 = require("../../../utils.js");
14
- const path_1 = __importDefault(require("path"));
15
14
  const configDefinitionsBuiltIn_js_1 = require("./getVikeConfig/configDefinitionsBuiltIn.js");
16
15
  const filesystemRouting_js_1 = require("./getVikeConfig/filesystemRouting.js");
17
- const transpileAndExecuteFile_js_1 = require("./getVikeConfig/transpileAndExecuteFile.js");
18
16
  const isConfigInvalid_js_1 = require("../../../../runtime/renderPage/isConfigInvalid.js");
19
17
  const globalContext_js_1 = require("../../../../runtime/globalContext.js");
20
18
  const loggerNotProd_js_1 = require("../../../shared/loggerNotProd.js");
21
19
  const removeSuperfluousViteLog_js_1 = require("../../../shared/loggerVite/removeSuperfluousViteLog.js");
22
20
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
23
21
  const getConfigDefinedAt_js_1 = require("../../../../../shared/page-configs/getConfigDefinedAt.js");
24
- const crawlPlusFiles_js_1 = require("./getVikeConfig/crawlPlusFiles.js");
25
- const getConfigFileExport_js_1 = require("./getConfigFileExport.js");
26
22
  const loadFileAtConfigTime_js_1 = require("./getVikeConfig/loadFileAtConfigTime.js");
27
23
  const resolvePointerImport_js_1 = require("./getVikeConfig/resolvePointerImport.js");
28
24
  const getFilePath_js_1 = require("../../../shared/getFilePath.js");
29
25
  const getConfigValueBuildTime_js_1 = require("../../../../../shared/page-configs/getConfigValueBuildTime.js");
30
- const assertExtensions_js_1 = require("./assertExtensions.js");
26
+ const assertExtensions_js_1 = require("./getVikeConfig/assertExtensions.js");
31
27
  const getPageConfigUserFriendly_js_1 = require("../../../../../shared/page-configs/getPageConfigUserFriendly.js");
32
28
  const serializeConfigValues_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValues.js");
33
- const configDefinitionsBuiltIn = getConfigDefinitionsBuiltIn();
34
- const configDefinitionsBuiltInGlobal = getConfigDefinitionsBuiltInGlobal();
29
+ const getPlusFilesAll_js_1 = require("./getVikeConfig/getPlusFilesAll.js");
35
30
  (0, utils_js_1.assertIsNotProductionRuntime)();
36
31
  let restartVite = false;
37
32
  let wasConfigInvalid = null;
@@ -43,7 +38,6 @@ function reloadVikeConfig(config) {
43
38
  const vikeVitePluginOptions = config._vikeVitePluginOptions;
44
39
  (0, utils_js_1.assert)(vikeVitePluginOptions);
45
40
  vikeConfigDependencies.clear();
46
- (0, resolvePointerImport_js_1.clearFilesEnvMap)();
47
41
  vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, true, vikeVitePluginOptions);
48
42
  handleReloadSideEffects();
49
43
  }
@@ -102,116 +96,6 @@ async function isV1Design(config) {
102
96
  const isV1Design = pageConfigs.length > 0;
103
97
  return isV1Design;
104
98
  }
105
- async function loadInterfaceFiles(userRootDir) {
106
- const plusFiles = await findPlusFiles(userRootDir, null);
107
- const configFiles = [];
108
- const valueFiles = [];
109
- plusFiles.forEach((f) => {
110
- if (getConfigName(f.filePathAbsoluteFilesystem) === 'config') {
111
- configFiles.push(f);
112
- }
113
- else {
114
- valueFiles.push(f);
115
- }
116
- });
117
- let interfaceFilesByLocationId = {};
118
- await Promise.all([
119
- // Config files
120
- ...configFiles.map(async (filePath) => {
121
- const { filePathAbsoluteUserRootDir } = filePath;
122
- (0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
123
- const { configFile, extendsConfigs } = await (0, loadFileAtConfigTime_js_1.loadConfigFile)(filePath, userRootDir, [], false);
124
- (0, utils_js_1.assert)(filePath.filePathAbsoluteUserRootDir);
125
- const locationId = (0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir);
126
- const interfaceFile = getInterfaceFileFromConfigFile(configFile, false, locationId);
127
- interfaceFilesByLocationId[locationId] = interfaceFilesByLocationId[locationId] ?? [];
128
- interfaceFilesByLocationId[locationId].push(interfaceFile);
129
- extendsConfigs.forEach((extendsConfig) => {
130
- /* We purposely use the same locationId because the Vike extension's config should only apply to where it's being extended from, for example:
131
- ```js
132
- // /pages/admin/+config.js
133
-
134
- import vikeVue from 'vike-vue/config'
135
- // Should only apply to /pages/admin/**
136
- export default { extends: [vikeVue] }
137
- ```
138
- ```js
139
- // /pages/marketing/+config.js
140
-
141
- import vikeReact from 'vike-react/config'
142
- // Should only apply to /pages/marketing/**
143
- export default { extends: [vikeReact] }
144
- ```
145
- */
146
- const interfaceFile = getInterfaceFileFromConfigFile(extendsConfig, true, locationId);
147
- (0, assertExtensions_js_1.assertExtensionsConventions)(interfaceFile);
148
- interfaceFilesByLocationId[locationId].push(interfaceFile);
149
- });
150
- }),
151
- // Value files
152
- ...valueFiles.map(async (filePath) => {
153
- const { filePathAbsoluteUserRootDir } = filePath;
154
- (0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
155
- const configName = getConfigName(filePathAbsoluteUserRootDir);
156
- (0, utils_js_1.assert)(configName);
157
- const locationId = (0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir);
158
- const interfaceFile = {
159
- locationId,
160
- filePath,
161
- fileExportsByConfigName: {
162
- [configName]: {}
163
- },
164
- isConfigFile: false,
165
- isValueFile: true,
166
- configName
167
- };
168
- {
169
- // We don't have access to the custom config definitions defined by the user yet.
170
- // - If `configDef` is `undefined` => we load the file +{configName}.js later.
171
- // - We already need to load +meta.js here (to get the custom config definitions defined by the user)
172
- const configDef = getConfigDefinitionOptional(configDefinitionsBuiltIn, configName);
173
- if (configDef && isLoadableAtBuildTime(configDef)) {
174
- await (0, loadFileAtConfigTime_js_1.loadValueFile)(interfaceFile, configName, userRootDir);
175
- }
176
- }
177
- {
178
- interfaceFilesByLocationId[locationId] = interfaceFilesByLocationId[locationId] ?? [];
179
- interfaceFilesByLocationId[locationId].push(interfaceFile);
180
- }
181
- })
182
- ]);
183
- assertAllConfigsAreKnown(interfaceFilesByLocationId);
184
- return interfaceFilesByLocationId;
185
- }
186
- function getInterfaceFileFromConfigFile(configFile, isConfigExtend, locationId) {
187
- const { fileExports, filePath, extendsFilePaths } = configFile;
188
- const interfaceFile = {
189
- locationId,
190
- filePath,
191
- fileExportsByConfigName: {},
192
- isConfigFile: true,
193
- isValueFile: false,
194
- isConfigExtend,
195
- extendsFilePaths
196
- };
197
- const fileExport = (0, getConfigFileExport_js_1.getConfigFileExport)(fileExports, filePath.filePathToShowToUser);
198
- Object.entries(fileExport).forEach(([configName, configValue]) => {
199
- interfaceFile.fileExportsByConfigName[configName] = { configValue };
200
- });
201
- return interfaceFile;
202
- }
203
- /** Show error message upon unknown config */
204
- function assertAllConfigsAreKnown(interfaceFilesByLocationId) {
205
- (0, utils_js_1.objectEntries)(interfaceFilesByLocationId).forEach(([locationId, interfaceFiles]) => {
206
- const interfaceFilesRelevant = getInterfaceFilesRelevant(interfaceFilesByLocationId, locationId);
207
- const configDefinitions = getConfigDefinitions(interfaceFilesRelevant);
208
- interfaceFiles.forEach((interfaceFile) => {
209
- Object.keys(interfaceFile.fileExportsByConfigName).forEach((configName) => {
210
- assertConfigExists(configName, Object.keys(configDefinitions), interfaceFile.filePath.filePathToShowToUser);
211
- });
212
- });
213
- });
214
- }
215
99
  async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError) {
216
100
  let hasError = false;
217
101
  let ret;
@@ -248,7 +132,6 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
248
132
  configDefinitions: {},
249
133
  configValueSources: {}
250
134
  },
251
- vikeConfigGlobal: resolveVikeConfigGlobal({}, {}),
252
135
  global: (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendlyNew)({ configValues: {} })
253
136
  };
254
137
  return dummyData;
@@ -256,149 +139,156 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
256
139
  }
257
140
  }
258
141
  async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
259
- const interfaceFilesByLocationId = await loadInterfaceFiles(userRootDir);
260
- const importedFilesLoaded = {};
261
- const [globalConfigs, pageConfigs] = await Promise.all([
262
- getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded, vikeVitePluginOptions),
263
- getPageConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded)
264
- ]);
265
- return { pageConfigs, ...globalConfigs };
266
- }
267
- async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded, vikeVitePluginOptions) {
268
- const locationIds = (0, utils_js_1.objectKeys)(interfaceFilesByLocationId);
269
- const interfaceFilesGlobal = (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(interfaceFilesByLocationId).filter(([locationId]) => {
270
- return (0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds);
142
+ const esbuildCache = {};
143
+ const plusFilesAll = await (0, getPlusFilesAll_js_1.getPlusFilesAll)(userRootDir, esbuildCache);
144
+ assertKnownConfigs(plusFilesAll);
145
+ const configDefinitionsResolved = await resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache);
146
+ const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir);
147
+ // interop vike(options) in vite.config.js
148
+ temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
149
+ // global
150
+ const configValues = getConfigValues(pageConfigGlobal);
151
+ const global = (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendlyNew)({ configValues });
152
+ return { pageConfigs, pageConfigGlobal, global };
153
+ }
154
+ async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache) {
155
+ const configDefinitionsGlobal = getConfigDefinitions(
156
+ // We use `plusFilesAll` in order to allow local Vike extensions to create global configs.
157
+ sortForGlobal(plusFilesAll), (configDef) => !!configDef.global);
158
+ await loadCustomConfigBuildTimeFiles(plusFilesAll, configDefinitionsGlobal, userRootDir, esbuildCache);
159
+ const configDefinitionsLocal = {};
160
+ await Promise.all((0, utils_js_1.objectEntries)(plusFilesAll).map(async ([locationId, plusFiles]) => {
161
+ const plusFilesRelevant = getPlusFilesRelevant(plusFilesAll, locationId);
162
+ const configDefinitions = getConfigDefinitions(plusFilesRelevant, (configDef) => configDef.global !== true);
163
+ await loadCustomConfigBuildTimeFiles(plusFiles, configDefinitions, userRootDir, esbuildCache);
164
+ configDefinitionsLocal[locationId] = { configDefinitions, plusFiles, plusFilesRelevant };
271
165
  }));
272
- // Validate that global configs live in global interface files
273
- {
274
- const interfaceFilesGlobalPaths = [];
275
- (0, utils_js_1.objectEntries)(interfaceFilesGlobal).forEach(([locationId, interfaceFiles]) => {
276
- (0, utils_js_1.assert)((0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds));
277
- interfaceFiles.forEach(({ filePath: { filePathAbsoluteUserRootDir } }) => {
278
- if (filePathAbsoluteUserRootDir) {
279
- interfaceFilesGlobalPaths.push(filePathAbsoluteUserRootDir);
280
- }
281
- });
282
- });
283
- const globalPaths = Array.from(new Set(interfaceFilesGlobalPaths.map((p) => path_1.default.posix.dirname(p))));
284
- (0, utils_js_1.objectEntries)(interfaceFilesByLocationId).forEach(([locationId, interfaceFiles]) => {
285
- interfaceFiles.forEach((interfaceFile) => {
286
- Object.keys(interfaceFile.fileExportsByConfigName).forEach((configName) => {
287
- if (!(0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds) && isGlobalConfig(configName)) {
288
- (0, utils_js_1.assertUsage)(false, [
289
- `${interfaceFile.filePath.filePathToShowToUser} defines the config ${picocolors_1.default.cyan(configName)} which is global:`,
290
- globalPaths.length
291
- ? `define ${picocolors_1.default.cyan(configName)} in ${(0, utils_js_1.joinEnglish)(globalPaths, 'or')} instead`
292
- : `create a global config (e.g. /pages/+config.js) and define ${picocolors_1.default.cyan(configName)} there instead`
293
- ].join(' '));
294
- }
295
- });
296
- });
297
- });
298
- }
299
- const pageConfigGlobalValues = {};
300
- const pageConfigGlobal = {
301
- configDefinitions: configDefinitionsBuiltInGlobal,
302
- configValueSources: {}
166
+ const configDefinitionsResolved = {
167
+ configDefinitionsGlobal,
168
+ configDefinitionsLocal
303
169
  };
304
- await Promise.all((0, utils_js_1.objectEntries)(configDefinitionsBuiltInGlobal).map(async ([configName, configDef]) => {
305
- const sources = await resolveConfigValueSources(configName, configDef, interfaceFilesGlobal, userRootDir, importedFilesLoaded);
306
- const configValueSource = sources[0];
307
- if (!configValueSource)
308
- return;
309
- pageConfigGlobal.configValueSources[configName] = sources;
310
- // TODO/now
311
- if (configName === 'onBeforeRoute' || configName === 'onPrerenderStart') {
312
- (0, utils_js_1.assert)(!('value' in configValueSource));
170
+ return configDefinitionsResolved;
171
+ }
172
+ // Load value files (with `env.config===true`) of *custom* configs.
173
+ // - The value files of *built-in* configs are already loaded at `getPlusFilesAll()`.
174
+ async function loadCustomConfigBuildTimeFiles(plusFiles, configDefinitions, userRootDir, esbuildCache) {
175
+ const plusFileList = Object.values(plusFiles).flat(1);
176
+ await Promise.all(plusFileList.map(async (plusFile) => {
177
+ if (!plusFile.isConfigFile) {
178
+ await (0, loadFileAtConfigTime_js_1.loadValueFile)(plusFile, configDefinitions, userRootDir, esbuildCache);
313
179
  }
314
180
  else {
315
- (0, utils_js_1.assert)('value' in configValueSource);
316
- // TODO/now
317
- if (configName === 'prerender' && typeof configValueSource.value === 'boolean')
318
- return;
319
- pageConfigGlobalValues[configName] = configValueSource.value;
181
+ await Promise.all(Object.entries(plusFile.pointerImportsByConfigName).map(async ([configName, pointerImport]) => {
182
+ await (0, loadFileAtConfigTime_js_1.loadPointerImport)(pointerImport, userRootDir, configName, configDefinitions, esbuildCache);
183
+ }));
320
184
  }
321
185
  }));
322
- const vikeConfigGlobal = resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues);
323
- {
324
- (0, utils_js_1.assert)((0, utils_js_1.isObject)(vikeVitePluginOptions));
325
- Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
326
- var _a;
327
- (0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltInGlobal), configName));
328
- const configDef = configDefinitionsBuiltInGlobal[configName];
329
- const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
330
- sources.push({
331
- value,
332
- configEnv: configDef.env,
333
- definedAtFilePath: {
334
- ...(0, getFilePath_js_1.getFilePathResolved)({
335
- userRootDir,
336
- filePathAbsoluteUserRootDir: '/vite.config.js'
337
- }),
338
- fileExportPathToShowToUser: null
339
- },
340
- locationId: '/',
341
- isOverriden: configDef.cumulative ? false : sources.length > 0,
342
- valueIsImportedAtRuntime: false,
343
- valueIsDefinedByPlusFile: false
344
- });
345
- });
346
- }
347
- const configValues = getConfigValues(pageConfigGlobal);
348
- const global = (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendlyNew)({ configValues });
349
- return { pageConfigGlobal, vikeConfigGlobal, global };
350
186
  }
351
- async function getPageConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded) {
352
- const pageConfigs = await Promise.all((0, utils_js_1.objectEntries)(interfaceFilesByLocationId)
353
- .filter(([_pageId, interfaceFiles]) => isDefiningPage(interfaceFiles))
354
- .map(async ([locationId]) => {
355
- const interfaceFilesRelevant = getInterfaceFilesRelevant(interfaceFilesByLocationId, locationId);
356
- const interfaceFilesRelevantList = Object.values(interfaceFilesRelevant).flat(1);
357
- (0, assertExtensions_js_1.assertExtensionsPeerDependencies)(interfaceFilesRelevantList);
358
- const configDefinitions = getConfigDefinitions(interfaceFilesRelevant);
359
- // Load value files of custom config-only configs
360
- await Promise.all(interfaceFilesRelevantList.map(async (interfaceFile) => {
361
- if (!interfaceFile.isValueFile)
362
- return;
363
- const { configName } = interfaceFile;
364
- if (isGlobalConfig(configName))
365
- return;
366
- const configDef = getConfigDefinition(configDefinitions, configName, interfaceFile.filePath.filePathToShowToUser);
367
- if (!isLoadableAtBuildTime(configDef))
368
- return;
369
- const isAlreadyLoaded = interfacefileIsAlreaydLoaded(interfaceFile);
370
- if (isAlreadyLoaded)
371
- return;
372
- // Value files of built-in configs should have already been loaded at loadInterfaceFiles()
373
- (0, utils_js_1.assert)(!(configName in configDefinitionsBuiltIn));
374
- await (0, loadFileAtConfigTime_js_1.loadValueFile)(interfaceFile, configName, userRootDir);
375
- }));
376
- let configValueSources = {};
377
- await Promise.all((0, utils_js_1.objectEntries)(configDefinitions)
378
- .filter(([configName]) => !isGlobalConfig(configName))
379
- .map(async ([configName, configDef]) => {
380
- const sources = await resolveConfigValueSources(configName, configDef, interfaceFilesRelevant, userRootDir, importedFilesLoaded);
187
+ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir) {
188
+ const pageConfigGlobal = {
189
+ configDefinitions: configDefinitionsResolved.configDefinitionsGlobal,
190
+ configValueSources: {}
191
+ };
192
+ (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsGlobal).forEach(([configName, configDef]) => {
193
+ const sources = resolveConfigValueSources(configName, configDef,
194
+ // We use `plusFilesAll` in order to allow local Vike extensions to set the value of global configs (e.g. `vite`).
195
+ sortForGlobal(plusFilesAll), userRootDir, true);
196
+ if (sources.length === 0)
197
+ return;
198
+ pageConfigGlobal.configValueSources[configName] = sources;
199
+ });
200
+ assertPageConfigGlobal(pageConfigGlobal, plusFilesAll);
201
+ const pageConfigs = (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal)
202
+ .filter(([_locationId, { plusFiles }]) => isDefiningPage(plusFiles))
203
+ .map(([locationId, { configDefinitions, plusFilesRelevant }]) => {
204
+ const configDefinitionsLocal = configDefinitions;
205
+ const configValueSources = {};
206
+ (0, utils_js_1.objectEntries)(configDefinitionsLocal)
207
+ .filter(([_configName, configDef]) => configDef.global !== true)
208
+ .forEach(([configName, configDef]) => {
209
+ const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false);
210
+ // sortConfigValueSources(sources, locationId)
381
211
  if (sources.length === 0)
382
212
  return;
383
213
  configValueSources[configName] = sources;
384
- }));
385
- configValueSources = sortConfigValueSources(configValueSources, locationId);
214
+ });
386
215
  const { routeFilesystem, isErrorPage } = determineRouteFilesystem(locationId, configValueSources);
387
- applyEffectsAll(configValueSources, configDefinitions);
388
- const configValuesComputed = getComputed(configValueSources, configDefinitions);
389
- assertUsageGlobalConfigs(interfaceFilesRelevantList, configDefinitions, interfaceFilesByLocationId);
216
+ applyEffectsAll(configValueSources, configDefinitionsLocal);
217
+ const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
390
218
  const pageConfig = {
391
219
  pageId: locationId,
392
220
  isErrorPage,
393
221
  routeFilesystem,
394
- configDefinitions,
222
+ configDefinitions: configDefinitionsLocal,
223
+ plusFiles: plusFilesRelevant,
395
224
  configValueSources,
396
225
  configValuesComputed
397
226
  };
398
227
  return pageConfig;
399
- }));
228
+ });
400
229
  assertPageConfigs(pageConfigs);
401
- return pageConfigs;
230
+ return { pageConfigs, pageConfigGlobal };
231
+ }
232
+ function assertPageConfigGlobal(pageConfigGlobal, plusFilesAll) {
233
+ Object.entries(pageConfigGlobal.configValueSources).forEach(([configName, sources]) => {
234
+ assertGlobalConfigLocation(configName, sources, plusFilesAll, pageConfigGlobal.configDefinitions);
235
+ });
236
+ }
237
+ function assertGlobalConfigLocation(configName, sources, plusFilesAll, configDefinitionsGlobal) {
238
+ const locationIdsAll = (0, utils_js_1.objectKeys)(plusFilesAll);
239
+ // Determine existing global +config.js files
240
+ const configFilePathsGlobal = [];
241
+ const plusFilesGlobal = Object.values((0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(plusFilesAll).filter(([locationId]) => (0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIdsAll)))).flat();
242
+ plusFilesGlobal
243
+ .filter((i) => i.isConfigFile)
244
+ .forEach((plusFile) => {
245
+ const { filePathAbsoluteUserRootDir } = plusFile.filePath;
246
+ if (filePathAbsoluteUserRootDir) {
247
+ configFilePathsGlobal.push(filePathAbsoluteUserRootDir);
248
+ }
249
+ });
250
+ // Call assertWarning()
251
+ sources.forEach((source) => {
252
+ const { plusFile } = source;
253
+ // It's `null` when the config is defined by `vike(options)` in vite.config.js
254
+ (0, utils_js_1.assert)(plusFile);
255
+ const { filePathAbsoluteUserRootDir } = plusFile.filePath;
256
+ // Allow local Vike extensions to set gloabl configs (`filePathAbsoluteUserRootDir===null` for Vike extension)
257
+ if (!filePathAbsoluteUserRootDir)
258
+ return;
259
+ (0, utils_js_1.assert)(!plusFile.isExtensionConfig);
260
+ if (!(0, filesystemRouting_js_1.isGlobalLocation)(source.locationId, locationIdsAll)) {
261
+ const configDef = configDefinitionsGlobal[configName];
262
+ (0, utils_js_1.assert)(configDef);
263
+ const isConditionallyGlobal = (0, utils_js_1.isCallable)(configDef.global);
264
+ const errBeg = `${filePathAbsoluteUserRootDir} (which is a local config file) sets the config ${picocolors_1.default.cyan(configName)}`;
265
+ const errMid = !isConditionallyGlobal
266
+ ? "but it's a global config"
267
+ : 'to a value that is global';
268
+ const what = isConditionallyGlobal ? 'global values' : picocolors_1.default.cyan(configName);
269
+ const errEnd = configFilePathsGlobal.length > 0
270
+ ? `define ${what} at a global config file such as ${(0, utils_js_1.joinEnglish)(configFilePathsGlobal, 'or')} instead`
271
+ : `create a global config file (e.g. /pages/+config.js) and define ${what} there instead`;
272
+ // When updating this error message => also update error message at https://vike.dev/warning/global-config
273
+ const errMsg = `${errBeg} ${errMid}: ${errEnd} (https://vike.dev/warning/global-config).`;
274
+ (0, utils_js_1.assertWarning)(false, errMsg, { onlyOnce: true });
275
+ }
276
+ });
277
+ }
278
+ function assertPageConfigs(pageConfigs) {
279
+ pageConfigs.forEach((pageConfig) => {
280
+ (0, assertExtensions_js_1.assertExtensionsRequire)(pageConfig);
281
+ assertOnBeforeRenderEnv(pageConfig);
282
+ });
283
+ }
284
+ function assertOnBeforeRenderEnv(pageConfig) {
285
+ const onBeforeRenderConfig = pageConfig.configValueSources.onBeforeRender?.[0];
286
+ if (!onBeforeRenderConfig)
287
+ return;
288
+ const onBeforeRenderEnv = onBeforeRenderConfig.configEnv;
289
+ const isClientRouting = (0, getConfigValueBuildTime_js_1.getConfigValueBuildTime)(pageConfig, 'clientRouting', 'boolean');
290
+ // When using Server Routing, loading a onBeforeRender() hook on the client-side hasn't any effect (the Server Routing's client runtime never calls it); it unnecessarily bloats client bundle sizes
291
+ (0, utils_js_1.assertUsage)(!(onBeforeRenderEnv.client && !isClientRouting), `Page ${pageConfig.pageId} has an onBeforeRender() hook with env ${picocolors_1.default.cyan(JSON.stringify(onBeforeRenderEnv))} which doesn't make sense because the page is using Server Routing: onBeforeRender() can be run in the client only when using Client Routing.`);
402
292
  }
403
293
  function getConfigValues(pageConfig) {
404
294
  const configValues = {};
@@ -428,178 +318,150 @@ function getConfigValues(pageConfig) {
428
318
  });
429
319
  return configValues;
430
320
  }
431
- // TODO/now: refactor
432
- // - Dedupe: most of the assertUsageGlobalConfigs() code below is a copy-paste of the assertUsage() logic inside getGlobalConfigs()
433
- // - This assertUsage() message is slightly better: use this one for getGlobalConfigs()
434
- // Global configs should be defined at global locations
435
- function assertUsageGlobalConfigs(interfaceFilesRelevantList, configDefinitions, interfaceFilesByLocationId) {
436
- interfaceFilesRelevantList.forEach((interfaceFile) => {
437
- const configNames = [];
438
- if (interfaceFile.isValueFile) {
439
- configNames.push(interfaceFile.configName);
440
- }
441
- else {
442
- configNames.push(...Object.keys(interfaceFile.fileExportsByConfigName));
443
- }
444
- configNames.forEach((configName) => {
445
- if (isGlobalConfig(configName))
446
- return;
447
- const configDef = getConfigDefinition(configDefinitions, configName, interfaceFile.filePath.filePathToShowToUser);
448
- if (configDef.global === true) {
449
- const locationIds = (0, utils_js_1.objectKeys)(interfaceFilesByLocationId);
450
- if (!(0, filesystemRouting_js_1.isGlobalLocation)(interfaceFile.locationId, locationIds)) {
451
- const interfaceFilesGlobal = (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(interfaceFilesByLocationId).filter(([locationId]) => {
452
- return (0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds);
453
- }));
454
- const configFilesGlobal = [];
455
- (0, utils_js_1.objectEntries)(interfaceFilesGlobal).forEach(([locationId, interfaceFiles]) => {
456
- (0, utils_js_1.assert)((0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds));
457
- interfaceFiles.forEach((interfaceFile) => {
458
- if (!interfaceFile.isConfigFile)
459
- return;
460
- const { filePath: { filePathAbsoluteUserRootDir } } = interfaceFile;
461
- if (filePathAbsoluteUserRootDir) {
462
- configFilesGlobal.push(filePathAbsoluteUserRootDir);
463
- }
464
- });
465
- });
466
- (0, utils_js_1.assertUsage)(false, [
467
- `${interfaceFile.filePath.filePathToShowToUser} sets the config ${picocolors_1.default.cyan(configName)} but it's a global config:`,
468
- configFilesGlobal.length > 0
469
- ? `define ${picocolors_1.default.cyan(configName)} at ${(0, utils_js_1.joinEnglish)(configFilesGlobal, 'or')} instead.`
470
- : `create a global config (e.g. /pages/+config.js) and define ${picocolors_1.default.cyan(configName)} there instead.`
471
- ].join(' '));
472
- }
473
- }
321
+ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir) {
322
+ (0, utils_js_1.assert)((0, utils_js_1.isObject)(vikeVitePluginOptions));
323
+ (0, utils_js_1.assertWarning)(Object.keys(vikeVitePluginOptions).length === 0, `Define Vike settings in +config.js instead of vite.config.js ${picocolors_1.default.underline('https://vike.dev/migration/settings')}`, { onlyOnce: true });
324
+ Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
325
+ var _a;
326
+ (0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn), configName));
327
+ const configDef = configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn[configName];
328
+ const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
329
+ sources.push({
330
+ valueIsLoaded: true,
331
+ value,
332
+ configEnv: configDef.env,
333
+ definedAtFilePath: {
334
+ ...(0, getFilePath_js_1.getFilePathResolved)({
335
+ userRootDir,
336
+ filePathAbsoluteUserRootDir: '/vite.config.js'
337
+ }),
338
+ fileExportPathToShowToUser: null
339
+ },
340
+ locationId: '/',
341
+ plusFile: null,
342
+ isOverriden: configDef.cumulative ? false : sources.length > 0,
343
+ valueIsImportedAtRuntime: false,
344
+ valueIsDefinedByPlusFile: false
474
345
  });
475
346
  });
476
347
  }
477
- function assertPageConfigs(pageConfigs) {
478
- pageConfigs.forEach((pageConfig) => {
479
- assertOnBeforeRenderEnv(pageConfig);
480
- });
481
- }
482
- function assertOnBeforeRenderEnv(pageConfig) {
483
- const onBeforeRenderConfig = pageConfig.configValueSources.onBeforeRender?.[0];
484
- if (!onBeforeRenderConfig)
485
- return;
486
- const onBeforeRenderEnv = onBeforeRenderConfig.configEnv;
487
- const isClientRouting = (0, getConfigValueBuildTime_js_1.getConfigValueBuildTime)(pageConfig, 'clientRouting', 'boolean');
488
- // When using Server Routing, loading a onBeforeRender() hook on the client-side hasn't any effect (the Server Routing's client runtime never calls it); it unnecessarily bloats client bundle sizes
489
- (0, utils_js_1.assertUsage)(!(onBeforeRenderEnv.client && !isClientRouting), `Page ${pageConfig.pageId} has an onBeforeRender() hook with env ${picocolors_1.default.cyan(JSON.stringify(onBeforeRenderEnv))} which doesn't make sense because the page is using Server Routing: onBeforeRender() can be run in the client only when using Client Routing.`);
490
- }
491
- function interfacefileIsAlreaydLoaded(interfaceFile) {
492
- const configMapValues = Object.values(interfaceFile.fileExportsByConfigName);
493
- const isAlreadyLoaded = configMapValues.some((conf) => 'configValue' in conf);
494
- if (isAlreadyLoaded) {
495
- (0, utils_js_1.assert)(configMapValues.every((conf) => 'configValue' in conf));
496
- }
497
- return isAlreadyLoaded;
498
- }
499
- function getInterfaceFilesRelevant(interfaceFilesByLocationId, locationIdPage) {
500
- const interfaceFilesRelevant = Object.fromEntries((0, utils_js_1.objectEntries)(interfaceFilesByLocationId)
348
+ function getPlusFilesRelevant(plusFilesAll, locationIdPage) {
349
+ const plusFilesRelevant = Object.fromEntries((0, utils_js_1.objectEntries)(plusFilesAll)
501
350
  .filter(([locationId]) => {
502
351
  return (0, filesystemRouting_js_1.isInherited)(locationId, locationIdPage);
503
352
  })
353
+ // Sort after config inheritance.
354
+ // - Together with getPlusFilesOrdered() this implements the whole order of config inheritance.
355
+ // - See sortForGlobal() for global configs order.
504
356
  .sort(([locationId1], [locationId2]) => (0, filesystemRouting_js_1.sortAfterInheritanceOrder)(locationId1, locationId2, locationIdPage)));
505
- return interfaceFilesRelevant;
357
+ return plusFilesRelevant;
358
+ }
359
+ function sortForGlobal(plusFilesAll) {
360
+ const locationIdsAll = (0, utils_js_1.objectKeys)(plusFilesAll);
361
+ const plusFilesAllSorted = Object.fromEntries((0, utils_js_1.objectEntries)(plusFilesAll)
362
+ .sort((0, utils_js_1.lowerFirst)(([locationId]) => locationId.split('/').length))
363
+ .sort((0, utils_js_1.makeFirst)(([locationId]) => (0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIdsAll))));
364
+ return plusFilesAllSorted;
365
+ }
366
+ function resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, isGlobal) {
367
+ const plusFilesOrdered = getPlusFilesOrdered(configName, plusFilesRelevant);
368
+ let sources = plusFilesOrdered.map((plusFile, i) => {
369
+ const isHighestInheritancePrecedence = i === 0;
370
+ const configValueSource = getConfigValueSource(configName, plusFile, configDef, userRootDir, isHighestInheritancePrecedence);
371
+ return configValueSource;
372
+ });
373
+ if ((0, utils_js_1.isCallable)(configDef.global)) {
374
+ const isGlobalValue = configDef.global;
375
+ (0, utils_js_1.assert)(configDef.env.config);
376
+ sources = sources.filter((source) => {
377
+ (0, utils_js_1.assert)(source.configEnv.config);
378
+ (0, utils_js_1.assert)(source.valueIsLoaded);
379
+ const valueIsGlobal = isGlobalValue(source.value);
380
+ return isGlobal ? valueIsGlobal : !valueIsGlobal;
381
+ });
382
+ }
383
+ return sources;
506
384
  }
507
- async function resolveConfigValueSources(configName, configDef, interfaceFilesRelevant, userRootDir, importedFilesLoaded) {
508
- const sourcesInfo = [];
509
- // interfaceFilesRelevant is sorted by sortAfterInheritanceOrder()
510
- for (const interfaceFiles of Object.values(interfaceFilesRelevant)) {
511
- const interfaceFilesDefiningConfig = interfaceFiles.filter((interfaceFile) => interfaceFile.fileExportsByConfigName[configName]);
512
- if (interfaceFilesDefiningConfig.length === 0)
513
- continue;
514
- const visited = new WeakSet();
515
- const add = (interfaceFile) => {
516
- (0, utils_js_1.assert)(!visited.has(interfaceFile));
517
- visited.add(interfaceFile);
518
- const isHighestInheritancePrecedence = sourcesInfo.length === 0;
519
- sourcesInfo.push([
520
- configName,
521
- interfaceFile,
522
- configDef,
523
- userRootDir,
524
- importedFilesLoaded,
525
- isHighestInheritancePrecedence
526
- ]);
385
+ // Together with sortAfterInheritanceOrder() this implements the whole order of config inheritance.
386
+ function getPlusFilesOrdered(configName, plusFilesRelevant) {
387
+ const plusFilesOrdered = [];
388
+ // `plusFilesRelevant` is already sorted by sortAfterInheritanceOrder() at getPlusFilesRelevant()
389
+ // `plusFilesAtLocationId` is already sorted by sortMakeDeterministic() at getPlusFilesAll()
390
+ for (const plusFilesAtLocationId of Object.values(plusFilesRelevant)) {
391
+ const plusFilesForConfigName = plusFilesAtLocationId.filter((plusFile) => getDefiningConfigNames(plusFile).includes(configName));
392
+ // We populate `plusFilesOrdered` with inheritance order.
393
+ const populate = (plusFile) => {
394
+ (0, utils_js_1.assert)(!visited.has(plusFile));
395
+ visited.add(plusFile);
396
+ plusFilesOrdered.push(plusFile);
527
397
  };
528
- // Main resolution logic
398
+ const visited = new WeakSet();
399
+ // ========================
400
+ // User-land config (first)
401
+ // ========================
529
402
  {
530
- const interfaceValueFiles = interfaceFilesDefiningConfig
531
- .filter((interfaceFile) => interfaceFile.isValueFile &&
403
+ const plusFilesValue = plusFilesForConfigName.filter((plusFile) => !plusFile.isConfigFile &&
532
404
  // We consider side-effect configs (e.g. `export { frontmatter }` of .mdx files) later (i.e. with less priority)
533
- interfaceFile.configName === configName)
534
- .sort(makeOrderDeterministic);
535
- const interfaceConfigFiles = interfaceFilesDefiningConfig
536
- .filter((interfaceFile) => interfaceFile.isConfigFile &&
537
- // We consider value from extended configs (e.g. vike-react) later (i.e. with less priority)
538
- !interfaceFile.isConfigExtend)
539
- .sort(makeOrderDeterministic);
540
- const interfaceValueFile = interfaceValueFiles[0];
541
- const interfaceConfigFile = interfaceConfigFiles[0];
405
+ plusFile.configName === configName);
406
+ const plusFilesConfig = plusFilesForConfigName.filter((plusFile) => plusFile.isConfigFile &&
407
+ // We consider extensions (e.g. vike-react) later (i.e. with less priority)
408
+ !plusFile.isExtensionConfig);
542
409
  // Make this value:
543
410
  // /pages/some-page/+{configName}.js > `export default`
544
411
  // override that value:
545
412
  // /pages/some-page/+config.js > `export default { someConfig }`
546
- const interfaceFileWinner = interfaceValueFile ?? interfaceConfigFile;
547
- if (interfaceFileWinner) {
548
- const interfaceFilesOverriden = [...interfaceValueFiles, ...interfaceConfigFiles].filter((f) => f !== interfaceFileWinner);
549
- // A user-land conflict of interfaceFiles with the same locationId means that the user has superfluously defined the config twice; the user should remove such redundancy making things unnecessarily ambiguous
550
- warnOverridenConfigValues(interfaceFileWinner, interfaceFilesOverriden, configName);
551
- [interfaceFileWinner, ...interfaceFilesOverriden].forEach((interfaceFile) => {
552
- add(interfaceFile);
413
+ const plusFileWinner = plusFilesValue[0] ?? plusFilesConfig[0];
414
+ if (plusFileWinner) {
415
+ const plusFilesOverriden = [...plusFilesValue, ...plusFilesConfig].filter((f) => f !== plusFileWinner);
416
+ // A user-land conflict of plusFiles with the same `locationId` (we are iterating over `plusFilesRelevant: PlusFilesByLocationId`) means that the user has superfluously defined the config twice; the user should remove such redundancy as it makes things unnecessarily ambiguous.
417
+ assertOverwrittenConfigFile(plusFileWinner, plusFilesOverriden, configName);
418
+ [plusFileWinner, ...plusFilesOverriden].forEach((plusFile) => {
419
+ (0, utils_js_1.assert)(plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it's a user-land plus file
420
+ populate(plusFile);
553
421
  });
554
422
  }
555
423
  }
556
- // Side-effect configs such as `export { frontmatter }` in .mdx files
557
- interfaceFilesDefiningConfig
558
- .filter((interfaceFile) => interfaceFile.isValueFile &&
424
+ // ==========================
425
+ // Side-effect configs (next)
426
+ // ==========================
427
+ // - For example `export { frontmatter }` of `.mdx` files.
428
+ // - This only considers side-effect configs that are already loaded at build-time. (E.g. it actually doesn't consider `export { frontmatter }` of .mdx files since .mdx files are loaded only at runtime.)
429
+ plusFilesForConfigName
430
+ .filter((plusFile) => !plusFile.isConfigFile &&
559
431
  // Is side-effect config
560
- interfaceFile.configName !== configName)
561
- .forEach((interfaceValueFileSideEffect) => {
562
- add(interfaceValueFileSideEffect);
432
+ plusFile.configName !== configName)
433
+ .forEach((plusFile) => {
434
+ (0, utils_js_1.assert)(plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it's a user-land plus file
435
+ populate(plusFile);
563
436
  });
564
- // extends
565
- interfaceFilesDefiningConfig
566
- .filter((interfaceFile) => interfaceFile.isConfigFile && interfaceFile.isConfigExtend)
567
- // extended config files are already sorted by inheritance order
568
- .forEach((interfaceFile) => {
569
- add(interfaceFile);
437
+ // ========================
438
+ // Extensions config (last)
439
+ // ========================
440
+ plusFilesForConfigName
441
+ .filter((plusFile) => plusFile.isConfigFile && plusFile.isExtensionConfig)
442
+ // Extension config files are already sorted by inheritance order
443
+ .forEach((plusFile) => {
444
+ (0, utils_js_1.assert)(!plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it isn't a user-land plus file
445
+ populate(plusFile);
570
446
  });
571
- interfaceFilesDefiningConfig.forEach((interfaceFile) => {
572
- (0, utils_js_1.assert)(visited.has(interfaceFile));
447
+ // ======
448
+ // Assert we didn't miss any config.
449
+ // ======
450
+ plusFilesForConfigName.forEach((plusFile) => {
451
+ (0, utils_js_1.assert)(visited.has(plusFile));
573
452
  });
574
453
  }
575
- const sources = await Promise.all(sourcesInfo.map(async (args) => await getConfigValueSource(...args)));
576
- return sources;
577
- }
578
- function makeOrderDeterministic(interfaceFile1, interfaceFile2) {
579
- return (0, utils_js_1.lowerFirst)((interfaceFile) => {
580
- const { filePathAbsoluteUserRootDir } = interfaceFile.filePath;
581
- (0, utils_js_1.assert)(isInterfaceFileUserLand(interfaceFile));
582
- (0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
583
- return filePathAbsoluteUserRootDir.length;
584
- })(interfaceFile1, interfaceFile2);
585
- }
586
- function warnOverridenConfigValues(interfaceFileWinner, interfaceFilesOverriden, configName) {
587
- interfaceFilesOverriden.forEach((interfaceFileLoser) => {
588
- const loserFilePath = interfaceFileLoser.filePath.filePathToShowToUser;
589
- const winnerFilePath = interfaceFileWinner.filePath.filePathToShowToUser;
590
- const confName = picocolors_1.default.cyan(configName);
591
- (0, utils_js_1.assertWarning)(false, `The value of the config ${confName} defined at ${loserFilePath} is always overwritten by the value defined at ${winnerFilePath}, remove the superfluous value defined at ${loserFilePath}`, { onlyOnce: true });
592
- });
593
- }
594
- function isInterfaceFileUserLand(interfaceFile) {
595
- return (interfaceFile.isConfigFile && !interfaceFile.isConfigExtend) || interfaceFile.isValueFile;
596
- }
597
- async function getConfigValueSource(configName, interfaceFile, configDef, userRootDir, importedFilesLoaded, isHighestInheritancePrecedence) {
598
- const conf = interfaceFile.fileExportsByConfigName[configName];
599
- (0, utils_js_1.assert)(conf);
600
- const { locationId } = interfaceFile;
454
+ return plusFilesOrdered;
455
+ }
456
+ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHighestInheritancePrecedence) {
457
+ const confVal = getConfVal(plusFile, configName);
458
+ (0, utils_js_1.assert)(confVal);
459
+ const configValueSourceCommon = {
460
+ locationId: plusFile.locationId,
461
+ plusFile
462
+ };
601
463
  const definedAtFilePath_ = {
602
- ...interfaceFile.filePath,
464
+ ...plusFile.filePath,
603
465
  fileExportPathToShowToUser: ['default', configName]
604
466
  };
605
467
  const isOverriden = configDef.cumulative ? false : !isHighestInheritancePrecedence;
@@ -607,25 +469,27 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
607
469
  if (configDef._valueIsFilePath) {
608
470
  let definedAtFilePath;
609
471
  let valueFilePath;
610
- if (interfaceFile.isConfigFile) {
472
+ if (plusFile.isConfigFile) {
611
473
  // Defined over pointer import
612
- const resolved = (0, resolvePointerImport_js_1.resolvePointerImportOfConfig)(conf.configValue, interfaceFile.filePath, userRootDir, configDef.env, configName);
474
+ (0, utils_js_1.assert)(confVal.configValueLoaded);
475
+ const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(confVal.configValue, plusFile.filePath, userRootDir, configName);
613
476
  const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, definedAtFilePath_);
614
- (0, utils_js_1.assertUsage)(resolved, `${configDefinedAt} should be an import`);
615
- valueFilePath = resolved.pointerImport.filePathAbsoluteVite;
616
- definedAtFilePath = resolved.pointerImport;
477
+ (0, utils_js_1.assertUsage)(pointerImport, `${configDefinedAt} should be an import`);
478
+ valueFilePath = pointerImport.fileExportPath.filePathAbsoluteVite;
479
+ definedAtFilePath = pointerImport.fileExportPath;
617
480
  }
618
481
  else {
619
482
  // Defined by value file, i.e. +{configName}.js
620
- (0, utils_js_1.assert)(interfaceFile.isValueFile);
621
- valueFilePath = interfaceFile.filePath.filePathAbsoluteVite;
483
+ (0, utils_js_1.assert)(!plusFile.isConfigFile);
484
+ valueFilePath = plusFile.filePath.filePathAbsoluteVite;
622
485
  definedAtFilePath = {
623
- ...interfaceFile.filePath,
486
+ ...plusFile.filePath,
624
487
  fileExportPathToShowToUser: []
625
488
  };
626
489
  }
627
490
  const configValueSource = {
628
- locationId,
491
+ ...configValueSourceCommon,
492
+ valueIsLoaded: true,
629
493
  value: valueFilePath,
630
494
  valueIsFilePath: true,
631
495
  configEnv: configDef.env,
@@ -637,38 +501,35 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
637
501
  return configValueSource;
638
502
  }
639
503
  // +config.js
640
- if (interfaceFile.isConfigFile) {
641
- (0, utils_js_1.assert)('configValue' in conf);
642
- const { configValue } = conf;
504
+ if (plusFile.isConfigFile) {
505
+ (0, utils_js_1.assert)(confVal.configValueLoaded);
506
+ const { configValue } = confVal;
643
507
  // Defined over pointer import
644
- const resolved = (0, resolvePointerImport_js_1.resolvePointerImportOfConfig)(configValue, interfaceFile.filePath, userRootDir, configDef.env, configName);
645
- if (resolved) {
508
+ const pointerImport = plusFile.pointerImportsByConfigName[configName];
509
+ if (pointerImport) {
510
+ const value = pointerImport.fileExportValueLoaded
511
+ ? {
512
+ valueIsLoaded: true,
513
+ value: pointerImport.fileExportValue
514
+ }
515
+ : {
516
+ valueIsLoaded: false
517
+ };
646
518
  const configValueSource = {
647
- locationId,
648
- configEnv: resolved.configEnvResolved,
519
+ ...configValueSourceCommon,
520
+ ...value,
521
+ configEnv: resolveConfigEnv(configDef.env, pointerImport.fileExportPath),
649
522
  valueIsImportedAtRuntime: true,
650
523
  valueIsDefinedByPlusFile: false,
651
524
  isOverriden,
652
- definedAtFilePath: resolved.pointerImport
525
+ definedAtFilePath: pointerImport.fileExportPath
653
526
  };
654
- // Load pointer import
655
- if (isLoadableAtBuildTime(configDef) &&
656
- // The value of `extends` was already loaded and already used: we don't need the value of `extends` anymore
657
- configName !== 'extends') {
658
- if (resolved.pointerImport.filePathAbsoluteFilesystem) {
659
- const fileExport = await (0, loadFileAtConfigTime_js_1.loadImportedFile)(resolved.pointerImport, userRootDir, importedFilesLoaded);
660
- configValueSource.value = fileExport;
661
- }
662
- else {
663
- const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, configValueSource.definedAtFilePath);
664
- (0, utils_js_1.assertUsage)(!configDef.cumulative, `${configDefinedAt} cannot be defined over an aliased import`);
665
- }
666
- }
667
527
  return configValueSource;
668
528
  }
669
529
  // Defined inside +config.js
670
530
  const configValueSource = {
671
- locationId,
531
+ ...configValueSourceCommon,
532
+ valueIsLoaded: true,
672
533
  value: configValue,
673
534
  configEnv: configDef.env,
674
535
  valueIsImportedAtRuntime: false,
@@ -679,34 +540,48 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
679
540
  return configValueSource;
680
541
  }
681
542
  // Defined by value file, i.e. +{configName}.js
682
- if (interfaceFile.isValueFile) {
683
- const configEnvResolved = (0, resolvePointerImport_js_1.resolveConfigEnvWithFileName)(configDef.env, interfaceFile.filePath);
684
- const valueAlreadyLoaded = 'configValue' in conf;
543
+ if (!plusFile.isConfigFile) {
544
+ const configEnvResolved = resolveConfigEnv(configDef.env, plusFile.filePath);
545
+ const valueAlreadyLoaded = confVal.configValueLoaded;
685
546
  (0, utils_js_1.assert)(valueAlreadyLoaded === !!configEnvResolved.config);
547
+ const value = valueAlreadyLoaded
548
+ ? {
549
+ valueIsLoaded: true,
550
+ value: confVal.configValue
551
+ }
552
+ : {
553
+ valueIsLoaded: false
554
+ };
686
555
  const configValueSource = {
687
- locationId,
556
+ ...configValueSourceCommon,
557
+ ...value,
688
558
  configEnv: configEnvResolved,
689
559
  valueIsImportedAtRuntime: !valueAlreadyLoaded,
690
560
  valueIsDefinedByPlusFile: true,
691
561
  isOverriden,
692
562
  definedAtFilePath: {
693
- ...interfaceFile.filePath,
694
- fileExportPathToShowToUser: configName === interfaceFile.configName
563
+ ...plusFile.filePath,
564
+ fileExportPathToShowToUser: configName === plusFile.configName
695
565
  ? []
696
566
  : // Side-effect config (e.g. `export { frontmatter }` of .md files)
697
567
  [configName]
698
568
  }
699
569
  };
700
- if (valueAlreadyLoaded) {
701
- configValueSource.value = conf.configValue;
702
- }
703
570
  return configValueSource;
704
571
  }
705
572
  (0, utils_js_1.assert)(false);
706
573
  }
707
- function isDefiningPage(interfaceFiles) {
708
- for (const interfaceFile of interfaceFiles) {
709
- const configNames = Object.keys(interfaceFile.fileExportsByConfigName);
574
+ function assertOverwrittenConfigFile(plusFileWinner, plusFilesOverriden, configName) {
575
+ plusFilesOverriden.forEach((plusFileLoser) => {
576
+ const loserFilePath = plusFileLoser.filePath.filePathToShowToUser;
577
+ const winnerFilePath = plusFileWinner.filePath.filePathToShowToUser;
578
+ const confName = picocolors_1.default.cyan(configName);
579
+ (0, utils_js_1.assertWarning)(false, `The value of the config ${confName} defined at ${loserFilePath} is always overwritten by the value defined at ${winnerFilePath}, remove the superfluous value defined at ${loserFilePath}`, { onlyOnce: true });
580
+ });
581
+ }
582
+ function isDefiningPage(plusFiles) {
583
+ for (const plusFile of plusFiles) {
584
+ const configNames = getDefiningConfigNames(plusFile);
710
585
  if (configNames.some((configName) => isDefiningPageConfig(configName))) {
711
586
  return true;
712
587
  }
@@ -716,37 +591,52 @@ function isDefiningPage(interfaceFiles) {
716
591
  function isDefiningPageConfig(configName) {
717
592
  return ['Page', 'route'].includes(configName);
718
593
  }
719
- function getConfigDefinitions(interfaceFilesRelevant) {
720
- const configDefinitionsMerged = { ...configDefinitionsBuiltIn };
721
- Object.entries(interfaceFilesRelevant)
594
+ function getDefiningConfigNames(plusFile) {
595
+ let configNames = [];
596
+ if (!plusFile.isConfigFile) {
597
+ configNames.push(plusFile.configName);
598
+ }
599
+ if (!plusFile.isNotLoaded) {
600
+ configNames.push(...Object.keys(plusFile.fileExportsByConfigName));
601
+ }
602
+ configNames = (0, utils_js_1.unique)(configNames);
603
+ return configNames;
604
+ }
605
+ function getConfigDefinitions(plusFilesRelevant, filter) {
606
+ let configDefinitions = { ...configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn };
607
+ // Add user-land meta configs
608
+ Object.entries(plusFilesRelevant)
722
609
  .reverse()
723
- .forEach(([_locationId, interfaceFiles]) => {
724
- interfaceFiles.forEach((interfaceFile) => {
725
- const configMeta = interfaceFile.fileExportsByConfigName['meta'];
726
- if (!configMeta)
610
+ .forEach(([_locationId, plusFiles]) => {
611
+ plusFiles.forEach((plusFile) => {
612
+ const confVal = getConfVal(plusFile, 'meta');
613
+ if (!confVal)
727
614
  return;
728
- const meta = configMeta.configValue;
729
- assertMetaUsage(meta, `Config ${picocolors_1.default.cyan('meta')} defined at ${interfaceFile.filePath.filePathToShowToUser}`);
615
+ (0, utils_js_1.assert)(confVal.configValueLoaded);
616
+ const meta = confVal.configValue;
617
+ assertMetaUsage(meta, `Config ${picocolors_1.default.cyan('meta')} defined at ${plusFile.filePath.filePathToShowToUser}`);
730
618
  // Set configDef._userEffectDefinedAtFilePath
731
619
  Object.entries(meta).forEach(([configName, configDef]) => {
732
620
  if (!configDef.effect)
733
621
  return;
734
- (0, utils_js_1.assert)(interfaceFile.isConfigFile);
622
+ (0, utils_js_1.assert)(plusFile.isConfigFile);
735
623
  configDef._userEffectDefinedAtFilePath = {
736
- ...interfaceFile.filePath,
624
+ ...plusFile.filePath,
737
625
  fileExportPathToShowToUser: ['default', 'meta', configName, 'effect']
738
626
  };
739
627
  });
740
- (0, utils_js_1.objectEntries)(meta).forEach(([configName, configDefinition]) => {
628
+ (0, utils_js_1.objectEntries)(meta).forEach(([configName, configDefinitionUserLand]) => {
741
629
  // User can override an existing config definition
742
- configDefinitionsMerged[configName] = {
743
- ...configDefinitionsMerged[configName],
744
- ...configDefinition
630
+ configDefinitions[configName] = {
631
+ ...configDefinitions[configName],
632
+ ...configDefinitionUserLand
745
633
  };
746
634
  });
747
635
  });
748
636
  });
749
- const configDefinitions = configDefinitionsMerged;
637
+ if (filter) {
638
+ configDefinitions = Object.fromEntries(Object.entries(configDefinitions).filter(([_configName, configDef]) => filter(configDef)));
639
+ }
750
640
  return configDefinitions;
751
641
  }
752
642
  function assertMetaUsage(metaVal, metaConfigDefinedAt) {
@@ -863,47 +753,35 @@ function getComputed(configValueSources, configDefinitions) {
863
753
  });
864
754
  return configValuesComputed;
865
755
  }
866
- async function findPlusFiles(userRootDir, outDirRoot) {
867
- const files = await (0, crawlPlusFiles_js_1.crawlPlusFiles)(userRootDir, outDirRoot);
868
- const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => (0, getFilePath_js_1.getFilePathResolved)({ filePathAbsoluteUserRootDir, userRootDir }));
869
- return plusFiles;
870
- }
871
- function getConfigName(filePath) {
872
- (0, utils_js_1.assertPosixPath)(filePath);
873
- if ((0, transpileAndExecuteFile_js_1.isTemporaryBuildFile)(filePath))
874
- return null;
875
- const fileName = path_1.default.posix.basename(filePath);
876
- // assertNoUnexpectedPlusSign(filePath, fileName)
877
- const basename = fileName.split('.')[0];
878
- if (!basename.startsWith('+')) {
879
- return null;
880
- }
881
- else {
882
- const configName = basename.slice(1);
883
- (0, utils_js_1.assertUsage)(configName !== '', `${filePath} Invalid filename ${fileName}`);
884
- return configName;
885
- }
886
- }
887
- /* https://github.com/vikejs/vike/issues/1407
888
- function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
889
- const dirs = path.posix.dirname(filePath).split('/')
890
- dirs.forEach((dir, i) => {
891
- const dirPath = dirs.slice(0, i + 1).join('/')
892
- assertUsage(
893
- !dir.includes('+'),
894
- `Character '+' is a reserved character: remove '+' from the directory name ${dirPath}/`
895
- )
896
- })
897
- assertUsage(
898
- !fileName.slice(1).includes('+'),
899
- `Character '+' is only allowed at the beginning of filenames: make sure ${filePath} doesn't contain any '+' in its filename other than its first letter`
900
- )
756
+ // Show error message upon unknown config
757
+ function assertKnownConfigs(plusFilesAll) {
758
+ const configDefinitionsAll = getConfigDefinitions(plusFilesAll);
759
+ const configNamesKnownAll = Object.keys(configDefinitionsAll);
760
+ (0, utils_js_1.objectEntries)(plusFilesAll).forEach(([locationId, plusFiles]) => {
761
+ const plusFilesRelevant = getPlusFilesRelevant(plusFilesAll, locationId);
762
+ const configDefinitionsLocal = getConfigDefinitions(plusFilesRelevant);
763
+ const configNamesKnownLocal = Object.keys(configDefinitionsLocal);
764
+ plusFiles.forEach((plusFile) => {
765
+ const configNames = getDefiningConfigNames(plusFile);
766
+ configNames.forEach((configName) => {
767
+ assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, plusFile);
768
+ (0, utils_js_1.assert)(configNamesKnownLocal.includes(configName));
769
+ (0, utils_js_1.assert)(configNamesKnownAll.includes(configName));
770
+ });
771
+ });
772
+ });
901
773
  }
902
- */
903
- function handleUnknownConfig(configName, configNames, filePathToShowToUser) {
774
+ function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, plusFile) {
775
+ if (configNamesKnownLocal.includes(configName))
776
+ return;
904
777
  const configNameColored = picocolors_1.default.cyan(configName);
905
- let errMsg = `${filePathToShowToUser} sets an unknown config ${configNameColored}.`;
906
- // vike-{react,vue,solid} hint
778
+ const { locationId, filePath: { filePathToShowToUser } } = plusFile;
779
+ const errMsg = `${filePathToShowToUser} sets an unknown config ${configNameColored}`;
780
+ // Inheritance issue: config is known but isn't defined at `locationId`
781
+ if (configNamesKnownAll.includes(configName)) {
782
+ (0, utils_js_1.assertUsage)(false, `${filePathToShowToUser} sets the value of the config ${configNameColored} which is a custom config that is defined with ${picocolors_1.default.underline('https://vike.dev/meta')} at a path that doesn't apply to ${locationId} — see ${picocolors_1.default.underline('https://vike.dev/config#inheritance')}`);
783
+ }
784
+ // Missing vike-{react,vue,solid} installation
907
785
  {
908
786
  const ui = ['vike-react', 'vike-vue', 'vike-solid'];
909
787
  const knownVikeExntensionConfigs = {
@@ -918,15 +796,11 @@ function handleUnknownConfig(configName, configNames, filePathToShowToUser) {
918
796
  Wrapper: ui
919
797
  };
920
798
  if (configName in knownVikeExntensionConfigs) {
921
- const requiredVikeExtension = knownVikeExntensionConfigs[configName];
922
- (0, utils_js_1.assertUsage)(false, [
923
- errMsg,
924
- `If you want to use the configuration documented at https://vike.dev/${configName} then make sure to install the Vike extension ${requiredVikeExtension
925
- .map((e) => picocolors_1.default.bold(e))
926
- .join('/')}.`,
927
- `Also make sure it applies to ${filePathToShowToUser} (see https://vike.dev/extends#inheritance).`,
928
- `Alternatively, if you don't want to use the aforementioned Vike extension, define it yourself by using ${picocolors_1.default.cyan('meta')} (https://vike.dev/meta).`
929
- ].join(' '));
799
+ const requiredVikeExtension = knownVikeExntensionConfigs[configName]
800
+ .map((e) => picocolors_1.default.bold(e))
801
+ .join('/');
802
+ const errMsgEnhanced = `${errMsg}. If you want to use the configuration ${configNameColored} documented at ${picocolors_1.default.underline(`https://vike.dev/${configName}`)} then make sure to install ${requiredVikeExtension}. (Alternatively, you can define ${configNameColored} yourself by using ${picocolors_1.default.cyan('meta')}, see ${picocolors_1.default.underline('https://vike.dev/meta')} for more information.)`;
803
+ (0, utils_js_1.assertUsage)(false, errMsgEnhanced);
930
804
  }
931
805
  }
932
806
  // Similarity hint
@@ -935,18 +809,15 @@ function handleUnknownConfig(configName, configNames, filePathToShowToUser) {
935
809
  configNameSimilar = 'Page';
936
810
  }
937
811
  else {
938
- configNameSimilar = (0, utils_js_1.getMostSimilar)(configName, configNames);
812
+ configNameSimilar = (0, utils_js_1.getMostSimilar)(configName, configNamesKnownAll);
939
813
  }
940
814
  if (configNameSimilar) {
941
815
  (0, utils_js_1.assert)(configNameSimilar !== configName);
942
- errMsg += ` Did you mean to set ${picocolors_1.default.cyan(configNameSimilar)} instead?`;
816
+ let errMsgEnhanced = `${errMsg}. Did you mean ${picocolors_1.default.cyan(configNameSimilar)} instead?`;
943
817
  if (configName === 'page') {
944
- errMsg += ` (The name of the config ${picocolors_1.default.cyan('Page')} starts with a capital letter ${picocolors_1.default.cyan('P')} because it defines a UI component: a ubiquitous JavaScript convention is that the name of UI components start with a capital letter.)`;
818
+ errMsgEnhanced += ` (The name of the config ${picocolors_1.default.cyan('Page')} starts with a capital letter ${picocolors_1.default.cyan('P')} because it defines a UI component: a ubiquitous JavaScript convention is that the name of UI components start with a capital letter.)`;
945
819
  }
946
- }
947
- // `meta` hint
948
- if (!configNameSimilar) {
949
- errMsg += ` Make sure to define ${configNameColored} by using ${picocolors_1.default.cyan('meta')} (https://vike.dev/meta), and also make sure the meta configuration applies to ${filePathToShowToUser} (see https://vike.dev/config#inheritance).`;
820
+ (0, utils_js_1.assertUsage)(false, errMsgEnhanced);
950
821
  }
951
822
  (0, utils_js_1.assertUsage)(false, errMsg);
952
823
  }
@@ -994,9 +865,6 @@ function determineIsErrorPage(routeFilesystem) {
994
865
  (0, utils_js_1.assertPosixPath)(routeFilesystem);
995
866
  return routeFilesystem.split('/').includes('_error');
996
867
  }
997
- function isVikeConfigFile(filePath) {
998
- return !!getConfigName(filePath);
999
- }
1000
868
  function getConfigEnvValue(val, errMsgIntro) {
1001
869
  const errInvalidValue = `${errMsgIntro} an invalid value ${picocolors_1.default.cyan(JSON.stringify(val))}`;
1002
870
  // Legacy outdated values
@@ -1033,89 +901,34 @@ function getConfigEnvValue(val, errMsgIntro) {
1033
901
  */
1034
902
  return val;
1035
903
  }
1036
- function getConfigDefinition(configDefinitions, configName, filePathToShowToUser) {
1037
- const configDef = configDefinitions[configName];
1038
- assertConfigExists(configName, Object.keys(configDefinitions), filePathToShowToUser);
1039
- (0, utils_js_1.assert)(configDef);
1040
- return configDef;
1041
- }
1042
904
  function getConfigDefinitionOptional(configDefinitions, configName) {
1043
905
  return configDefinitions[configName] ?? null;
1044
906
  }
1045
- function isLoadableAtBuildTime(configDef) {
1046
- return !!configDef.env.config && !configDef._valueIsFilePath;
1047
- }
1048
- function isGlobalConfig(configName) {
1049
- // TODO/now
1050
- if (configName === 'prerender')
1051
- return false;
1052
- const configNamesGlobal = getConfigNamesGlobal();
1053
- return (0, utils_js_1.includes)(configNamesGlobal, configName);
1054
- }
1055
- function getConfigNamesGlobal() {
1056
- return Object.keys(configDefinitionsBuiltInGlobal);
1057
- }
1058
- function getConfigDefinitionsBuiltInGlobal() {
1059
- return (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll).filter(([_configName, configDef]) => configDef.global !== undefined));
1060
- }
1061
- function getConfigDefinitionsBuiltIn() {
1062
- return (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll).filter(([_configName, configDef]) => configDef.global !== true));
1063
- }
1064
- function assertConfigExists(configName, configNamesRelevant, filePathToShowToUser) {
1065
- const configNames = [...configNamesRelevant, ...getConfigNamesGlobal()];
1066
- if (configNames.includes(configName))
1067
- return;
1068
- handleUnknownConfig(configName, configNames, filePathToShowToUser);
1069
- (0, utils_js_1.assert)(false);
1070
- }
1071
- function sortConfigValueSources(configValueSources, locationIdPage) {
1072
- return Object.fromEntries(Object.entries(configValueSources)
1073
- // Make order deterministic (no other purpose)
1074
- .sort(([, [source1]], [, [source2]]) => source1.definedAtFilePath.filePathAbsoluteVite < source2.definedAtFilePath.filePathAbsoluteVite ? -1 : 1)
1075
- // Sort after whether the config value was defined by an npm package
1076
- .sort((0, utils_js_1.makeFirst)(([, [source]]) => {
1077
- const { importPathAbsolute } = source.definedAtFilePath;
1078
- return (!!importPathAbsolute &&
1079
- (0, utils_js_1.isNpmPackageImport)(importPathAbsolute, {
1080
- // Vike config files don't support path aliases. (If they do one day, then Vike will/should be able to resolve path aliases.)
1081
- cannotBePathAlias: true
1082
- }));
1083
- }))
1084
- // Sort after the filesystem inheritance of the config value
1085
- .sort(([, [source1]], [, [source2]]) => (0, utils_js_1.reverse)((0, filesystemRouting_js_1.sortAfterInheritanceOrder)(source1.locationId, source2.locationId, locationIdPage))));
1086
- }
1087
- function getConfigValueInterfaceFile(interfaceFile, configName) {
1088
- return interfaceFile.fileExportsByConfigName[configName]?.configValue;
1089
- }
1090
- // TODO/now: refactor code below
1091
- function resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues) {
1092
- const configs = [vikeVitePluginOptions, pageConfigGlobalValues];
1093
- const vikeConfigGlobal = {
1094
- disableAutoFullBuild: pickFirst(configs.map((c) => c.disableAutoFullBuild)) ?? null,
1095
- prerender: resolvePrerenderOptions(configs),
1096
- includeAssetsImportedByServer: pickFirst(configs.map((c) => c.includeAssetsImportedByServer)) ?? true,
1097
- baseServer: pickFirst(configs.map((c) => c.baseServer)) ?? null,
1098
- baseAssets: pickFirst(configs.map((c) => c.baseAssets)) ?? null,
1099
- disableUrlNormalization: pickFirst(configs.map((c) => c.disableUrlNormalization)) ?? false,
1100
- trailingSlash: pickFirst(configs.map((c) => c.trailingSlash)) ?? false
1101
- };
1102
- return vikeConfigGlobal;
1103
- }
1104
- function resolvePrerenderOptions(configs) {
1105
- if (!configs.some((c) => c.prerender)) {
1106
- return false;
907
+ function getConfVal(plusFile, configName) {
908
+ const configNames = getDefiningConfigNames(plusFile);
909
+ if (!configNames.includes(configName))
910
+ return null;
911
+ if (plusFile.isNotLoaded)
912
+ return { configValueLoaded: false };
913
+ const confVal = { configValue: plusFile.fileExportsByConfigName[configName], configValueLoaded: true };
914
+ return confVal;
915
+ }
916
+ function resolveConfigEnv(configEnv, filePath) {
917
+ const configEnvResolved = { ...configEnv };
918
+ if (filePath.filePathAbsoluteFilesystem) {
919
+ const { fileName } = filePath;
920
+ if (fileName.includes('.server.')) {
921
+ configEnvResolved.server = true;
922
+ configEnvResolved.client = false;
923
+ }
924
+ else if (fileName.includes('.client.')) {
925
+ configEnvResolved.client = true;
926
+ configEnvResolved.server = false;
927
+ }
928
+ else if (fileName.includes('.shared.')) {
929
+ configEnvResolved.server = true;
930
+ configEnvResolved.client = true;
931
+ }
1107
932
  }
1108
- const configsPrerender = configs.map((c) => c.prerender).filter(isObject2);
1109
- return {
1110
- partial: pickFirst(configsPrerender.map((c) => c.partial)) ?? false,
1111
- noExtraDir: pickFirst(configsPrerender.map((c) => c.noExtraDir)) ?? false,
1112
- parallel: pickFirst(configsPrerender.map((c) => c.parallel)) ?? true,
1113
- disableAutoRun: pickFirst(configsPrerender.map((c) => c.disableAutoRun)) ?? false
1114
- };
1115
- }
1116
- function isObject2(p) {
1117
- return typeof p === 'object';
1118
- }
1119
- function pickFirst(arr) {
1120
- return arr.filter((v) => v !== undefined)[0];
933
+ return configEnvResolved;
1121
934
  }