UNPKG

rollup-plugin-strip-final-exports

Version:
70 lines (65 loc) 3.12 kB
import { walk } from 'estree-walker'; import MagicString from 'magic-string'; const isExpressionStatement = (node) => node.type === 'ExpressionStatement'; const isIdentifier = (node) => node.type === 'Identifier'; const isLiteral = (node) => node.type === 'Literal'; const isMemberExpression = (node) => node.type === 'MemberExpression'; const isAssignmentStatement = (node) => (isExpressionStatement(node) && node.expression.type === 'AssignmentExpression'); const isModuleIdentifier = (node) => (isIdentifier(node) && node.name === 'module'); const isExportsIdentifier = (node) => (isIdentifier(node) && node.name === 'exports'); const isExportsLiteral = (node) => (isLiteral(node) && node.value === 'exports'); const isModuleExportsWithIdentifier = (memberExpression) => (isModuleIdentifier(memberExpression.object) && isExportsIdentifier(memberExpression.property)); const isModuleExportsWithLiteral = (memberExpression) => (isModuleIdentifier(memberExpression.object) && isExportsLiteral(memberExpression.property)); const isModuleExportsExpression = (memberExpression) => (isModuleExportsWithIdentifier(memberExpression) || isModuleExportsWithLiteral(memberExpression)); const utils = { isAssignmentStatement, isExportsIdentifier, isMemberExpression, isModuleExportsExpression, isModuleIdentifier, }; const isModuleExportsMemberExpression = (expression) => (utils.isMemberExpression(expression) && utils.isModuleExportsExpression(expression)); const isCJSExportsAssignment = (memberExpression) => (utils.isExportsIdentifier(memberExpression.object) || utils.isModuleExportsExpression(memberExpression) || isModuleExportsMemberExpression(memberExpression.object)); const isCJSModuleExportStatement = (node) => (utils.isAssignmentStatement(node) && utils.isMemberExpression(node.expression.left) && isCJSExportsAssignment(node.expression.left)); const isESModuleExportStatement = (node) => [ 'ExportAllDeclaration', 'ExportDefaultDeclaration', 'ExportNamedDeclaration', ].includes(node.type); const isCJSExport = (node, rollupOptions) => (rollupOptions.format === 'cjs' && isCJSModuleExportStatement(node)); const isESModuleExport = (node, rollupOptions) => (rollupOptions.format === 'es' && isESModuleExportStatement(node)); const isExport = (node, rollupOptions) => (isCJSExport(node, rollupOptions) || isESModuleExport(node, rollupOptions)); const index = (stripExportsOptions = {}) => ({ name: 'Strip final exports', renderChunk(sourceCode, chunk, rollupOptions) { const ast = this.parse(sourceCode); const magicString = new MagicString(sourceCode); walk(ast, { enter(node) { if (isExport(node, rollupOptions)) { const { start, end } = node; magicString.remove(start, end); } }, }); const code = magicString.toString(); const map = stripExportsOptions.sourceMap ? magicString.generateMap() : null; return { code, map }; }, }); export { index as default };