123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 'use strict';
- var core = require('@babel/core');
- const elements = ["svg", "Svg"];
- const createTagElement = (tag, children = [], attributes = []) => {
- const eleName = core.types.jsxIdentifier(tag);
- return core.types.jsxElement(
- core.types.jsxOpeningElement(eleName, attributes),
- core.types.jsxClosingElement(eleName),
- children
- );
- };
- const createTagIdAttribute = (tag) => core.types.jsxAttribute(
- core.types.jsxIdentifier("id"),
- core.types.jsxExpressionContainer(core.types.identifier(`${tag}Id`))
- );
- const addTagIdAttribute = (tag, attributes) => {
- const existingId = attributes.find(
- (attribute) => core.types.isJSXAttribute(attribute) && attribute.name.name === "id"
- );
- if (!existingId) {
- return [...attributes, createTagIdAttribute(tag)];
- }
- existingId.value = core.types.jsxExpressionContainer(
- core.types.isStringLiteral(existingId.value) ? core.types.logicalExpression("||", core.types.identifier(`${tag}Id`), existingId.value) : core.types.identifier(`${tag}Id`)
- );
- return attributes;
- };
- const plugin = () => ({
- visitor: {
- JSXElement(path, state) {
- const tag = state.opts.tag || "title";
- if (!elements.length)
- return;
- const openingElement = path.get("openingElement");
- const openingElementName = openingElement.get("name");
- if (!elements.some(
- (element) => openingElementName.isJSXIdentifier({ name: element })
- )) {
- return;
- }
- const getTagElement = (existingTitle) => {
- var _a;
- const tagExpression = core.types.identifier(tag);
- if (existingTitle) {
- existingTitle.openingElement.attributes = addTagIdAttribute(
- tag,
- existingTitle.openingElement.attributes
- );
- }
- const conditionalTitle = core.types.conditionalExpression(
- tagExpression,
- createTagElement(
- tag,
- [core.types.jsxExpressionContainer(tagExpression)],
- existingTitle ? existingTitle.openingElement.attributes : [createTagIdAttribute(tag)]
- ),
- core.types.nullLiteral()
- );
- if ((_a = existingTitle == null ? void 0 : existingTitle.children) == null ? void 0 : _a.length) {
- return core.types.jsxExpressionContainer(
- core.types.conditionalExpression(
- core.types.binaryExpression(
- "===",
- tagExpression,
- core.types.identifier("undefined")
- ),
- existingTitle,
- conditionalTitle
- )
- );
- }
- return core.types.jsxExpressionContainer(conditionalTitle);
- };
- let tagElement = null;
- const hasTitle = path.get("children").some((childPath) => {
- if (childPath.node === tagElement)
- return false;
- if (!childPath.isJSXElement())
- return false;
- const name = childPath.get("openingElement").get("name");
- if (!name.isJSXIdentifier())
- return false;
- if (name.node.name !== tag)
- return false;
- tagElement = getTagElement(childPath.node);
- childPath.replaceWith(tagElement);
- return true;
- });
- tagElement = tagElement || getTagElement();
- if (!hasTitle) {
- path.node.children.unshift(tagElement);
- path.replaceWith(path.node);
- }
- }
- }
- });
- module.exports = plugin;
- //# sourceMappingURL=index.js.map
|