UNPKG

vike

Version:

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

49 lines (48 loc) 1.98 kB
export { analyzeExports }; import { getExportNames } from './getExportNames.js'; import { assertUsage } from '../../../utils/assert.js'; // TO-DO/next-major-release: remove function analyzeExports({ pageFilesClientSide, pageFilesServerSide, pageId, }) { return { isHtmlOnly: isHtmlOnly(), isClientRouting: isClientRouting() }; function isHtmlOnly() { { const hasPageIdIsmrphFile = pageFilesServerSide.some((p) => p.pageId === pageId && p.fileType === '.page'); if (hasPageIdIsmrphFile) { assertClientSideRenderHook(); return false; } } { const hasPageIdServerFile = pageFilesServerSide.some((p) => p.pageId === pageId && p.fileType === '.page.server'); if (!hasPageIdServerFile) { return false; } } { const definesClientRenderer = pageFilesClientSide.some((p) => p.pageId === pageId && p.fileType === '.page.client' && getExportNames(p).includes('render')); if (definesClientRenderer) { return false; } } return true; } function assertClientSideRenderHook() { const hasClientSideRenderHook = pageFilesClientSide.some((p) => { return getExportNames(p).includes('render'); }); assertUsage(hasClientSideRenderHook, [ 'No client-side `render()` hook found.', 'See https://vike.dev/render-modes for more information.', [ 'Loaded client-side page files (none of them `export { render }`):', ...pageFilesClientSide.map((p, i) => ` (${i + 1}): ${p.filePath}`), ].join('\n'), ].join(' ')); } function isClientRouting() { const hasClientRoutingExport = pageFilesClientSide.some((p) => { return getExportNames(p).includes('clientRouting'); }); return hasClientRoutingExport; } }