vike 0.4.223 → 0.4.224-commit-f0d0f8a
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/build.js +4 -37
- package/dist/cjs/node/api/prepareViteApiCall.js +9 -3
- package/dist/cjs/node/plugin/index.js +8 -20
- package/dist/cjs/node/plugin/plugins/baseUrls.js +3 -1
- package/dist/cjs/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +130 -52
- package/dist/cjs/node/plugin/plugins/build/pluginAutoFullBuild.js +145 -0
- package/dist/cjs/node/plugin/plugins/build/pluginBuildApp.js +52 -0
- package/dist/cjs/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -84
- package/dist/cjs/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
- package/dist/cjs/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
- package/dist/cjs/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +6 -6
- package/dist/cjs/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
- package/dist/cjs/node/plugin/plugins/build.js +21 -0
- package/dist/cjs/node/plugin/plugins/commonConfig.js +22 -4
- package/dist/cjs/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
- package/dist/cjs/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
- package/dist/cjs/node/plugin/plugins/devConfig/index.js +1 -1
- package/dist/cjs/node/plugin/plugins/envVars.js +2 -2
- package/dist/cjs/node/plugin/plugins/extractAssetsPlugin.js +9 -9
- package/dist/cjs/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
- package/dist/cjs/node/plugin/plugins/fileEnv.js +5 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/index.js +2 -5
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +16 -0
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +19 -7
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +277 -212
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
- package/dist/cjs/node/plugin/plugins/previewConfig.js +12 -7
- package/dist/cjs/node/plugin/shared/addSsrMiddleware.js +5 -1
- package/dist/cjs/node/plugin/shared/findPageFiles.js +3 -3
- package/dist/cjs/node/plugin/shared/getOutDirs.js +8 -7
- package/dist/cjs/node/plugin/shared/isViteServerBuild.js +47 -0
- package/dist/cjs/node/plugin/shared/resolveClientEntriesDev.js +1 -1
- package/dist/cjs/node/plugin/utils.js +1 -0
- package/dist/cjs/node/prerender/context.js +3 -8
- package/dist/cjs/node/prerender/resolvePrerenderConfig.js +30 -21
- package/dist/cjs/node/prerender/runPrerender.js +28 -30
- package/dist/cjs/node/prerender/utils.js +1 -0
- package/dist/cjs/node/runtime/html/stream.js +7 -0
- package/dist/cjs/node/runtime/renderPage/logErrorHint.js +13 -2
- package/dist/cjs/shared/getPageContextUrlComputed.js +1 -1
- package/dist/cjs/shared/page-configs/getConfigValueBuildTime.js +2 -5
- package/dist/cjs/shared/page-configs/serialize/parsePageConfigs.js +3 -1
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +20 -9
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/debug.js +2 -1
- package/dist/cjs/utils/findFile.js +1 -1
- package/dist/cjs/utils/findPackageJson.js +1 -1
- package/dist/cjs/utils/isFilePathAbsoluteFilesystem.js +10 -4
- package/dist/cjs/utils/path.js +1 -0
- package/dist/cjs/utils/requireResolve.js +11 -4
- package/dist/cjs/utils/sorter.js +0 -3
- package/dist/esm/client/client-routing-runtime/index.d.ts +1 -0
- package/dist/esm/client/client-routing-runtime/index.js +1 -0
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.d.ts +8 -0
- package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +10 -1
- package/dist/esm/node/api/build.js +4 -4
- package/dist/esm/node/api/prepareViteApiCall.js +9 -3
- package/dist/esm/node/plugin/index.d.ts +2 -1
- package/dist/esm/node/plugin/index.js +4 -17
- package/dist/esm/node/plugin/plugins/baseUrls.js +3 -1
- package/dist/esm/node/plugin/plugins/build/handleAssetsManifest.d.ts +18 -0
- package/dist/esm/node/plugin/plugins/{buildConfig/fixServerAssets.js → build/handleAssetsManifest.js} +131 -53
- package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.d.ts +5 -0
- package/dist/esm/node/plugin/plugins/build/pluginAutoFullBuild.js +140 -0
- package/dist/esm/node/plugin/plugins/build/pluginBuildApp.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/build/pluginBuildApp.js +50 -0
- package/dist/esm/node/plugin/plugins/{buildConfig.d.ts → build/pluginBuildConfig.d.ts} +3 -3
- package/dist/esm/node/plugin/plugins/{buildConfig.js → build/pluginBuildConfig.js} +22 -81
- package/dist/esm/node/plugin/plugins/build/pluginBuildEntry.d.ts +7 -0
- package/dist/esm/node/plugin/plugins/{buildEntry/index.js → build/pluginBuildEntry.js} +9 -9
- package/dist/esm/node/plugin/plugins/build/pluginDistFileNames.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/{distFileNames.js → build/pluginDistFileNames.js} +7 -7
- package/dist/esm/node/plugin/plugins/build/pluginDistPackageJsonFile.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/{packageJsonFile.js → build/pluginDistPackageJsonFile.js} +7 -6
- package/dist/esm/node/plugin/plugins/build/pluginSuppressRollupWarning.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/{suppressRollupWarning.js → build/pluginSuppressRollupWarning.js} +3 -3
- package/dist/esm/node/plugin/plugins/build.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/build.js +19 -0
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +16 -6
- package/dist/esm/node/plugin/plugins/commonConfig.js +22 -4
- package/dist/esm/node/plugin/plugins/devConfig/determineFsAllowList.js +1 -1
- package/dist/esm/node/plugin/plugins/devConfig/determineOptimizeDeps.js +5 -5
- package/dist/esm/node/plugin/plugins/devConfig/index.js +1 -1
- package/dist/esm/node/plugin/plugins/envVars.js +2 -2
- package/dist/esm/node/plugin/plugins/extractAssetsPlugin.js +10 -10
- package/dist/esm/node/plugin/plugins/extractExportNamesPlugin.js +2 -2
- package/dist/esm/node/plugin/plugins/fileEnv.js +5 -2
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.js +3 -3
- package/dist/esm/node/plugin/plugins/importUserCode/index.js +2 -5
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/assertExtensions.js +5 -5
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +7 -2
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.d.ts +1 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles/ignorePatternsBuiltIn.js +13 -0
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +50 -64
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/filesystemRouting.js +2 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/getPlusFilesAll.js +3 -3
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.d.ts +0 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/transpileAndExecuteFile.js +20 -8
- 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 +279 -214
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/virtual-files/getVirtualFilePageConfigValuesAll.js +4 -4
- package/dist/esm/node/plugin/plugins/previewConfig.js +12 -7
- package/dist/esm/node/plugin/shared/addSsrMiddleware.d.ts +1 -1
- package/dist/esm/node/plugin/shared/addSsrMiddleware.js +5 -1
- package/dist/esm/node/plugin/shared/findPageFiles.js +3 -3
- package/dist/esm/node/plugin/shared/getHttpRequestAsyncStore.js +1 -3
- package/dist/esm/node/plugin/shared/getOutDirs.d.ts +2 -2
- package/dist/esm/node/plugin/shared/getOutDirs.js +8 -7
- package/dist/esm/node/plugin/shared/isViteServerBuild.d.ts +15 -0
- package/dist/esm/node/plugin/shared/isViteServerBuild.js +45 -0
- package/dist/esm/node/plugin/shared/resolveClientEntriesDev.js +1 -1
- package/dist/esm/node/plugin/utils.d.ts +1 -0
- package/dist/esm/node/plugin/utils.js +1 -0
- package/dist/esm/node/prerender/context.d.ts +0 -2
- package/dist/esm/node/prerender/context.js +4 -9
- package/dist/esm/node/prerender/resolvePrerenderConfig.d.ts +11 -6
- package/dist/esm/node/prerender/resolvePrerenderConfig.js +31 -22
- package/dist/esm/node/prerender/runPrerender.d.ts +7 -25
- package/dist/esm/node/prerender/runPrerender.js +29 -31
- package/dist/esm/node/prerender/utils.d.ts +1 -0
- package/dist/esm/node/prerender/utils.js +1 -0
- package/dist/esm/node/runtime/globalContext.d.ts +3 -2
- package/dist/esm/node/runtime/html/stream.js +7 -0
- package/dist/esm/node/runtime/renderPage/logErrorHint.js +13 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +165 -5
- package/dist/esm/shared/getPageContextUrlComputed.js +1 -1
- package/dist/esm/shared/page-configs/Config.d.ts +12 -2
- package/dist/esm/shared/page-configs/PageConfig.d.ts +5 -5
- package/dist/esm/shared/page-configs/getConfigValueBuildTime.js +2 -5
- package/dist/esm/shared/page-configs/serialize/parsePageConfigs.js +3 -1
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +2 -0
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +20 -9
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/debug.js +2 -1
- package/dist/esm/utils/findFile.js +1 -1
- package/dist/esm/utils/findPackageJson.js +1 -1
- package/dist/esm/utils/isFilePathAbsoluteFilesystem.js +8 -2
- package/dist/esm/utils/path.js +1 -0
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/dist/esm/utils/requireResolve.js +11 -4
- package/dist/esm/utils/sorter.d.ts +18 -5
- package/dist/esm/utils/sorter.js +0 -3
- package/package.json +9 -16
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +0 -119
- package/dist/cjs/node/plugin/plugins/buildApp.js +0 -76
- package/dist/cjs/node/plugin/plugins/removeRequireHookPlugin.js +0 -17
- package/dist/cjs/node/plugin/shared/getFullBuildInlineConfig.js +0 -20
- package/dist/cjs/node/plugin/shared/viteIsSSR.js +0 -31
- package/dist/esm/node/plugin/plugins/autoFullBuild.d.ts +0 -3
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +0 -114
- package/dist/esm/node/plugin/plugins/buildApp.d.ts +0 -3
- package/dist/esm/node/plugin/plugins/buildApp.js +0 -74
- package/dist/esm/node/plugin/plugins/buildConfig/fixServerAssets.d.ts +0 -20
- package/dist/esm/node/plugin/plugins/buildEntry/index.d.ts +0 -8
- package/dist/esm/node/plugin/plugins/distFileNames.d.ts +0 -3
- package/dist/esm/node/plugin/plugins/packageJsonFile.d.ts +0 -3
- package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.d.ts +0 -3
- package/dist/esm/node/plugin/plugins/removeRequireHookPlugin.js +0 -15
- package/dist/esm/node/plugin/plugins/suppressRollupWarning.d.ts +0 -3
- package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.d.ts +0 -2
- package/dist/esm/node/plugin/shared/getFullBuildInlineConfig.js +0 -17
- package/dist/esm/node/plugin/shared/viteIsSSR.d.ts +0 -11
- package/dist/esm/node/plugin/shared/viteIsSSR.js +0 -29
- package/dist-cjs-fixup.mjs +0 -41
|
@@ -10,6 +10,7 @@ exports.reloadVikeConfig = reloadVikeConfig;
|
|
|
10
10
|
exports.isV1Design = isV1Design;
|
|
11
11
|
exports.getConfVal = getConfVal;
|
|
12
12
|
exports.getConfigDefinitionOptional = getConfigDefinitionOptional;
|
|
13
|
+
exports.isOverriden = isOverriden;
|
|
13
14
|
const utils_js_1 = require("../../../utils.js");
|
|
14
15
|
const configDefinitionsBuiltIn_js_1 = require("./getVikeConfig/configDefinitionsBuiltIn.js");
|
|
15
16
|
const filesystemRouting_js_1 = require("./getVikeConfig/filesystemRouting.js");
|
|
@@ -73,6 +74,7 @@ async function handleReloadSideEffects() {
|
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
}
|
|
77
|
+
// TODO/soon: predominantly use getVikeConfigPublic() instead of getVikeConfig() then maybe refector?
|
|
76
78
|
async function getVikeConfig(config, { doNotRestartViteOnError } = {}) {
|
|
77
79
|
const userRootDir = config.root;
|
|
78
80
|
const vikeVitePluginOptions = config._vikeVitePluginOptions;
|
|
@@ -91,8 +93,9 @@ async function getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, doN
|
|
|
91
93
|
}
|
|
92
94
|
return await vikeConfigPromise;
|
|
93
95
|
}
|
|
94
|
-
|
|
95
|
-
const vikeConfig =
|
|
96
|
+
function isV1Design(config) {
|
|
97
|
+
const vikeConfig = config._vikeConfigObject;
|
|
98
|
+
(0, utils_js_1.assert)(vikeConfig);
|
|
96
99
|
const { pageConfigs } = vikeConfig;
|
|
97
100
|
const isV1Design = pageConfigs.length > 0;
|
|
98
101
|
return isV1Design;
|
|
@@ -146,7 +149,7 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
146
149
|
const configDefinitionsResolved = await resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache);
|
|
147
150
|
assertKnownConfigs(configDefinitionsResolved, plusFilesAll);
|
|
148
151
|
const { pageConfigGlobal, pageConfigs } = getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRootDir);
|
|
149
|
-
//
|
|
152
|
+
// Backwards compatibility for vike(options) in vite.config.js
|
|
150
153
|
temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, userRootDir);
|
|
151
154
|
// global
|
|
152
155
|
const pageConfigGlobalValues = getConfigValues(pageConfigGlobal);
|
|
@@ -159,16 +162,23 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
159
162
|
return { pageConfigs, pageConfigGlobal, global, pages };
|
|
160
163
|
}
|
|
161
164
|
async function resolveConfigDefinitions(plusFilesAll, userRootDir, esbuildCache) {
|
|
165
|
+
const plusFilesAllOrdered = Object.values(plusFilesAll)
|
|
166
|
+
.flat()
|
|
167
|
+
.sort((plusFile1, plusFile2) => sortAfterInheritanceOrderGlobal(plusFile1, plusFile2, plusFilesAll, null));
|
|
162
168
|
const configDefinitionsGlobal = getConfigDefinitions(
|
|
163
|
-
// We use `plusFilesAll` in order to allow local Vike extensions to create global configs.
|
|
164
|
-
|
|
169
|
+
// We use `plusFilesAll` in order to allow local Vike extensions to create global configs, and to set the value of global configs such as `+vite` (enabling Vike extensions to add Vite plugins).
|
|
170
|
+
plusFilesAllOrdered, (configDef) => !!configDef.global);
|
|
165
171
|
await loadCustomConfigBuildTimeFiles(plusFilesAll, configDefinitionsGlobal, userRootDir, esbuildCache);
|
|
166
172
|
const configDefinitionsLocal = {};
|
|
167
|
-
await Promise.all((0, utils_js_1.objectEntries)(plusFilesAll).map(async ([
|
|
168
|
-
const plusFilesRelevant =
|
|
173
|
+
await Promise.all((0, utils_js_1.objectEntries)(plusFilesAll).map(async ([locationIdPage, plusFiles]) => {
|
|
174
|
+
const plusFilesRelevant = (0, utils_js_1.objectEntries)(plusFilesAll)
|
|
175
|
+
.filter(([locationId]) => (0, filesystemRouting_js_1.isInherited)(locationId, locationIdPage))
|
|
176
|
+
.map(([, plusFiles]) => plusFiles)
|
|
177
|
+
.flat()
|
|
178
|
+
.sort((plusFile1, plusFile2) => sortAfterInheritanceOrderPage(plusFile1, plusFile2, locationIdPage, null));
|
|
169
179
|
const configDefinitions = getConfigDefinitions(plusFilesRelevant, (configDef) => configDef.global !== true);
|
|
170
180
|
await loadCustomConfigBuildTimeFiles(plusFiles, configDefinitions, userRootDir, esbuildCache);
|
|
171
|
-
configDefinitionsLocal[
|
|
181
|
+
configDefinitionsLocal[locationIdPage] = { configDefinitions, plusFiles, plusFilesRelevant };
|
|
172
182
|
}));
|
|
173
183
|
const configDefinitionsResolved = {
|
|
174
184
|
configDefinitionsGlobal,
|
|
@@ -198,12 +208,15 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
|
|
|
198
208
|
};
|
|
199
209
|
(0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsGlobal).forEach(([configName, configDef]) => {
|
|
200
210
|
const sources = resolveConfigValueSources(configName, configDef,
|
|
201
|
-
// We use `plusFilesAll` in order to allow local Vike extensions to set the value of global configs
|
|
202
|
-
|
|
211
|
+
// We use `plusFilesAll` in order to allow local Vike extensions to create global configs, and to set the value of global configs such as `+vite` (enabling Vike extensions to add Vite plugins).
|
|
212
|
+
Object.values(plusFilesAll).flat(), userRootDir, true);
|
|
203
213
|
if (sources.length === 0)
|
|
204
214
|
return;
|
|
205
215
|
pageConfigGlobal.configValueSources[configName] = sources;
|
|
206
216
|
});
|
|
217
|
+
applyEffectsMetaEnv(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal);
|
|
218
|
+
applyEffectsConfVal(pageConfigGlobal.configValueSources, configDefinitionsResolved.configDefinitionsGlobal);
|
|
219
|
+
sortConfigValueSources(pageConfigGlobal.configValueSources, null);
|
|
207
220
|
assertPageConfigGlobal(pageConfigGlobal, plusFilesAll);
|
|
208
221
|
const pageConfigs = (0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal)
|
|
209
222
|
.filter(([_locationId, { plusFiles }]) => isDefiningPage(plusFiles))
|
|
@@ -214,13 +227,14 @@ function getPageConfigsBuildTime(configDefinitionsResolved, plusFilesAll, userRo
|
|
|
214
227
|
.filter(([_configName, configDef]) => configDef.global !== true)
|
|
215
228
|
.forEach(([configName, configDef]) => {
|
|
216
229
|
const sources = resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, false);
|
|
217
|
-
// sortConfigValueSources(sources, locationId)
|
|
218
230
|
if (sources.length === 0)
|
|
219
231
|
return;
|
|
220
232
|
configValueSources[configName] = sources;
|
|
221
233
|
});
|
|
222
234
|
const pageConfigRoute = determineRouteFilesystem(locationId, configValueSources);
|
|
223
|
-
|
|
235
|
+
applyEffectsMetaEnv(configValueSources, configDefinitionsLocal);
|
|
236
|
+
applyEffectsConfVal(configValueSources, configDefinitionsLocal);
|
|
237
|
+
sortConfigValueSources(configValueSources, locationId);
|
|
224
238
|
const configValuesComputed = getComputed(configValueSources, configDefinitionsLocal);
|
|
225
239
|
const pageConfig = {
|
|
226
240
|
pageId: locationId,
|
|
@@ -357,110 +371,122 @@ function temp_interopVikeVitePlugin(pageConfigGlobal, vikeVitePluginOptions, use
|
|
|
357
371
|
},
|
|
358
372
|
locationId: '/',
|
|
359
373
|
plusFile: null,
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
valueIsDefinedByPlusFile: false
|
|
374
|
+
valueIsLoadedWithImport: false,
|
|
375
|
+
valueIsDefinedByPlusValueFile: false
|
|
363
376
|
});
|
|
364
377
|
});
|
|
365
378
|
}
|
|
366
|
-
function
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
379
|
+
function sortConfigValueSources(configValueSources, locationIdPage) {
|
|
380
|
+
Object.entries(configValueSources).forEach(([configName, sources]) => {
|
|
381
|
+
sources
|
|
382
|
+
.sort((source1, source2) => {
|
|
383
|
+
if (!source1.plusFile || !source2.plusFile)
|
|
384
|
+
return 0;
|
|
385
|
+
const isGlobal = !locationIdPage;
|
|
386
|
+
if (isGlobal) {
|
|
387
|
+
return sortAfterInheritanceOrderGlobal(source1.plusFile, source2.plusFile, null, configName);
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
return sortAfterInheritanceOrderPage(source1.plusFile, source2.plusFile, locationIdPage, configName);
|
|
391
|
+
}
|
|
392
|
+
})
|
|
393
|
+
// TODO/next-major: remove
|
|
394
|
+
// Interop with vike(options) in vite.config.js — make it least precedence.
|
|
395
|
+
.sort((0, utils_js_1.makeLast)((source) => !source.plusFile));
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
function sortAfterInheritanceOrderPage(plusFile1, plusFile2, locationIdPage, configName) {
|
|
399
|
+
{
|
|
400
|
+
const ret = (0, filesystemRouting_js_1.sortAfterInheritanceOrder)(plusFile1.locationId, plusFile2.locationId, locationIdPage);
|
|
401
|
+
if (ret !== 0)
|
|
402
|
+
return ret;
|
|
403
|
+
(0, utils_js_1.assert)(plusFile1.locationId === plusFile2.locationId);
|
|
404
|
+
}
|
|
405
|
+
if (configName) {
|
|
406
|
+
const ret = sortPlusFilesSameLocationId(plusFile1, plusFile2, configName);
|
|
407
|
+
if (ret !== 0)
|
|
408
|
+
return ret;
|
|
409
|
+
}
|
|
410
|
+
return 0;
|
|
411
|
+
}
|
|
412
|
+
function sortAfterInheritanceOrderGlobal(plusFile1, plusFile2, plusFilesAll, configName) {
|
|
413
|
+
if (plusFilesAll) {
|
|
414
|
+
const ret = (0, utils_js_1.makeFirst)((plusFile) => isGlobalLocation(plusFile.locationId, plusFilesAll))(plusFile1, plusFile2);
|
|
415
|
+
if (ret !== 0)
|
|
416
|
+
return ret;
|
|
417
|
+
}
|
|
418
|
+
{
|
|
419
|
+
const ret = (0, utils_js_1.lowerFirst)((plusFile) => plusFile.locationId.split('/').length)(plusFile1, plusFile2);
|
|
420
|
+
if (ret !== 0)
|
|
421
|
+
return ret;
|
|
422
|
+
}
|
|
423
|
+
if (plusFile1.locationId !== plusFile2.locationId) {
|
|
424
|
+
// Same as `sort()` in `['some', 'string', 'array'].sort()`
|
|
425
|
+
return plusFile1.locationId > plusFile2.locationId ? 1 : -1;
|
|
426
|
+
}
|
|
427
|
+
if (configName) {
|
|
428
|
+
(0, utils_js_1.assert)(plusFile1.locationId === plusFile2.locationId);
|
|
429
|
+
const ret = sortPlusFilesSameLocationId(plusFile1, plusFile2, configName);
|
|
430
|
+
if (ret !== 0)
|
|
431
|
+
return ret;
|
|
432
|
+
}
|
|
433
|
+
return 0;
|
|
434
|
+
}
|
|
435
|
+
function sortPlusFilesSameLocationId(plusFile1, plusFile2, configName) {
|
|
436
|
+
(0, utils_js_1.assert)(plusFile1.locationId === plusFile2.locationId);
|
|
437
|
+
(0, utils_js_1.assert)(isDefiningConfig(plusFile1, configName));
|
|
438
|
+
(0, utils_js_1.assert)(isDefiningConfig(plusFile2, configName));
|
|
439
|
+
// Config set by extensions (lowest precedence)
|
|
440
|
+
{
|
|
441
|
+
const ret = (0, utils_js_1.makeLast)((plusFile) => !!plusFile.isExtensionConfig)(plusFile1, plusFile2);
|
|
442
|
+
if (ret !== 0)
|
|
443
|
+
return ret;
|
|
444
|
+
}
|
|
445
|
+
// Config set by side-export (lower precedence)
|
|
446
|
+
{
|
|
447
|
+
// - For example `export { frontmatter }` of `.mdx` files.
|
|
448
|
+
// - This only considers side-export 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.)
|
|
449
|
+
const ret = (0, utils_js_1.makeLast)((plusFile) => !plusFile.isConfigFile &&
|
|
450
|
+
// Is side-export
|
|
451
|
+
plusFile.configName !== configName)(plusFile1, plusFile2);
|
|
452
|
+
if (ret !== 0)
|
|
453
|
+
return ret;
|
|
454
|
+
}
|
|
455
|
+
// Config set by +config.js
|
|
456
|
+
{
|
|
457
|
+
const ret = (0, utils_js_1.makeLast)((plusFile) => plusFile.isConfigFile)(plusFile1, plusFile2);
|
|
458
|
+
if (ret !== 0)
|
|
459
|
+
return ret;
|
|
460
|
+
}
|
|
461
|
+
// Config set by +{configName}.js (highest precedence)
|
|
462
|
+
// No need to make it deterministic: the overall order is arleady deterministic, see sortMakeDeterministic() at getPlusFilesAll()
|
|
463
|
+
return 0;
|
|
382
464
|
}
|
|
383
465
|
function resolveConfigValueSources(configName, configDef, plusFilesRelevant, userRootDir, isGlobal) {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
466
|
+
let sources = plusFilesRelevant
|
|
467
|
+
.filter((plusFile) => isDefiningConfig(plusFile, configName))
|
|
468
|
+
.map((plusFile) => getConfigValueSource(configName, plusFile, configDef, userRootDir));
|
|
469
|
+
// Filter hydrid global-local configs
|
|
470
|
+
if (!(0, utils_js_1.isCallable)(configDef.global)) {
|
|
471
|
+
// Already filtered
|
|
472
|
+
(0, utils_js_1.assert)((configDef.global ?? false) === isGlobal);
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
// We cannot filter earlier
|
|
392
476
|
(0, utils_js_1.assert)(configDef.env.config);
|
|
393
477
|
sources = sources.filter((source) => {
|
|
394
478
|
(0, utils_js_1.assert)(source.configEnv.config);
|
|
395
479
|
(0, utils_js_1.assert)(source.valueIsLoaded);
|
|
396
|
-
const valueIsGlobal =
|
|
480
|
+
const valueIsGlobal = resolveIsGlobalValue(configDef.global, source.value);
|
|
397
481
|
return isGlobal ? valueIsGlobal : !valueIsGlobal;
|
|
398
482
|
});
|
|
399
483
|
}
|
|
400
484
|
return sources;
|
|
401
485
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
const plusFilesOrdered = [];
|
|
405
|
-
// `plusFilesRelevant` is already sorted by sortAfterInheritanceOrder() at getPlusFilesRelevant()
|
|
406
|
-
// `plusFilesAtLocationId` is already sorted by sortMakeDeterministic() at getPlusFilesAll()
|
|
407
|
-
for (const plusFilesAtLocationId of Object.values(plusFilesRelevant)) {
|
|
408
|
-
const plusFilesForConfigName = plusFilesAtLocationId.filter((plusFile) => getDefiningConfigNames(plusFile).includes(configName));
|
|
409
|
-
// We populate `plusFilesOrdered` with inheritance order.
|
|
410
|
-
const populate = (plusFile) => {
|
|
411
|
-
(0, utils_js_1.assert)(!visited.has(plusFile));
|
|
412
|
-
visited.add(plusFile);
|
|
413
|
-
plusFilesOrdered.push(plusFile);
|
|
414
|
-
};
|
|
415
|
-
const visited = new WeakSet();
|
|
416
|
-
// ========================
|
|
417
|
-
// User-land config (first)
|
|
418
|
-
// ========================
|
|
419
|
-
{
|
|
420
|
-
const plusFilesValue = plusFilesForConfigName.filter((plusFile) => !plusFile.isConfigFile &&
|
|
421
|
-
// We consider side-effect configs (e.g. `export { frontmatter }` of .mdx files) later (i.e. with less priority)
|
|
422
|
-
plusFile.configName === configName);
|
|
423
|
-
const plusFilesConfig = plusFilesForConfigName.filter((plusFile) => plusFile.isConfigFile &&
|
|
424
|
-
// We consider extensions (e.g. vike-react) later (i.e. with less priority)
|
|
425
|
-
!plusFile.isExtensionConfig);
|
|
426
|
-
[...plusFilesValue, ...plusFilesConfig].forEach((plusFile) => {
|
|
427
|
-
(0, utils_js_1.assert)(plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it's a user-land plus file
|
|
428
|
-
populate(plusFile);
|
|
429
|
-
});
|
|
430
|
-
}
|
|
431
|
-
// ==========================
|
|
432
|
-
// Side-effect configs (next)
|
|
433
|
-
// ==========================
|
|
434
|
-
// - For example `export { frontmatter }` of `.mdx` files.
|
|
435
|
-
// - 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.)
|
|
436
|
-
plusFilesForConfigName
|
|
437
|
-
.filter((plusFile) => !plusFile.isConfigFile &&
|
|
438
|
-
// Is side-effect config
|
|
439
|
-
plusFile.configName !== configName)
|
|
440
|
-
.forEach((plusFile) => {
|
|
441
|
-
(0, utils_js_1.assert)(plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it's a user-land plus file
|
|
442
|
-
populate(plusFile);
|
|
443
|
-
});
|
|
444
|
-
// ========================
|
|
445
|
-
// Extensions config (last)
|
|
446
|
-
// ========================
|
|
447
|
-
plusFilesForConfigName
|
|
448
|
-
.filter((plusFile) => plusFile.isConfigFile && plusFile.isExtensionConfig)
|
|
449
|
-
// Extension config files are already sorted by inheritance order
|
|
450
|
-
.forEach((plusFile) => {
|
|
451
|
-
(0, utils_js_1.assert)(!plusFile.filePath.filePathAbsoluteUserRootDir); // ensure it isn't a user-land plus file
|
|
452
|
-
populate(plusFile);
|
|
453
|
-
});
|
|
454
|
-
// ======
|
|
455
|
-
// Assert we didn't miss any config.
|
|
456
|
-
// ======
|
|
457
|
-
plusFilesForConfigName.forEach((plusFile) => {
|
|
458
|
-
(0, utils_js_1.assert)(visited.has(plusFile));
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
return plusFilesOrdered;
|
|
486
|
+
function isDefiningConfig(plusFile, configName) {
|
|
487
|
+
return getDefiningConfigNames(plusFile).includes(configName);
|
|
462
488
|
}
|
|
463
|
-
function getConfigValueSource(configName, plusFile, configDef, userRootDir
|
|
489
|
+
function getConfigValueSource(configName, plusFile, configDef, userRootDir) {
|
|
464
490
|
const confVal = getConfVal(plusFile, configName);
|
|
465
491
|
(0, utils_js_1.assert)(confVal);
|
|
466
492
|
const configValueSourceCommon = {
|
|
@@ -471,15 +497,14 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
|
|
|
471
497
|
...plusFile.filePath,
|
|
472
498
|
fileExportPathToShowToUser: ['default', configName]
|
|
473
499
|
};
|
|
474
|
-
const isOverriden = configDef.cumulative ? false : !isHighestInheritancePrecedence;
|
|
475
500
|
// +client.js
|
|
476
501
|
if (configDef._valueIsFilePath) {
|
|
477
502
|
let definedAtFilePath;
|
|
478
503
|
let valueFilePath;
|
|
479
504
|
if (plusFile.isConfigFile) {
|
|
480
505
|
// Defined over pointer import
|
|
481
|
-
(0, utils_js_1.assert)(confVal.
|
|
482
|
-
const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(confVal.
|
|
506
|
+
(0, utils_js_1.assert)(confVal.valueIsLoaded);
|
|
507
|
+
const pointerImport = (0, resolvePointerImport_js_1.resolvePointerImport)(confVal.value, plusFile.filePath, userRootDir, configName);
|
|
483
508
|
const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, definedAtFilePath_);
|
|
484
509
|
(0, utils_js_1.assertUsage)(pointerImport, `${configDefinedAt} should be an import`);
|
|
485
510
|
valueFilePath = pointerImport.fileExportPath.filePathAbsoluteVite;
|
|
@@ -500,17 +525,15 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
|
|
|
500
525
|
value: valueFilePath,
|
|
501
526
|
valueIsFilePath: true,
|
|
502
527
|
configEnv: configDef.env,
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
isOverriden,
|
|
528
|
+
valueIsLoadedWithImport: false,
|
|
529
|
+
valueIsDefinedByPlusValueFile: false,
|
|
506
530
|
definedAtFilePath
|
|
507
531
|
};
|
|
508
532
|
return configValueSource;
|
|
509
533
|
}
|
|
510
534
|
// +config.js
|
|
511
535
|
if (plusFile.isConfigFile) {
|
|
512
|
-
(0, utils_js_1.assert)(confVal.
|
|
513
|
-
const { configValue } = confVal;
|
|
536
|
+
(0, utils_js_1.assert)(confVal.valueIsLoaded);
|
|
514
537
|
// Defined over pointer import
|
|
515
538
|
const pointerImport = plusFile.pointerImportsByConfigName[configName];
|
|
516
539
|
if (pointerImport) {
|
|
@@ -526,9 +549,8 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
|
|
|
526
549
|
...configValueSourceCommon,
|
|
527
550
|
...value,
|
|
528
551
|
configEnv: resolveConfigEnv(configDef.env, pointerImport.fileExportPath),
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
isOverriden,
|
|
552
|
+
valueIsLoadedWithImport: true,
|
|
553
|
+
valueIsDefinedByPlusValueFile: false,
|
|
532
554
|
definedAtFilePath: pointerImport.fileExportPath
|
|
533
555
|
};
|
|
534
556
|
return configValueSource;
|
|
@@ -537,11 +559,10 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
|
|
|
537
559
|
const configValueSource = {
|
|
538
560
|
...configValueSourceCommon,
|
|
539
561
|
valueIsLoaded: true,
|
|
540
|
-
value:
|
|
562
|
+
value: confVal.value,
|
|
541
563
|
configEnv: configDef.env,
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
isOverriden,
|
|
564
|
+
valueIsLoadedWithImport: false,
|
|
565
|
+
valueIsDefinedByPlusValueFile: false,
|
|
545
566
|
definedAtFilePath: definedAtFilePath_
|
|
546
567
|
};
|
|
547
568
|
return configValueSource;
|
|
@@ -549,23 +570,13 @@ function getConfigValueSource(configName, plusFile, configDef, userRootDir, isHi
|
|
|
549
570
|
// Defined by value file, i.e. +{configName}.js
|
|
550
571
|
if (!plusFile.isConfigFile) {
|
|
551
572
|
const configEnvResolved = resolveConfigEnv(configDef.env, plusFile.filePath);
|
|
552
|
-
|
|
553
|
-
(0, utils_js_1.assert)(valueAlreadyLoaded === !!configEnvResolved.config);
|
|
554
|
-
const value = valueAlreadyLoaded
|
|
555
|
-
? {
|
|
556
|
-
valueIsLoaded: true,
|
|
557
|
-
value: confVal.configValue
|
|
558
|
-
}
|
|
559
|
-
: {
|
|
560
|
-
valueIsLoaded: false
|
|
561
|
-
};
|
|
573
|
+
(0, utils_js_1.assert)(confVal.valueIsLoaded === !!configEnvResolved.config);
|
|
562
574
|
const configValueSource = {
|
|
563
575
|
...configValueSourceCommon,
|
|
564
|
-
...
|
|
576
|
+
...confVal,
|
|
565
577
|
configEnv: configEnvResolved,
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
isOverriden,
|
|
578
|
+
valueIsLoadedWithImport: !confVal.valueIsLoaded || !(0, serializeConfigValues_js_1.isJsonValue)(confVal.value),
|
|
579
|
+
valueIsDefinedByPlusValueFile: true,
|
|
569
580
|
definedAtFilePath: {
|
|
570
581
|
...plusFile.filePath,
|
|
571
582
|
fileExportPathToShowToUser: configName === plusFile.configName
|
|
@@ -590,6 +601,15 @@ function isDefiningPage(plusFiles) {
|
|
|
590
601
|
function isDefiningPageConfig(configName) {
|
|
591
602
|
return ['Page', 'route'].includes(configName);
|
|
592
603
|
}
|
|
604
|
+
function resolveIsGlobalValue(configDefGlobal, configValue) {
|
|
605
|
+
let isGlobal;
|
|
606
|
+
if ((0, utils_js_1.isCallable)(configDefGlobal))
|
|
607
|
+
isGlobal = configDefGlobal(configValue);
|
|
608
|
+
else
|
|
609
|
+
isGlobal = configDefGlobal ?? false;
|
|
610
|
+
(0, utils_js_1.assert)(typeof isGlobal === 'boolean');
|
|
611
|
+
return isGlobal;
|
|
612
|
+
}
|
|
593
613
|
function getDefiningConfigNames(plusFile) {
|
|
594
614
|
let configNames = [];
|
|
595
615
|
if (!plusFile.isConfigFile) {
|
|
@@ -604,33 +624,32 @@ function getDefiningConfigNames(plusFile) {
|
|
|
604
624
|
function getConfigDefinitions(plusFilesRelevant, filter) {
|
|
605
625
|
let configDefinitions = { ...configDefinitionsBuiltIn_js_1.configDefinitionsBuiltIn };
|
|
606
626
|
// Add user-land meta configs
|
|
607
|
-
|
|
627
|
+
plusFilesRelevant
|
|
628
|
+
.slice()
|
|
608
629
|
.reverse()
|
|
609
|
-
.forEach((
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
630
|
+
.forEach((plusFile) => {
|
|
631
|
+
const confVal = getConfVal(plusFile, 'meta');
|
|
632
|
+
if (!confVal)
|
|
633
|
+
return;
|
|
634
|
+
(0, utils_js_1.assert)(confVal.valueIsLoaded);
|
|
635
|
+
const meta = confVal.value;
|
|
636
|
+
assertMetaUsage(meta, `Config ${picocolors_1.default.cyan('meta')} defined at ${plusFile.filePath.filePathToShowToUser}`);
|
|
637
|
+
// Set configDef._userEffectDefinedAtFilePath
|
|
638
|
+
Object.entries(meta).forEach(([configName, configDef]) => {
|
|
639
|
+
if (!configDef.effect)
|
|
613
640
|
return;
|
|
614
|
-
(0, utils_js_1.assert)(
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
});
|
|
627
|
-
(0, utils_js_1.objectEntries)(meta).forEach(([configName, configDefinitionUserLand]) => {
|
|
628
|
-
// User can override an existing config definition
|
|
629
|
-
configDefinitions[configName] = {
|
|
630
|
-
...configDefinitions[configName],
|
|
631
|
-
...configDefinitionUserLand
|
|
632
|
-
};
|
|
633
|
-
});
|
|
641
|
+
(0, utils_js_1.assert)(plusFile.isConfigFile);
|
|
642
|
+
configDef._userEffectDefinedAtFilePath = {
|
|
643
|
+
...plusFile.filePath,
|
|
644
|
+
fileExportPathToShowToUser: ['default', 'meta', configName, 'effect']
|
|
645
|
+
};
|
|
646
|
+
});
|
|
647
|
+
(0, utils_js_1.objectEntries)(meta).forEach(([configName, configDefinitionUserLand]) => {
|
|
648
|
+
// User can override an existing config definition
|
|
649
|
+
configDefinitions[configName] = {
|
|
650
|
+
...configDefinitions[configName],
|
|
651
|
+
...configDefinitionUserLand
|
|
652
|
+
};
|
|
634
653
|
});
|
|
635
654
|
});
|
|
636
655
|
if (filter) {
|
|
@@ -674,67 +693,102 @@ function assertMetaUsage(metaVal, metaConfigDefinedAt) {
|
|
|
674
693
|
}
|
|
675
694
|
});
|
|
676
695
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
696
|
+
// Test: https://github.com/vikejs/vike/blob/441a37c4c1a3b07bb8f6efb1d1f7be297a53974a/test/playground/vite.config.ts#L39
|
|
697
|
+
function applyEffectsConfVal(configValueSources, configDefinitions) {
|
|
698
|
+
(0, utils_js_1.objectEntries)(configDefinitions).forEach(([configNameEffect, configDefEffect]) => {
|
|
699
|
+
const sourceEffect = configValueSources[configNameEffect]?.[0];
|
|
700
|
+
if (!sourceEffect)
|
|
680
701
|
return;
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
(0, utils_js_1.assertUsage)(configDef.env.config, [
|
|
684
|
-
`Cannot add effect to ${picocolors_1.default.cyan(configName)} because its ${picocolors_1.default.cyan('env')} is ${picocolors_1.default.cyan(JSON.stringify(configDef.env))}: effects can only be added to configs with an ${picocolors_1.default.cyan('env')} with ${picocolors_1.default.cyan('{ config: true }')}.`
|
|
685
|
-
].join(' '));
|
|
686
|
-
const source = configValueSources[configName]?.[0];
|
|
687
|
-
if (!source)
|
|
702
|
+
const effect = runEffect(configNameEffect, configDefEffect, sourceEffect);
|
|
703
|
+
if (!effect)
|
|
688
704
|
return;
|
|
689
|
-
|
|
690
|
-
(
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
705
|
+
const { configModFromEffect, configValueEffectSource } = effect;
|
|
706
|
+
applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, configValueEffectSource);
|
|
707
|
+
});
|
|
708
|
+
}
|
|
709
|
+
// Test: https://github.com/vikejs/vike/blob/441a37c4c1a3b07bb8f6efb1d1f7be297a53974a/test/playground/pages/config-meta/effect/e2e-test.ts#L16
|
|
710
|
+
function applyEffectsMetaEnv(configValueSources, configDefinitions) {
|
|
711
|
+
(0, utils_js_1.objectEntries)(configDefinitions).forEach(([configNameEffect, configDefEffect]) => {
|
|
712
|
+
const sourceEffect = configValueSources[configNameEffect]?.[0];
|
|
713
|
+
if (!sourceEffect)
|
|
714
|
+
return;
|
|
715
|
+
const effect = runEffect(configNameEffect, configDefEffect, sourceEffect);
|
|
716
|
+
if (!effect)
|
|
697
717
|
return;
|
|
698
|
-
|
|
699
|
-
|
|
718
|
+
const { configModFromEffect } = effect;
|
|
719
|
+
applyEffectMetaEnv(configModFromEffect, configValueSources, configDefEffect);
|
|
700
720
|
});
|
|
701
721
|
}
|
|
702
|
-
function
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
722
|
+
function runEffect(configName, configDef, source) {
|
|
723
|
+
if (!configDef.effect)
|
|
724
|
+
return null;
|
|
725
|
+
// The value needs to be loaded at config time, that's why we only support effect for configs that are config-only for now.
|
|
726
|
+
(0, utils_js_1.assertUsage)(configDef.env.config, [
|
|
727
|
+
`Cannot add meta.effect to ${picocolors_1.default.cyan(configName)} because its meta.env is ${picocolors_1.default.cyan(JSON.stringify(configDef.env))} but an effect can only be added to a config that has a meta.env with ${picocolors_1.default.cyan('{ config: true }')}.`
|
|
728
|
+
].join(' '));
|
|
729
|
+
(0, utils_js_1.assert)(source.valueIsLoaded);
|
|
730
|
+
const configValueEffectSource = source.value;
|
|
731
|
+
// Call effect
|
|
732
|
+
const configModFromEffect = configDef.effect({
|
|
733
|
+
configValue: configValueEffectSource,
|
|
734
|
+
configDefinedAt: (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, source.definedAtFilePath)
|
|
735
|
+
});
|
|
736
|
+
if (!configModFromEffect)
|
|
737
|
+
return null;
|
|
738
|
+
return { configModFromEffect, configValueEffectSource };
|
|
739
|
+
}
|
|
740
|
+
function applyEffectConfVal(configModFromEffect, sourceEffect, configValueSources, configNameEffect, configDefEffect, configDefinitions, configValueEffectSource) {
|
|
741
|
+
(0, utils_js_1.objectEntries)(configModFromEffect).forEach(([configNameTarget, configValue]) => {
|
|
742
|
+
if (configNameTarget === 'meta')
|
|
743
|
+
return;
|
|
744
|
+
const configDef = configDefinitions[configNameTarget];
|
|
745
|
+
(0, utils_js_1.assert)(configDef);
|
|
746
|
+
(0, utils_js_1.assert)(configDefEffect._userEffectDefinedAtFilePath);
|
|
747
|
+
const configValueSource = {
|
|
748
|
+
definedAtFilePath: configDefEffect._userEffectDefinedAtFilePath,
|
|
749
|
+
plusFile: sourceEffect.plusFile,
|
|
750
|
+
locationId: sourceEffect.locationId,
|
|
751
|
+
configEnv: configDef.env,
|
|
752
|
+
valueIsLoadedWithImport: false,
|
|
753
|
+
valueIsDefinedByPlusValueFile: false,
|
|
754
|
+
valueIsLoaded: true,
|
|
755
|
+
value: configValue
|
|
756
|
+
};
|
|
757
|
+
const isValueGlobalSource = resolveIsGlobalValue(configDefEffect.global, configValueEffectSource);
|
|
758
|
+
const isValueGlobalTarget = resolveIsGlobalValue(configDef.global, configValue);
|
|
759
|
+
const isGlobalHumanReadable = (isGlobal) => `${isGlobal ? 'non-' : ''}global`;
|
|
760
|
+
// The error message make it sound like it's an inherent limitation, it actually isn't (both ways can make senses).
|
|
761
|
+
(0, utils_js_1.assertUsage)(isValueGlobalSource === isValueGlobalTarget, `The configuration ${picocolors_1.default.cyan(configNameEffect)} is set to ${picocolors_1.default.cyan(JSON.stringify(configValueEffectSource))} which is considered ${isGlobalHumanReadable(isValueGlobalSource)}. However, it has a meta.effect that sets the configuration ${picocolors_1.default.cyan(configNameTarget)} to ${picocolors_1.default.cyan(JSON.stringify(configValue))} which is considered ${isGlobalHumanReadable(isValueGlobalTarget)}. This is contradictory: make sure the values are either both non-global or both global.`);
|
|
762
|
+
configValueSources[configNameTarget] ?? (configValueSources[configNameTarget] = []);
|
|
763
|
+
configValueSources[configNameTarget].push(configValueSource);
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
function applyEffectMetaEnv(configModFromEffect, configValueSources, configDefEffect) {
|
|
767
|
+
const notSupported = `${picocolors_1.default.cyan('meta.effect')} currently only supports setting the value of a config, or modifying the ${picocolors_1.default.cyan('meta.env')} of a config.`;
|
|
768
|
+
(0, utils_js_1.objectEntries)(configModFromEffect).forEach(([configNameTarget, configValue]) => {
|
|
769
|
+
if (configNameTarget !== 'meta')
|
|
770
|
+
return;
|
|
771
|
+
let configDefinedAt;
|
|
772
|
+
if (configDefEffect._userEffectDefinedAtFilePath) {
|
|
773
|
+
configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configNameTarget, configDefEffect._userEffectDefinedAtFilePath);
|
|
727
774
|
}
|
|
728
775
|
else {
|
|
729
|
-
|
|
730
|
-
/* To implement being able to set a config value in an effect:
|
|
731
|
-
* - Copy and append definedAtFile.fileExportPathToShowToUser with ['meta', configName, 'effect']
|
|
732
|
-
* - Copying the definedAtFile of the config that defines the effect
|
|
733
|
-
* - Same precedence as the config that sets the value triggering the effect (not the config defining the effect)
|
|
734
|
-
* - Apply sortConfigValueSources() again?
|
|
735
|
-
configValueSources.push()
|
|
736
|
-
*/
|
|
776
|
+
configDefinedAt = null;
|
|
737
777
|
}
|
|
778
|
+
assertMetaUsage(configValue, configDefinedAt);
|
|
779
|
+
(0, utils_js_1.objectEntries)(configValue).forEach(([configTargetName, configTargetDef]) => {
|
|
780
|
+
{
|
|
781
|
+
const keys = Object.keys(configTargetDef);
|
|
782
|
+
(0, utils_js_1.assertUsage)(keys.includes('env'), notSupported);
|
|
783
|
+
(0, utils_js_1.assertUsage)(keys.length === 1, notSupported);
|
|
784
|
+
}
|
|
785
|
+
const envOverriden = configTargetDef.env;
|
|
786
|
+
const sources = configValueSources[configTargetName];
|
|
787
|
+
sources?.forEach((configValueSource) => {
|
|
788
|
+
// Apply effect
|
|
789
|
+
configValueSource.configEnv = envOverriden;
|
|
790
|
+
});
|
|
791
|
+
});
|
|
738
792
|
});
|
|
739
793
|
}
|
|
740
794
|
function getComputed(configValueSources, configDefinitions) {
|
|
@@ -754,7 +808,7 @@ function getComputed(configValueSources, configDefinitions) {
|
|
|
754
808
|
}
|
|
755
809
|
// Show error message upon unknown config
|
|
756
810
|
function assertKnownConfigs(configDefinitionsResolved, plusFilesAll) {
|
|
757
|
-
const configDefinitionsAll = getConfigDefinitions(plusFilesAll);
|
|
811
|
+
const configDefinitionsAll = getConfigDefinitions(Object.values(plusFilesAll).flat());
|
|
758
812
|
const configNamesKnownAll = Object.keys(configDefinitionsAll);
|
|
759
813
|
const configNamesGlobal = Object.keys(configDefinitionsResolved.configDefinitionsGlobal);
|
|
760
814
|
(0, utils_js_1.objectEntries)(configDefinitionsResolved.configDefinitionsLocal).forEach(([_locationId, { configDefinitions, plusFiles }]) => {
|
|
@@ -848,7 +902,7 @@ function determineRouteFilesystem(locationId, configValueSources) {
|
|
|
848
902
|
function getFilesystemRoutingRootEffect(configFilesystemRoutingRoot, configName) {
|
|
849
903
|
(0, utils_js_1.assert)(configFilesystemRoutingRoot.configEnv.config);
|
|
850
904
|
// Eagerly loaded since it's config-only
|
|
851
|
-
(0, utils_js_1.assert)(
|
|
905
|
+
(0, utils_js_1.assert)(configFilesystemRoutingRoot.valueIsLoaded);
|
|
852
906
|
const { value } = configFilesystemRoutingRoot;
|
|
853
907
|
const configDefinedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', configName, configFilesystemRoutingRoot.definedAtFilePath);
|
|
854
908
|
(0, utils_js_1.assertUsage)(typeof value === 'string', `${configDefinedAt} should be a string`);
|
|
@@ -908,8 +962,8 @@ function getConfVal(plusFile, configName) {
|
|
|
908
962
|
if (!configNames.includes(configName))
|
|
909
963
|
return null;
|
|
910
964
|
if (plusFile.isNotLoaded)
|
|
911
|
-
return {
|
|
912
|
-
const confVal = {
|
|
965
|
+
return { valueIsLoaded: false };
|
|
966
|
+
const confVal = { value: plusFile.fileExportsByConfigName[configName], valueIsLoaded: true };
|
|
913
967
|
return confVal;
|
|
914
968
|
}
|
|
915
969
|
function resolveConfigEnv(configEnv, filePath) {
|
|
@@ -938,3 +992,14 @@ function isGlobalLocation(locationId, plusFilesAll) {
|
|
|
938
992
|
.map(([locationId]) => locationId);
|
|
939
993
|
return locationIdsPage.every((locId) => (0, filesystemRouting_js_1.isInherited)(locationId, locId));
|
|
940
994
|
}
|
|
995
|
+
function isOverriden(source, configName, pageConfig) {
|
|
996
|
+
const configDef = pageConfig.configDefinitions[configName];
|
|
997
|
+
(0, utils_js_1.assert)(configDef);
|
|
998
|
+
if (configDef.cumulative)
|
|
999
|
+
return false;
|
|
1000
|
+
const sources = pageConfig.configValueSources[configName];
|
|
1001
|
+
(0, utils_js_1.assert)(sources);
|
|
1002
|
+
const idx = sources.indexOf(source);
|
|
1003
|
+
(0, utils_js_1.assert)(idx >= 0);
|
|
1004
|
+
return idx > 0;
|
|
1005
|
+
}
|