vike 0.4.217 → 0.4.218-commit-ed9b3d4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/__internal/index.js +9 -8
- package/dist/cjs/node/api/build.js +21 -12
- package/dist/cjs/node/api/context.js +5 -1
- package/dist/cjs/node/api/index.js +17 -7
- package/dist/cjs/node/api/prepareViteApiCall.js +128 -26
- package/dist/cjs/node/api/utils.js +2 -0
- package/dist/cjs/node/cli/entry.js +19 -7
- package/dist/cjs/node/plugin/index.js +6 -5
- package/dist/cjs/node/plugin/plugins/autoFullBuild.js +3 -4
- package/dist/cjs/node/plugin/plugins/baseUrls.js +20 -18
- package/dist/cjs/node/plugin/plugins/buildConfig.js +2 -2
- package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
- package/dist/cjs/node/plugin/plugins/commonConfig.js +6 -6
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +2 -3
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/crawlPlusFiles.js +22 -111
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +189 -16
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +2 -1
- package/dist/cjs/node/plugin/plugins/setGlobalContext.js +1 -1
- package/dist/cjs/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
- package/dist/cjs/node/plugin/shared/getHttpRequestAsyncStore.js +17 -7
- package/dist/cjs/node/prerender/isPrerenderEnabled.js +8 -0
- package/dist/cjs/node/prerender/runPrerender.js +22 -35
- package/dist/cjs/node/runtime/globalContext.js +76 -29
- package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +2 -2
- package/dist/cjs/node/runtime/index-common.js +0 -15
- package/dist/cjs/node/runtime/onLoad.js +17 -3
- package/dist/cjs/node/runtime/renderPage/analyzePage.js +2 -2
- package/dist/cjs/node/runtime/renderPage/createHttpResponse/getCacheControl.js +2 -2
- package/dist/cjs/node/runtime/renderPage/loadUserFilesServerSide.js +1 -1
- package/dist/cjs/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
- package/dist/cjs/node/runtime/utils.js +1 -0
- package/dist/cjs/node/runtime-dev/index.js +17 -7
- package/dist/cjs/node/shared/resolveBase.js +2 -2
- package/dist/cjs/shared/getPageFiles/analyzeClientSide.js +3 -3
- package/dist/cjs/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +2 -3
- package/dist/cjs/shared/getPageFiles.js +3 -9
- package/dist/cjs/shared/hooks/getHook.js +3 -3
- package/dist/cjs/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +113 -81
- package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +79 -54
- package/dist/cjs/shared/route/loadPageRoutes.js +3 -3
- package/dist/cjs/shared/utils.js +1 -0
- package/dist/cjs/utils/PROJECT_VERSION.js +1 -1
- package/dist/cjs/utils/assert.js +4 -3
- package/dist/cjs/utils/debug.js +11 -6
- package/dist/cjs/utils/objectReplace.js +9 -0
- package/dist/esm/__internal/index.d.ts +3 -5
- package/dist/esm/__internal/index.js +4 -5
- package/dist/esm/client/client-routing-runtime/createPageContext.js +7 -1
- package/dist/esm/client/client-routing-runtime/entry.d.ts +1 -1
- package/dist/esm/client/client-routing-runtime/entry.js +0 -1
- package/dist/esm/client/client-routing-runtime/getPageContextCurrent.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +4 -4
- package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +1 -1
- package/dist/esm/client/client-routing-runtime/prefetch/getPrefetchSettings.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/prefetch.d.ts +2 -2
- package/dist/esm/client/client-routing-runtime/prefetch.js +2 -2
- package/dist/esm/client/server-routing-runtime/entry.d.ts +1 -1
- package/dist/esm/client/server-routing-runtime/entry.js +0 -1
- package/dist/esm/client/server-routing-runtime/getPageContext.d.ts +1 -1
- package/dist/esm/client/server-routing-runtime/getPageContext.js +8 -2
- package/dist/esm/client/shared/executeOnRenderClientHook.d.ts +2 -2
- package/dist/esm/client/shared/loadUserFilesClientSide.d.ts +2 -2
- package/dist/esm/client/shared/loadUserFilesClientSide.js +2 -2
- package/dist/esm/client/shared/preparePageContextForUserConsumptionClientSide.d.ts +2 -2
- package/dist/esm/node/api/build.js +4 -5
- package/dist/esm/node/api/context.d.ts +3 -1
- package/dist/esm/node/api/context.js +6 -2
- package/dist/esm/node/api/prepareViteApiCall.d.ts +9 -3
- package/dist/esm/node/api/prepareViteApiCall.js +111 -22
- package/dist/esm/node/api/utils.d.ts +2 -0
- package/dist/esm/node/api/utils.js +2 -0
- package/dist/esm/node/cli/entry.js +2 -0
- package/dist/esm/node/cli/parseCli.d.ts +1 -1
- package/dist/esm/node/plugin/index.d.ts +1 -1
- package/dist/esm/node/plugin/index.js +6 -5
- package/dist/esm/node/plugin/plugins/autoFullBuild.js +3 -4
- package/dist/esm/node/plugin/plugins/baseUrls.d.ts +1 -2
- package/dist/esm/node/plugin/plugins/baseUrls.js +21 -19
- package/dist/esm/node/plugin/plugins/buildConfig.js +2 -2
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.d.ts +2 -2
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/index.js +16 -17
- package/dist/esm/node/plugin/plugins/commonConfig.d.ts +7 -1
- package/dist/esm/node/plugin/plugins/commonConfig.js +2 -2
- package/dist/esm/node/plugin/plugins/importUserCode/getVirtualFileImportUserCode.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.d.ts +1 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +2 -3
- 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 +23 -112
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.d.ts +99 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig.js +189 -16
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVirtualFilePageConfigs.js +2 -1
- package/dist/esm/node/plugin/plugins/setGlobalContext.js +1 -1
- package/dist/esm/node/plugin/plugins/workaroundVite6HmrRegression.d.ts +3 -0
- package/dist/esm/node/plugin/plugins/{vite6HmrRegressionWorkaround.js → workaroundVite6HmrRegression.js} +3 -3
- package/dist/esm/node/plugin/shared/getEnvVarObject.d.ts +1 -1
- package/dist/esm/node/prerender/isPrerenderEnabled.d.ts +3 -0
- package/dist/esm/node/prerender/isPrerenderEnabled.js +6 -0
- package/dist/esm/node/prerender/runPrerender.d.ts +1 -2
- package/dist/esm/node/prerender/runPrerender.js +4 -27
- package/dist/esm/node/runtime/globalContext.d.ts +6 -4
- package/dist/esm/node/runtime/globalContext.js +76 -29
- package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +1 -1
- package/dist/esm/node/runtime/index-common.d.ts +0 -1
- package/dist/esm/node/runtime/index-common.js +0 -15
- package/dist/esm/node/runtime/index-deprecated.d.ts +1 -0
- package/dist/esm/node/runtime/onLoad.js +16 -2
- package/dist/esm/node/runtime/renderPage/analyzePage.js +1 -1
- package/dist/esm/node/runtime/renderPage/createHttpResponse/getCacheControl.js +1 -1
- package/dist/esm/node/runtime/renderPage/executeOnBeforeRenderAndDataHooks.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.d.ts +1 -1
- package/dist/esm/node/runtime/renderPage/loadUserFilesServerSide.js +2 -2
- package/dist/esm/node/runtime/renderPage/preparePageContextForUserConsumptionServerSide.d.ts +2 -2
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.d.ts +5 -5
- package/dist/esm/node/runtime/renderPage/renderPageAlreadyRouted.js +3 -3
- package/dist/esm/node/runtime/utils.d.ts +1 -0
- package/dist/esm/node/runtime/utils.js +1 -0
- package/dist/esm/node/shared/resolveBase.js +2 -2
- package/dist/esm/shared/getPageFiles/analyzeClientSide.js +1 -1
- package/dist/esm/shared/getPageFiles/{setPageFiles.js → getPageFiles.js} +2 -3
- package/dist/esm/shared/getPageFiles.d.ts +2 -5
- package/dist/esm/shared/getPageFiles.js +1 -4
- package/dist/esm/shared/hooks/getHook.d.ts +3 -3
- package/dist/esm/shared/hooks/getHook.js +1 -1
- package/dist/esm/shared/page-configs/Config.d.ts +8 -2
- package/dist/esm/shared/page-configs/PageConfig.d.ts +7 -3
- package/dist/esm/shared/{getPageFiles/getExports.d.ts → page-configs/getPageConfigUserFriendly.d.ts} +23 -12
- package/dist/esm/shared/{getPageFiles/getExports.js → page-configs/getPageConfigUserFriendly.js} +112 -80
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.d.ts +28 -4
- package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +79 -54
- package/dist/esm/shared/route/executeGuardHook.d.ts +2 -2
- package/dist/esm/shared/route/loadPageRoutes.js +1 -1
- package/dist/esm/shared/types.d.ts +1 -1
- package/dist/esm/shared/utils.d.ts +1 -0
- package/dist/esm/shared/utils.js +1 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.d.ts +1 -1
- package/dist/esm/utils/PROJECT_VERSION.js +1 -1
- package/dist/esm/utils/assert.js +4 -3
- package/dist/esm/utils/debug.d.ts +1 -1
- package/dist/esm/utils/debug.js +11 -6
- package/dist/esm/utils/objectReplace.d.ts +1 -0
- package/dist/esm/utils/objectReplace.js +6 -0
- package/dist/esm/utils/projectInfo.d.ts +1 -1
- package/package.json +3 -22
- package/__internal/loadImportBuild.js +0 -3
- package/__internal/setup.js +0 -3
- package/dist/cjs/node/plugin/plugins/commonConfig/pluginName.js +0 -4
- package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -128
- package/dist/cjs/node/runtime/globalContext/loadImportBuild.js +0 -25
- package/dist/cjs/node/runtime/page-files/getPageFilesExports.js +0 -22
- package/dist/cjs/node/runtime/page-files/setup.js +0 -5
- package/dist/esm/client/client-routing-runtime/pageFiles.d.ts +0 -1
- package/dist/esm/client/client-routing-runtime/pageFiles.js +0 -4
- package/dist/esm/client/server-routing-runtime/pageFiles.d.ts +0 -1
- package/dist/esm/client/server-routing-runtime/pageFiles.js +0 -4
- package/dist/esm/node/plugin/plugins/commonConfig/pluginName.d.ts +0 -1
- package/dist/esm/node/plugin/plugins/commonConfig/pluginName.js +0 -1
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.d.ts +0 -104
- package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js +0 -123
- package/dist/esm/node/plugin/plugins/vite6HmrRegressionWorkaround.d.ts +0 -3
- package/dist/esm/node/runtime/globalContext/loadImportBuild.d.ts +0 -18
- package/dist/esm/node/runtime/globalContext/loadImportBuild.js +0 -23
- package/dist/esm/node/runtime/page-files/getPageFilesExports.d.ts +0 -2
- package/dist/esm/node/runtime/page-files/getPageFilesExports.js +0 -20
- package/dist/esm/node/runtime/page-files/setup.d.ts +0 -1
- package/dist/esm/node/runtime/page-files/setup.js +0 -3
- package/dist/cjs/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
- package/dist/cjs/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
- package/dist/esm/node/plugin/plugins/{importBuild → buildEntry}/getVikeManifest.js +0 -0
- package/dist/esm/shared/getPageFiles/{setPageFiles.d.ts → getPageFiles.d.ts} +1 -1
- /package/dist/esm/shared/page-configs/{getConfigValue.d.ts → getConfigValueRuntime.d.ts} +0 -0
- /package/dist/esm/shared/page-configs/{getConfigValue.js → getConfigValueRuntime.js} +0 -0
|
@@ -23,7 +23,8 @@ import { clearFilesEnvMap, resolveConfigEnvWithFileName, resolvePointerImportOfC
|
|
|
23
23
|
import { getFilePathResolved } from '../../../shared/getFilePath.js';
|
|
24
24
|
import { getConfigValueBuildTime } from '../../../../../shared/page-configs/getConfigValueBuildTime.js';
|
|
25
25
|
import { assertExtensionsPeerDependencies, assertExtensionsConventions } from './assertExtensions.js';
|
|
26
|
-
import {
|
|
26
|
+
import { getPageConfigUserFriendlyNew } from '../../../../../shared/page-configs/getPageConfigUserFriendly.js';
|
|
27
|
+
import { getConfigValuesBase } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
27
28
|
assertIsNotProductionRuntime();
|
|
28
29
|
let restartVite = false;
|
|
29
30
|
let wasConfigInvalid = null;
|
|
@@ -78,6 +79,7 @@ async function getVikeConfig(config, { doNotRestartViteOnError } = {}) {
|
|
|
78
79
|
return await getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError ?? false);
|
|
79
80
|
}
|
|
80
81
|
async function getVikeConfig2(userRootDir, isDev, vikeVitePluginOptions) {
|
|
82
|
+
assert(vikeVitePluginOptions);
|
|
81
83
|
return await getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, false);
|
|
82
84
|
}
|
|
83
85
|
async function getVikeConfigEntry(userRootDir, isDev, vikeVitePluginOptions, doNotRestartViteOnError) {
|
|
@@ -92,8 +94,8 @@ async function isV1Design(config) {
|
|
|
92
94
|
const isV1Design = pageConfigs.length > 0;
|
|
93
95
|
return isV1Design;
|
|
94
96
|
}
|
|
95
|
-
async function loadInterfaceFiles(userRootDir
|
|
96
|
-
const plusFiles = await findPlusFiles(userRootDir, null
|
|
97
|
+
async function loadInterfaceFiles(userRootDir) {
|
|
98
|
+
const plusFiles = await findPlusFiles(userRootDir, null);
|
|
97
99
|
const configFiles = [];
|
|
98
100
|
const valueFiles = [];
|
|
99
101
|
plusFiles.forEach((f) => {
|
|
@@ -238,18 +240,19 @@ async function loadVikeConfig_withErrorHandling(userRootDir, isDev, vikeVitePlug
|
|
|
238
240
|
configDefinitions: {},
|
|
239
241
|
configValueSources: {}
|
|
240
242
|
},
|
|
241
|
-
vikeConfigGlobal: resolveVikeConfigGlobal({}, {})
|
|
243
|
+
vikeConfigGlobal: resolveVikeConfigGlobal({}, {}),
|
|
244
|
+
vikeConfigNew: {
|
|
245
|
+
global: getPageConfigUserFriendlyNew({ configValues: {} })
|
|
246
|
+
}
|
|
242
247
|
};
|
|
243
248
|
return dummyData;
|
|
244
249
|
}
|
|
245
250
|
}
|
|
246
251
|
}
|
|
247
252
|
async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
248
|
-
const
|
|
249
|
-
const interfaceFilesByLocationId = await loadInterfaceFiles(userRootDir, crawlWithGit);
|
|
253
|
+
const interfaceFilesByLocationId = await loadInterfaceFiles(userRootDir);
|
|
250
254
|
const importedFilesLoaded = {};
|
|
251
|
-
const { pageConfigGlobal,
|
|
252
|
-
const vikeConfigGlobal = resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues);
|
|
255
|
+
const { pageConfigGlobal, vikeConfigGlobal } = await getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded, vikeVitePluginOptions);
|
|
253
256
|
const pageConfigs = await Promise.all(objectEntries(interfaceFilesByLocationId)
|
|
254
257
|
.filter(([_pageId, interfaceFiles]) => isDefiningPage(interfaceFiles))
|
|
255
258
|
.map(async ([locationId]) => {
|
|
@@ -299,7 +302,37 @@ async function loadVikeConfig(userRootDir, vikeVitePluginOptions) {
|
|
|
299
302
|
return pageConfig;
|
|
300
303
|
}));
|
|
301
304
|
assertPageConfigs(pageConfigs);
|
|
302
|
-
|
|
305
|
+
const configValues = getConfigValues(pageConfigGlobal);
|
|
306
|
+
const global = getPageConfigUserFriendlyNew({ configValues });
|
|
307
|
+
return { pageConfigs, pageConfigGlobal, vikeConfigGlobal, vikeConfigNew: { global } };
|
|
308
|
+
}
|
|
309
|
+
function getConfigValues(pageConfig) {
|
|
310
|
+
const configValues = {};
|
|
311
|
+
getConfigValuesBase(pageConfig, (configEnv) => !!configEnv.config).forEach((entry) => {
|
|
312
|
+
if (entry.configValueBase.type === 'computed') {
|
|
313
|
+
assert('value' in entry); // Help TS
|
|
314
|
+
const { configValueBase, value, configName } = entry;
|
|
315
|
+
configValues[configName] = { ...configValueBase, value };
|
|
316
|
+
}
|
|
317
|
+
if (entry.configValueBase.type === 'standard') {
|
|
318
|
+
assert('sourceRelevant' in entry); // Help TS
|
|
319
|
+
const { configValueBase, sourceRelevant, configName } = entry;
|
|
320
|
+
assert('value' in sourceRelevant);
|
|
321
|
+
const { value } = sourceRelevant;
|
|
322
|
+
configValues[configName] = { ...configValueBase, value };
|
|
323
|
+
}
|
|
324
|
+
if (entry.configValueBase.type === 'cumulative') {
|
|
325
|
+
assert('sourcesRelevant' in entry); // Help TS
|
|
326
|
+
const { configValueBase, sourcesRelevant, configName } = entry;
|
|
327
|
+
const values = [];
|
|
328
|
+
sourcesRelevant.forEach((source) => {
|
|
329
|
+
assert('value' in source);
|
|
330
|
+
values.push(source.value);
|
|
331
|
+
});
|
|
332
|
+
configValues[configName] = { ...configValueBase, value: values };
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
return configValues;
|
|
303
336
|
}
|
|
304
337
|
// TODO/soon: refactor
|
|
305
338
|
// - Dedupe: most of the assertUsageGlobalConfigs() code below is a copy-paste of the assertUsage() logic inside getGlobalConfigs()
|
|
@@ -377,7 +410,7 @@ function getInterfaceFilesRelevant(interfaceFilesByLocationId, locationIdPage) {
|
|
|
377
410
|
.sort(([locationId1], [locationId2]) => sortAfterInheritanceOrder(locationId1, locationId2, locationIdPage)));
|
|
378
411
|
return interfaceFilesRelevant;
|
|
379
412
|
}
|
|
380
|
-
async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded) {
|
|
413
|
+
async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importedFilesLoaded, vikeVitePluginOptions) {
|
|
381
414
|
const locationIds = objectKeys(interfaceFilesByLocationId);
|
|
382
415
|
const interfaceFilesGlobal = objectFromEntries(objectEntries(interfaceFilesByLocationId).filter(([locationId]) => {
|
|
383
416
|
return isGlobalLocation(locationId, locationIds);
|
|
@@ -419,20 +452,42 @@ async function getGlobalConfigs(interfaceFilesByLocationId, userRootDir, importe
|
|
|
419
452
|
const configValueSource = sources[0];
|
|
420
453
|
if (!configValueSource)
|
|
421
454
|
return;
|
|
455
|
+
pageConfigGlobal.configValueSources[configName] = sources;
|
|
422
456
|
if (configName === 'onBeforeRoute' || configName === 'onPrerenderStart') {
|
|
423
457
|
assert(!('value' in configValueSource));
|
|
424
|
-
pageConfigGlobal.configValueSources[configName] = [configValueSource];
|
|
425
458
|
}
|
|
426
459
|
else {
|
|
427
460
|
assert('value' in configValueSource);
|
|
428
461
|
if (configName === 'prerender' && typeof configValueSource.value === 'boolean')
|
|
429
462
|
return;
|
|
430
|
-
const { filePathToShowToUser } = configValueSource.definedAtFilePath;
|
|
431
|
-
assertWarning(false, `Being able to define config ${pc.cyan(configName)} in ${filePathToShowToUser} is experimental and will likely be removed. Define the config ${pc.cyan(configName)} in Vike's Vite plugin options instead.`, { onlyOnce: true });
|
|
432
463
|
pageConfigGlobalValues[configName] = configValueSource.value;
|
|
433
464
|
}
|
|
434
465
|
}));
|
|
435
|
-
|
|
466
|
+
const vikeConfigGlobal = resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues);
|
|
467
|
+
{
|
|
468
|
+
assert(isObject(vikeVitePluginOptions));
|
|
469
|
+
Object.entries(vikeVitePluginOptions).forEach(([configName, value]) => {
|
|
470
|
+
if (pageConfigGlobal.configValueSources[configName])
|
|
471
|
+
return;
|
|
472
|
+
pageConfigGlobal.configValueSources[configName] = [];
|
|
473
|
+
pageConfigGlobal.configValueSources[configName].push({
|
|
474
|
+
value,
|
|
475
|
+
configEnv: { config: true },
|
|
476
|
+
definedAtFilePath: {
|
|
477
|
+
...getFilePathResolved({
|
|
478
|
+
userRootDir,
|
|
479
|
+
filePathAbsoluteUserRootDir: '/vite.config.js'
|
|
480
|
+
}),
|
|
481
|
+
fileExportPathToShowToUser: null
|
|
482
|
+
},
|
|
483
|
+
locationId: '/',
|
|
484
|
+
isOverriden: false,
|
|
485
|
+
valueIsImportedAtRuntime: false,
|
|
486
|
+
valueIsDefinedByPlusFile: false
|
|
487
|
+
});
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
return { pageConfigGlobal, pageConfigGlobalValues, vikeConfigGlobal };
|
|
436
491
|
}
|
|
437
492
|
async function resolveConfigValueSources(configName, configDef, interfaceFilesRelevant, userRootDir, importedFilesLoaded) {
|
|
438
493
|
const sourcesInfo = [];
|
|
@@ -793,8 +848,8 @@ function getComputed(configValueSources, configDefinitions) {
|
|
|
793
848
|
});
|
|
794
849
|
return configValuesComputed;
|
|
795
850
|
}
|
|
796
|
-
async function findPlusFiles(userRootDir, outDirRoot
|
|
797
|
-
const files = await crawlPlusFiles(userRootDir, outDirRoot
|
|
851
|
+
async function findPlusFiles(userRootDir, outDirRoot) {
|
|
852
|
+
const files = await crawlPlusFiles(userRootDir, outDirRoot);
|
|
798
853
|
const plusFiles = files.map(({ filePathAbsoluteUserRootDir }) => getFilePathResolved({ filePathAbsoluteUserRootDir, userRootDir }));
|
|
799
854
|
return plusFiles;
|
|
800
855
|
}
|
|
@@ -1010,3 +1065,121 @@ function sortConfigValueSources(configValueSources, locationIdPage) {
|
|
|
1010
1065
|
function getConfigValueInterfaceFile(interfaceFile, configName) {
|
|
1011
1066
|
return interfaceFile.fileExportsByConfigName[configName]?.configValue;
|
|
1012
1067
|
}
|
|
1068
|
+
// TODO: refactor code below
|
|
1069
|
+
function resolveVikeConfigGlobal(vikeVitePluginOptions, pageConfigGlobalValues) {
|
|
1070
|
+
// TODO/v1-release: remove
|
|
1071
|
+
assertVikeConfigGlobal(vikeVitePluginOptions, ({ prop, errMsg }) => `vite.config.js > vike option ${prop} ${errMsg}`);
|
|
1072
|
+
const configs = [vikeVitePluginOptions];
|
|
1073
|
+
assertVikeConfigGlobal(pageConfigGlobalValues, ({ prop, errMsg }) => {
|
|
1074
|
+
// Can we add the config file path ?
|
|
1075
|
+
return `config ${pc.cyan(prop)} ${errMsg}`;
|
|
1076
|
+
});
|
|
1077
|
+
configs.push(pageConfigGlobalValues);
|
|
1078
|
+
const vikeConfigGlobal = {
|
|
1079
|
+
disableAutoFullBuild: pickFirst(configs.map((c) => c.disableAutoFullBuild)) ?? null,
|
|
1080
|
+
prerender: resolvePrerenderOptions(configs),
|
|
1081
|
+
includeAssetsImportedByServer: pickFirst(configs.map((c) => c.includeAssetsImportedByServer)) ?? true,
|
|
1082
|
+
baseServer: pickFirst(configs.map((c) => c.baseServer)) ?? null,
|
|
1083
|
+
baseAssets: pickFirst(configs.map((c) => c.baseAssets)) ?? null,
|
|
1084
|
+
redirects: merge(configs.map((c) => c.redirects)) ?? {},
|
|
1085
|
+
disableUrlNormalization: pickFirst(configs.map((c) => c.disableUrlNormalization)) ?? false,
|
|
1086
|
+
trailingSlash: pickFirst(configs.map((c) => c.trailingSlash)) ?? false
|
|
1087
|
+
};
|
|
1088
|
+
return vikeConfigGlobal;
|
|
1089
|
+
}
|
|
1090
|
+
function resolvePrerenderOptions(configs) {
|
|
1091
|
+
if (!configs.some((c) => c.prerender)) {
|
|
1092
|
+
return false;
|
|
1093
|
+
}
|
|
1094
|
+
const configsPrerender = configs.map((c) => c.prerender).filter(isObject2);
|
|
1095
|
+
return {
|
|
1096
|
+
partial: pickFirst(configsPrerender.map((c) => c.partial)) ?? false,
|
|
1097
|
+
noExtraDir: pickFirst(configsPrerender.map((c) => c.noExtraDir)) ?? false,
|
|
1098
|
+
parallel: pickFirst(configsPrerender.map((c) => c.parallel)) ?? true,
|
|
1099
|
+
disableAutoRun: pickFirst(configsPrerender.map((c) => c.disableAutoRun)) ?? false
|
|
1100
|
+
};
|
|
1101
|
+
}
|
|
1102
|
+
function isObject2(p) {
|
|
1103
|
+
return typeof p === 'object';
|
|
1104
|
+
}
|
|
1105
|
+
function merge(objs) {
|
|
1106
|
+
const obj = {};
|
|
1107
|
+
objs.forEach((e) => {
|
|
1108
|
+
Object.assign(obj, e);
|
|
1109
|
+
});
|
|
1110
|
+
return obj;
|
|
1111
|
+
}
|
|
1112
|
+
function pickFirst(arr) {
|
|
1113
|
+
return arr.filter((v) => v !== undefined)[0];
|
|
1114
|
+
}
|
|
1115
|
+
function assertVikeConfigGlobal(vikeConfigGlobal, wrongUsageMsg) {
|
|
1116
|
+
const wrongUsageError = check(vikeConfigGlobal);
|
|
1117
|
+
if (wrongUsageError) {
|
|
1118
|
+
assertUsage(false, wrongUsageMsg(wrongUsageError));
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
function check(vikeConfigGlobal) {
|
|
1122
|
+
assert(isObject(vikeConfigGlobal));
|
|
1123
|
+
{
|
|
1124
|
+
const prop = 'disableUrlNormalization';
|
|
1125
|
+
if (!hasProp(vikeConfigGlobal, prop, 'boolean') && !hasProp(vikeConfigGlobal, prop, 'undefined'))
|
|
1126
|
+
return { prop, errMsg: 'should be a boolean' };
|
|
1127
|
+
}
|
|
1128
|
+
{
|
|
1129
|
+
const prop = 'trailingSlash';
|
|
1130
|
+
if (!hasProp(vikeConfigGlobal, prop, 'boolean') && !hasProp(vikeConfigGlobal, prop, 'undefined'))
|
|
1131
|
+
return { prop, errMsg: 'should be a boolean' };
|
|
1132
|
+
}
|
|
1133
|
+
{
|
|
1134
|
+
const prop = 'redirects';
|
|
1135
|
+
const { redirects } = vikeConfigGlobal;
|
|
1136
|
+
if (!(redirects === undefined ||
|
|
1137
|
+
(isObject(redirects) && Object.values(redirects).every((v) => typeof v === 'string'))))
|
|
1138
|
+
return { prop, errMsg: 'should be an object of strings' };
|
|
1139
|
+
}
|
|
1140
|
+
{
|
|
1141
|
+
const prop = 'disableAutoFullBuild';
|
|
1142
|
+
if (!hasProp(vikeConfigGlobal, prop, 'boolean') &&
|
|
1143
|
+
!hasProp(vikeConfigGlobal, prop, 'undefined') &&
|
|
1144
|
+
!(vikeConfigGlobal[prop] === 'prerender'))
|
|
1145
|
+
return { prop, errMsg: "should be a boolean or 'prerender'" };
|
|
1146
|
+
}
|
|
1147
|
+
{
|
|
1148
|
+
const prop = 'includeAssetsImportedByServer';
|
|
1149
|
+
if (!hasProp(vikeConfigGlobal, prop, 'boolean') && !hasProp(vikeConfigGlobal, prop, 'undefined'))
|
|
1150
|
+
return { prop, errMsg: 'should be a boolean' };
|
|
1151
|
+
}
|
|
1152
|
+
{
|
|
1153
|
+
const prop = 'prerender';
|
|
1154
|
+
if (!hasProp(vikeConfigGlobal, prop, 'object') &&
|
|
1155
|
+
!hasProp(vikeConfigGlobal, prop, 'boolean') &&
|
|
1156
|
+
!hasProp(vikeConfigGlobal, prop, 'undefined'))
|
|
1157
|
+
return { prop, errMsg: 'should be an object or a boolean' };
|
|
1158
|
+
}
|
|
1159
|
+
const configVikePrerender = vikeConfigGlobal.prerender;
|
|
1160
|
+
if (typeof configVikePrerender === 'object') {
|
|
1161
|
+
{
|
|
1162
|
+
const p = 'partial';
|
|
1163
|
+
if (!hasProp(configVikePrerender, p, 'boolean') && !hasProp(configVikePrerender, p, 'undefined'))
|
|
1164
|
+
return { prop: `prerender.${p}`, errMsg: 'should be a boolean' };
|
|
1165
|
+
}
|
|
1166
|
+
{
|
|
1167
|
+
const p = 'noExtraDir';
|
|
1168
|
+
if (!hasProp(configVikePrerender, p, 'boolean') && !hasProp(configVikePrerender, p, 'undefined'))
|
|
1169
|
+
return { prop: `prerender.${p}`, errMsg: 'should be a boolean' };
|
|
1170
|
+
}
|
|
1171
|
+
{
|
|
1172
|
+
const p = 'disableAutoRun';
|
|
1173
|
+
if (!hasProp(configVikePrerender, p, 'boolean') && !hasProp(configVikePrerender, p, 'undefined'))
|
|
1174
|
+
return { prop: `prerender.${p}`, errMsg: 'should be a boolean' };
|
|
1175
|
+
}
|
|
1176
|
+
{
|
|
1177
|
+
const p = 'parallel';
|
|
1178
|
+
if (!hasProp(configVikePrerender, p, 'boolean') &&
|
|
1179
|
+
!hasProp(configVikePrerender, p, 'number') &&
|
|
1180
|
+
!hasProp(configVikePrerender, p, 'undefined'))
|
|
1181
|
+
return { prop: `prerender.${p}`, errMsg: 'should be a boolean or a number' };
|
|
1182
|
+
}
|
|
1183
|
+
}
|
|
1184
|
+
return null;
|
|
1185
|
+
}
|
|
@@ -5,7 +5,8 @@ import { getVikeConfig } from './getVikeConfig.js';
|
|
|
5
5
|
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
|
|
6
6
|
import { serializeConfigValues } from '../../../../../shared/page-configs/serialize/serializeConfigValues.js';
|
|
7
7
|
async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
|
|
8
|
-
const
|
|
8
|
+
const vikeConfig = await getVikeConfig(config, { doNotRestartViteOnError: true });
|
|
9
|
+
const { pageConfigs, pageConfigGlobal } = vikeConfig;
|
|
9
10
|
return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
|
|
10
11
|
}
|
|
11
12
|
function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
|
|
@@ -33,7 +33,7 @@ function setGlobalContext() {
|
|
|
33
33
|
order: 'post',
|
|
34
34
|
async handler(config) {
|
|
35
35
|
const { outDirRoot } = getOutDirs(config);
|
|
36
|
-
assertFilePathAbsoluteFilesystem(outDirRoot); // Needed for
|
|
36
|
+
assertFilePathAbsoluteFilesystem(outDirRoot); // Needed for `importServerProductionEntry({ outDir })` of @brillout/vite-plugin-server-entry
|
|
37
37
|
setGlobalContext_viteConfig(config, outDirRoot);
|
|
38
38
|
const vikeConfig = await getVikeConfig(config);
|
|
39
39
|
setGlobalContext_vikeConfig(vikeConfig);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { workaroundVite6HmrRegression };
|
|
2
2
|
// https://vite.dev/guide/migration (will be 404 after vite@7 release) > search for `hmrReload()`
|
|
3
3
|
// https://v6.vite.dev/guide/migration (will exist after vite@7 release) > search for `hmrReload()`
|
|
4
4
|
// Workaround seems to work for docs page /banner (which is HTML-only)
|
|
5
5
|
// But doesn't seem to work for /examples/render-modes/ (see https://github.com/vikejs/vike/pull/2069 commit `renable HMR test for HTML-only`)
|
|
6
|
-
function
|
|
6
|
+
function workaroundVite6HmrRegression() {
|
|
7
7
|
return {
|
|
8
|
-
name: 'vike:
|
|
8
|
+
name: 'vike:workaroundVite6HmrRegression',
|
|
9
9
|
enforce: 'post',
|
|
10
10
|
hotUpdate: {
|
|
11
11
|
order: 'post',
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { getEnvVarObject };
|
|
2
|
-
declare function getEnvVarObject(envVarName: 'VITE_CONFIG'): null | Record<string, unknown>;
|
|
2
|
+
declare function getEnvVarObject(envVarName: 'VITE_CONFIG' | 'VIKE_CRAWL'): null | Record<string, unknown>;
|
|
@@ -3,7 +3,6 @@ export { runPrerenderFromCLIPrerenderCommand };
|
|
|
3
3
|
export { runPrerenderFromAutoRun };
|
|
4
4
|
export { runPrerender_forceExit };
|
|
5
5
|
export type { PrerenderOptions };
|
|
6
|
-
import '../runtime/page-files/setup.js';
|
|
7
6
|
import type { InlineConfig, ResolvedConfig } from 'vite';
|
|
8
7
|
import type { APIOptions } from '../api/types.js';
|
|
9
8
|
type PrerenderOptions = APIOptions & {
|
|
@@ -30,5 +29,5 @@ declare function runPrerenderFromAPI(options?: PrerenderOptions): Promise<{
|
|
|
30
29
|
viteConfig: ResolvedConfig;
|
|
31
30
|
}>;
|
|
32
31
|
declare function runPrerenderFromCLIPrerenderCommand(): Promise<void>;
|
|
33
|
-
declare function runPrerenderFromAutoRun(viteConfig: InlineConfig
|
|
32
|
+
declare function runPrerenderFromAutoRun(viteConfig: InlineConfig | undefined): Promise<void>;
|
|
34
33
|
declare function runPrerender_forceExit(): void;
|
|
@@ -2,7 +2,6 @@ export { runPrerenderFromAPI };
|
|
|
2
2
|
export { runPrerenderFromCLIPrerenderCommand };
|
|
3
3
|
export { runPrerenderFromAutoRun };
|
|
4
4
|
export { runPrerender_forceExit };
|
|
5
|
-
import '../runtime/page-files/setup.js';
|
|
6
5
|
import path from 'path';
|
|
7
6
|
import { route } from '../../shared/route/index.js';
|
|
8
7
|
import { assert, assertUsage, assertWarning, hasProp, projectInfo, objectAssign, isObjectWithKeys, isCallable, getOutDirs, isPropertyGetter, assertPosixPath, urlToFile, isPlainObject, pLimit, isArray, changeEnumerable, onSetupPrerender } from './utils.js';
|
|
@@ -15,7 +14,7 @@ import { getPageFilesServerSide } from '../../shared/getPageFiles.js';
|
|
|
15
14
|
import { getPageContextRequestUrl } from '../../shared/getPageContextRequestUrl.js';
|
|
16
15
|
import { getUrlFromRouteString } from '../../shared/route/resolveRouteString.js';
|
|
17
16
|
import { getConfigValueFilePathToShowToUser } from '../../shared/page-configs/helpers.js';
|
|
18
|
-
import { getConfigValueRuntime } from '../../shared/page-configs/
|
|
17
|
+
import { getConfigValueRuntime } from '../../shared/page-configs/getConfigValueRuntime.js';
|
|
19
18
|
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
|
|
20
19
|
import { isErrorPage } from '../../shared/error-page.js';
|
|
21
20
|
import { getPageContextUrlComputed } from '../../shared/getPageContextUrlComputed.js';
|
|
@@ -46,7 +45,7 @@ async function runPrerenderFromCLIPrerenderCommand() {
|
|
|
46
45
|
}
|
|
47
46
|
runPrerender_forceExit();
|
|
48
47
|
}
|
|
49
|
-
async function runPrerenderFromAutoRun(viteConfig
|
|
48
|
+
async function runPrerenderFromAutoRun(viteConfig) {
|
|
50
49
|
try {
|
|
51
50
|
await runPrerender({ viteConfig });
|
|
52
51
|
}
|
|
@@ -55,8 +54,6 @@ async function runPrerenderFromAutoRun(viteConfig, forceExit) {
|
|
|
55
54
|
logErrorHint(err);
|
|
56
55
|
process.exit(1);
|
|
57
56
|
}
|
|
58
|
-
if (forceExit)
|
|
59
|
-
runPrerender_forceExit();
|
|
60
57
|
}
|
|
61
58
|
async function runPrerender(options = {}, standaloneTrigger) {
|
|
62
59
|
checkOutdatedOptions(options);
|
|
@@ -68,8 +65,7 @@ async function runPrerender(options = {}, standaloneTrigger) {
|
|
|
68
65
|
console.log(`${pc.cyan(`vike v${projectInfo.projectVersion}`)} ${pc.green('pre-rendering HTML...')}`);
|
|
69
66
|
}
|
|
70
67
|
await disableReactStreaming();
|
|
71
|
-
const viteConfig = await resolveConfig(options.viteConfig || {}, '
|
|
72
|
-
assertLoadedConfig(viteConfig, options);
|
|
68
|
+
const viteConfig = await resolveConfig(options.viteConfig || {}, 'build', 'production');
|
|
73
69
|
const vikeConfig = await getVikeConfig(viteConfig);
|
|
74
70
|
const { outDirClient } = getOutDirs(viteConfig);
|
|
75
71
|
const { root } = viteConfig;
|
|
@@ -481,7 +477,7 @@ async function routeAndPrerender(prerenderContext, concurrencyLimit, onComplete)
|
|
|
481
477
|
usesClientRouter = getConfigValueRuntime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
|
|
482
478
|
}
|
|
483
479
|
else {
|
|
484
|
-
usesClientRouter = globalContext.
|
|
480
|
+
usesClientRouter = globalContext.usesClientRouter;
|
|
485
481
|
}
|
|
486
482
|
}
|
|
487
483
|
objectAssign(pageContext, {
|
|
@@ -672,25 +668,6 @@ async function disableReactStreaming() {
|
|
|
672
668
|
const { disable } = mod;
|
|
673
669
|
disable();
|
|
674
670
|
}
|
|
675
|
-
function assertLoadedConfig(viteConfig, options) {
|
|
676
|
-
if (viteConfig.plugins.some((p) => p.name.startsWith('vike'))) {
|
|
677
|
-
return;
|
|
678
|
-
}
|
|
679
|
-
const { configFile } = viteConfig;
|
|
680
|
-
if (configFile) {
|
|
681
|
-
assertUsage(false, `${configFile} doesn't install the vike plugin`);
|
|
682
|
-
}
|
|
683
|
-
else {
|
|
684
|
-
if (!options.viteConfig) {
|
|
685
|
-
assertUsage(false, `[prerender()] No vite.config.js file found at ${process.cwd()}. Use the option ${pc.cyan('prerender({ viteConfig })')}.`, { showStackTrace: true });
|
|
686
|
-
}
|
|
687
|
-
else {
|
|
688
|
-
assertUsage(false, `[prerender()] The Vite config ${pc.cyan('prerender({ viteConfig })')} is missing the vike plugin.`, {
|
|
689
|
-
showStackTrace: true
|
|
690
|
-
});
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
671
|
function isSameUrl(url1, url2) {
|
|
695
672
|
return normalizeUrl(url1) === normalizeUrl(url2);
|
|
696
673
|
}
|
|
@@ -12,10 +12,11 @@ export { setGlobalContext_viteConfig };
|
|
|
12
12
|
export { setGlobalContext_vikeConfig };
|
|
13
13
|
export { setGlobalContext_isViteDev };
|
|
14
14
|
export { setGlobalContext_isPrerendering };
|
|
15
|
+
export { setGlobalContext_buildEntry };
|
|
16
|
+
export { clearGlobalContext };
|
|
15
17
|
import type { ViteManifest } from '../shared/ViteManifest.js';
|
|
16
18
|
import type { ResolvedConfig, ViteDevServer } from 'vite';
|
|
17
|
-
import {
|
|
18
|
-
import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig/resolveVikeConfigGlobal.js';
|
|
19
|
+
import type { VikeConfigGlobal } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
19
20
|
import { type RuntimeManifest } from '../shared/assertRuntimeManifest.js';
|
|
20
21
|
import type { VikeConfigObject } from '../plugin/plugins/importUserCode/v1-design/getVikeConfig.js';
|
|
21
22
|
type GlobalContextPublic = {
|
|
@@ -35,17 +36,16 @@ type GlobalContext = {
|
|
|
35
36
|
vikeConfig: VikeConfigObject;
|
|
36
37
|
viteDevServer: ViteDevServer;
|
|
37
38
|
assetsManifest: null;
|
|
38
|
-
pluginManifest: null;
|
|
39
39
|
} | ({
|
|
40
40
|
isProduction: true;
|
|
41
41
|
assetsManifest: ViteManifest;
|
|
42
|
-
pluginManifest: PluginManifest;
|
|
43
42
|
viteDevServer: null;
|
|
44
43
|
} & ({
|
|
45
44
|
isPrerendering: false;
|
|
46
45
|
viteConfig: null;
|
|
47
46
|
} | {
|
|
48
47
|
isPrerendering: true;
|
|
48
|
+
usesClientRouter: boolean;
|
|
49
49
|
viteConfig: ResolvedConfig;
|
|
50
50
|
})));
|
|
51
51
|
declare function getGlobalContext(): GlobalContext;
|
|
@@ -64,3 +64,5 @@ declare function initGlobalContext_renderPage(): Promise<void>;
|
|
|
64
64
|
declare function initGlobalContext_runPrerender(): Promise<void>;
|
|
65
65
|
declare function initGlobalContext_getGlobalContextAsync(isProduction: boolean): Promise<void>;
|
|
66
66
|
declare function getRuntimeManifest(vikeConfigGlobal: VikeConfigGlobal, viteConfig: ResolvedConfig): RuntimeManifest;
|
|
67
|
+
declare function setGlobalContext_buildEntry(buildEntry: unknown): void;
|
|
68
|
+
declare function clearGlobalContext(): void;
|
|
@@ -14,23 +14,24 @@ export { setGlobalContext_viteConfig };
|
|
|
14
14
|
export { setGlobalContext_vikeConfig };
|
|
15
15
|
export { setGlobalContext_isViteDev };
|
|
16
16
|
export { setGlobalContext_isPrerendering };
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import {
|
|
17
|
+
export { setGlobalContext_buildEntry };
|
|
18
|
+
export { clearGlobalContext };
|
|
19
|
+
import { assert, onSetupRuntime, assertUsage, assertWarning, isPlainObject, objectAssign, objectReplace, objectKeys, isObject, hasProp, debugGlob, getGlobalObject, genPromise, createDebugger } from './utils.js';
|
|
20
|
+
import { importServerProductionEntry } from '@brillout/vite-plugin-server-entry/runtime';
|
|
21
|
+
import { virtualFileIdImportUserCodeServer } from '../shared/virtual-files/virtualFileImportUserCode.js';
|
|
22
|
+
import { setPageFiles, setPageFilesAsync } from '../../shared/getPageFiles/getPageFiles.js';
|
|
20
23
|
import { assertPluginManifest } from '../shared/assertPluginManifest.js';
|
|
21
24
|
import { assertRuntimeManifest } from '../shared/assertRuntimeManifest.js';
|
|
22
25
|
import pc from '@brillout/picocolors';
|
|
23
|
-
import { getPageFilesExports } from './page-files/getPageFilesExports.js';
|
|
24
26
|
import { resolveBaseFromResolvedConfig } from '../shared/resolveBase.js';
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
viteDevServerPromise,
|
|
29
|
-
viteDevServerPromiseResolve
|
|
30
|
-
};
|
|
31
|
-
})());
|
|
27
|
+
const debug = createDebugger('vike:globalContext');
|
|
28
|
+
const globalObject = getGlobalObject('globalContext.ts', getInitialGlobalContext());
|
|
29
|
+
initDevEntry();
|
|
32
30
|
function getGlobalContext() {
|
|
33
|
-
|
|
31
|
+
if (!globalObject.globalContext) {
|
|
32
|
+
debug('getGlobalContext()', new Error().stack);
|
|
33
|
+
assert(false);
|
|
34
|
+
}
|
|
34
35
|
return globalObject.globalContext;
|
|
35
36
|
}
|
|
36
37
|
/** @experimental https://vike.dev/getGlobalContext */
|
|
@@ -109,9 +110,11 @@ function getViteConfig() {
|
|
|
109
110
|
return globalObject.viteConfig ?? null;
|
|
110
111
|
}
|
|
111
112
|
async function initGlobalContext_renderPage() {
|
|
113
|
+
debug('initGlobalContext_renderPage()');
|
|
112
114
|
await initGlobalContext(!globalObject.isViteDev);
|
|
113
115
|
}
|
|
114
116
|
async function initGlobalContext_runPrerender() {
|
|
117
|
+
debug('initGlobalContext_runPrerender()');
|
|
115
118
|
if (globalObject.initGlobalContext_runPrerender_alreadyCalled)
|
|
116
119
|
return;
|
|
117
120
|
globalObject.initGlobalContext_runPrerender_alreadyCalled = true;
|
|
@@ -125,6 +128,7 @@ async function initGlobalContext_runPrerender() {
|
|
|
125
128
|
await initGlobalContext(true);
|
|
126
129
|
}
|
|
127
130
|
async function initGlobalContext_getGlobalContextAsync(isProduction) {
|
|
131
|
+
debug('initGlobalContext_getGlobalContextAsync()');
|
|
128
132
|
if (!isProduction) {
|
|
129
133
|
const waitFor = 20;
|
|
130
134
|
const timeout = setTimeout(() => {
|
|
@@ -152,13 +156,11 @@ async function initGlobalContext(isProduction) {
|
|
|
152
156
|
assert(vikeConfig);
|
|
153
157
|
assert(viteDevServer);
|
|
154
158
|
assert(!isPrerendering);
|
|
155
|
-
const
|
|
156
|
-
const pluginManifest = getRuntimeManifest(vikeConfigGlobal, viteConfig);
|
|
159
|
+
const pluginManifest = getRuntimeManifest(vikeConfig.vikeConfigGlobal, viteConfig);
|
|
157
160
|
globalObject.globalContext = {
|
|
158
161
|
isProduction: false,
|
|
159
162
|
isPrerendering: false,
|
|
160
163
|
assetsManifest: null,
|
|
161
|
-
pluginManifest: null,
|
|
162
164
|
viteDevServer,
|
|
163
165
|
viteConfig,
|
|
164
166
|
vikeConfig,
|
|
@@ -171,22 +173,21 @@ async function initGlobalContext(isProduction) {
|
|
|
171
173
|
};
|
|
172
174
|
}
|
|
173
175
|
else {
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
setPageFiles(pageFiles);
|
|
176
|
+
const buildEntry = await getBuildEntry(globalObject.outDirRoot);
|
|
177
|
+
const { assetsManifest, pluginManifest } = buildEntry;
|
|
178
|
+
setPageFiles(buildEntry.pageFiles);
|
|
178
179
|
assertViteManifest(assetsManifest);
|
|
179
180
|
assertPluginManifest(pluginManifest);
|
|
180
181
|
const globalContext = {
|
|
181
182
|
isProduction: true,
|
|
182
183
|
assetsManifest,
|
|
183
|
-
pluginManifest,
|
|
184
184
|
viteDevServer: null,
|
|
185
185
|
baseServer: pluginManifest.baseServer,
|
|
186
186
|
baseAssets: pluginManifest.baseAssets,
|
|
187
187
|
includeAssetsImportedByServer: pluginManifest.includeAssetsImportedByServer,
|
|
188
188
|
redirects: pluginManifest.redirects,
|
|
189
189
|
trailingSlash: pluginManifest.trailingSlash,
|
|
190
|
+
usesClientRouter: pluginManifest.usesClientRouter,
|
|
190
191
|
disableUrlNormalization: pluginManifest.disableUrlNormalization
|
|
191
192
|
};
|
|
192
193
|
if (isPrerendering) {
|
|
@@ -220,15 +221,6 @@ function getRuntimeManifest(vikeConfigGlobal, viteConfig) {
|
|
|
220
221
|
assertRuntimeManifest(manifest);
|
|
221
222
|
return manifest;
|
|
222
223
|
}
|
|
223
|
-
function assertBuildEntries(buildEntries, isPreRendering) {
|
|
224
|
-
const errMsg = [
|
|
225
|
-
`You are tyring to run`,
|
|
226
|
-
isPreRendering ? 'pre-rendering' : 'the server for production',
|
|
227
|
-
`but your app isn't built yet. Run ${pc.cyan('$ vike build')} before `,
|
|
228
|
-
isPreRendering ? 'pre-rendering.' : 'running the server.'
|
|
229
|
-
].join(' ');
|
|
230
|
-
assertUsage(buildEntries, errMsg);
|
|
231
|
-
}
|
|
232
224
|
function assertViteManifest(manifest) {
|
|
233
225
|
assert(isPlainObject(manifest));
|
|
234
226
|
/* We should include these assertions but we don't as a workaround for PWA manifests: https://github.com/vikejs/vike/issues/769
|
|
@@ -247,3 +239,58 @@ function eagerlyLoadUserFiles() {
|
|
|
247
239
|
// We call it as early as possible here for better performance.
|
|
248
240
|
getPageFilesExports();
|
|
249
241
|
}
|
|
242
|
+
async function getBuildEntry(outDir) {
|
|
243
|
+
debug('getBuildEntry()');
|
|
244
|
+
if (!globalObject.buildEntry) {
|
|
245
|
+
debug('importServerProductionEntry()');
|
|
246
|
+
await importServerProductionEntry({ outDir });
|
|
247
|
+
if (!globalObject.buildEntry) {
|
|
248
|
+
debug('globalObject.buildEntryPrevious');
|
|
249
|
+
// Needed, for example, when calling the API prerender() then preview() because both trigger a importServerProductionEntry() call but only the first only is applied because of the import() cache. (A proper implementation would be to clear the import() cache, but it probably isn't possible on platforms such as Cloudflare Workers.)
|
|
250
|
+
globalObject.buildEntry = globalObject.buildEntryPrevious;
|
|
251
|
+
}
|
|
252
|
+
assert(globalObject.buildEntry);
|
|
253
|
+
}
|
|
254
|
+
const { buildEntry } = globalObject;
|
|
255
|
+
assert(isObject(buildEntry));
|
|
256
|
+
assert(hasProp(buildEntry, 'pageFiles', 'object'));
|
|
257
|
+
assert(hasProp(buildEntry, 'assetsManifest', 'object'));
|
|
258
|
+
assert(hasProp(buildEntry, 'pluginManifest', 'object'));
|
|
259
|
+
return buildEntry;
|
|
260
|
+
}
|
|
261
|
+
function setGlobalContext_buildEntry(buildEntry) {
|
|
262
|
+
debug('setGlobalContext_buildEntry()');
|
|
263
|
+
globalObject.buildEntry = buildEntry;
|
|
264
|
+
globalObject.buildEntryPrevious = buildEntry;
|
|
265
|
+
}
|
|
266
|
+
function initDevEntry() {
|
|
267
|
+
setPageFilesAsync(getPageFilesExports);
|
|
268
|
+
}
|
|
269
|
+
async function getPageFilesExports() {
|
|
270
|
+
const viteDevServer = getViteDevServer();
|
|
271
|
+
assert(viteDevServer);
|
|
272
|
+
let moduleExports;
|
|
273
|
+
try {
|
|
274
|
+
moduleExports = await viteDevServer.ssrLoadModule(virtualFileIdImportUserCodeServer);
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
debugGlob(`Glob error: ${virtualFileIdImportUserCodeServer} transpile error: `, err);
|
|
278
|
+
throw err;
|
|
279
|
+
}
|
|
280
|
+
moduleExports = moduleExports.default || moduleExports;
|
|
281
|
+
debugGlob('Glob result: ', moduleExports);
|
|
282
|
+
assert(isObject(moduleExports));
|
|
283
|
+
return moduleExports;
|
|
284
|
+
}
|
|
285
|
+
function clearGlobalContext() {
|
|
286
|
+
debug('clearGlobalContext()');
|
|
287
|
+
objectReplace(globalObject, getInitialGlobalContext(), ['buildEntryPrevious']);
|
|
288
|
+
}
|
|
289
|
+
function getInitialGlobalContext() {
|
|
290
|
+
debug('getInitialGlobalContext()');
|
|
291
|
+
const { promise: viteDevServerPromise, resolve: viteDevServerPromiseResolve } = genPromise();
|
|
292
|
+
return {
|
|
293
|
+
viteDevServerPromise,
|
|
294
|
+
viteDevServerPromiseResolve
|
|
295
|
+
};
|
|
296
|
+
}
|
|
@@ -5,7 +5,7 @@ import { sanitizeJson } from './sanitizeJson.js';
|
|
|
5
5
|
import { inferAssetTag, inferPreloadTag } from './inferHtmlTags.js';
|
|
6
6
|
import { mergeScriptTags } from './mergeScriptTags.js';
|
|
7
7
|
import { getPageConfig } from '../../../../shared/page-configs/helpers.js';
|
|
8
|
-
import { getConfigValueRuntime } from '../../../../shared/page-configs/
|
|
8
|
+
import { getConfigValueRuntime } from '../../../../shared/page-configs/getConfigValueRuntime.js';
|
|
9
9
|
import { getGlobalContext } from '../../globalContext.js';
|
|
10
10
|
import pc from '@brillout/picocolors';
|
|
11
11
|
import { getConfigDefinedAt } from '../../../../shared/page-configs/getConfigDefinedAt.js';
|