You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
"use strict";
exports.__esModule = true; exports.default = void 0; const positionMethod = { start: 'unshiftContainer', end: 'pushContainer' };
const addJSXAttribute = ({ types: t, template }, opts) => { function getAttributeValue({ literal, value }) { if (typeof value === 'boolean') { return t.jsxExpressionContainer(t.booleanLiteral(value)); }
if (typeof value === 'number') { return t.jsxExpressionContainer(t.numericLiteral(value)); }
if (typeof value === 'string' && literal) { return t.jsxExpressionContainer(template.ast(value).expression); }
if (typeof value === 'string') { return t.stringLiteral(value); }
return null; }
function getAttribute({ spread, name, value, literal }) { if (spread) { return t.jsxSpreadAttribute(t.identifier(name)); }
return t.jsxAttribute(t.jsxIdentifier(name), getAttributeValue({ value, literal })); }
return { visitor: { JSXOpeningElement(path) { if (!opts.elements.includes(path.node.name.name)) return; opts.attributes.forEach(({ name, value = null, spread = false, literal = false, position = 'end' }) => { const method = positionMethod[position]; const newAttribute = getAttribute({ spread, name, value, literal }); const attributes = path.get('attributes');
const isEqualAttribute = attribute => { if (spread) { return attribute.get('argument').isIdentifier({ name }); }
return attribute.get('name').isJSXIdentifier({ name }); };
const replaced = attributes.some(attribute => { if (!isEqualAttribute(attribute)) return false; attribute.replaceWith(newAttribute); return true; });
if (!replaced) { path[method]('attributes', newAttribute); } }); }
} }; };
var _default = addJSXAttribute; exports.default = _default;
|