vike 0.4.220-commit-5c7810f → 0.4.220-commit-af5c91f
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/node/api/utils.js +1 -1
- package/dist/cjs/node/plugin/index.js +1 -1
- package/dist/cjs/node/plugin/onLoad.js +1 -1
- package/dist/cjs/node/plugin/plugins/buildConfig/fixServerAssets.js +5 -3
- package/dist/cjs/node/plugin/plugins/buildConfig.js +7 -5
- package/dist/cjs/node/plugin/plugins/buildEntry/index.js +2 -1
- package/dist/cjs/node/plugin/plugins/commonConfig.js +1 -2
- package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +3 -2
- package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +10 -8
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +32 -41
- 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 +281 -313
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +2 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +7 -6
- package/dist/cjs/node/plugin/plugins/packageJsonFile.js +2 -2
- package/dist/cjs/node/plugin/plugins/previewConfig.js +4 -3
- package/dist/cjs/node/plugin/plugins/setGlobalContext.js +2 -1
- package/dist/cjs/node/plugin/shared/findPageFiles.js +2 -1
- package/dist/cjs/node/plugin/{getOutDirs.js → shared/getOutDirs.js} +24 -27
- 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 +0 -1
- package/dist/cjs/node/prerender/context.js +8 -3
- package/dist/cjs/node/prerender/resolvePrerenderConfig.js +26 -5
- package/dist/cjs/node/prerender/runPrerender.js +6 -11
- package/dist/cjs/node/prerender/utils.js +1 -2
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +9 -4
- package/dist/cjs/node/runtime/renderPage/getEarlyHints.js +2 -27
- package/dist/cjs/node/runtime/renderPage/isFontFallback.js +29 -0
- package/dist/cjs/node/runtime/utils.js +1 -3
- 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/page-configs/serialize/serializeConfigValues.js +69 -18
- package/dist/cjs/shared/utils.js +0 -1
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/findFile.js +3 -3
- package/dist/cjs/utils/isDev.js +2 -5
- package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +2 -2
- package/dist/cjs/utils/path.js +48 -0
- package/dist/cjs/utils/requireResolve.js +3 -3
- package/dist/esm/node/api/utils.d.ts +1 -1
- package/dist/esm/node/api/utils.js +1 -1
- package/dist/esm/node/plugin/index.js +1 -1
- package/dist/esm/node/plugin/onLoad.js +1 -1
- package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.js +3 -1
- package/dist/esm/node/plugin/plugins/buildConfig.js +3 -1
- package/dist/esm/node/plugin/plugins/buildEntry/index.js +2 -1
- package/dist/esm/node/plugin/plugins/commonConfig.js +2 -3
- package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +2 -1
- package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -1
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +9 -7
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.d.ts +14 -11
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/loadFileAtConfigTime.js +35 -44
- 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 +8 -6
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +284 -316
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigValuesAll.js +2 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +7 -6
- package/dist/esm/node/plugin/plugins/packageJsonFile.js +1 -1
- package/dist/esm/node/plugin/plugins/previewConfig.js +2 -1
- package/dist/esm/node/plugin/plugins/setGlobalContext.js +2 -1
- package/dist/esm/node/plugin/shared/findPageFiles.js +2 -1
- package/dist/esm/node/plugin/{getOutDirs.js → shared/getOutDirs.js} +2 -5
- package/dist/esm/node/plugin/{resolveClientEntriesDev.js → shared/resolveClientEntriesDev.js} +5 -8
- 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 +0 -1
- package/dist/esm/node/prerender/context.d.ts +2 -0
- package/dist/esm/node/prerender/context.js +8 -3
- package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +8 -1
- package/dist/esm/node/prerender/resolvePrerenderConfig.js +26 -5
- package/dist/esm/node/prerender/runPrerender.js +7 -12
- package/dist/esm/node/prerender/utils.d.ts +1 -2
- package/dist/esm/node/prerender/utils.js +1 -2
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +9 -4
- package/dist/esm/node/runtime/renderPage/getEarlyHints.js +1 -26
- package/dist/esm/node/runtime/renderPage/getPageAssets.d.ts +1 -1
- 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/utils.d.ts +1 -3
- package/dist/esm/node/runtime/utils.js +1 -3
- 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/page-configs/PageConfig.d.ts +0 -1
- 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/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/findFile.js +1 -1
- package/dist/esm/utils/isDev.js +3 -6
- package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +1 -1
- 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 +1 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/addImportStatement.js +0 -29
- package/dist/cjs/shared/assertPageFilePath.js +0 -11
- package/dist/cjs/utils/path-shim.js +0 -19
- package/dist/cjs/utils/toPosixPath.js +0 -18
- 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/shared/assertPageFilePath.d.ts +0 -2
- package/dist/esm/shared/assertPageFilePath.js +0 -9
- package/dist/esm/utils/path-shim.d.ts +0 -2
- package/dist/esm/utils/path-shim.js +0 -17
- package/dist/esm/utils/toPosixPath.d.ts +0 -4
- package/dist/esm/utils/toPosixPath.js +0 -16
- /package/dist/esm/node/plugin/{getOutDirs.d.ts → shared/getOutDirs.d.ts} +0 -0
- /package/dist/esm/node/plugin/{resolveClientEntriesDev.d.ts → shared/resolveClientEntriesDev.d.ts} +0 -0
- /package/dist/esm/{utils → node/plugin/shared}/viteIsSSR.d.ts +0 -0
|
@@ -11,7 +11,6 @@ exports.isVikeConfigFile = isVikeConfigFile;
|
|
|
11
11
|
exports.isV1Design = isV1Design;
|
|
12
12
|
exports.getConfVal = getConfVal;
|
|
13
13
|
exports.getConfigDefinitionOptional = getConfigDefinitionOptional;
|
|
14
|
-
exports.shouldBeLoadableAtBuildTime = shouldBeLoadableAtBuildTime;
|
|
15
14
|
const utils_js_1 = require("../../../utils.js");
|
|
16
15
|
const path_1 = __importDefault(require("path"));
|
|
17
16
|
const configDefinitionsBuiltIn_js_1 = require("./getVikeConfig/configDefinitionsBuiltIn.js");
|
|
@@ -32,8 +31,6 @@ const getConfigValueBuildTime_js_1 = require("../../../../../shared/page-configs
|
|
|
32
31
|
const assertExtensions_js_1 = require("./assertExtensions.js");
|
|
33
32
|
const getPageConfigUserFriendly_js_1 = require("../../../../../shared/page-configs/getPageConfigUserFriendly.js");
|
|
34
33
|
const serializeConfigValues_js_1 = require("../../../../../shared/page-configs/serialize/serializeConfigValues.js");
|
|
35
|
-
const configDefinitionsBuiltIn = getConfigDefinitionsBuiltIn();
|
|
36
|
-
const configDefinitionsBuiltInGlobal = getConfigDefinitionsBuiltInGlobal();
|
|
37
34
|
(0, utils_js_1.assertIsNotProductionRuntime)();
|
|
38
35
|
let restartVite = false;
|
|
39
36
|
let wasConfigInvalid = null;
|
|
@@ -45,7 +42,6 @@ function reloadVikeConfig(config) {
|
|
|
45
42
|
const vikeVitePluginOptions = config._vikeVitePluginOptions;
|
|
46
43
|
(0, utils_js_1.assert)(vikeVitePluginOptions);
|
|
47
44
|
vikeConfigDependencies.clear();
|
|
48
|
-
(0, resolvePointerImport_js_1.clearFilesEnvMap)();
|
|
49
45
|
vikeConfigPromise = loadVikeConfig_withErrorHandling(userRootDir, true, vikeVitePluginOptions);
|
|
50
46
|
handleReloadSideEffects();
|
|
51
47
|
}
|
|
@@ -104,7 +100,7 @@ async function isV1Design(config) {
|
|
|
104
100
|
const isV1Design = pageConfigs.length > 0;
|
|
105
101
|
return isV1Design;
|
|
106
102
|
}
|
|
107
|
-
async function loadInterfaceFiles(userRootDir) {
|
|
103
|
+
async function loadInterfaceFiles(userRootDir, esbuildCache) {
|
|
108
104
|
const plusFiles = await findPlusFiles(userRootDir, null);
|
|
109
105
|
const configFiles = [];
|
|
110
106
|
const valueFiles = [];
|
|
@@ -122,10 +118,10 @@ async function loadInterfaceFiles(userRootDir) {
|
|
|
122
118
|
...configFiles.map(async (filePath) => {
|
|
123
119
|
const { filePathAbsoluteUserRootDir } = filePath;
|
|
124
120
|
(0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
|
|
125
|
-
const { configFile, extendsConfigs } = await (0, loadFileAtConfigTime_js_1.loadConfigFile)(filePath, userRootDir, [], false);
|
|
121
|
+
const { configFile, extendsConfigs } = await (0, loadFileAtConfigTime_js_1.loadConfigFile)(filePath, userRootDir, [], false, esbuildCache);
|
|
126
122
|
(0, utils_js_1.assert)(filePath.filePathAbsoluteUserRootDir);
|
|
127
123
|
const locationId = (0, filesystemRouting_js_1.getLocationId)(filePathAbsoluteUserRootDir);
|
|
128
|
-
const interfaceFile = getInterfaceFileFromConfigFile(configFile, false, locationId);
|
|
124
|
+
const interfaceFile = getInterfaceFileFromConfigFile(configFile, false, locationId, userRootDir);
|
|
129
125
|
interfaceFilesAll[locationId] = interfaceFilesAll[locationId] ?? [];
|
|
130
126
|
interfaceFilesAll[locationId].push(interfaceFile);
|
|
131
127
|
extendsConfigs.forEach((extendsConfig) => {
|
|
@@ -145,7 +141,7 @@ async function loadInterfaceFiles(userRootDir) {
|
|
|
145
141
|
export default { extends: [vikeReact] }
|
|
146
142
|
```
|
|
147
143
|
*/
|
|
148
|
-
const interfaceFile = getInterfaceFileFromConfigFile(extendsConfig, true, locationId);
|
|
144
|
+
const interfaceFile = getInterfaceFileFromConfigFile(extendsConfig, true, locationId, userRootDir);
|
|
149
145
|
(0, assertExtensions_js_1.assertExtensionsConventions)(interfaceFile);
|
|
150
146
|
interfaceFilesAll[locationId].push(interfaceFile);
|
|
151
147
|
});
|
|
@@ -162,7 +158,7 @@ async function loadInterfaceFiles(userRootDir) {
|
|
|
162
158
|
filePath,
|
|
163
159
|
isConfigFile: false,
|
|
164
160
|
isValueFile: true,
|
|
165
|
-
|
|
161
|
+
isValueFileLoaded: false,
|
|
166
162
|
configName
|
|
167
163
|
};
|
|
168
164
|
interfaceFilesAll[locationId] = interfaceFilesAll[locationId] ?? [];
|
|
@@ -170,45 +166,40 @@ async function loadInterfaceFiles(userRootDir) {
|
|
|
170
166
|
// We don't have access to the custom config definitions defined by the user yet.
|
|
171
167
|
// - If `configDef` is `undefined` => we load the file +{configName}.js later.
|
|
172
168
|
// - We already need to load +meta.js here (to get the custom config definitions defined by the user)
|
|
173
|
-
await (0, loadFileAtConfigTime_js_1.loadValueFile)(interfaceFile,
|
|
169
|
+
await (0, loadFileAtConfigTime_js_1.loadValueFile)(interfaceFile, configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll, userRootDir, esbuildCache);
|
|
174
170
|
})
|
|
175
171
|
]);
|
|
176
|
-
|
|
172
|
+
assertKnownConfigs(interfaceFilesAll);
|
|
177
173
|
return interfaceFilesAll;
|
|
178
174
|
}
|
|
179
|
-
function getInterfaceFileFromConfigFile(configFile,
|
|
175
|
+
function getInterfaceFileFromConfigFile(configFile, isConfigExtension, locationId, userRootDir) {
|
|
180
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
|
+
});
|
|
181
190
|
const interfaceFile = {
|
|
182
191
|
locationId,
|
|
183
192
|
filePath,
|
|
184
|
-
fileExportsByConfigName
|
|
193
|
+
fileExportsByConfigName,
|
|
194
|
+
pointerImportsByConfigName,
|
|
185
195
|
isConfigFile: true,
|
|
186
196
|
isValueFile: false,
|
|
187
|
-
|
|
188
|
-
|
|
197
|
+
isValueFileLoaded: true,
|
|
198
|
+
isConfigExtension,
|
|
189
199
|
extendsFilePaths
|
|
190
200
|
};
|
|
191
|
-
const fileExport = (0, getConfigFileExport_js_1.getConfigFileExport)(fileExports, filePath.filePathToShowToUser);
|
|
192
|
-
Object.entries(fileExport).forEach(([configName, configValue]) => {
|
|
193
|
-
interfaceFile.fileExportsByConfigName[configName] = configValue;
|
|
194
|
-
});
|
|
195
201
|
return interfaceFile;
|
|
196
202
|
}
|
|
197
|
-
/** Show error message upon unknown config */
|
|
198
|
-
function assertAllConfigsAreKnown(interfaceFilesAll) {
|
|
199
|
-
(0, utils_js_1.objectEntries)(interfaceFilesAll).forEach(([locationId, interfaceFiles]) => {
|
|
200
|
-
const interfaceFilesRelevant = getInterfaceFilesRelevant(interfaceFilesAll, locationId);
|
|
201
|
-
const configDefinitions = getConfigDefinitions(interfaceFilesRelevant);
|
|
202
|
-
interfaceFiles.forEach((interfaceFile) => {
|
|
203
|
-
const configNamesKnown = Object.keys(configDefinitions);
|
|
204
|
-
const { filePathToShowToUser } = interfaceFile.filePath;
|
|
205
|
-
const configNames = getDefiningConfigNames(interfaceFile);
|
|
206
|
-
configNames.forEach((configName) => {
|
|
207
|
-
assertConfigExists(configName, configNamesKnown, filePathToShowToUser);
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
203
|
async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError) {
|
|
213
204
|
let hasError = false;
|
|
214
205
|
let ret;
|
|
@@ -243,7 +234,6 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
|
|
|
243
234
|
pageConfigs: [],
|
|
244
235
|
pageConfigGlobal: {
|
|
245
236
|
configDefinitions: {},
|
|
246
|
-
interfaceFiles: {},
|
|
247
237
|
configValueSources: {}
|
|
248
238
|
},
|
|
249
239
|
global: (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendlyNew)({ configValues: {} })
|
|
@@ -253,9 +243,10 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
|
|
|
253
243
|
}
|
|
254
244
|
}
|
|
255
245
|
async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
const
|
|
246
|
+
const esbuildCache = {};
|
|
247
|
+
const interfaceFilesAll = await loadInterfaceFiles(userRootDir, esbuildCache);
|
|
248
|
+
const configDefinitionsResolved = await resolveConfigDefinitions(interfaceFilesAll, userRootDir, esbuildCache);
|
|
249
|
+
const { pageConfigGlobal, pageConfigs } = getPageConfigs(configDefinitionsResolved, interfaceFilesAll, userRootDir);
|
|
259
250
|
// interop vike(options) in vite.config.js
|
|
260
251
|
temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
|
|
261
252
|
// global
|
|
@@ -263,183 +254,140 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
263
254
|
const global = (0, getPageConfigUserFriendly_js_1.getPageConfigUserFriendlyNew)({ configValues });
|
|
264
255
|
return { pageConfigs, pageConfigGlobal, global };
|
|
265
256
|
}
|
|
266
|
-
async function
|
|
267
|
-
|
|
268
|
-
//
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
false,
|
|
286
|
-
[
|
|
287
|
-
`${interfaceFile.filePath.filePathToShowToUser} defines the config ${pc.cyan(
|
|
288
|
-
configName
|
|
289
|
-
)} which is global:`,
|
|
290
|
-
globalPaths.length
|
|
291
|
-
? `define ${pc.cyan(configName)} in ${joinEnglish(globalPaths, 'or')} instead`
|
|
292
|
-
: `create a global config (e.g. /pages/+config.js) and define ${pc.cyan(configName)} there instead`
|
|
293
|
-
].join(' ')
|
|
294
|
-
)
|
|
295
|
-
}
|
|
296
|
-
})
|
|
297
|
-
})
|
|
298
|
-
})
|
|
299
|
-
}
|
|
300
|
-
//*/
|
|
301
|
-
}
|
|
302
|
-
function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir) {
|
|
303
|
-
(0, utils_js_1.assert)((0, utils_js_1.isObject)(vikeVitePluginOptions));
|
|
304
|
-
(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 });
|
|
305
|
-
Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
|
|
306
|
-
var _a;
|
|
307
|
-
(0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltInGlobal), configName));
|
|
308
|
-
const configDef = configDefinitionsBuiltInGlobal[configName];
|
|
309
|
-
const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
|
|
310
|
-
sources.push({
|
|
311
|
-
value,
|
|
312
|
-
configEnv: configDef.env,
|
|
313
|
-
definedAtFilePath: {
|
|
314
|
-
...(0, getFilePath_js_1.getFilePathResolved)({
|
|
315
|
-
userRootDir,
|
|
316
|
-
filePathAbsoluteUserRootDir: '/vite.config.js'
|
|
317
|
-
}),
|
|
318
|
-
fileExportPathToShowToUser: null
|
|
319
|
-
},
|
|
320
|
-
locationId: '/',
|
|
321
|
-
interfaceFile: null,
|
|
322
|
-
isOverriden: configDef.cumulative ? false : sources.length > 0,
|
|
323
|
-
valueIsImportedAtRuntime: false,
|
|
324
|
-
valueIsDefinedByPlusFile: false
|
|
325
|
-
});
|
|
326
|
-
});
|
|
257
|
+
async function resolveConfigDefinitions(interfaceFilesAll, userRootDir, esbuildCache) {
|
|
258
|
+
const configDefinitionsGlobal = getConfigDefinitions(
|
|
259
|
+
// We use `interfaceFilesAll` in order to allow local Vike extensions to create global configs.
|
|
260
|
+
interfaceFilesAll, // TODO/now sort
|
|
261
|
+
(configDef) => !!configDef.global);
|
|
262
|
+
await loadCustomConfigBuildTimeFiles(interfaceFilesAll, configDefinitionsGlobal, userRootDir, esbuildCache);
|
|
263
|
+
const configDefinitionsLocal = {};
|
|
264
|
+
await Promise.all((0, utils_js_1.objectEntries)(interfaceFilesAll).map(async ([locationId, interfaceFiles]) => {
|
|
265
|
+
const interfaceFilesRelevant = getInterfaceFilesRelevant(interfaceFilesAll, locationId);
|
|
266
|
+
// configDefinitions = getConfigDefinitions(interfaceFilesRelevant, (configDef) => configDef.global !== true) // TODO/now
|
|
267
|
+
const configDefinitions = getConfigDefinitions(interfaceFilesRelevant);
|
|
268
|
+
await loadCustomConfigBuildTimeFiles(interfaceFiles, configDefinitions, userRootDir, esbuildCache);
|
|
269
|
+
configDefinitionsLocal[locationId] = { configDefinitions, interfaceFiles, interfaceFilesRelevant };
|
|
270
|
+
}));
|
|
271
|
+
const configDefinitionsResolved = {
|
|
272
|
+
configDefinitionsGlobal,
|
|
273
|
+
configDefinitionsLocal
|
|
274
|
+
};
|
|
275
|
+
return configDefinitionsResolved;
|
|
327
276
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
277
|
+
// Load value files (with `env.config===true`) of *custom* configs.
|
|
278
|
+
// - The value files of *built-in* configs are already loaded at `loadInterfaceFiles()`.
|
|
279
|
+
async function loadCustomConfigBuildTimeFiles(interfaceFiles, configDefinitions, userRootDir, esbuildCache) {
|
|
280
|
+
const interfaceFileList = Object.values(interfaceFiles).flat(1);
|
|
281
|
+
await Promise.all(interfaceFileList.map(async (interfaceFile) => {
|
|
282
|
+
if (interfaceFile.isValueFile) {
|
|
283
|
+
await (0, loadFileAtConfigTime_js_1.loadValueFile)(interfaceFile, configDefinitions, userRootDir, esbuildCache);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
await Promise.all(Object.entries(interfaceFile.pointerImportsByConfigName).map(async ([configName, pointerImport]) => {
|
|
287
|
+
await (0, loadFileAtConfigTime_js_1.loadPointerImport)(pointerImport, userRootDir, configName, configDefinitions, esbuildCache);
|
|
288
|
+
}));
|
|
289
|
+
}
|
|
332
290
|
}));
|
|
291
|
+
}
|
|
292
|
+
function getPageConfigs(configDefinitionsResolved, interfaceFilesAll, userRootDir) {
|
|
333
293
|
const pageConfigGlobal = {
|
|
334
|
-
configDefinitions:
|
|
335
|
-
interfaceFiles: interfaceFilesGlobal,
|
|
294
|
+
configDefinitions: configDefinitionsResolved.configDefinitionsGlobal,
|
|
336
295
|
configValueSources: {}
|
|
337
296
|
};
|
|
338
|
-
|
|
339
|
-
const sources =
|
|
340
|
-
|
|
341
|
-
|
|
297
|
+
(0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsGlobal).forEach(([configName, configDef]) => {
|
|
298
|
+
const sources = resolveConfigValueSources(configName, configDef,
|
|
299
|
+
// We use `interfaceFilesAll` in order to allow local Vike extensions to set the value of global configs (e.g. `vite`).
|
|
300
|
+
interfaceFilesAll, // TODO/now check sort order
|
|
301
|
+
userRootDir, true);
|
|
302
|
+
if (sources.length === 0)
|
|
342
303
|
return;
|
|
343
304
|
pageConfigGlobal.configValueSources[configName] = sources;
|
|
344
|
-
})
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
// - The value files of *built-in* configs are already loaded at `loadInterfaceFiles()`.
|
|
351
|
-
await (0, loadFileAtConfigTime_js_1.loadValueFiles)(interfaceFilesRelevant, configDefinitions, userRootDir);
|
|
305
|
+
});
|
|
306
|
+
assertPageConfigGlobal(pageConfigGlobal, interfaceFilesAll);
|
|
307
|
+
const pageConfigs = (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal)
|
|
308
|
+
.filter(([_locationId, { interfaceFiles }]) => isDefiningPage(interfaceFiles))
|
|
309
|
+
.map(([locationId, { configDefinitions, interfaceFilesRelevant }]) => {
|
|
310
|
+
const configDefinitionsLocal = configDefinitions;
|
|
352
311
|
let configValueSources = {};
|
|
353
|
-
|
|
354
|
-
.filter(([
|
|
355
|
-
.
|
|
356
|
-
const sources =
|
|
312
|
+
(0, utils_js_1.objectEntries)(configDefinitionsLocal)
|
|
313
|
+
.filter(([_configName, configDef]) => configDef.global !== true)
|
|
314
|
+
.forEach(([configName, configDef]) => {
|
|
315
|
+
const sources = resolveConfigValueSources(configName, configDef, interfaceFilesRelevant, userRootDir, false);
|
|
357
316
|
if (sources.length === 0)
|
|
358
317
|
return;
|
|
318
|
+
// assertUsage(!isGlobalConfig(configName, configDefinitionsLocal, sources), 'TODO') // TODO/now
|
|
359
319
|
configValueSources[configName] = sources;
|
|
360
|
-
})
|
|
320
|
+
});
|
|
361
321
|
configValueSources = sortConfigValueSources(configValueSources, locationId);
|
|
362
322
|
const { routeFilesystem, isErrorPage } = determineRouteFilesystem(locationId, configValueSources);
|
|
363
|
-
applyEffectsAll(configValueSources,
|
|
364
|
-
const configValuesComputed = getComputed(configValueSources,
|
|
323
|
+
applyEffectsAll(configValueSources, configDefinitionsLocal);
|
|
324
|
+
const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
|
|
365
325
|
const pageConfig = {
|
|
366
326
|
pageId: locationId,
|
|
367
327
|
isErrorPage,
|
|
368
328
|
routeFilesystem,
|
|
369
|
-
configDefinitions,
|
|
329
|
+
configDefinitions: configDefinitionsLocal,
|
|
370
330
|
interfaceFiles: interfaceFilesRelevant,
|
|
371
331
|
configValueSources,
|
|
372
332
|
configValuesComputed
|
|
373
333
|
};
|
|
374
|
-
|
|
375
|
-
})
|
|
376
|
-
assertPageConfigs(pageConfigs
|
|
334
|
+
return pageConfig;
|
|
335
|
+
});
|
|
336
|
+
assertPageConfigs(pageConfigs);
|
|
377
337
|
return { pageConfigs, pageConfigGlobal };
|
|
378
338
|
}
|
|
379
|
-
function
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
339
|
+
function assertPageConfigGlobal(pageConfigGlobal, interfaceFilesAll) {
|
|
340
|
+
Object.entries(pageConfigGlobal.configValueSources).forEach(([configName, sources]) => {
|
|
341
|
+
assertGlobalConfigLocation(configName, sources, interfaceFilesAll, pageConfigGlobal.configDefinitions);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
function assertGlobalConfigLocation(configName, sources, interfaceFilesAll, configDefinitionsGlobal) {
|
|
345
|
+
const locationIdsAll = (0, utils_js_1.objectKeys)(interfaceFilesAll);
|
|
346
|
+
// Determine existing global +config.js files
|
|
347
|
+
const configFilePathsGlobal = [];
|
|
348
|
+
const interfaceFilesGlobal = Object.values((0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(interfaceFilesAll).filter(([locationId]) => (0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIdsAll)))).flat();
|
|
349
|
+
interfaceFilesGlobal
|
|
350
|
+
.filter((i) => i.isConfigFile)
|
|
351
|
+
.forEach((interfaceFile) => {
|
|
352
|
+
const { filePathAbsoluteUserRootDir } = interfaceFile.filePath;
|
|
353
|
+
if (filePathAbsoluteUserRootDir) {
|
|
354
|
+
configFilePathsGlobal.push(filePathAbsoluteUserRootDir);
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
// Call assertWarning()
|
|
358
|
+
sources.forEach((source) => {
|
|
359
|
+
const { interfaceFile } = source;
|
|
360
|
+
// It's `null` when the config is defined by `vike(options)` in vite.config.js
|
|
361
|
+
(0, utils_js_1.assert)(interfaceFile);
|
|
362
|
+
const { filePathAbsoluteUserRootDir } = interfaceFile.filePath;
|
|
363
|
+
// Allow local Vike extensions to set gloabl configs (`filePathAbsoluteUserRootDir===null` for Vike extension)
|
|
364
|
+
if (!filePathAbsoluteUserRootDir)
|
|
365
|
+
return;
|
|
366
|
+
(0, utils_js_1.assert)(!interfaceFile.isConfigExtension);
|
|
367
|
+
if (!(0, filesystemRouting_js_1.isGlobalLocation)(source.locationId, locationIdsAll)) {
|
|
368
|
+
const configDef = configDefinitionsGlobal[configName];
|
|
369
|
+
(0, utils_js_1.assert)(configDef);
|
|
370
|
+
const isConditionallyGlobal = (0, utils_js_1.isCallable)(configDef.global);
|
|
371
|
+
const errBeg = `${filePathAbsoluteUserRootDir} (which is a local config file) sets the config ${picocolors_1.default.cyan(configName)}`;
|
|
372
|
+
const errMid = !isConditionallyGlobal
|
|
373
|
+
? "but it's a global config"
|
|
374
|
+
: 'to a value that is global';
|
|
375
|
+
const what = isConditionallyGlobal ? 'global values' : picocolors_1.default.cyan(configName);
|
|
376
|
+
const errEnd = configFilePathsGlobal.length > 0
|
|
377
|
+
? `define ${what} at a global config file such as ${(0, utils_js_1.joinEnglish)(configFilePathsGlobal, 'or')} instead`
|
|
378
|
+
: `create a global config file (e.g. /pages/+config.js) and define ${what} there instead`;
|
|
379
|
+
// When updating this error message => also update error message at https://vike.dev/warning/global-config
|
|
380
|
+
const errMsg = `${errBeg} ${errMid}: ${errEnd} (https://vike.dev/warning/global-config).`;
|
|
381
|
+
(0, utils_js_1.assertWarning)(false, errMsg, { onlyOnce: true });
|
|
384
382
|
}
|
|
385
383
|
});
|
|
386
|
-
return Array.from(locationIds);
|
|
387
384
|
}
|
|
388
|
-
function assertPageConfigs(pageConfigs
|
|
385
|
+
function assertPageConfigs(pageConfigs) {
|
|
389
386
|
pageConfigs.forEach((pageConfig) => {
|
|
390
|
-
assertGlobalConfigs(pageConfig, interfaceFilesAll);
|
|
391
387
|
(0, assertExtensions_js_1.assertExtensionsRequire)(pageConfig);
|
|
392
388
|
assertOnBeforeRenderEnv(pageConfig);
|
|
393
389
|
});
|
|
394
390
|
}
|
|
395
|
-
// TODO/now: refactor
|
|
396
|
-
// - Dedupe: most of the assertGlobalConfigs() code below is a copy-paste of the assertUsage() logic inside getGlobalConfigs()
|
|
397
|
-
// - This assertUsage() message is slightly better: use this one for getGlobalConfigs()
|
|
398
|
-
// Global configs should be defined at global locations
|
|
399
|
-
function assertGlobalConfigs(pageConfig, interfaceFilesAll) {
|
|
400
|
-
const interfaceFilesRelevantList = Object.values(pageConfig.interfaceFiles).flat(1);
|
|
401
|
-
const { configDefinitions } = pageConfig;
|
|
402
|
-
interfaceFilesRelevantList.forEach((interfaceFile) => {
|
|
403
|
-
const configNames = [];
|
|
404
|
-
if (interfaceFile.isValueFile) {
|
|
405
|
-
configNames.push(interfaceFile.configName);
|
|
406
|
-
}
|
|
407
|
-
else {
|
|
408
|
-
configNames.push(...Object.keys(interfaceFile.fileExportsByConfigName));
|
|
409
|
-
}
|
|
410
|
-
configNames.forEach((configName) => {
|
|
411
|
-
if (isGlobalConfigOld(configName))
|
|
412
|
-
return;
|
|
413
|
-
const configDef = getConfigDefinition(configDefinitions, configName, interfaceFile.filePath.filePathToShowToUser);
|
|
414
|
-
if (configDef.global === true) {
|
|
415
|
-
const locationIds = (0, utils_js_1.objectKeys)(interfaceFilesAll);
|
|
416
|
-
if (!(0, filesystemRouting_js_1.isGlobalLocation)(interfaceFile.locationId, locationIds)) {
|
|
417
|
-
const interfaceFilesGlobal = (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(interfaceFilesAll).filter(([locationId]) => {
|
|
418
|
-
return (0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds);
|
|
419
|
-
}));
|
|
420
|
-
const configFilesGlobal = [];
|
|
421
|
-
(0, utils_js_1.objectEntries)(interfaceFilesGlobal).forEach(([locationId, interfaceFiles]) => {
|
|
422
|
-
(0, utils_js_1.assert)((0, filesystemRouting_js_1.isGlobalLocation)(locationId, locationIds));
|
|
423
|
-
interfaceFiles.forEach((interfaceFile) => {
|
|
424
|
-
if (!interfaceFile.isConfigFile)
|
|
425
|
-
return;
|
|
426
|
-
const { filePath: { filePathAbsoluteUserRootDir } } = interfaceFile;
|
|
427
|
-
if (filePathAbsoluteUserRootDir) {
|
|
428
|
-
configFilesGlobal.push(filePathAbsoluteUserRootDir);
|
|
429
|
-
}
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
(0, utils_js_1.assertUsage)(false, [
|
|
433
|
-
`${interfaceFile.filePath.filePathToShowToUser} sets the config ${picocolors_1.default.cyan(configName)} but it's a global config:`,
|
|
434
|
-
configFilesGlobal.length > 0
|
|
435
|
-
? `define ${picocolors_1.default.cyan(configName)} at ${(0, utils_js_1.joinEnglish)(configFilesGlobal, 'or')} instead.`
|
|
436
|
-
: `create a global config (e.g. /pages/+config.js) and define ${picocolors_1.default.cyan(configName)} there instead.`
|
|
437
|
-
].join(' '));
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
});
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
391
|
function assertOnBeforeRenderEnv(pageConfig) {
|
|
444
392
|
const onBeforeRenderConfig = pageConfig.configValueSources.onBeforeRender?.[0];
|
|
445
393
|
if (!onBeforeRenderConfig)
|
|
@@ -477,6 +425,32 @@ function getConfigValues(pageConfig) {
|
|
|
477
425
|
});
|
|
478
426
|
return configValues;
|
|
479
427
|
}
|
|
428
|
+
function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir) {
|
|
429
|
+
(0, utils_js_1.assert)((0, utils_js_1.isObject)(vikeVitePluginOptions));
|
|
430
|
+
(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
|
+
Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
|
|
432
|
+
var _a;
|
|
433
|
+
(0, utils_js_1.assert)((0, utils_js_1.includes)((0, utils_js_1.objectKeys)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll), configName));
|
|
434
|
+
const configDef = configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll[configName];
|
|
435
|
+
const sources = ((_a = pageConfigGlobal.configValueSources)[configName] ?? (_a[configName] = []));
|
|
436
|
+
sources.push({
|
|
437
|
+
value,
|
|
438
|
+
configEnv: configDef.env,
|
|
439
|
+
definedAtFilePath: {
|
|
440
|
+
...(0, getFilePath_js_1.getFilePathResolved)({
|
|
441
|
+
userRootDir,
|
|
442
|
+
filePathAbsoluteUserRootDir: '/vite.config.js'
|
|
443
|
+
}),
|
|
444
|
+
fileExportPathToShowToUser: null
|
|
445
|
+
},
|
|
446
|
+
locationId: '/',
|
|
447
|
+
interfaceFile: null,
|
|
448
|
+
isOverriden: configDef.cumulative ? false : sources.length > 0,
|
|
449
|
+
valueIsImportedAtRuntime: false,
|
|
450
|
+
valueIsDefinedByPlusFile: false
|
|
451
|
+
});
|
|
452
|
+
});
|
|
453
|
+
}
|
|
480
454
|
function getInterfaceFilesRelevant(interfaceFilesAll, locationIdPage) {
|
|
481
455
|
const interfaceFilesRelevant = Object.fromEntries((0, utils_js_1.objectEntries)(interfaceFilesAll)
|
|
482
456
|
.filter(([locationId]) => {
|
|
@@ -485,8 +459,8 @@ function getInterfaceFilesRelevant(interfaceFilesAll, locationIdPage) {
|
|
|
485
459
|
.sort(([locationId1], [locationId2]) => (0, filesystemRouting_js_1.sortAfterInheritanceOrder)(locationId1, locationId2, locationIdPage)));
|
|
486
460
|
return interfaceFilesRelevant;
|
|
487
461
|
}
|
|
488
|
-
|
|
489
|
-
const
|
|
462
|
+
function resolveConfigValueSources(configName, configDef, interfaceFilesRelevant, userRootDir, isGlobal) {
|
|
463
|
+
const interfaceFilesSource = [];
|
|
490
464
|
// interfaceFilesRelevant is sorted by sortAfterInheritanceOrder()
|
|
491
465
|
for (const interfaceFiles of Object.values(interfaceFilesRelevant)) {
|
|
492
466
|
const interfaceFilesDefiningConfig = interfaceFiles.filter((interfaceFile) => getDefiningConfigNames(interfaceFile).includes(configName));
|
|
@@ -496,15 +470,8 @@ async function resolveConfigValueSources(configName, configDef, interfaceFilesRe
|
|
|
496
470
|
const add = (interfaceFile) => {
|
|
497
471
|
(0, utils_js_1.assert)(!visited.has(interfaceFile));
|
|
498
472
|
visited.add(interfaceFile);
|
|
499
|
-
const isHighestInheritancePrecedence =
|
|
500
|
-
|
|
501
|
-
configName,
|
|
502
|
-
interfaceFile,
|
|
503
|
-
configDef,
|
|
504
|
-
userRootDir,
|
|
505
|
-
importedFilesLoaded,
|
|
506
|
-
isHighestInheritancePrecedence
|
|
507
|
-
]);
|
|
473
|
+
const isHighestInheritancePrecedence = interfaceFilesSource.length === 0;
|
|
474
|
+
interfaceFilesSource.push({ interfaceFile, isHighestInheritancePrecedence });
|
|
508
475
|
};
|
|
509
476
|
// Main resolution logic
|
|
510
477
|
{
|
|
@@ -515,8 +482,8 @@ async function resolveConfigValueSources(configName, configDef, interfaceFilesRe
|
|
|
515
482
|
.sort(makeOrderDeterministic);
|
|
516
483
|
const interfaceConfigFiles = interfaceFilesDefiningConfig
|
|
517
484
|
.filter((interfaceFile) => interfaceFile.isConfigFile &&
|
|
518
|
-
// We consider
|
|
519
|
-
!interfaceFile.
|
|
485
|
+
// We consider values from extensions (e.g. vike-react) later (i.e. with less priority)
|
|
486
|
+
!interfaceFile.isConfigExtension)
|
|
520
487
|
.sort(makeOrderDeterministic);
|
|
521
488
|
const interfaceValueFile = interfaceValueFiles[0];
|
|
522
489
|
const interfaceConfigFile = interfaceConfigFiles[0];
|
|
@@ -544,8 +511,8 @@ async function resolveConfigValueSources(configName, configDef, interfaceFilesRe
|
|
|
544
511
|
});
|
|
545
512
|
// extends
|
|
546
513
|
interfaceFilesDefiningConfig
|
|
547
|
-
.filter((interfaceFile) => interfaceFile.isConfigFile && interfaceFile.
|
|
548
|
-
//
|
|
514
|
+
.filter((interfaceFile) => interfaceFile.isConfigFile && interfaceFile.isConfigExtension)
|
|
515
|
+
// Extension config files are already sorted by inheritance order
|
|
549
516
|
.forEach((interfaceFile) => {
|
|
550
517
|
add(interfaceFile);
|
|
551
518
|
});
|
|
@@ -553,29 +520,24 @@ async function resolveConfigValueSources(configName, configDef, interfaceFilesRe
|
|
|
553
520
|
(0, utils_js_1.assert)(visited.has(interfaceFile));
|
|
554
521
|
});
|
|
555
522
|
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
function makeOrderDeterministic(interfaceFile1, interfaceFile2) {
|
|
560
|
-
return (0, utils_js_1.lowerFirst)((interfaceFile) => {
|
|
561
|
-
const { filePathAbsoluteUserRootDir } = interfaceFile.filePath;
|
|
562
|
-
(0, utils_js_1.assert)(isInterfaceFileUserLand(interfaceFile));
|
|
563
|
-
(0, utils_js_1.assert)(filePathAbsoluteUserRootDir);
|
|
564
|
-
return filePathAbsoluteUserRootDir.length;
|
|
565
|
-
})(interfaceFile1, interfaceFile2);
|
|
566
|
-
}
|
|
567
|
-
function warnOverridenConfigValues(interfaceFileWinner, interfaceFilesOverriden, configName) {
|
|
568
|
-
interfaceFilesOverriden.forEach((interfaceFileLoser) => {
|
|
569
|
-
const loserFilePath = interfaceFileLoser.filePath.filePathToShowToUser;
|
|
570
|
-
const winnerFilePath = interfaceFileWinner.filePath.filePathToShowToUser;
|
|
571
|
-
const confName = picocolors_1.default.cyan(configName);
|
|
572
|
-
(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 });
|
|
523
|
+
let sources = interfaceFilesSource.map(({ interfaceFile, isHighestInheritancePrecedence }) => {
|
|
524
|
+
const configValueSource = getConfigValueSource(configName, interfaceFile, configDef, userRootDir, isHighestInheritancePrecedence);
|
|
525
|
+
return configValueSource;
|
|
573
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;
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
return sources;
|
|
574
539
|
}
|
|
575
|
-
function
|
|
576
|
-
return (interfaceFile.isConfigFile && !interfaceFile.isConfigExtend) || interfaceFile.isValueFile;
|
|
577
|
-
}
|
|
578
|
-
async function getConfigValueSource(configName, interfaceFile, configDef, userRootDir, importedFilesLoaded, isHighestInheritancePrecedence) {
|
|
540
|
+
function getConfigValueSource(configName, interfaceFile, configDef, userRootDir, isHighestInheritancePrecedence) {
|
|
579
541
|
const confVal = getConfVal(interfaceFile, configName);
|
|
580
542
|
(0, utils_js_1.assert)(confVal);
|
|
581
543
|
const configValueSourceCommon = {
|
|
@@ -594,11 +556,11 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
594
556
|
if (interfaceFile.isConfigFile) {
|
|
595
557
|
// Defined over pointer import
|
|
596
558
|
(0, utils_js_1.assert)(confVal.configValueLoaded);
|
|
597
|
-
const
|
|
559
|
+
const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(confVal.configValue, interfaceFile.filePath, userRootDir, configName);
|
|
598
560
|
const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, definedAtFilePath_);
|
|
599
|
-
(0, utils_js_1.assertUsage)(
|
|
600
|
-
valueFilePath =
|
|
601
|
-
definedAtFilePath =
|
|
561
|
+
(0, utils_js_1.assertUsage)(pointerImport, `${configDefinedAt} should be an import`);
|
|
562
|
+
valueFilePath = pointerImport.fileExportPath.filePathAbsoluteVite;
|
|
563
|
+
definedAtFilePath = pointerImport.fileExportPath;
|
|
602
564
|
}
|
|
603
565
|
else {
|
|
604
566
|
// Defined by value file, i.e. +{configName}.js
|
|
@@ -626,28 +588,19 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
626
588
|
(0, utils_js_1.assert)(confVal.configValueLoaded);
|
|
627
589
|
const { configValue } = confVal;
|
|
628
590
|
// Defined over pointer import
|
|
629
|
-
const
|
|
630
|
-
if (
|
|
591
|
+
const pointerImport = interfaceFile.pointerImportsByConfigName[configName];
|
|
592
|
+
if (pointerImport) {
|
|
631
593
|
const configValueSource = {
|
|
632
594
|
...configValueSourceCommon,
|
|
633
|
-
configEnv:
|
|
595
|
+
configEnv: resolveConfigEnv(configDef.env, pointerImport.fileExportPath),
|
|
634
596
|
valueIsImportedAtRuntime: true,
|
|
635
597
|
valueIsDefinedByPlusFile: false,
|
|
636
598
|
isOverriden,
|
|
637
|
-
definedAtFilePath:
|
|
599
|
+
definedAtFilePath: pointerImport.fileExportPath
|
|
638
600
|
};
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
configName !== 'extends') {
|
|
643
|
-
if (resolved.pointerImport.filePathAbsoluteFilesystem) {
|
|
644
|
-
const fileExport = await (0, loadFileAtConfigTime_js_1.loadImportedFile)(resolved.pointerImport, userRootDir, importedFilesLoaded);
|
|
645
|
-
configValueSource.value = fileExport;
|
|
646
|
-
}
|
|
647
|
-
else {
|
|
648
|
-
const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, configValueSource.definedAtFilePath);
|
|
649
|
-
(0, utils_js_1.assertUsage)(!configDef.cumulative, `${configDefinedAt} cannot be defined over an aliased import`);
|
|
650
|
-
}
|
|
601
|
+
if (pointerImport.fileExportValueLoaded) {
|
|
602
|
+
configValueSource.value = pointerImport.fileExportValue;
|
|
603
|
+
(0, utils_js_1.assert)('fileExportValue' in pointerImport);
|
|
651
604
|
}
|
|
652
605
|
return configValueSource;
|
|
653
606
|
}
|
|
@@ -665,7 +618,7 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
665
618
|
}
|
|
666
619
|
// Defined by value file, i.e. +{configName}.js
|
|
667
620
|
if (interfaceFile.isValueFile) {
|
|
668
|
-
const configEnvResolved = (
|
|
621
|
+
const configEnvResolved = resolveConfigEnv(configDef.env, interfaceFile.filePath);
|
|
669
622
|
const valueAlreadyLoaded = confVal.configValueLoaded;
|
|
670
623
|
(0, utils_js_1.assert)(valueAlreadyLoaded === !!configEnvResolved.config);
|
|
671
624
|
const configValueSource = {
|
|
@@ -689,6 +642,25 @@ async function getConfigValueSource(configName, interfaceFile, configDef, userRo
|
|
|
689
642
|
}
|
|
690
643
|
(0, utils_js_1.assert)(false);
|
|
691
644
|
}
|
|
645
|
+
function makeOrderDeterministic(interfaceFile1, interfaceFile2) {
|
|
646
|
+
return (0, utils_js_1.lowerFirst)((interfaceFile) => {
|
|
647
|
+
const { filePathAbsoluteUserRootDir } = interfaceFile.filePath;
|
|
648
|
+
(0, utils_js_1.assert)(isInterfaceFileUserLand(interfaceFile));
|
|
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;
|
|
657
|
+
const confName = picocolors_1.default.cyan(configName);
|
|
658
|
+
(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
|
+
});
|
|
660
|
+
}
|
|
661
|
+
function isInterfaceFileUserLand(interfaceFile) {
|
|
662
|
+
return (interfaceFile.isConfigFile && !interfaceFile.isConfigExtension) || interfaceFile.isValueFile;
|
|
663
|
+
}
|
|
692
664
|
function isDefiningPage(interfaceFiles) {
|
|
693
665
|
for (const interfaceFile of interfaceFiles) {
|
|
694
666
|
const configNames = getDefiningConfigNames(interfaceFile);
|
|
@@ -706,14 +678,15 @@ function getDefiningConfigNames(interfaceFile) {
|
|
|
706
678
|
if (interfaceFile.isValueFile) {
|
|
707
679
|
configNames.push(interfaceFile.configName);
|
|
708
680
|
}
|
|
709
|
-
if (interfaceFile.
|
|
681
|
+
if (interfaceFile.isValueFileLoaded) {
|
|
710
682
|
configNames.push(...Object.keys(interfaceFile.fileExportsByConfigName));
|
|
711
683
|
}
|
|
712
684
|
configNames = (0, utils_js_1.unique)(configNames);
|
|
713
685
|
return configNames;
|
|
714
686
|
}
|
|
715
|
-
function getConfigDefinitions(interfaceFilesRelevant) {
|
|
716
|
-
|
|
687
|
+
function getConfigDefinitions(interfaceFilesRelevant, filter) {
|
|
688
|
+
let configDefinitions = { ...configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll };
|
|
689
|
+
// Add user-land meta configs
|
|
717
690
|
Object.entries(interfaceFilesRelevant)
|
|
718
691
|
.reverse()
|
|
719
692
|
.forEach(([_locationId, interfaceFiles]) => {
|
|
@@ -734,16 +707,18 @@ function getConfigDefinitions(interfaceFilesRelevant) {
|
|
|
734
707
|
fileExportPathToShowToUser: ['default', 'meta', configName, 'effect']
|
|
735
708
|
};
|
|
736
709
|
});
|
|
737
|
-
(0, utils_js_1.objectEntries)(meta).forEach(([configName,
|
|
710
|
+
(0, utils_js_1.objectEntries)(meta).forEach(([configName, configDefinitionUserLand]) => {
|
|
738
711
|
// User can override an existing config definition
|
|
739
|
-
|
|
740
|
-
...
|
|
741
|
-
...
|
|
712
|
+
configDefinitions[configName] = {
|
|
713
|
+
...configDefinitions[configName],
|
|
714
|
+
...configDefinitionUserLand
|
|
742
715
|
};
|
|
743
716
|
});
|
|
744
717
|
});
|
|
745
718
|
});
|
|
746
|
-
|
|
719
|
+
if (filter) {
|
|
720
|
+
configDefinitions = Object.fromEntries(Object.entries(configDefinitions).filter(([_configName, configDef]) => filter(configDef)));
|
|
721
|
+
}
|
|
747
722
|
return configDefinitions;
|
|
748
723
|
}
|
|
749
724
|
function assertMetaUsage(metaVal, metaConfigDefinedAt) {
|
|
@@ -897,10 +872,35 @@ function assertNoUnexpectedPlusSign(filePath: string, fileName: string) {
|
|
|
897
872
|
)
|
|
898
873
|
}
|
|
899
874
|
*/
|
|
900
|
-
|
|
875
|
+
// Show error message upon unknown config
|
|
876
|
+
function assertKnownConfigs(interfaceFilesAll) {
|
|
877
|
+
const configDefinitionsAll = getConfigDefinitions(interfaceFilesAll);
|
|
878
|
+
const configNamesKnownAll = Object.keys(configDefinitionsAll);
|
|
879
|
+
(0, utils_js_1.objectEntries)(interfaceFilesAll).forEach(([locationId, interfaceFiles]) => {
|
|
880
|
+
const interfaceFilesRelevant = getInterfaceFilesRelevant(interfaceFilesAll, locationId);
|
|
881
|
+
const configDefinitionsLocal = getConfigDefinitions(interfaceFilesRelevant);
|
|
882
|
+
const configNamesKnownLocal = Object.keys(configDefinitionsLocal);
|
|
883
|
+
interfaceFiles.forEach((interfaceFile) => {
|
|
884
|
+
const configNames = getDefiningConfigNames(interfaceFile);
|
|
885
|
+
configNames.forEach((configName) => {
|
|
886
|
+
assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, interfaceFile);
|
|
887
|
+
(0, utils_js_1.assert)(configNamesKnownLocal.includes(configName));
|
|
888
|
+
(0, utils_js_1.assert)(configNamesKnownAll.includes(configName));
|
|
889
|
+
});
|
|
890
|
+
});
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
function assertKnownConfig(configName, configNamesKnownAll, configNamesKnownLocal, interfaceFile) {
|
|
894
|
+
if (configNamesKnownLocal.includes(configName))
|
|
895
|
+
return;
|
|
901
896
|
const configNameColored = picocolors_1.default.cyan(configName);
|
|
902
|
-
|
|
903
|
-
|
|
897
|
+
const { locationId, filePath: { filePathToShowToUser } } = interfaceFile;
|
|
898
|
+
const errMsg = `${filePathToShowToUser} sets an unknown config ${configNameColored}`;
|
|
899
|
+
// Inheritance issue: config is known but isn't defined at `locationId`
|
|
900
|
+
if (configNamesKnownAll.includes(configName)) {
|
|
901
|
+
(0, utils_js_1.assertUsage)(false, `${filePathToShowToUser} sets the value of the config ${configNameColored} which is a custom config that is defined with ${picocolors_1.default.underline('https://vike.dev/meta')} at a path that doesn't apply to ${locationId} — see ${picocolors_1.default.underline('https://vike.dev/config#inheritance')}`);
|
|
902
|
+
}
|
|
903
|
+
// Missing vike-{react,vue,solid} installation
|
|
904
904
|
{
|
|
905
905
|
const ui = ['vike-react', 'vike-vue', 'vike-solid'];
|
|
906
906
|
const knownVikeExntensionConfigs = {
|
|
@@ -915,15 +915,11 @@ function handleUnknownConfig(configName, configNames, filePathToShowToUser) {
|
|
|
915
915
|
Wrapper: ui
|
|
916
916
|
};
|
|
917
917
|
if (configName in knownVikeExntensionConfigs) {
|
|
918
|
-
const requiredVikeExtension = knownVikeExntensionConfigs[configName]
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
.join('/')}.`,
|
|
924
|
-
`Also make sure it applies to ${filePathToShowToUser} (see https://vike.dev/extends#inheritance).`,
|
|
925
|
-
`Alternatively, if you don't want to use the aforementioned Vike extension, define it yourself by using ${picocolors_1.default.cyan('meta')} (https://vike.dev/meta).`
|
|
926
|
-
].join(' '));
|
|
918
|
+
const requiredVikeExtension = knownVikeExntensionConfigs[configName]
|
|
919
|
+
.map((e) => picocolors_1.default.bold(e))
|
|
920
|
+
.join('/');
|
|
921
|
+
const errMsgEnhanced = `${errMsg}. If you want to use the configuration ${configNameColored} documented at ${picocolors_1.default.underline(`https://vike.dev/${configName}`)} then make sure to install ${requiredVikeExtension}. (Alternatively, you can define ${configNameColored} yourself by using ${picocolors_1.default.cyan('meta')}, see ${picocolors_1.default.underline('https://vike.dev/meta')} for more information.)`;
|
|
922
|
+
(0, utils_js_1.assertUsage)(false, errMsgEnhanced);
|
|
927
923
|
}
|
|
928
924
|
}
|
|
929
925
|
// Similarity hint
|
|
@@ -932,18 +928,15 @@ function handleUnknownConfig(configName, configNames, filePathToShowToUser) {
|
|
|
932
928
|
configNameSimilar = 'Page';
|
|
933
929
|
}
|
|
934
930
|
else {
|
|
935
|
-
configNameSimilar = (0, utils_js_1.getMostSimilar)(configName,
|
|
931
|
+
configNameSimilar = (0, utils_js_1.getMostSimilar)(configName, configNamesKnownAll);
|
|
936
932
|
}
|
|
937
933
|
if (configNameSimilar) {
|
|
938
934
|
(0, utils_js_1.assert)(configNameSimilar !== configName);
|
|
939
|
-
|
|
935
|
+
let errMsgEnhanced = `${errMsg}. Did you mean ${picocolors_1.default.cyan(configNameSimilar)} instead?`;
|
|
940
936
|
if (configName === 'page') {
|
|
941
|
-
|
|
937
|
+
errMsgEnhanced += ` (The name of the config ${picocolors_1.default.cyan('Page')} starts with a capital letter ${picocolors_1.default.cyan('P')} because it defines a UI component: a ubiquitous JavaScript convention is that the name of UI components start with a capital letter.)`;
|
|
942
938
|
}
|
|
943
|
-
|
|
944
|
-
// `meta` hint
|
|
945
|
-
if (!configNameSimilar) {
|
|
946
|
-
errMsg += ` Make sure to define ${configNameColored} by using ${picocolors_1.default.cyan('meta')} (https://vike.dev/meta), and also make sure the meta configuration applies to ${filePathToShowToUser} (see https://vike.dev/config#inheritance).`;
|
|
939
|
+
(0, utils_js_1.assertUsage)(false, errMsgEnhanced);
|
|
947
940
|
}
|
|
948
941
|
(0, utils_js_1.assertUsage)(false, errMsg);
|
|
949
942
|
}
|
|
@@ -1030,53 +1023,9 @@ function getConfigEnvValue(val, errMsgIntro) {
|
|
|
1030
1023
|
*/
|
|
1031
1024
|
return val;
|
|
1032
1025
|
}
|
|
1033
|
-
function getConfigDefinition(configDefinitions, configName, filePathToShowToUser) {
|
|
1034
|
-
const configDef = configDefinitions[configName];
|
|
1035
|
-
assertConfigExists(configName, Object.keys(configDefinitions), filePathToShowToUser);
|
|
1036
|
-
(0, utils_js_1.assert)(configDef);
|
|
1037
|
-
return configDef;
|
|
1038
|
-
}
|
|
1039
1026
|
function getConfigDefinitionOptional(configDefinitions, configName) {
|
|
1040
1027
|
return configDefinitions[configName] ?? null;
|
|
1041
1028
|
}
|
|
1042
|
-
function shouldBeLoadableAtBuildTime(configDef) {
|
|
1043
|
-
return !!configDef.env.config && !configDef._valueIsFilePath;
|
|
1044
|
-
}
|
|
1045
|
-
// TODO/now: remove
|
|
1046
|
-
function isGlobalConfigOld(configName) {
|
|
1047
|
-
// TODO/now
|
|
1048
|
-
if (configName === 'prerender')
|
|
1049
|
-
return false;
|
|
1050
|
-
const configNamesGlobal = getConfigNamesGlobal();
|
|
1051
|
-
return (0, utils_js_1.includes)(configNamesGlobal, configName);
|
|
1052
|
-
}
|
|
1053
|
-
// TODO/now
|
|
1054
|
-
function isGlobalConfig(configName, configDefinitions, value) {
|
|
1055
|
-
const configSpec = configDefinitions[configName];
|
|
1056
|
-
(0, utils_js_1.assert)(configSpec);
|
|
1057
|
-
const globalValue = configSpec.global;
|
|
1058
|
-
if (!globalValue)
|
|
1059
|
-
return false;
|
|
1060
|
-
if (globalValue === true)
|
|
1061
|
-
return true;
|
|
1062
|
-
return globalValue(value);
|
|
1063
|
-
}
|
|
1064
|
-
function getConfigNamesGlobal() {
|
|
1065
|
-
return Object.keys(configDefinitionsBuiltInGlobal);
|
|
1066
|
-
}
|
|
1067
|
-
function getConfigDefinitionsBuiltInGlobal() {
|
|
1068
|
-
return (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll).filter(([_configName, configDef]) => configDef.global !== undefined));
|
|
1069
|
-
}
|
|
1070
|
-
function getConfigDefinitionsBuiltIn() {
|
|
1071
|
-
return (0, utils_js_1.objectFromEntries)((0, utils_js_1.objectEntries)(configDefinitionsBuiltIn_js_1.configDefinitionsBuiltInAll).filter(([_configName, configDef]) => configDef.global !== true));
|
|
1072
|
-
}
|
|
1073
|
-
function assertConfigExists(configName, configNamesRelevant, filePathToShowToUser) {
|
|
1074
|
-
const configNames = [...configNamesRelevant, ...getConfigNamesGlobal()];
|
|
1075
|
-
if (configNames.includes(configName))
|
|
1076
|
-
return;
|
|
1077
|
-
handleUnknownConfig(configName, configNames, filePathToShowToUser);
|
|
1078
|
-
(0, utils_js_1.assert)(false);
|
|
1079
|
-
}
|
|
1080
1029
|
function sortConfigValueSources(configValueSources, locationIdPage) {
|
|
1081
1030
|
return Object.fromEntries(Object.entries(configValueSources)
|
|
1082
1031
|
// Make order deterministic (no other purpose)
|
|
@@ -1097,8 +1046,27 @@ function getConfVal(interfaceFile, configName) {
|
|
|
1097
1046
|
const configNames = getDefiningConfigNames(interfaceFile);
|
|
1098
1047
|
if (!configNames.includes(configName))
|
|
1099
1048
|
return null;
|
|
1100
|
-
if (!interfaceFile.
|
|
1049
|
+
if (!interfaceFile.isValueFileLoaded)
|
|
1101
1050
|
return { configValueLoaded: false };
|
|
1102
1051
|
const confVal = { configValue: interfaceFile.fileExportsByConfigName[configName], configValueLoaded: true };
|
|
1103
1052
|
return confVal;
|
|
1104
1053
|
}
|
|
1054
|
+
function resolveConfigEnv(configEnv, filePath) {
|
|
1055
|
+
const configEnvResolved = { ...configEnv };
|
|
1056
|
+
if (filePath.filePathAbsoluteFilesystem) {
|
|
1057
|
+
const { fileName } = filePath;
|
|
1058
|
+
if (fileName.includes('.server.')) {
|
|
1059
|
+
configEnvResolved.server = true;
|
|
1060
|
+
configEnvResolved.client = false;
|
|
1061
|
+
}
|
|
1062
|
+
else if (fileName.includes('.client.')) {
|
|
1063
|
+
configEnvResolved.client = true;
|
|
1064
|
+
configEnvResolved.server = false;
|
|
1065
|
+
}
|
|
1066
|
+
else if (fileName.includes('.shared.')) {
|
|
1067
|
+
configEnvResolved.server = true;
|
|
1068
|
+
configEnvResolved.client = true;
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
return configEnvResolved;
|
|
1072
|
+
}
|