UNPKG

vike

Version:

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

50 lines (49 loc) 1.81 kB
// TODO/v1-release: remove export { fileTypes }; export { isValidFileType }; export { determineFileType }; import { assert } from '../utils.js'; import { isScriptFile } from '../../utils/isScriptFile.js'; const fileTypes = [ '.page', '.page.server', '.page.route', '.page.client', // New type `.page.css`/`.page.server.css`/`.page.client.css` for `extensions[number].pageFileDist`. // - Extensions using `pageFileDist` are expected to use a bundler that generates a `.css` colocated next to the original `.page.js` file (e.g. `/renderer/_default.page.server.css` for `/renderer/_default.page.server.js`. // - Since these `.page.css` files Bundlers We can therefore expect that there isn't any `.page.server.sass`/... '.css', ]; function isValidFileType(filePath) { return ['.js', '.mjs', '.cjs', '.css'].some((ext) => filePath.endsWith(ext)); } function determineFileType(filePath) { { const isCSS = filePath.endsWith('.css'); if (isCSS) { /* This assert() is skipped to reduce client-side bundle size assert(isImportPathNpmPackage(filePath), filePath) // `.css` page files are only supported for npm packages */ return '.css'; } } assert(isScriptFile(filePath), filePath); const fileName = filePath.split('/').slice(-1)[0]; const parts = fileName.split('.'); const suffix1 = parts.slice(-3)[0]; const suffix2 = parts.slice(-2)[0]; if (suffix2 === 'page') { return '.page'; } assert(suffix1 === 'page', filePath); if (suffix2 === 'server') { return '.page.server'; } if (suffix2 === 'client') { return '.page.client'; } if (suffix2 === 'route') { return '.page.route'; } assert(false, filePath); }