/** * @param {SVGElement} svgEl * @return {Record|object} */ function getSvgAttrs(svgEl: SVGElement): Record { // copy attrs let svgAttrs: Record = {}; const attrs = svgEl.attributes; if (!attrs) { return svgAttrs; } for (let i = attrs.length - 1; i >= 0; i--) { svgAttrs[attrs[i].name] = attrs[i].value; } return svgAttrs; } /** * Remove false attrs * @param {Object} attrs */ function filterAttrs(attrs: Record): Record { return Object.keys(attrs).reduce((result, key) => { if (attrs[key] !== false && attrs[key] !== null && attrs[key] !== undefined) { result[key] = attrs[key]; } return result; }, {} as Record); } export function mergeAttrs(svgEl: SVGElement, attrs: Record): Record { const { class: svgClass, style: svgStyle, ...otherSvgAttrs } = getSvgAttrs(svgEl); const { class: componentClass, style: componentStyle, ...otherComponentAttrs } = filterAttrs(attrs); return { class: [svgClass, componentClass], style: [svgStyle, componentStyle], ...otherSvgAttrs, ...otherComponentAttrs, }; }