babel-plugin-mocktail
Version:
Mocktail.mock() all your exports
52 lines (38 loc) • 1.74 kB
JavaScript
;
var _helpers = require("./helpers");
var _ExportDefaultDeclarationVisitor = require("./ExportDefaultDeclarationVisitor");
var _ExportDefaultDeclarationVisitor2 = _interopRequireDefault(_ExportDefaultDeclarationVisitor);
var _ExportNamedDeclarationVisitor = require("./ExportNamedDeclarationVisitor");
var _ExportNamedDeclarationVisitor2 = _interopRequireDefault(_ExportNamedDeclarationVisitor);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function (_ref) {
var t = _ref.types;
var visitor = {
Program: function Program(path, _ref2) {
var filename = _ref2.file.opts.filename;
var scope = path.scope;
var moduleName = (0, _helpers.getModuleName)(filename);
var mock = scope.generateUidIdentifier("mock");
var queue = new Map();
function enqueue(path, replacement) {
var list = queue.get(path) || [];
list.push(replacement);
queue.set(path, list.slice());
return list;
}
path.traverse({
/** ExportDefaultDeclaration Visitor */
ExportDefaultDeclaration: new _ExportDefaultDeclarationVisitor2.default({ enqueue: enqueue, mock: mock, moduleName: moduleName, scope: scope }),
/** ExportNamedDeclaration Visitor */
ExportNamedDeclaration: new _ExportNamedDeclarationVisitor2.default({ enqueue: enqueue, mock: mock, moduleName: moduleName, scope: scope })
});
if (queue.size) {
path.get('body')[0].insertBefore((0, _helpers.buildMocktailImport)(mock));
queue.forEach(function (nodes, path) {
return path.replaceWithMultiple(nodes);
});
}
}
};
return { visitor: visitor };
};