vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
65 lines (64 loc) • 2.85 kB
JavaScript
export { loadPageConfigsLazyClientSide };
export { isErrorFetchingStaticAssets };
import { getPageFilesClientSide } from '../../shared/getPageFiles.js';
import { resolveVikeConfigPublicPageLazy } from '../../shared/page-configs/resolveVikeConfigPublic.js';
import { findPageConfig } from '../../shared/page-configs/findPageConfig.js';
import { loadConfigValues } from '../../shared/page-configs/loadConfigValues.js';
import { objectAssign } from '../runtime-server-routing/utils.js';
const errStamp = '_isAssetsError';
async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) {
const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId);
const pageConfig = findPageConfig(pageConfigs, pageId);
let pageConfigLoaded;
// @ts-ignore Since dist/cjs/client/ is never used, we can ignore this error.
const isDev = import.meta.env.DEV;
try {
// prettier-ignore
// biome-ignore format:
const result = await Promise.all([
pageConfig && loadConfigValues(pageConfig, isDev),
...pageFilesClientSide.map((p) => p.loadFile?.()),
]);
pageConfigLoaded = result[0];
}
catch (err) {
if (isFetchError(err)) {
Object.assign(err, { [errStamp]: true });
}
else {
// Syntax error in user file
}
throw err;
}
const pageContextExports = resolveVikeConfigPublicPageLazy(pageFilesClientSide, pageConfigLoaded, pageConfigGlobal);
const pageContextAddendum = {};
objectAssign(pageContextAddendum, pageContextExports);
objectAssign(pageContextAddendum, { _pageFilesLoaded: pageFilesClientSide });
return pageContextAddendum;
}
function isErrorFetchingStaticAssets(err) {
if (!err) {
return false;
}
return err[errStamp] === true;
}
// https://stackoverflow.com/questions/75928310/how-to-detect-that-import-some-url-failed-because-some-url-isnt-a-javasc
function isFetchError(err) {
if (!(err instanceof Error))
return false;
// https://github.com/stacks-network/clarity-js-sdk/blob/e757666b59af00b5db04dd1bf0df016e3a459ea2/packages/clarity/src/providers/registry.ts#L40-L45
// https://github.com/modernweb-dev/web/blob/0a59b56e4c1b50af81fbf4588f36a1ceb71f3976/integration/test-runner/tests/test-failure/runTestFailureTest.ts#L11-L18
const FAILED_TO_FETCH_MESSAGES = [
// chromium
'Failed to fetch dynamically imported module',
// firefox
'error loading dynamically imported module',
// safari
'Importing a module script failed',
// ??
'error resolving module specifier',
// ??
'failed to resolve module',
];
return FAILED_TO_FETCH_MESSAGES.some((s) => err.message.toLowerCase().includes(s.toLowerCase()));
}