UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

63 lines (62 loc) 2.81 kB
import '../assertEnvClient.js'; export { loadPageConfigsLazyClientSide }; export { isErrorFetchingStaticAssets }; import { getPageFilesClientSide } from '../../shared-server-client/getPageFiles.js'; import { resolvePageContextConfig } from '../../shared-server-client/page-configs/resolveVikeConfigPublic.js'; import { findPageConfig } from '../../shared-server-client/page-configs/findPageConfig.js'; import { loadAndParseVirtualFilePageEntry } from '../../shared-server-client/page-configs/loadAndParseVirtualFilePageEntry.js'; import { objectAssign } from '../../utils/objectAssign.js'; const errStamp = '_isAssetsError'; async function loadPageConfigsLazyClientSide(pageId, pageFilesAll, pageConfigs, pageConfigGlobal) { const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId); const pageConfig = findPageConfig(pageConfigs, pageId); let pageConfigLoaded; try { // prettier-ignore // biome-ignore format: const result = await Promise.all([ pageConfig && loadAndParseVirtualFilePageEntry(pageConfig, import.meta.env.DEV), ...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 pageContextAddendum = {}; objectAssign(pageContextAddendum, resolvePageContextConfig(pageFilesClientSide, pageConfigLoaded, pageConfigGlobal)); 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())); }