vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
45 lines (44 loc) • 2.63 kB
JavaScript
export { getVirtualFilePageConfigValuesAll };
import { assert } from '../../../../utils.js';
import { getVirtualFileIdPageConfigValuesAll, isVirtualFileIdPageConfigValuesAll } from '../../../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
import { getVikeConfig } from '../getVikeConfig.js';
import { extractAssetsAddQuery } from '../../../../../shared/extractAssetsQuery.js';
import { debug } from './debug.js';
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
import { serializeConfigValues } from '../../../../../../shared/page-configs/serialize/serializeConfigValues.js';
import { handleAssetsManifest_isFixEnabled } from '../../../build/handleAssetsManifest.js';
import { getConfigValueBuildTime } from '../../../../../../shared/page-configs/getConfigValueBuildTime.js';
async function getVirtualFilePageConfigValuesAll(id, isDev, config) {
const result = isVirtualFileIdPageConfigValuesAll(id);
assert(result);
/* This assertion fails when using includeAssetsImportedByServer
{
const isForClientSide = !config.build.ssr
assert(result.isForClientSide === isForClientSide)
}
*/
const { pageId, isForClientSide } = result;
const vikeConfig = await getVikeConfig(config, { doNotRestartViteOnError: true });
const { pageConfigs } = vikeConfig;
const pageConfig = pageConfigs.find((pageConfig) => pageConfig.pageId === pageId);
assert(pageConfig, { id, pageId });
const code = getLoadConfigValuesAll(pageConfig, isForClientSide, pageId,
// TODO/now: add meta.default
vikeConfig.global.config.includeAssetsImportedByServer ?? true, config, isDev);
debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
return code;
}
function getLoadConfigValuesAll(pageConfig, isForClientSide, pageId, includeAssetsImportedByServer, config, isDev) {
const lines = [];
const importStatements = [];
const filesEnv = new Map();
const isClientRouting = getConfigValueBuildTime(pageConfig, 'clientRouting', 'boolean')?.value ?? false;
lines.push('export const configValuesSerialized = {');
lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isDev }), '', false));
lines.push('};');
if (!handleAssetsManifest_isFixEnabled(config) && includeAssetsImportedByServer && isForClientSide && !isDev) {
importStatements.push(`import '${extractAssetsAddQuery(getVirtualFileIdPageConfigValuesAll(pageId, false))}'`);
}
const code = [...importStatements, ...lines].join('\n');
return code;
}