index.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.default = void 0;
  4. const addJSXAttribute = ({
  5. types: t,
  6. template
  7. }, opts) => {
  8. function getAttributeValue(value, literal) {
  9. if (typeof value === 'string' && literal) {
  10. return t.jsxExpressionContainer(template.ast(value).expression);
  11. }
  12. if (typeof value === 'string') {
  13. return t.stringLiteral(value);
  14. }
  15. if (typeof value === 'boolean') {
  16. return t.jsxExpressionContainer(t.booleanLiteral(value));
  17. }
  18. if (typeof value === 'number') {
  19. return t.jsxExpressionContainer(t.numericLiteral(value));
  20. }
  21. return null;
  22. }
  23. return {
  24. visitor: {
  25. JSXAttribute(path) {
  26. const valuePath = path.get('value');
  27. if (!valuePath.isStringLiteral()) return;
  28. opts.values.forEach(({
  29. value,
  30. newValue,
  31. literal
  32. }) => {
  33. if (!valuePath.isStringLiteral({
  34. value
  35. })) return;
  36. valuePath.replaceWith(getAttributeValue(newValue, literal));
  37. });
  38. }
  39. }
  40. };
  41. };
  42. var _default = addJSXAttribute;
  43. exports.default = _default;