UNPKG

@masknet/eslint-plugin

Version:
52 lines 1.82 kB
import { createRule } from "../rule.js"; import { findLastIndex } from "../utils.js"; export default createRule({ name: 'prefer-default-export', meta: { type: 'suggestion', docs: { description: 'Enforce default export location at top or bottom', recommended: 'stylistic', }, schema: [{ type: 'string', enum: ['at-top', 'at-bottom'] }], messages: { 'at-top': 'Move default export to top', 'at-bottom': 'Move default export to bottom', }, }, defaultOptions: ['at-bottom'], create(context, [location]) { function onProgram(program) { const index = program.body.findIndex(isDefaultExport); if (index === -1) return; const node = program.body[index]; if (location === 'at-top' && !isTop(program, index)) { context.report({ node, messageId: 'at-top' }); } else if (location === 'at-bottom' && !isBottom(program, index)) { context.report({ node, messageId: 'at-bottom' }); } } return { Program: onProgram }; }, }); function isTop(program, index) { const firstIndex = program.body.findIndex(isNonDefaultExport); if (firstIndex === -1) return true; return index < firstIndex; } function isBottom(program, index) { const lastIndex = findLastIndex(program.body, isNonDefaultExport); if (lastIndex === -1) return true; return index > lastIndex; } function isDefaultExport(node) { return node.type === 'ExportDefaultDeclaration'; } function isNonDefaultExport(node) { return node.type === 'ExportAllDeclaration' || node.type === 'ExportNamedDeclaration'; } //# sourceMappingURL=prefer-default-export.js.map