'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _from = require('babel-runtime/core-js/array/from');
var _from2 = _interopRequireDefault(_from);
var _set = require('babel-runtime/core-js/set');
var _set2 = _interopRequireDefault(_set);
exports.default = function (babel) {
var t = babel.types;
var identifiers = new _set2.default();
var declarators = new _set2.default();
return {
name: 'babel-plugin-glamorous-displayName',
visitor: {
ImportDeclaration: function ImportDeclaration(path) {
var defaultSpecifierPath = path.get('specifiers')[0];
if (path.node.source.value !== 'glamorous' || !t.isImportDefaultSpecifier(defaultSpecifierPath)) {
return;
}
var name = defaultSpecifierPath.node.local.name;
var _path$scope$getBindin = path.scope.getBinding(name),
referencePaths = _path$scope$getBindin.referencePaths;
referencePaths.forEach(function (reference) {
identifiers.add(reference);
});
},
VariableDeclarator: function VariableDeclarator(path) {
var node = path.node;
if (!isRequireCall(node.init) || !t.isIdentifier(node.id)) {
return;
}
var name = node.id.name;
var binding = path.scope.getBinding(name);
Eif (binding) {
var referencePaths = binding.referencePaths;
referencePaths.forEach(function (reference) {
identifiers.add(reference);
});
}
},
Program: {
exit: function exit(path) {
(0, _from2.default)(identifiers).forEach(function (identifier) {
var declarator = identifier.findParent(t.isVariableDeclarator);
if (!declarator || declarators.has(declarator) || !t.isCallExpression(declarator.node.init)) {
return;
}
declarators.add(declarator);
var _declarator = declarator,
displayName = _declarator.node.id.name;
if (declarator.parentPath.findParent(t.isExportNamedDeclaration)) {
declarator = declarator.parentPath;
}
declarator.parentPath.insertAfter(t.expressionStatement(t.assignmentExpression('=', t.memberExpression(t.identifier(displayName), t.identifier('displayName')), t.stringLiteral(displayName))));
});
}
}
}
};
function isRequireCall(callExpression) {
return callExpression && callExpression.type === 'CallExpression' && callExpression.callee.name === 'require' && callExpression.arguments.length === 1 && callExpression.arguments[0].value === 'glamorous';
}
};
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |