File size: 1,602 Bytes
a053984
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
'use strict';

var core = require('@babel/core');

const elements = ["svg", "Svg"];
const getValue = (raw) => {
  if (raw === void 0)
    return core.types.stringLiteral("1em");
  switch (typeof raw) {
    case "number":
      return core.types.jsxExpressionContainer(core.types.numericLiteral(raw));
    case "string":
      return core.types.stringLiteral(raw);
    default:
      return core.types.stringLiteral("1em");
  }
};
const plugin = (_, opts) => ({
  visitor: {
    JSXOpeningElement(path) {
      if (!elements.some(
        (element) => path.get("name").isJSXIdentifier({ name: element })
      ))
        return;
      const values = {
        width: getValue(opts.width),
        height: getValue(opts.height)
      };
      const requiredAttributes = Object.keys(values);
      path.get("attributes").forEach((attributePath) => {
        if (!attributePath.isJSXAttribute())
          return;
        const namePath = attributePath.get("name");
        if (!namePath.isJSXIdentifier())
          return;
        const index = requiredAttributes.indexOf(namePath.node.name);
        if (index === -1)
          return;
        const valuePath = attributePath.get("value");
        valuePath.replaceWith(values[namePath.node.name]);
        requiredAttributes.splice(index, 1);
      });
      path.pushContainer(
        "attributes",
        requiredAttributes.map(
          (attr) => core.types.jsxAttribute(
            core.types.jsxIdentifier(attr),
            values[attr]
          )
        )
      );
    }
  }
});

module.exports = plugin;
//# sourceMappingURL=index.js.map