UNPKG

babel-plugin-mocktail

Version:
52 lines (38 loc) 1.74 kB
"use strict"; 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 }; };