UNPKG

firescript

Version:
76 lines (64 loc) 2.18 kB
const ASTCreator = require('../utils/ASTCreator') function getExportsExpression () { const object = ASTCreator.identifier('module') const property = ASTCreator.identifier('exports') return ASTCreator.memberExpression(object, property) } function handleVariableDeclaration (ast) { const childs = [] childs.push(ast) ast.declarations.forEach((item) => { const property = item.id const memberExpression = ASTCreator.memberExpression(getExportsExpression(), property) childs.push(ASTCreator.expressionStatement( ASTCreator.assignmentExpression('=', memberExpression, property ) )) }) return childs } function handleFunctionOrClassExpression (ast) { const property = ast.id const memberExpression = ASTCreator.memberExpression(getExportsExpression(), property) return ASTCreator.expressionStatement( ASTCreator.assignmentExpression('=', memberExpression, ast ) ) } module.exports = (transformer) => { if (transformer.test((ctx) => ctx.esModules === false)) { transformer.add('ExportDefaultDeclaration', (ast) => { const property = ASTCreator.identifier('default') const memberExpression = ASTCreator.memberExpression(getExportsExpression(), property) const expression = ASTCreator.expressionStatement( ASTCreator.assignmentExpression('=', memberExpression, ast.declaration ) ) return expression }) transformer.add('ExportNamedDeclaration', (ast) => { if (ast.declaration) { if (ast.declaration.type === 'VariableDeclaration') { return handleVariableDeclaration(ast.declaration) } if (['ClassDeclaration', 'FunctionDeclaration'].includes(ast.declaration.type)) { return handleFunctionOrClassExpression(ast.declaration) } } else { return ast.specifiers.map((specifier) => { return ASTCreator.expressionStatement(ASTCreator.assignmentExpression('=', ASTCreator.memberExpression(getExportsExpression(), specifier.local), specifier.exported )) }) } return ast }) } }