UNPKG

vike

Version:

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

43 lines (42 loc) 2.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.assertPlusFileExport = assertPlusFileExport; const utils_js_1 = require("../utils.js"); const picocolors_1 = __importDefault(require("@brillout/picocolors")); const SIDE_EXPORTS_TOLERATE = [ // vite-plugin-solid adds `export { $$registrations }` '$$registrations', // @vitejs/plugin-vue adds `export { _rerender_only }` '_rerender_only', ]; // Tolerate `export { frontmatter }` in .mdx files const SIDE_EXPORTS_DO_NOT_CHECK = ['.md', '.mdx']; function assertPlusFileExport(fileExports, filePathToShowToUser, configName) { const exportNames = Object.keys(fileExports); const isValid = (exportName) => exportName === 'default' || exportName === configName; // Error upon missing/ambiguous export const exportNamesValid = exportNames.filter(isValid); const exportDefault = picocolors_1.default.code('export default'); const exportNamed = picocolors_1.default.code(`export { ${configName} }`); if (exportNamesValid.length === 0) { (0, utils_js_1.assertUsage)(false, `${filePathToShowToUser} should define ${exportNamed} or ${exportDefault}`); } if (exportNamesValid.length === 2) { (0, utils_js_1.assertUsage)(false, `${filePathToShowToUser} is ambiguous: remove ${exportDefault} or ${exportNamed}`); } (0, utils_js_1.assert)(exportNamesValid.length === 1); // Warn upon side exports const exportNamesInvalid = exportNames .filter((e) => !isValid(e)) .filter((exportName) => !SIDE_EXPORTS_TOLERATE.includes(exportName)); if (!SIDE_EXPORTS_DO_NOT_CHECK.some((ext) => filePathToShowToUser.endsWith(ext))) { exportNamesInvalid.forEach((exportInvalid) => { (0, utils_js_1.assertWarning)(false, `${filePathToShowToUser} unexpected ${picocolors_1.default.cyan(`export { ${exportInvalid} }`)}, see https://vike.dev/no-side-exports`, { onlyOnce: true, }); }); } }