vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
64 lines (63 loc) • 3.19 kB
JavaScript
export { resolvePrerenderConfigGlobal };
export { resolvePrerenderConfigLocal };
import { assert, isArray, isObject, objectAssign } from './utils.js';
import { getConfigValueBuildTime } from '../../shared/page-configs/getConfigValueBuildTime.js';
// When setting +prerender to an object => it also enables pre-rendering
const defaultValueForObject = true;
function resolvePrerenderConfigGlobal(vikeConfig) {
const prerenderConfigs = vikeConfig.config.prerender || [];
const prerenderSettings = prerenderConfigs.filter(isObject2);
const prerenderConfigGlobal = {
partial: pickFirst(prerenderSettings.map((c) => c.partial)) ?? false,
redirects: pickFirst(prerenderSettings.map((c) => c.redirects)) ?? null,
noExtraDir: pickFirst(prerenderSettings.map((c) => c.noExtraDir)) ?? null,
keepDistServer: pickFirst(prerenderSettings.map((c) => c.keepDistServer)) ?? false,
parallel: pickFirst(prerenderSettings.map((c) => c.parallel)) ?? true,
disableAutoRun: pickFirst(prerenderSettings.map((c) => c.disableAutoRun)) ?? false,
};
let defaultLocalValue = false;
{
const valueFirst = prerenderConfigs.filter((p) => !isObject(p) || p.enable !== null)[0];
if (valueFirst === true || (isObject(valueFirst) && (valueFirst.enable ?? defaultValueForObject))) {
defaultLocalValue = true;
}
}
// TODO/next-major: remove
// Backwards compatibility for `vike({prerender:true})` in vite.config.js
{
const valuesWithDefinedAt = vikeConfig._from.configsCumulative.prerender?.values ?? [];
if (valuesWithDefinedAt.some((v) => v.definedAt.includes('vite.config.js') && v.value)) {
defaultLocalValue = true;
}
}
objectAssign(prerenderConfigGlobal, {
defaultLocalValue,
isPrerenderingEnabledForAllPages: vikeConfig._pageConfigs.length > 0 &&
vikeConfig._pageConfigs.every((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue),
isPrerenderingEnabled: vikeConfig._pageConfigs.length > 0 &&
vikeConfig._pageConfigs.some((pageConfig) => resolvePrerenderConfigLocal(pageConfig)?.value ?? defaultLocalValue),
});
// TODO/next-major remove
if (vikeConfig._pageConfigs.length === 0 && defaultLocalValue)
prerenderConfigGlobal.isPrerenderingEnabled = true;
return prerenderConfigGlobal;
}
function resolvePrerenderConfigLocal(pageConfig) {
const configValue = getConfigValueBuildTime(pageConfig, 'prerender');
if (!configValue)
return null;
const values = configValue.value;
assert(isArray(values));
const value = values[0];
// If it's set to an object in a local config then Vike considers it a global config and it's skipped from local inheritance, thus we can assume the value to be a boolean.
assert(typeof value === 'boolean');
assert(isArray(configValue.definedAtData));
const prerenderConfigLocal = { value };
return prerenderConfigLocal;
}
function isObject2(value) {
return typeof value === 'object' && value !== null;
}
function pickFirst(arr) {
return arr.filter((v) => v !== undefined)[0];
}