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