UNPKG

babel-plugin-transform-react-stateless-component-name

Version:
99 lines (75 loc) 2.85 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _helper = require('./helper'); exports.default = function (_ref) { var t = _ref.types; return { visitor: { ExportDefaultDeclaration: function ExportDefaultDeclaration(path, _ref2) { var opts = _ref2.file.opts; var node = path.get('declaration'); var arrow = node.isArrowFunctionExpression(); if (!node.isArrowFunctionExpression() && !node.isFunctionDeclaration()) { return; } if (!(0, _helper.doesReturnJSX)(node.get('body'))) { return; } var _ref3 = node.node.id || {}, functionName = _ref3.name; var _ref4 = arrow ? (0, _helper.getTypesFromFilename)(t, opts) : { identifier: t.identifier(functionName), name: functionName }, identifier = _ref4.identifier, name = _ref4.name; // sets display name node.node.id = identifier; var _node$node = node.node, body = _node$node.body, id = _node$node.id, params = _node$node.params; // checks to see if we need to convert `export default function () {}` var init = arrow ? node.node : t.functionExpression(id, params, body); var variable = t.variableDeclaration('const', [t.variableDeclarator(identifier, init)]); var assignment = (0, _helper.isDisplayNameSet)(path.getStatementParent(), name) ? undefined : (0, _helper.makeDisplayName)(t, name); var exporter = t.exportDefaultDeclaration(identifier); path.replaceWithMultiple([variable, assignment, exporter].filter(function (replacement) { return !!replacement; })); }, JSXElement: function JSXElement(path) { var parent = path.parentPath; // avoids traversing assigning jsx to variable if (!parent.isReturnStatement()) { return; } var variable = path.find(function (node) { return node.isVariableDeclarator() || node.isExportDefaultDeclaration() || node.isJSXExpressionContainer(); }); // Ignore JSX elements inside JSX expression blocks if (t.isJSXExpressionContainer(variable)) { return; } var name = function () { try { return variable.get('id.name').node; } catch (errr) { return undefined; } }(); if (name == null) { return; } var statement = variable.getStatementParent(); // check to make sure we don't set displayName when already set if ((0, _helper.isDisplayNameSet)(statement, name)) { return; } statement.insertAfter((0, _helper.makeDisplayName)(t, name)); } } }; };