vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
244 lines (243 loc) • 7.22 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.configDefinitionsBuiltIn = void 0;
const utils_js_1 = require("../../utils.js");
const getConfigDefinedAt_js_1 = require("../../../../shared/page-configs/getConfigDefinedAt.js");
const configDefinitionsBuiltIn = {
onRenderHtml: {
env: { server: true },
},
onRenderClient: {
env: { client: true },
},
onHydrationEnd: {
env: { client: true },
},
onPageTransitionStart: {
env: { client: true },
},
onPageTransitionEnd: {
env: { client: true },
},
onCreatePageContext: {
env: { server: true, client: true },
cumulative: true,
},
onCreateGlobalContext: {
env: { server: true, client: true },
global: true,
cumulative: true,
},
onBeforeRender: {
env: { server: true },
},
onBeforePrerenderStart: {
env: { server: true, production: true },
},
Page: {
env: { server: true, client: true },
},
passToClient: {
env: { server: true },
cumulative: true,
},
route: {
env: {
server: true,
client: 'if-client-routing',
// For vite-plugin-vercel
config: true,
},
eager: true,
},
guard: {
env: { server: true, client: 'if-client-routing' },
},
data: {
env: { server: true },
},
onData: {
env: { server: true, client: true },
cumulative: true,
},
iKnowThePerformanceRisksOfAsyncRouteFunctions: {
env: { server: true, client: 'if-client-routing' },
eager: true,
},
filesystemRoutingRoot: {
env: { config: true },
},
client: {
// The value of the client config is merely the file path to the client entry file, which is only needed on the sever-side
env: { server: true, config: true },
_valueIsFilePath: true,
},
clientRouting: {
// We could make it { client: false } but we don't yet because of some legacy V0.4 design code
env: { server: true, client: true, config: true },
eager: true,
},
clientHooks: {
env: { config: true },
},
hydrationCanBeAborted: {
env: { client: true },
},
prefetch: {
env: { client: true },
eager: true,
},
// TODO/v1-release: remove
prefetchStaticAssets: {
env: { client: true },
},
extends: {
env: { config: true },
},
meta: {
env: { config: true },
},
// Whether the page loads:
// - Vike's client runtime
// - User's client hooks
// In other words, whether the page is "HTML-only" (https://vike.dev/render-modes). HTML-only pages shouldn't load the client runtime nor client hooks.
isClientRuntimeLoaded: {
env: { server: true, client: true },
eager: true,
_computed: (configValueSources) => {
{
const source = getConfigValueSource(configValueSources, 'clientHooks');
if (source) {
(0, utils_js_1.assert)(source.valueIsLoaded);
if (source.value !== null) {
const { value } = source;
const definedAt = (0, getConfigDefinedAt_js_1.getConfigDefinedAt)('Config', 'clientHooks', source.definedAt);
(0, utils_js_1.assertUsage)(typeof value === 'boolean', `${definedAt} should be a boolean`);
return value;
}
}
}
return (isConfigSet(configValueSources, 'onRenderClient') &&
isConfigSet(configValueSources, 'Page') &&
!!getConfigEnv(configValueSources, 'Page')?.client);
},
},
onBeforeRenderEnv: {
env: { client: true },
eager: true,
_computed: (configValueSources) => !isConfigSet(configValueSources, 'onBeforeRender') ? null : getConfigEnv(configValueSources, 'onBeforeRender'),
},
dataEnv: {
env: { client: true },
eager: true,
_computed: (configValueSources) => !isConfigSet(configValueSources, 'data') ? null : getConfigEnv(configValueSources, 'data'),
},
hooksTimeout: {
env: { server: true, client: true },
},
cacheControl: {
env: { server: true },
},
host: {
env: { config: true },
global: true,
},
port: {
env: { config: true },
global: true,
},
mode: {
env: { config: true },
global: true,
},
injectScriptsAt: {
env: { server: true },
},
name: {
env: { config: true },
},
require: {
env: { config: true },
},
keepScrollPosition: {
env: { client: true },
},
middleware: { env: { server: true }, cumulative: true, eager: true, global: true },
onPrerenderStart: {
env: { server: true, production: true },
eager: true,
global: true,
},
onBeforeRoute: {
env: { server: true, client: 'if-client-routing' },
eager: true,
global: true,
},
prerender: {
env: { config: true },
global: (value, { isGlobalLocation }) => typeof value === 'object' || isGlobalLocation,
cumulative: true,
},
vite: { env: { config: true }, global: true, cumulative: true },
disableAutoFullBuild: {
env: { config: true },
global: true,
},
vite6BuilderApp: {
env: { config: true },
global: true,
},
includeAssetsImportedByServer: {
env: { config: true },
global: true,
},
baseAssets: {
env: { config: true, server: true },
global: true,
},
baseServer: {
env: { config: true, server: true },
global: true,
},
redirects: {
env: { server: true },
global: true,
cumulative: true,
},
trailingSlash: {
env: { server: true },
global: true,
},
disableUrlNormalization: {
env: { server: true },
global: true,
},
};
exports.configDefinitionsBuiltIn = configDefinitionsBuiltIn;
function getConfigEnv(configValueSources, configName) {
const configValueSource = getConfigValueSource(configValueSources, configName);
if (!configValueSource)
return null;
const { configEnv } = configValueSource;
const env = {};
if (configEnv.client)
env.client = true;
if (configEnv.server)
env.server = true;
return env;
}
function isConfigSet(configValueSources, configName) {
const source = getConfigValueSource(configValueSources, configName);
return (!!source &&
!(source.valueIsLoaded &&
// Enable users to suppress inherited config by overriding it with `null`
source.value === null));
}
function getConfigValueSource(configValueSources, configName) {
const sources = configValueSources[configName];
if (!sources)
return null;
const configValueSource = sources[0];
(0, utils_js_1.assert)(configValueSource);
return configValueSource;
}