vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
53 lines (52 loc) • 3.13 kB
JavaScript
export { getVirtualFilePageConfigs };
import { getVirtualFileIdPageConfigValuesAll } from '../../../../../shared/virtual-files/virtualFilePageConfigValuesAll.js';
import { debug } from './debug.js';
import { getVikeConfig } from '../getVikeConfig.js';
import { isRuntimeEnvMatch } from './isRuntimeEnvMatch.js';
import { serializeConfigValues } from '../../../../../../shared/page-configs/serialize/serializeConfigValues.js';
async function getVirtualFilePageConfigs(isForClientSide, isDev, id, isClientRouting, config) {
const vikeConfig = await getVikeConfig(config, { doNotRestartViteOnError: true });
const { pageConfigs, pageConfigGlobal } = vikeConfig;
return getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting);
}
function getCode(pageConfigs, pageConfigGlobal, isForClientSide, isDev, id, isClientRouting) {
const lines = [];
const importStatements = [];
const filesEnv = new Map();
lines.push('export const pageConfigsSerialized = [');
lines.push(getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements, filesEnv));
lines.push('];');
lines.push('export const pageConfigGlobalSerialized = {');
lines.push(getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements, filesEnv));
lines.push('};');
const code = [...importStatements, ...lines].join('\n');
debug(id, isForClientSide ? 'CLIENT-SIDE' : 'SERVER-SIDE', code);
return code;
}
function getCodePageConfigsSerialized(pageConfigs, isForClientSide, isClientRouting, isDev, importStatements, filesEnv) {
const lines = [];
pageConfigs.forEach((pageConfig) => {
const { pageId, routeFilesystem, isErrorPage } = pageConfig;
lines.push(` {`);
lines.push(` pageId: ${JSON.stringify(pageId)},`);
lines.push(` isErrorPage: ${JSON.stringify(isErrorPage)},`);
lines.push(` routeFilesystem: ${JSON.stringify(routeFilesystem)},`);
const virtualFileId = JSON.stringify(getVirtualFileIdPageConfigValuesAll(pageId, isForClientSide));
const load = `() => ({ moduleId: ${virtualFileId}, moduleExports: import(${virtualFileId}) })`;
lines.push(` loadConfigValuesAll: ${load},`);
lines.push(` configValuesSerialized: {`);
lines.push(...serializeConfigValues(pageConfig, importStatements, filesEnv, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isDev }), ' ', true));
lines.push(` },`);
lines.push(` },`);
});
const code = lines.join('\n');
return code;
}
function getCodePageConfigGlobalSerialized(pageConfigGlobal, isForClientSide, isClientRouting, isDev, importStatements, filesEnv) {
const lines = [];
lines.push(` configValuesSerialized: {`);
lines.push(...serializeConfigValues(pageConfigGlobal, importStatements, filesEnv, (configEnv) => isRuntimeEnvMatch(configEnv, { isForClientSide, isClientRouting, isDev }), ' ', null));
lines.push(` },`);
const code = lines.join('\n');
return code;
}