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.
52 lines
1.1 KiB
52 lines
1.1 KiB
"use strict"; |
|
|
|
exports.__esModule = true; |
|
exports.default = void 0; |
|
|
|
const addJSXAttribute = ({ |
|
types: t, |
|
template |
|
}, opts) => { |
|
function getAttributeValue(value, literal) { |
|
if (typeof value === 'string' && literal) { |
|
return t.jsxExpressionContainer(template.ast(value).expression); |
|
} |
|
|
|
if (typeof value === 'string') { |
|
return t.stringLiteral(value); |
|
} |
|
|
|
if (typeof value === 'boolean') { |
|
return t.jsxExpressionContainer(t.booleanLiteral(value)); |
|
} |
|
|
|
if (typeof value === 'number') { |
|
return t.jsxExpressionContainer(t.numericLiteral(value)); |
|
} |
|
|
|
return null; |
|
} |
|
|
|
return { |
|
visitor: { |
|
JSXAttribute(path) { |
|
const valuePath = path.get('value'); |
|
if (!valuePath.isStringLiteral()) return; |
|
opts.values.forEach(({ |
|
value, |
|
newValue, |
|
literal |
|
}) => { |
|
if (!valuePath.isStringLiteral({ |
|
value |
|
})) return; |
|
valuePath.replaceWith(getAttributeValue(newValue, literal)); |
|
}); |
|
} |
|
|
|
} |
|
}; |
|
}; |
|
|
|
var _default = addJSXAttribute; |
|
exports.default = _default; |