UNPKG

vike

Version:

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

58 lines (57 loc) 2.88 kB
export { analyzePageClientSide }; export { analyzePageClientSideInit }; import { analyzeExports } from './analyzePageClientSide/analyzeExports.js'; import { determineClientEntry } from './analyzePageClientSide/determineClientEntry.js'; import { getPageFilesClientSide } from './getAllPageIdFiles.js'; import { getPageFilesServerSide } from './getAllPageIdFiles.js'; import { assert } from '../utils.js'; import { getExportNames } from './analyzePageClientSide/getExportNames.js'; // TODO/v1-release: remove analyzePageClientSide(), use analyzeClientSide() instead function analyzePageClientSide(pageFilesAll, pageId) { let pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId); const pageFilesServerSide = getPageFilesServerSide(pageFilesAll, pageId); const { isHtmlOnly, isClientRouting } = analyzeExports({ pageFilesClientSide, pageFilesServerSide, pageId }); if (isHtmlOnly) { // HTML-only pages don't need any client-side `render()` hook. For apps that have both HTML-only and SSR/SPA pages, we skip the `.page.client.js` file that defines `render()` for HTML-only pages. pageFilesClientSide = pageFilesClientSide.filter((p) => p.isEnv('CLIENT_ONLY') && !getExportNames(p).includes('render')); pageFilesClientSide = removeOverriddenPageFiles(pageFilesClientSide); } const { clientEntries, clientDependencies } = determineClientEntry({ pageFilesClientSide, pageFilesServerSide, isHtmlOnly, isClientRouting, }); return { isHtmlOnly, isClientRouting, clientEntries, clientDependencies, pageFilesClientSide, pageFilesServerSide }; } // TODO:v1-release: remove async function analyzePageClientSideInit(pageFilesAll, pageId, { sharedPageFilesAlreadyLoaded }) { const pageFilesClientSide = getPageFilesClientSide(pageFilesAll, pageId); await Promise.all(pageFilesClientSide.map(async (p) => { assert(p.isEnv('CLIENT_ONLY') || p.isEnv('CLIENT_AND_SERVER')); if (sharedPageFilesAlreadyLoaded && p.isEnv('CLIENT_AND_SERVER')) { return; } await p.loadExportNames?.(); /* if (pageFile.exportNames) { return pageFile.exportNames.includes(clientRouting) } if (pageFile.fileExports) { return Object.keys(pageFile.fileExports).includes(clientRouting) } */ })); } // [WIP] Just an experiment needed by https://vike.dev/banner // - Not sure I want to make something like a public API: the CSS of `_default.page.server.js` are still loaded -> weird DX. function removeOverriddenPageFiles(pageFilesClientSide) { const pageFilesClientSide_ = []; for (const p of pageFilesClientSide) { pageFilesClientSide_.push(p); if (getExportNames(p).includes('overrideDefaultPages')) { break; } } return pageFilesClientSide_; }