babel-plugin-transform-export-default-name
Version:
Babel plugin that transforms default exports to named exports.
80 lines (53 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _deriveName = require('./deriveName');
var _deriveName2 = _interopRequireDefault(_deriveName);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = (_ref) => {
var t = _ref.types;
var replace = (path, name, replacement) => {
var id = t.identifier(name);
var _path$replaceWithMult = path.replaceWithMultiple([t.variableDeclaration('const', [t.variableDeclarator(id, replacement)]), t.exportDefaultDeclaration(id)]),
_path$replaceWithMult2 = _slicedToArray(_path$replaceWithMult, 1),
varDeclPath = _path$replaceWithMult2[0];
path.scope.registerDeclaration(varDeclPath);
};
return {
visitor: {
ExportDefaultDeclaration(path, state) {
var declaration = path.node.declaration;
if (declaration.id && declaration.id.name) {
return;
}
var name = (0, _deriveName2.default)(state, path.scope);
if (t.isArrowFunctionExpression(declaration)) {
var declarationReplacement = t.arrowFunctionExpression(declaration.params, declaration.body, declaration.generator);
declarationReplacement.async = declaration.async;
replace(path, name, declarationReplacement);
return;
}
if (t.isFunctionDeclaration(declaration)) {
var _declarationReplacement = t.functionExpression(null, declaration.params, declaration.body, declaration.generator);
_declarationReplacement.async = declaration.async;
replace(path, name, _declarationReplacement);
return;
}
if (t.isFunctionExpression(declaration)) {
var _declarationReplacement2 = t.functionExpression(null, declaration.params, declaration.body, declaration.generator);
_declarationReplacement2.async = declaration.async;
replace(path, name, _declarationReplacement2);
return;
}
if (t.isClassDeclaration(declaration)) {
var _declarationReplacement3 = t.classExpression(null, declaration.superClass, declaration.body, declaration.decorators || []);
replace(path, name, _declarationReplacement3);
// eslint-disable-next-line no-useless-return
return;
}
}
}
};
};