vike 0.4.220-commit-af5c91f → 0.4.221-commit-8577456
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 +55 -11
- package/dist/cjs/node/api/prepareViteApiCall.js +20 -17
- package/dist/cjs/node/api/prerender.js +1 -0
- package/dist/cjs/node/api/utils.js +1 -0
- package/dist/cjs/node/plugin/index.js +2 -0
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +9 -20
- package/dist/cjs/node/plugin/plugins/baseUrls.js +1 -1
- package/dist/cjs/node/plugin/plugins/buildApp.js +72 -0
- package/dist/cjs/node/plugin/plugins/buildConfig/fixServerAssets.js +8 -10
- package/dist/cjs/node/plugin/plugins/buildConfig.js +5 -5
- package/dist/cjs/node/plugin/plugins/buildEntry/index.js +2 -2
- package/dist/cjs/node/plugin/plugins/commonConfig.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/index.js +8 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{assertExtensions.js → getVikeConfig/assertExtensions.js} +31 -31
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +53 -21
- 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 +3 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +205 -343
- 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} +7 -7
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigs.js → virtual-files/getVirtualFilePageConfigs.js} +3 -3
- package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -4
- package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +20 -0
- package/dist/cjs/node/plugin/shared/getOutDirs.js +50 -38
- package/dist/cjs/node/prerender/runPrerender.js +29 -30
- package/dist/cjs/node/runtime/globalContext.js +186 -100
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -3
- 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/renderPage/analyzePage.js +2 -3
- 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/loadUserFilesServerSide.js +5 -4
- package/dist/cjs/node/runtime/renderPage/log404/index.js +1 -2
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +10 -9
- package/dist/cjs/node/runtime/renderPage.js +27 -30
- package/dist/cjs/node/runtime/utils.js +1 -0
- package/dist/cjs/node/runtime-dev/createDevMiddleware.js +5 -3
- package/dist/cjs/node/shared/resolveBase.js +3 -5
- package/dist/cjs/shared/getPageConfigsRuntime.js +20 -0
- 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 +13 -4
- package/dist/cjs/shared/route/loadPageRoutes.js +1 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assertSetup.js +1 -1
- package/dist/cjs/utils/debug.js +8 -6
- package/dist/cjs/utils/findFile.js +1 -0
- package/dist/cjs/utils/objectAssignSafe.js +7 -0
- 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/server-routing-runtime/getPageContext.js +3 -4
- package/dist/esm/client/shared/loadUserFilesClientSide.js +3 -2
- package/dist/esm/node/api/build.js +23 -12
- package/dist/esm/node/api/prepareViteApiCall.d.ts +4 -2
- package/dist/esm/node/api/prepareViteApiCall.js +20 -17
- package/dist/esm/node/api/prerender.js +1 -0
- package/dist/esm/node/api/utils.d.ts +1 -0
- package/dist/esm/node/api/utils.js +1 -0
- package/dist/esm/node/plugin/index.js +2 -0
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +10 -21
- package/dist/esm/node/plugin/plugins/baseUrls.js +1 -1
- 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 +8 -10
- package/dist/esm/node/plugin/plugins/buildConfig.js +6 -6
- package/dist/esm/node/plugin/plugins/buildEntry/index.js +2 -2
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/commonConfig.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/index.js +8 -2
- 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} +31 -31
- 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 +52 -20
- 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 +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +3 -3
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +2 -38
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +208 -346
- 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} +7 -7
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/{getVirtualFilePageConfigs.js → virtual-files/getVirtualFilePageConfigs.js} +3 -3
- 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/setGlobalContext.js +2 -5
- package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.d.ts +2 -0
- package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +17 -0
- package/dist/esm/node/plugin/shared/getOutDirs.d.ts +1 -1
- package/dist/esm/node/plugin/shared/getOutDirs.js +50 -38
- package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +2 -5
- package/dist/esm/node/prerender/runPrerender.d.ts +2 -2
- package/dist/esm/node/prerender/runPrerender.js +30 -31
- package/dist/esm/node/runtime/globalContext.d.ts +31 -29
- package/dist/esm/node/runtime/globalContext.js +186 -100
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.d.ts +1 -1
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +2 -3
- 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/renderPage/analyzePage.d.ts +2 -1
- package/dist/esm/node/runtime/renderPage/analyzePage.js +2 -3
- 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 +2 -0
- 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/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 +21 -5
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +10 -9
- package/dist/esm/node/runtime/renderPage.js +28 -31
- package/dist/esm/node/runtime/utils.d.ts +1 -0
- package/dist/esm/node/runtime/utils.js +1 -0
- package/dist/esm/node/runtime-dev/createDevMiddleware.js +5 -3
- package/dist/esm/node/shared/resolveBase.d.ts +2 -1
- package/dist/esm/node/shared/resolveBase.js +3 -5
- package/dist/esm/shared/getPageConfigsRuntime.d.ts +13 -0
- package/dist/esm/shared/getPageConfigsRuntime.js +18 -0
- 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 +7 -0
- package/dist/esm/shared/page-configs/PageConfig.d.ts +9 -5
- package/dist/esm/shared/page-configs/getPageConfigUserFriendly.d.ts +5 -7
- package/dist/esm/shared/page-configs/getPageConfigUserFriendly.js +13 -4
- package/dist/esm/shared/route/loadPageRoutes.js +1 -0
- 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/debug.d.ts +1 -1
- package/dist/esm/utils/debug.js +8 -6
- package/dist/esm/utils/findFile.js +1 -0
- package/dist/esm/utils/objectAssignSafe.d.ts +1 -0
- package/dist/esm/utils/objectAssignSafe.js +4 -0
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/package.json +2 -2
- package/dist/cjs/shared/getPageFiles/getPageFiles.js +0 -48
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/assertExtensions.d.ts +0 -6
- package/dist/esm/shared/getPageFiles/getPageFiles.d.ts +0 -15
- package/dist/esm/shared/getPageFiles/getPageFiles.js +0 -46
- /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
|
@@ -7,30 +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
11
|
exports.getConfVal = getConfVal;
|
|
13
12
|
exports.getConfigDefinitionOptional = getConfigDefinitionOptional;
|
|
14
13
|
const utils_js_1 = require("../../../utils.js");
|
|
15
|
-
const path_1 = __importDefault(require("path"));
|
|
16
14
|
const configDefinitionsBuiltIn_js_1 = require("./getVikeConfig/configDefinitionsBuiltIn.js");
|
|
17
15
|
const filesystemRouting_js_1 = require("./getVikeConfig/filesystemRouting.js");
|
|
18
|
-
const transpileAndExecuteFile_js_1 = require("./getVikeConfig/transpileAndExecuteFile.js");
|
|
19
16
|
const isConfigInvalid_js_1 = require("../../../../runtime/renderPage/isConfigInvalid.js");
|
|
20
17
|
const globalContext_js_1 = require("../../../../runtime/globalContext.js");
|
|
21
18
|
const loggerNotProd_js_1 = require("../../../shared/loggerNotProd.js");
|
|
22
19
|
const removeSuperfluousViteLog_js_1 = require("../../../shared/loggerVite/removeSuperfluousViteLog.js");
|
|
23
20
|
const picocolors_1 = __importDefault(require("@brillout/picocolors"));
|
|
24
21
|
const getConfigDefinedAt_js_1 = require("../../../../../shared/page-configs/getConfigDefinedAt.js");
|
|
25
|
-
const crawlPlusFiles_js_1 = require("./getVikeConfig/crawlPlusFiles.js");
|
|
26
|
-
const getConfigFileExport_js_1 = require("./getConfigFileExport.js");
|
|
27
22
|
const loadFileAtConfigTime_js_1 = require("./getVikeConfig/loadFileAtConfigTime.js");
|
|
28
23
|
const resolvePointerImport_js_1 = require("./getVikeConfig/resolvePointerImport.js");
|
|
29
24
|
const getFilePath_js_1 = require("../../../shared/getFilePath.js");
|
|
30
25
|
const getConfigValueBuildTime_js_1 = require("../../../../../shared/page-configs/getConfigValueBuildTime.js");
|
|
31
|
-
const assertExtensions_js_1 = require("./assertExtensions.js");
|
|
26
|
+
const assertExtensions_js_1 = require("./getVikeConfig/assertExtensions.js");
|
|
32
27
|
const getPageConfigUserFriendly_js_1 = require("../../../../../shared/page-configs/getPageConfigUserFriendly.js");
|
|
33
28
|
const serializeConfigValues_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValues.js");
|
|
29
|
+
const getPlusFilesAll_js_1 = require("./getVikeConfig/getPlusFilesAll.js");
|
|
34
30
|
(0, utils_js_1.assertIsNotProductionRuntime)();
|
|
35
31
|
let restartVite = false;
|
|
36
32
|
let wasConfigInvalid = null;
|
|
@@ -100,106 +96,6 @@ async function isV1Design(config) {
|
|
|
100
96
|
const isV1Design = pageConfigs.length > 0;
|
|
101
97
|
return isV1Design;
|
|
102
98
|
}
|
|
103
|
-
async function loadInterfaceFiles(userRootDir, esbuildCache) {
|
|
104
|
-
const plusFiles = await findPlusFiles(userRootDir, null);
|
|
105
|
-
const configFiles = [];
|
|
106
|
-
const valueFiles = [];
|
|
107
|
-
plusFiles.forEach((f) => {
|
|
108
|
-
if (getConfigName(f.filePathAbsoluteFilesystem) === 'config') {
|
|
109
|
-
configFiles.push(f);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
valueFiles.push(f);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
let interfaceFilesAll = {};
|
|
116
|
-
await Promise.all([
|
|
117
|
-
// Config files
|
|
118
|
-
...configFiles.map(async (filePath) => {
|
|
119
|
-
const { filePathAbsoluteUserRootDir } = filePath;
|
|
120
|
-
(0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
|
|
121
|
-
const { configFile, extendsConfigs } = await (0, loadFileAtConfigTime_js_1.loadConfigFile)(filePath, userRootDir, [], false, esbuildCache);
|
|
122
|
-
(0, utils_js_1.assert)(filePath.filePathAbsoluteUserRootDir);
|
|
123
|
-
const locationId = (0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir);
|
|
124
|
-
const interfaceFile = getInterfaceFileFromConfigFile(configFile, false, locationId, userRootDir);
|
|
125
|
-
interfaceFilesAll[locationId] = interfaceFilesAll[locationId] ?? [];
|
|
126
|
-
interfaceFilesAll[locationId].push(interfaceFile);
|
|
127
|
-
extendsConfigs.forEach((extendsConfig) => {
|
|
128
|
-
/* We purposely use the same locationId because the Vike extension's config should only apply to where it's being extended from, for example:
|
|
129
|
-
```js
|
|
130
|
-
// /pages/admin/+config.js
|
|
131
|
-
|
|
132
|
-
import vikeVue from 'vike-vue/config'
|
|
133
|
-
// Should only apply to /pages/admin/**
|
|
134
|
-
export default { extends: [vikeVue] }
|
|
135
|
-
```
|
|
136
|
-
```js
|
|
137
|
-
// /pages/marketing/+config.js
|
|
138
|
-
|
|
139
|
-
import vikeReact from 'vike-react/config'
|
|
140
|
-
// Should only apply to /pages/marketing/**
|
|
141
|
-
export default { extends: [vikeReact] }
|
|
142
|
-
```
|
|
143
|
-
*/
|
|
144
|
-
const interfaceFile = getInterfaceFileFromConfigFile(extendsConfig, true, locationId, userRootDir);
|
|
145
|
-
(0, assertExtensions_js_1.assertExtensionsConventions)(interfaceFile);
|
|
146
|
-
interfaceFilesAll[locationId].push(interfaceFile);
|
|
147
|
-
});
|
|
148
|
-
}),
|
|
149
|
-
// Value files
|
|
150
|
-
...valueFiles.map(async (filePath) => {
|
|
151
|
-
const { filePathAbsoluteUserRootDir } = filePath;
|
|
152
|
-
(0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
|
|
153
|
-
const configName = getConfigName(filePathAbsoluteUserRootDir);
|
|
154
|
-
(0, utils_js_1.assert)(configName);
|
|
155
|
-
const locationId = (0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir);
|
|
156
|
-
const interfaceFile = {
|
|
157
|
-
locationId,
|
|
158
|
-
filePath,
|
|
159
|
-
isConfigFile: false,
|
|
160
|
-
isValueFile: true,
|
|
161
|
-
isValueFileLoaded: false,
|
|
162
|
-
configName
|
|
163
|
-
};
|
|
164
|
-
interfaceFilesAll[locationId] = interfaceFilesAll[locationId] ?? [];
|
|
165
|
-
interfaceFilesAll[locationId].push(interfaceFile);
|
|
166
|
-
// We don't have access to the custom config definitions defined by the user yet.
|
|
167
|
-
// - If `configDef` is `undefined` => we load the file +{configName}.js later.
|
|
168
|
-
// - We already need to load +meta.js here (to get the custom config definitions defined by the user)
|
|
169
|
-
await (0, loadFileAtConfigTime_js_1.loadValueFile)(interfaceFile, configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll, userRootDir, esbuildCache);
|
|
170
|
-
})
|
|
171
|
-
]);
|
|
172
|
-
assertKnownConfigs(interfaceFilesAll);
|
|
173
|
-
return interfaceFilesAll;
|
|
174
|
-
}
|
|
175
|
-
function getInterfaceFileFromConfigFile(configFile, isConfigExtension, locationId, userRootDir) {
|
|
176
|
-
const { fileExports, filePath, extendsFilePaths } = configFile;
|
|
177
|
-
const fileExportsByConfigName = {};
|
|
178
|
-
const pointerImportsByConfigName = {};
|
|
179
|
-
const fileExport = (0, getConfigFileExport_js_1.getConfigFileExport)(fileExports, filePath.filePathToShowToUser);
|
|
180
|
-
Object.entries(fileExport).forEach(([configName, configValue]) => {
|
|
181
|
-
fileExportsByConfigName[configName] = configValue;
|
|
182
|
-
const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(configValue, configFile.filePath, userRootDir, configName);
|
|
183
|
-
if (pointerImport) {
|
|
184
|
-
pointerImportsByConfigName[configName] = {
|
|
185
|
-
...pointerImport,
|
|
186
|
-
fileExportValueLoaded: false
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
const interfaceFile = {
|
|
191
|
-
locationId,
|
|
192
|
-
filePath,
|
|
193
|
-
fileExportsByConfigName,
|
|
194
|
-
pointerImportsByConfigName,
|
|
195
|
-
isConfigFile: true,
|
|
196
|
-
isValueFile: false,
|
|
197
|
-
isValueFileLoaded: true,
|
|
198
|
-
isConfigExtension,
|
|
199
|
-
extendsFilePaths
|
|
200
|
-
};
|
|
201
|
-
return interfaceFile;
|
|
202
|
-
}
|
|
203
99
|
async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError) {
|
|
204
100
|
let hasError = false;
|
|
205
101
|
let ret;
|
|
@@ -244,9 +140,10 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
|
|
|
244
140
|
}
|
|
245
141
|
async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
246
142
|
const esbuildCache = {};
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
const
|
|
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);
|
|
250
147
|
// interop vike(options) in vite.config.js
|
|
251
148
|
temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
|
|
252
149
|
// global
|
|
@@ -254,19 +151,17 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
254
151
|
const global = (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendlyNew)({ configValues });
|
|
255
152
|
return { pageConfigs, pageConfigGlobal, global };
|
|
256
153
|
}
|
|
257
|
-
async function resolveConfigDefinitions(
|
|
154
|
+
async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache) {
|
|
258
155
|
const configDefinitionsGlobal = getConfigDefinitions(
|
|
259
|
-
// We use `
|
|
260
|
-
|
|
261
|
-
(
|
|
262
|
-
await loadCustomConfigBuildTimeFiles(interfaceFilesAll, configDefinitionsGlobal, userRootDir, esbuildCache);
|
|
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);
|
|
263
159
|
const configDefinitionsLocal = {};
|
|
264
|
-
await Promise.all((0, utils_js_1.objectEntries)(
|
|
265
|
-
const
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
configDefinitionsLocal[locationId] = { configDefinitions, interfaceFiles, interfaceFilesRelevant };
|
|
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 };
|
|
270
165
|
}));
|
|
271
166
|
const configDefinitionsResolved = {
|
|
272
167
|
configDefinitionsGlobal,
|
|
@@ -275,50 +170,48 @@ async function resolveConfigDefinitions(interfaceFilesAll, userRootDir, esbuildC
|
|
|
275
170
|
return configDefinitionsResolved;
|
|
276
171
|
}
|
|
277
172
|
// Load value files (with `env.config===true`) of *custom* configs.
|
|
278
|
-
// - The value files of *built-in* configs are already loaded at `
|
|
279
|
-
async function loadCustomConfigBuildTimeFiles(
|
|
280
|
-
const
|
|
281
|
-
await Promise.all(
|
|
282
|
-
if (
|
|
283
|
-
await (0, loadFileAtConfigTime_js_1.loadValueFile)(
|
|
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);
|
|
284
179
|
}
|
|
285
180
|
else {
|
|
286
|
-
await Promise.all(Object.entries(
|
|
181
|
+
await Promise.all(Object.entries(plusFile.pointerImportsByConfigName).map(async ([configName, pointerImport]) => {
|
|
287
182
|
await (0, loadFileAtConfigTime_js_1.loadPointerImport)(pointerImport, userRootDir, configName, configDefinitions, esbuildCache);
|
|
288
183
|
}));
|
|
289
184
|
}
|
|
290
185
|
}));
|
|
291
186
|
}
|
|
292
|
-
function
|
|
187
|
+
function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir) {
|
|
293
188
|
const pageConfigGlobal = {
|
|
294
189
|
configDefinitions: configDefinitionsResolved.configDefinitionsGlobal,
|
|
295
190
|
configValueSources: {}
|
|
296
191
|
};
|
|
297
192
|
(0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsGlobal).forEach(([configName, configDef]) => {
|
|
298
193
|
const sources = resolveConfigValueSources(configName, configDef,
|
|
299
|
-
// We use `
|
|
300
|
-
|
|
301
|
-
userRootDir, true);
|
|
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);
|
|
302
196
|
if (sources.length === 0)
|
|
303
197
|
return;
|
|
304
198
|
pageConfigGlobal.configValueSources[configName] = sources;
|
|
305
199
|
});
|
|
306
|
-
assertPageConfigGlobal(pageConfigGlobal,
|
|
200
|
+
assertPageConfigGlobal(pageConfigGlobal, plusFilesAll);
|
|
307
201
|
const pageConfigs = (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal)
|
|
308
|
-
.filter(([_locationId, {
|
|
309
|
-
.map(([locationId, { configDefinitions,
|
|
202
|
+
.filter(([_locationId, { plusFiles }]) => isDefiningPage(plusFiles))
|
|
203
|
+
.map(([locationId, { configDefinitions, plusFilesRelevant }]) => {
|
|
310
204
|
const configDefinitionsLocal = configDefinitions;
|
|
311
|
-
|
|
205
|
+
const configValueSources = {};
|
|
312
206
|
(0, utils_js_1.objectEntries)(configDefinitionsLocal)
|
|
313
207
|
.filter(([_configName, configDef]) => configDef.global !== true)
|
|
314
208
|
.forEach(([configName, configDef]) => {
|
|
315
|
-
const sources = resolveConfigValueSources(configName, configDef,
|
|
209
|
+
const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false);
|
|
210
|
+
// sortConfigValueSources(sources, locationId)
|
|
316
211
|
if (sources.length === 0)
|
|
317
212
|
return;
|
|
318
|
-
// assertUsage(!isGlobalConfig(configName, configDefinitionsLocal, sources), 'TODO') // TODO/now
|
|
319
213
|
configValueSources[configName] = sources;
|
|
320
214
|
});
|
|
321
|
-
configValueSources = sortConfigValueSources(configValueSources, locationId);
|
|
322
215
|
const { routeFilesystem, isErrorPage } = determineRouteFilesystem(locationId, configValueSources);
|
|
323
216
|
applyEffectsAll(configValueSources, configDefinitionsLocal);
|
|
324
217
|
const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
|
|
@@ -327,7 +220,7 @@ function getPageConfigs(configDefinitionsResolved, interfaceFilesAll, userRootDi
|
|
|
327
220
|
isErrorPage,
|
|
328
221
|
routeFilesystem,
|
|
329
222
|
configDefinitions: configDefinitionsLocal,
|
|
330
|
-
|
|
223
|
+
plusFiles: plusFilesRelevant,
|
|
331
224
|
configValueSources,
|
|
332
225
|
configValuesComputed
|
|
333
226
|
};
|
|
@@ -336,34 +229,34 @@ function getPageConfigs(configDefinitionsResolved, interfaceFilesAll, userRootDi
|
|
|
336
229
|
assertPageConfigs(pageConfigs);
|
|
337
230
|
return { pageConfigs, pageConfigGlobal };
|
|
338
231
|
}
|
|
339
|
-
function assertPageConfigGlobal(pageConfigGlobal,
|
|
232
|
+
function assertPageConfigGlobal(pageConfigGlobal, plusFilesAll) {
|
|
340
233
|
Object.entries(pageConfigGlobal.configValueSources).forEach(([configName, sources]) => {
|
|
341
|
-
assertGlobalConfigLocation(configName, sources,
|
|
234
|
+
assertGlobalConfigLocation(configName, sources, plusFilesAll, pageConfigGlobal.configDefinitions);
|
|
342
235
|
});
|
|
343
236
|
}
|
|
344
|
-
function assertGlobalConfigLocation(configName, sources,
|
|
345
|
-
const locationIdsAll = (0, utils_js_1.objectKeys)(
|
|
237
|
+
function assertGlobalConfigLocation(configName, sources, plusFilesAll, configDefinitionsGlobal) {
|
|
238
|
+
const locationIdsAll = (0, utils_js_1.objectKeys)(plusFilesAll);
|
|
346
239
|
// Determine existing global +config.js files
|
|
347
240
|
const configFilePathsGlobal = [];
|
|
348
|
-
const
|
|
349
|
-
|
|
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
|
|
350
243
|
.filter((i) => i.isConfigFile)
|
|
351
|
-
.forEach((
|
|
352
|
-
const { filePathAbsoluteUserRootDir } =
|
|
244
|
+
.forEach((plusFile) => {
|
|
245
|
+
const { filePathAbsoluteUserRootDir } = plusFile.filePath;
|
|
353
246
|
if (filePathAbsoluteUserRootDir) {
|
|
354
247
|
configFilePathsGlobal.push(filePathAbsoluteUserRootDir);
|
|
355
248
|
}
|
|
356
249
|
});
|
|
357
250
|
// Call assertWarning()
|
|
358
251
|
sources.forEach((source) => {
|
|
359
|
-
const {
|
|
252
|
+
const { plusFile } = source;
|
|
360
253
|
// It's `null` when the config is defined by `vike(options)` in vite.config.js
|
|
361
|
-
(0, utils_js_1.assert)(
|
|
362
|
-
const { filePathAbsoluteUserRootDir } =
|
|
254
|
+
(0, utils_js_1.assert)(plusFile);
|
|
255
|
+
const { filePathAbsoluteUserRootDir } = plusFile.filePath;
|
|
363
256
|
// Allow local Vike extensions to set gloabl configs (`filePathAbsoluteUserRootDir===null` for Vike extension)
|
|
364
257
|
if (!filePathAbsoluteUserRootDir)
|
|
365
258
|
return;
|
|
366
|
-
(0, utils_js_1.assert)(!
|
|
259
|
+
(0, utils_js_1.assert)(!plusFile.isExtensionConfig);
|
|
367
260
|
if (!(0, filesystemRouting_js_1.isGlobalLocation)(source.locationId, locationIdsAll)) {
|
|
368
261
|
const configDef = configDefinitionsGlobal[configName];
|
|
369
262
|
(0, utils_js_1.assert)(configDef);
|
|
@@ -430,10 +323,11 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
|
|
|
430
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 });
|
|
431
324
|
Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
|
|
432
325
|
var _a;
|
|
433
|
-
(0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.
|
|
434
|
-
const configDef = configDefinitionsBuiltIn_js_1.
|
|
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];
|
|
435
328
|
const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
|
|
436
329
|
sources.push({
|
|
330
|
+
valueIsLoaded: true,
|
|
437
331
|
value,
|
|
438
332
|
configEnv: configDef.env,
|
|
439
333
|
definedAtFilePath: {
|
|
@@ -444,108 +338,130 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
|
|
|
444
338
|
fileExportPathToShowToUser: null
|
|
445
339
|
},
|
|
446
340
|
locationId: '/',
|
|
447
|
-
|
|
341
|
+
plusFile: null,
|
|
448
342
|
isOverriden: configDef.cumulative ? false : sources.length > 0,
|
|
449
343
|
valueIsImportedAtRuntime: false,
|
|
450
344
|
valueIsDefinedByPlusFile: false
|
|
451
345
|
});
|
|
452
346
|
});
|
|
453
347
|
}
|
|
454
|
-
function
|
|
455
|
-
const
|
|
348
|
+
function getPlusFilesRelevant(plusFilesAll, locationIdPage) {
|
|
349
|
+
const plusFilesRelevant = Object.fromEntries((0, utils_js_1.objectEntries)(plusFilesAll)
|
|
456
350
|
.filter(([locationId]) => {
|
|
457
351
|
return (0, filesystemRouting_js_1.isInherited)(locationId, locationIdPage);
|
|
458
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.
|
|
459
356
|
.sort(([locationId1], [locationId2]) => (0, filesystemRouting_js_1.sortAfterInheritanceOrder)(locationId1, locationId2, locationIdPage)));
|
|
460
|
-
return
|
|
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;
|
|
461
384
|
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
const
|
|
471
|
-
(0, utils_js_1.assert)(!visited.has(
|
|
472
|
-
visited.add(
|
|
473
|
-
|
|
474
|
-
interfaceFilesSource.push({ interfaceFile, isHighestInheritancePrecedence });
|
|
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);
|
|
475
397
|
};
|
|
476
|
-
|
|
398
|
+
const visited = new WeakSet();
|
|
399
|
+
// ========================
|
|
400
|
+
// User-land config (first)
|
|
401
|
+
// ========================
|
|
477
402
|
{
|
|
478
|
-
const
|
|
479
|
-
.filter((interfaceFile) => interfaceFile.isValueFile &&
|
|
403
|
+
const plusFilesValue = plusFilesForConfigName.filter((plusFile) => !plusFile.isConfigFile &&
|
|
480
404
|
// We consider side-effect configs (e.g. `export { frontmatter }` of .mdx files) later (i.e. with less priority)
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
.
|
|
485
|
-
// We consider values from extensions (e.g. vike-react) later (i.e. with less priority)
|
|
486
|
-
!interfaceFile.isConfigExtension)
|
|
487
|
-
.sort(makeOrderDeterministic);
|
|
488
|
-
const interfaceValueFile = interfaceValueFiles[0];
|
|
489
|
-
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);
|
|
490
409
|
// Make this value:
|
|
491
410
|
// /pages/some-page/+{configName}.js > `export default`
|
|
492
411
|
// override that value:
|
|
493
412
|
// /pages/some-page/+config.js > `export default { someConfig }`
|
|
494
|
-
const
|
|
495
|
-
if (
|
|
496
|
-
const
|
|
497
|
-
// A user-land conflict of
|
|
498
|
-
|
|
499
|
-
[
|
|
500
|
-
|
|
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);
|
|
501
421
|
});
|
|
502
422
|
}
|
|
503
423
|
}
|
|
504
|
-
//
|
|
505
|
-
|
|
506
|
-
|
|
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 &&
|
|
507
431
|
// Is side-effect config
|
|
508
|
-
|
|
509
|
-
.forEach((
|
|
510
|
-
|
|
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);
|
|
511
436
|
});
|
|
512
|
-
//
|
|
513
|
-
|
|
514
|
-
|
|
437
|
+
// ========================
|
|
438
|
+
// Extensions config (last)
|
|
439
|
+
// ========================
|
|
440
|
+
plusFilesForConfigName
|
|
441
|
+
.filter((plusFile) => plusFile.isConfigFile && plusFile.isExtensionConfig)
|
|
515
442
|
// Extension config files are already sorted by inheritance order
|
|
516
|
-
.forEach((
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
interfaceFilesDefiningConfig.forEach((interfaceFile) => {
|
|
520
|
-
(0, utils_js_1.assert)(visited.has(interfaceFile));
|
|
443
|
+
.forEach((plusFile) => {
|
|
444
|
+
(0, utils_js_1.assert)(!plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it isn't a user-land plus file
|
|
445
|
+
populate(plusFile);
|
|
521
446
|
});
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
if ((0, utils_js_1.isCallable)(configDef.global)) {
|
|
528
|
-
const isGlobalValue = configDef.global;
|
|
529
|
-
(0, utils_js_1.assert)(configDef.env.config);
|
|
530
|
-
sources = sources.filter((source) => {
|
|
531
|
-
(0, utils_js_1.assert)(source.configEnv.config);
|
|
532
|
-
// TODO/now: source.valueIsDefined
|
|
533
|
-
(0, utils_js_1.assert)('value' in source);
|
|
534
|
-
const valueIsGlobal = isGlobalValue(source.value);
|
|
535
|
-
return isGlobal ? valueIsGlobal : !valueIsGlobal;
|
|
447
|
+
// ======
|
|
448
|
+
// Assert we didn't miss any config.
|
|
449
|
+
// ======
|
|
450
|
+
plusFilesForConfigName.forEach((plusFile) => {
|
|
451
|
+
(0, utils_js_1.assert)(visited.has(plusFile));
|
|
536
452
|
});
|
|
537
453
|
}
|
|
538
|
-
return
|
|
454
|
+
return plusFilesOrdered;
|
|
539
455
|
}
|
|
540
|
-
function getConfigValueSource(configName,
|
|
541
|
-
const confVal = getConfVal(
|
|
456
|
+
function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHighestInheritancePrecedence) {
|
|
457
|
+
const confVal = getConfVal(plusFile, configName);
|
|
542
458
|
(0, utils_js_1.assert)(confVal);
|
|
543
459
|
const configValueSourceCommon = {
|
|
544
|
-
locationId:
|
|
545
|
-
|
|
460
|
+
locationId: plusFile.locationId,
|
|
461
|
+
plusFile
|
|
546
462
|
};
|
|
547
463
|
const definedAtFilePath_ = {
|
|
548
|
-
...
|
|
464
|
+
...plusFile.filePath,
|
|
549
465
|
fileExportPathToShowToUser: ['default', configName]
|
|
550
466
|
};
|
|
551
467
|
const isOverriden = configDef.cumulative ? false : !isHighestInheritancePrecedence;
|
|
@@ -553,10 +469,10 @@ function getConfigValueSource(configName, interfaceFile, configDef, userRootDir,
|
|
|
553
469
|
if (configDef._valueIsFilePath) {
|
|
554
470
|
let definedAtFilePath;
|
|
555
471
|
let valueFilePath;
|
|
556
|
-
if (
|
|
472
|
+
if (plusFile.isConfigFile) {
|
|
557
473
|
// Defined over pointer import
|
|
558
474
|
(0, utils_js_1.assert)(confVal.configValueLoaded);
|
|
559
|
-
const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(confVal.configValue,
|
|
475
|
+
const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(confVal.configValue, plusFile.filePath, userRootDir, configName);
|
|
560
476
|
const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, definedAtFilePath_);
|
|
561
477
|
(0, utils_js_1.assertUsage)(pointerImport, `${configDefinedAt} should be an import`);
|
|
562
478
|
valueFilePath = pointerImport.fileExportPath.filePathAbsoluteVite;
|
|
@@ -564,15 +480,16 @@ function getConfigValueSource(configName, interfaceFile, configDef, userRootDir,
|
|
|
564
480
|
}
|
|
565
481
|
else {
|
|
566
482
|
// Defined by value file, i.e. +{configName}.js
|
|
567
|
-
(0, utils_js_1.assert)(
|
|
568
|
-
valueFilePath =
|
|
483
|
+
(0, utils_js_1.assert)(!plusFile.isConfigFile);
|
|
484
|
+
valueFilePath = plusFile.filePath.filePathAbsoluteVite;
|
|
569
485
|
definedAtFilePath = {
|
|
570
|
-
...
|
|
486
|
+
...plusFile.filePath,
|
|
571
487
|
fileExportPathToShowToUser: []
|
|
572
488
|
};
|
|
573
489
|
}
|
|
574
490
|
const configValueSource = {
|
|
575
491
|
...configValueSourceCommon,
|
|
492
|
+
valueIsLoaded: true,
|
|
576
493
|
value: valueFilePath,
|
|
577
494
|
valueIsFilePath: true,
|
|
578
495
|
configEnv: configDef.env,
|
|
@@ -584,29 +501,35 @@ function getConfigValueSource(configName, interfaceFile, configDef, userRootDir,
|
|
|
584
501
|
return configValueSource;
|
|
585
502
|
}
|
|
586
503
|
// +config.js
|
|
587
|
-
if (
|
|
504
|
+
if (plusFile.isConfigFile) {
|
|
588
505
|
(0, utils_js_1.assert)(confVal.configValueLoaded);
|
|
589
506
|
const { configValue } = confVal;
|
|
590
507
|
// Defined over pointer import
|
|
591
|
-
const pointerImport =
|
|
508
|
+
const pointerImport = plusFile.pointerImportsByConfigName[configName];
|
|
592
509
|
if (pointerImport) {
|
|
510
|
+
const value = pointerImport.fileExportValueLoaded
|
|
511
|
+
? {
|
|
512
|
+
valueIsLoaded: true,
|
|
513
|
+
value: pointerImport.fileExportValue
|
|
514
|
+
}
|
|
515
|
+
: {
|
|
516
|
+
valueIsLoaded: false
|
|
517
|
+
};
|
|
593
518
|
const configValueSource = {
|
|
594
519
|
...configValueSourceCommon,
|
|
520
|
+
...value,
|
|
595
521
|
configEnv: resolveConfigEnv(configDef.env, pointerImport.fileExportPath),
|
|
596
522
|
valueIsImportedAtRuntime: true,
|
|
597
523
|
valueIsDefinedByPlusFile: false,
|
|
598
524
|
isOverriden,
|
|
599
525
|
definedAtFilePath: pointerImport.fileExportPath
|
|
600
526
|
};
|
|
601
|
-
if (pointerImport.fileExportValueLoaded) {
|
|
602
|
-
configValueSource.value = pointerImport.fileExportValue;
|
|
603
|
-
(0, utils_js_1.assert)('fileExportValue' in pointerImport);
|
|
604
|
-
}
|
|
605
527
|
return configValueSource;
|
|
606
528
|
}
|
|
607
529
|
// Defined inside +config.js
|
|
608
530
|
const configValueSource = {
|
|
609
531
|
...configValueSourceCommon,
|
|
532
|
+
valueIsLoaded: true,
|
|
610
533
|
value: configValue,
|
|
611
534
|
configEnv: configDef.env,
|
|
612
535
|
valueIsImportedAtRuntime: false,
|
|
@@ -617,53 +540,48 @@ function getConfigValueSource(configName, interfaceFile, configDef, userRootDir,
|
|
|
617
540
|
return configValueSource;
|
|
618
541
|
}
|
|
619
542
|
// Defined by value file, i.e. +{configName}.js
|
|
620
|
-
if (
|
|
621
|
-
const configEnvResolved = resolveConfigEnv(configDef.env,
|
|
543
|
+
if (!plusFile.isConfigFile) {
|
|
544
|
+
const configEnvResolved = resolveConfigEnv(configDef.env, plusFile.filePath);
|
|
622
545
|
const valueAlreadyLoaded = confVal.configValueLoaded;
|
|
623
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
|
+
};
|
|
624
555
|
const configValueSource = {
|
|
625
556
|
...configValueSourceCommon,
|
|
557
|
+
...value,
|
|
626
558
|
configEnv: configEnvResolved,
|
|
627
559
|
valueIsImportedAtRuntime: !valueAlreadyLoaded,
|
|
628
560
|
valueIsDefinedByPlusFile: true,
|
|
629
561
|
isOverriden,
|
|
630
562
|
definedAtFilePath: {
|
|
631
|
-
...
|
|
632
|
-
fileExportPathToShowToUser: configName ===
|
|
563
|
+
...plusFile.filePath,
|
|
564
|
+
fileExportPathToShowToUser: configName === plusFile.configName
|
|
633
565
|
? []
|
|
634
566
|
: // Side-effect config (e.g. `export { frontmatter }` of .md files)
|
|
635
567
|
[configName]
|
|
636
568
|
}
|
|
637
569
|
};
|
|
638
|
-
if (valueAlreadyLoaded) {
|
|
639
|
-
configValueSource.value = confVal.configValue;
|
|
640
|
-
}
|
|
641
570
|
return configValueSource;
|
|
642
571
|
}
|
|
643
572
|
(0, utils_js_1.assert)(false);
|
|
644
573
|
}
|
|
645
|
-
function
|
|
646
|
-
|
|
647
|
-
const
|
|
648
|
-
|
|
649
|
-
(0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
|
|
650
|
-
return filePathAbsoluteUserRootDir.length;
|
|
651
|
-
})(interfaceFile1, interfaceFile2);
|
|
652
|
-
}
|
|
653
|
-
function warnOverridenConfigValues(interfaceFileWinner, interfaceFilesOverriden, configName) {
|
|
654
|
-
interfaceFilesOverriden.forEach((interfaceFileLoser) => {
|
|
655
|
-
const loserFilePath = interfaceFileLoser.filePath.filePathToShowToUser;
|
|
656
|
-
const winnerFilePath = interfaceFileWinner.filePath.filePathToShowToUser;
|
|
574
|
+
function assertOverwrittenConfigFile(plusFileWinner, plusFilesOverriden, configName) {
|
|
575
|
+
plusFilesOverriden.forEach((plusFileLoser) => {
|
|
576
|
+
const loserFilePath = plusFileLoser.filePath.filePathToShowToUser;
|
|
577
|
+
const winnerFilePath = plusFileWinner.filePath.filePathToShowToUser;
|
|
657
578
|
const confName = picocolors_1.default.cyan(configName);
|
|
658
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 });
|
|
659
580
|
});
|
|
660
581
|
}
|
|
661
|
-
function
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
function isDefiningPage(interfaceFiles) {
|
|
665
|
-
for (const interfaceFile of interfaceFiles) {
|
|
666
|
-
const configNames = getDefiningConfigNames(interfaceFile);
|
|
582
|
+
function isDefiningPage(plusFiles) {
|
|
583
|
+
for (const plusFile of plusFiles) {
|
|
584
|
+
const configNames = getDefiningConfigNames(plusFile);
|
|
667
585
|
if (configNames.some((configName) => isDefiningPageConfig(configName))) {
|
|
668
586
|
return true;
|
|
669
587
|
}
|
|
@@ -673,37 +591,37 @@ function isDefiningPage(interfaceFiles) {
|
|
|
673
591
|
function isDefiningPageConfig(configName) {
|
|
674
592
|
return ['Page', 'route'].includes(configName);
|
|
675
593
|
}
|
|
676
|
-
function getDefiningConfigNames(
|
|
594
|
+
function getDefiningConfigNames(plusFile) {
|
|
677
595
|
let configNames = [];
|
|
678
|
-
if (
|
|
679
|
-
configNames.push(
|
|
596
|
+
if (!plusFile.isConfigFile) {
|
|
597
|
+
configNames.push(plusFile.configName);
|
|
680
598
|
}
|
|
681
|
-
if (
|
|
682
|
-
configNames.push(...Object.keys(
|
|
599
|
+
if (!plusFile.isNotLoaded) {
|
|
600
|
+
configNames.push(...Object.keys(plusFile.fileExportsByConfigName));
|
|
683
601
|
}
|
|
684
602
|
configNames = (0, utils_js_1.unique)(configNames);
|
|
685
603
|
return configNames;
|
|
686
604
|
}
|
|
687
|
-
function getConfigDefinitions(
|
|
688
|
-
let configDefinitions = { ...configDefinitionsBuiltIn_js_1.
|
|
605
|
+
function getConfigDefinitions(plusFilesRelevant, filter) {
|
|
606
|
+
let configDefinitions = { ...configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn };
|
|
689
607
|
// Add user-land meta configs
|
|
690
|
-
Object.entries(
|
|
608
|
+
Object.entries(plusFilesRelevant)
|
|
691
609
|
.reverse()
|
|
692
|
-
.forEach(([_locationId,
|
|
693
|
-
|
|
694
|
-
const confVal = getConfVal(
|
|
610
|
+
.forEach(([_locationId, plusFiles]) => {
|
|
611
|
+
plusFiles.forEach((plusFile) => {
|
|
612
|
+
const confVal = getConfVal(plusFile, 'meta');
|
|
695
613
|
if (!confVal)
|
|
696
614
|
return;
|
|
697
615
|
(0, utils_js_1.assert)(confVal.configValueLoaded);
|
|
698
616
|
const meta = confVal.configValue;
|
|
699
|
-
assertMetaUsage(meta, `Config ${picocolors_1.default.cyan('meta')} defined at ${
|
|
617
|
+
assertMetaUsage(meta, `Config ${picocolors_1.default.cyan('meta')} defined at ${plusFile.filePath.filePathToShowToUser}`);
|
|
700
618
|
// Set configDef._userEffectDefinedAtFilePath
|
|
701
619
|
Object.entries(meta).forEach(([configName, configDef]) => {
|
|
702
620
|
if (!configDef.effect)
|
|
703
621
|
return;
|
|
704
|
-
(0, utils_js_1.assert)(
|
|
622
|
+
(0, utils_js_1.assert)(plusFile.isConfigFile);
|
|
705
623
|
configDef._userEffectDefinedAtFilePath = {
|
|
706
|
-
...
|
|
624
|
+
...plusFile.filePath,
|
|
707
625
|
fileExportPathToShowToUser: ['default', 'meta', configName, 'effect']
|
|
708
626
|
};
|
|
709
627
|
});
|
|
@@ -835,66 +753,29 @@ function getComputed(configValueSources, configDefinitions) {
|
|
|
835
753
|
});
|
|
836
754
|
return configValuesComputed;
|
|
837
755
|
}
|
|
838
|
-
async function findPlusFiles(userRootDir, outDirRoot) {
|
|
839
|
-
const files = await (0, crawlPlusFiles_js_1.crawlPlusFiles)(userRootDir, outDirRoot);
|
|
840
|
-
const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => (0, getFilePath_js_1.getFilePathResolved)({ filePathAbsoluteUserRootDir, userRootDir }));
|
|
841
|
-
return plusFiles;
|
|
842
|
-
}
|
|
843
|
-
function getConfigName(filePath) {
|
|
844
|
-
(0, utils_js_1.assertPosixPath)(filePath);
|
|
845
|
-
if ((0, transpileAndExecuteFile_js_1.isTemporaryBuildFile)(filePath))
|
|
846
|
-
return null;
|
|
847
|
-
const fileName = path_1.default.posix.basename(filePath);
|
|
848
|
-
// assertNoUnexpectedPlusSign(filePath, fileName)
|
|
849
|
-
const basename = fileName.split('.')[0];
|
|
850
|
-
if (!basename.startsWith('+')) {
|
|
851
|
-
return null;
|
|
852
|
-
}
|
|
853
|
-
else {
|
|
854
|
-
const configName = basename.slice(1);
|
|
855
|
-
(0, utils_js_1.assertUsage)(configName !== '', `${filePath} Invalid filename ${fileName}`);
|
|
856
|
-
return configName;
|
|
857
|
-
}
|
|
858
|
-
}
|
|
859
|
-
/* https://github.com/vikejs/vike/issues/1407
|
|
860
|
-
function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
|
|
861
|
-
const dirs = path.posix.dirname(filePath).split('/')
|
|
862
|
-
dirs.forEach((dir, i) => {
|
|
863
|
-
const dirPath = dirs.slice(0, i + 1).join('/')
|
|
864
|
-
assertUsage(
|
|
865
|
-
!dir.includes('+'),
|
|
866
|
-
`Character '+' is a reserved character: remove '+' from the directory name ${dirPath}/`
|
|
867
|
-
)
|
|
868
|
-
})
|
|
869
|
-
assertUsage(
|
|
870
|
-
!fileName.slice(1).includes('+'),
|
|
871
|
-
`Character '+' is only allowed at the beginning of filenames: make sure ${filePath} doesn't contain any '+' in its filename other than its first letter`
|
|
872
|
-
)
|
|
873
|
-
}
|
|
874
|
-
*/
|
|
875
756
|
// Show error message upon unknown config
|
|
876
|
-
function assertKnownConfigs(
|
|
877
|
-
const configDefinitionsAll = getConfigDefinitions(
|
|
757
|
+
function assertKnownConfigs(plusFilesAll) {
|
|
758
|
+
const configDefinitionsAll = getConfigDefinitions(plusFilesAll);
|
|
878
759
|
const configNamesKnownAll = Object.keys(configDefinitionsAll);
|
|
879
|
-
(0, utils_js_1.objectEntries)(
|
|
880
|
-
const
|
|
881
|
-
const configDefinitionsLocal = getConfigDefinitions(
|
|
760
|
+
(0, utils_js_1.objectEntries)(plusFilesAll).forEach(([locationId, plusFiles]) => {
|
|
761
|
+
const plusFilesRelevant = getPlusFilesRelevant(plusFilesAll, locationId);
|
|
762
|
+
const configDefinitionsLocal = getConfigDefinitions(plusFilesRelevant);
|
|
882
763
|
const configNamesKnownLocal = Object.keys(configDefinitionsLocal);
|
|
883
|
-
|
|
884
|
-
const configNames = getDefiningConfigNames(
|
|
764
|
+
plusFiles.forEach((plusFile) => {
|
|
765
|
+
const configNames = getDefiningConfigNames(plusFile);
|
|
885
766
|
configNames.forEach((configName) => {
|
|
886
|
-
assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal,
|
|
767
|
+
assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, plusFile);
|
|
887
768
|
(0, utils_js_1.assert)(configNamesKnownLocal.includes(configName));
|
|
888
769
|
(0, utils_js_1.assert)(configNamesKnownAll.includes(configName));
|
|
889
770
|
});
|
|
890
771
|
});
|
|
891
772
|
});
|
|
892
773
|
}
|
|
893
|
-
function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal,
|
|
774
|
+
function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, plusFile) {
|
|
894
775
|
if (configNamesKnownLocal.includes(configName))
|
|
895
776
|
return;
|
|
896
777
|
const configNameColored = picocolors_1.default.cyan(configName);
|
|
897
|
-
const { locationId, filePath: { filePathToShowToUser } } =
|
|
778
|
+
const { locationId, filePath: { filePathToShowToUser } } = plusFile;
|
|
898
779
|
const errMsg = `${filePathToShowToUser} sets an unknown config ${configNameColored}`;
|
|
899
780
|
// Inheritance issue: config is known but isn't defined at `locationId`
|
|
900
781
|
if (configNamesKnownAll.includes(configName)) {
|
|
@@ -984,9 +865,6 @@ function determineIsErrorPage(routeFilesystem) {
|
|
|
984
865
|
(0, utils_js_1.assertPosixPath)(routeFilesystem);
|
|
985
866
|
return routeFilesystem.split('/').includes('_error');
|
|
986
867
|
}
|
|
987
|
-
function isVikeConfigFile(filePath) {
|
|
988
|
-
return !!getConfigName(filePath);
|
|
989
|
-
}
|
|
990
868
|
function getConfigEnvValue(val, errMsgIntro) {
|
|
991
869
|
const errInvalidValue = `${errMsgIntro} an invalid value ${picocolors_1.default.cyan(JSON.stringify(val))}`;
|
|
992
870
|
// Legacy outdated values
|
|
@@ -1026,29 +904,13 @@ function getConfigEnvValue(val, errMsgIntro) {
|
|
|
1026
904
|
function getConfigDefinitionOptional(configDefinitions, configName) {
|
|
1027
905
|
return configDefinitions[configName] ?? null;
|
|
1028
906
|
}
|
|
1029
|
-
function
|
|
1030
|
-
|
|
1031
|
-
// Make order deterministic (no other purpose)
|
|
1032
|
-
.sort(([, [source1]], [, [source2]]) => source1.definedAtFilePath.filePathAbsoluteVite < source2.definedAtFilePath.filePathAbsoluteVite ? -1 : 1)
|
|
1033
|
-
// Sort after whether the config value was defined by an npm package
|
|
1034
|
-
.sort((0, utils_js_1.makeFirst)(([, [source]]) => {
|
|
1035
|
-
const { importPathAbsolute } = source.definedAtFilePath;
|
|
1036
|
-
return (!!importPathAbsolute &&
|
|
1037
|
-
(0, utils_js_1.isNpmPackageImport)(importPathAbsolute, {
|
|
1038
|
-
// Vike config files don't support path aliases. (If they do one day, then Vike will/should be able to resolve path aliases.)
|
|
1039
|
-
cannotBePathAlias: true
|
|
1040
|
-
}));
|
|
1041
|
-
}))
|
|
1042
|
-
// Sort after the filesystem inheritance of the config value
|
|
1043
|
-
.sort(([, [source1]], [, [source2]]) => (0, utils_js_1.reverse)((0, filesystemRouting_js_1.sortAfterInheritanceOrder)(source1.locationId, source2.locationId, locationIdPage))));
|
|
1044
|
-
}
|
|
1045
|
-
function getConfVal(interfaceFile, configName) {
|
|
1046
|
-
const configNames = getDefiningConfigNames(interfaceFile);
|
|
907
|
+
function getConfVal(plusFile, configName) {
|
|
908
|
+
const configNames = getDefiningConfigNames(plusFile);
|
|
1047
909
|
if (!configNames.includes(configName))
|
|
1048
910
|
return null;
|
|
1049
|
-
if (
|
|
911
|
+
if (plusFile.isNotLoaded)
|
|
1050
912
|
return { configValueLoaded: false };
|
|
1051
|
-
const confVal = { configValue:
|
|
913
|
+
const confVal = { configValue: plusFile.fileExportsByConfigName[configName], configValueLoaded: true };
|
|
1052
914
|
return confVal;
|
|
1053
915
|
}
|
|
1054
916
|
function resolveConfigEnv(configEnv, filePath) {
|