UNPKG

4.37 kBJavaScriptView Raw
1'use strict';
2
3var addJSXAttribute = require('@svgr/babel-plugin-add-jsx-attribute');
4var removeJSXAttribute = require('@svgr/babel-plugin-remove-jsx-attribute');
5var removeJSXEmptyExpression = require('@svgr/babel-plugin-remove-jsx-empty-expression');
6var replaceJSXAttributeValue = require('@svgr/babel-plugin-replace-jsx-attribute-value');
7var svgDynamicTitle = require('@svgr/babel-plugin-svg-dynamic-title');
8var svgEmDimensions = require('@svgr/babel-plugin-svg-em-dimensions');
9var transformReactNativeSVG = require('@svgr/babel-plugin-transform-react-native-svg');
10var transformSvgComponent = require('@svgr/babel-plugin-transform-svg-component');
11
12function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
14var addJSXAttribute__default = /*#__PURE__*/_interopDefaultLegacy(addJSXAttribute);
15var removeJSXAttribute__default = /*#__PURE__*/_interopDefaultLegacy(removeJSXAttribute);
16var removeJSXEmptyExpression__default = /*#__PURE__*/_interopDefaultLegacy(removeJSXEmptyExpression);
17var replaceJSXAttributeValue__default = /*#__PURE__*/_interopDefaultLegacy(replaceJSXAttributeValue);
18var svgDynamicTitle__default = /*#__PURE__*/_interopDefaultLegacy(svgDynamicTitle);
19var svgEmDimensions__default = /*#__PURE__*/_interopDefaultLegacy(svgEmDimensions);
20var transformReactNativeSVG__default = /*#__PURE__*/_interopDefaultLegacy(transformReactNativeSVG);
21var transformSvgComponent__default = /*#__PURE__*/_interopDefaultLegacy(transformSvgComponent);
22
23const getAttributeValue = (value) => {
24 const literal = typeof value === "string" && value.startsWith("{") && value.endsWith("}");
25 return { value: literal ? value.slice(1, -1) : value, literal };
26};
27const propsToAttributes = (props) => {
28 return Object.keys(props).map((name) => {
29 const { literal, value } = getAttributeValue(props[name]);
30 return { name, literal, value };
31 });
32};
33function replaceMapToValues(replaceMap) {
34 return Object.keys(replaceMap).map((value) => {
35 const { literal, value: newValue } = getAttributeValue(replaceMap[value]);
36 return { value, newValue, literal };
37 });
38}
39const plugin = (_, opts) => {
40 let toRemoveAttributes = ["version"];
41 let toAddAttributes = [];
42 if (opts.svgProps) {
43 toAddAttributes = [...toAddAttributes, ...propsToAttributes(opts.svgProps)];
44 }
45 if (opts.ref) {
46 toAddAttributes = [
47 ...toAddAttributes,
48 {
49 name: "ref",
50 value: "ref",
51 literal: true
52 }
53 ];
54 }
55 if (opts.titleProp) {
56 toAddAttributes = [
57 ...toAddAttributes,
58 {
59 name: "aria-labelledby",
60 value: "titleId",
61 literal: true
62 }
63 ];
64 }
65 if (opts.descProp) {
66 toAddAttributes = [
67 ...toAddAttributes,
68 {
69 name: "aria-describedby",
70 value: "descId",
71 literal: true
72 }
73 ];
74 }
75 if (opts.expandProps) {
76 toAddAttributes = [
77 ...toAddAttributes,
78 {
79 name: "props",
80 spread: true,
81 position: opts.expandProps === "start" || opts.expandProps === "end" ? opts.expandProps : void 0
82 }
83 ];
84 }
85 if (!opts.dimensions) {
86 toRemoveAttributes = [...toRemoveAttributes, "width", "height"];
87 }
88 const plugins = [
89 [transformSvgComponent__default["default"], opts],
90 ...opts.icon !== false && opts.dimensions ? [
91 [
92 svgEmDimensions__default["default"],
93 opts.icon !== true ? { width: opts.icon, height: opts.icon } : opts.native ? { width: 24, height: 24 } : {}
94 ]
95 ] : [],
96 [
97 removeJSXAttribute__default["default"],
98 { elements: ["svg", "Svg"], attributes: toRemoveAttributes }
99 ],
100 [
101 addJSXAttribute__default["default"],
102 { elements: ["svg", "Svg"], attributes: toAddAttributes }
103 ],
104 removeJSXEmptyExpression__default["default"]
105 ];
106 if (opts.replaceAttrValues) {
107 plugins.push([
108 replaceJSXAttributeValue__default["default"],
109 { values: replaceMapToValues(opts.replaceAttrValues) }
110 ]);
111 }
112 if (opts.titleProp) {
113 plugins.push(svgDynamicTitle__default["default"]);
114 }
115 if (opts.descProp) {
116 plugins.push([svgDynamicTitle__default["default"], { tag: "desc" }, "desc"]);
117 }
118 if (opts.native) {
119 plugins.push(transformReactNativeSVG__default["default"]);
120 }
121 return { plugins };
122};
123
124module.exports = plugin;
125//# sourceMappingURL=index.js.map