Spaces:
Sleeping
Sleeping
pythonic-rag-FastAPIReact
/
frontend
/node_modules
/@svgr
/babel-plugin-add-jsx-attribute
/lib
/index.js
| ; | |
| 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; |