vike
Version:
The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.
22 lines (21 loc) • 1.4 kB
JavaScript
// TODO/v1-release: remove this
export { assertDefaultExports };
export { assertExportValues };
export { forbiddenDefaultExports };
import { assert, assertUsage } from '../utils.js';
const enforceTrue = ['clientRouting'];
function assertExportValues(pageFile) {
enforceTrue.forEach((exportName) => {
assert(pageFile.fileExports);
if (!(exportName in pageFile.fileExports))
return;
const explainer = `The value of \`${exportName}\` is only allowed to be \`true\`.`;
assertUsage(pageFile.fileExports[exportName] !== false, `${pageFile.filePath} has \`export { ${exportName} }\` with the value \`false\` which is prohibited: remove \`export { ${exportName} }\` instead. (${explainer})`);
assertUsage(pageFile.fileExports[exportName] === true, `${pageFile.filePath} has \`export { ${exportName} }\` with a forbidden value. ${explainer}`);
});
}
// Forbid exports such as `export default { render }`, because only `export { render }` can be statically analyzed by `es-module-lexer`.
const forbiddenDefaultExports = ['render', 'clientRouting', 'prerender', 'doNotPrerender'];
function assertDefaultExports(defaultExportName, filePath) {
assertUsage(!forbiddenDefaultExports.includes(defaultExportName), `${filePath} has \`export default { ${defaultExportName} }\` which is prohibited, use \`export { ${defaultExportName} }\` instead.`);
}