-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
convert.ts
31 lines (28 loc) · 920 Bytes
/
convert.ts
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
// This module is browser compatible.
import { defaults, IconifyJSON, iconToSVG, parseIconSet } from "./deps.ts";
import type { SVGMap } from "./types.ts";
export function iconifyJSON(
icon: IconifyJSON,
): SVGMap {
const identifier: SVGMap = {};
parseIconSet(icon, (name: any, iconData: any) => {
if (!iconData) {
throw Error(iconData);
}
const renderData = iconToSVG(iconData, defaults);
const svgAttributes: Record<string, string> = {
"xmlns": "http://www.w3.org/2000/svg",
"xmlns:xlink": "http://www.w3.org/1999/xlink",
...renderData.attributes,
};
const svgAttributesStr = Object.keys(svgAttributes)
.map(
(attr) =>
`${attr}="${svgAttributes[attr as keyof typeof svgAttributes]}"`,
)
.join(" ");
const svg = `<svg ${svgAttributesStr}>${renderData.body}</svg>`;
identifier[name] = svg;
});
return identifier;
}