UNPKG

babel-plugin-react-element-info

Version:
62 lines (49 loc) 1.68 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = reactElementInfo; var _path = require('path'); function reactElementInfo(_ref) { var t = _ref.types; var defaultPrefix = 'data-qa'; var prefix = void 0; var filenameAttr = void 0; var nodeNameAttr = void 0; var visitor = { Program: function Program(path, state) { if (state.opts.prefix) { prefix = 'data-' + state.opts.prefix; } else { prefix = defaultPrefix; } filenameAttr = prefix + '-file'; nodeNameAttr = prefix + '-node'; }, JSXOpeningElement: function JSXOpeningElement(path, state) { var openingElement = path.container.openingElement; var attributes = openingElement.attributes; var newAttributes = []; var elementName = openingElement.name && openingElement.name.name || openingElement.name.property && openingElement.name.property.name; if (elementName === 'Fragment') { return; } newAttributes.push(t.jSXAttribute(t.jSXIdentifier(nodeNameAttr), t.stringLiteral(elementName))); var name = void 0; if (state.file && state.file.opts) { if (state.file.opts.basename) { name = state.file.opts.basename; } else if (state.file.opts.filename) { name = (0, _path.basename)(state.file.opts.filename, (0, _path.extname)(state.file.opts.filename)); } } if (name) { newAttributes.push(t.jSXAttribute(t.jSXIdentifier(filenameAttr), t.stringLiteral(name))); } attributes.push.apply(attributes, newAttributes); } }; return { visitor: visitor }; } // weak