UNPKG

babel-plugin-lodash-modularize

Version:

Babel plugin that replaces lodash library import statement to individual module imports.

116 lines (88 loc) 3.48 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _resolveMethod = require('./resolveMethod'); var _resolveMethod2 = _interopRequireDefault(_resolveMethod); var _semver = require('semver'); var _semver2 = _interopRequireDefault(_semver); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var LODASH_DEFAULT_VERSION = '3.0.0'; exports.default = function (_ref) { var t = _ref.types; var importMethod = undefined, lodashObjects = undefined, lodashVersion = undefined, selectedMethods = undefined, specified = undefined; importMethod = function (methodName, file) { if (!selectedMethods[methodName]) { selectedMethods[methodName] = file.addImport((0, _resolveMethod2.default)(methodName), 'default', methodName); } return selectedMethods[methodName]; }; return { visitor: { CallExpression: function CallExpression(path) { var file = undefined, name = undefined, node = undefined; node = path.node; name = node.callee.name; file = path.hub.file; if (!t.isIdentifier(node.callee)) { return; } if (specified[name]) { node.callee = importMethod(specified[name], file); } if (lodashObjects[name]) { throw new Error('lodash chaining syntax is not supported.'); } }, ImportDeclaration: function ImportDeclaration(path) { var node = undefined, value = undefined; node = path.node; value = node.source.value; if (value !== 'lodash') { return; } node.specifiers.forEach(function (specifier) { if (t.isImportSpecifier(specifier)) { specified[specifier.local.name] = specifier.imported.name; } else { lodashObjects[specifier.local.name] = true; } }); path.remove(); }, MemberExpression: function MemberExpression(path) { var file = undefined, node = undefined; node = path.node; file = path.hub.file; if (!lodashObjects[node.object.name]) { return; } if (node.property.name === 'chain') { throw new Error('lodash chaining syntax is not supported.'); } path.replaceWith(importMethod(node.property.name, file)); }, Program: { enter: function enter(path, state) { lodashObjects = {}; specified = {}; selectedMethods = {}; lodashVersion = state.opts.lodashVersion || LODASH_DEFAULT_VERSION; if (_semver2.default.lt(lodashVersion, '3.0.0')) { throw new Error('lodash prior to version 3 is unsupported.'); } } } } }; }; module.exports = exports['default']; //# sourceMappingURL=index.js.map