vike
Version:
(Replaces Next.js/Nuxt) 🔨 Composable framework to build advanced applications with flexibility and stability.
42 lines (41 loc) • 2.04 kB
JavaScript
export { loadAndParseVirtualFilePageEntry };
import { objectAssign } from '../../utils/objectAssign.js';
import { parseConfigValuesSerialized } from './serialize/parsePageConfigsSerialized.js';
import { assertVirtualFileExports } from '../assertVirtualFileExports.js';
async function loadAndParseVirtualFilePageEntry(pageConfig, isDev) {
if ('isPageEntryLoaded' in pageConfig &&
// We don't need to cache in dev, since Vite already caches the virtual module
!isDev) {
return pageConfig;
}
const { moduleId, moduleExportsPromise } = pageConfig.loadVirtualFilePageEntry();
const moduleExports = await moduleExportsPromise;
/* `moduleExports` is sometimes `undefined` https://github.com/vikejs/vike/discussions/2092
assert(moduleExports)
//*/
// Catch @cloudflare/vite-plugin bug
assertVirtualFileExports(moduleExports, () => 'configValuesSerialized' in moduleExports, moduleId);
const virtualFileExportsPageEntry = moduleExports;
let configValues;
try {
configValues = parseVirtualFileExportsPageEntry(virtualFileExportsPageEntry);
}
catch (e) {
// Safari WebKit bug: dynamic import() may resolve before the module body executes.
if (
// Throwing ReferenceError (TDZ): https://github.com/vikejs/vike/issues/3121
!(e instanceof ReferenceError) &&
// Or TypeError (undefined exports) on some WebKit builds: https://github.com/vikejs/vike/issues/3199
!(e instanceof TypeError))
throw e;
await new Promise((resolve) => setTimeout(resolve));
configValues = parseVirtualFileExportsPageEntry(virtualFileExportsPageEntry);
}
Object.assign(pageConfig.configValues, configValues);
objectAssign(pageConfig, { isPageEntryLoaded: true });
return pageConfig;
}
function parseVirtualFileExportsPageEntry(virtualFileExportsPageEntry) {
const configValues = parseConfigValuesSerialized(virtualFileExportsPageEntry.configValuesSerialized);
return configValues;
}