vite-plugin-svg-spritemap
Version:
Generates a SVG spritemap from multiple .svg files
55 lines (54 loc) • 1.84 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const fg = require("fast-glob");
const fs = require("node:fs");
const svgo = require("svgo");
const path = require("node:path");
const nodeHtmlParser = require("node-html-parser");
function getSpriteContent({
pattern,
prefix,
svgo: svgo$1,
currentColor
}) {
const svgFiles = fg.sync(pattern);
const symbols = [];
const definitions = [];
let svgoConfig = {};
if (typeof svgo$1 === "object") {
svgoConfig = svgo$1;
}
if (currentColor) {
if (!svgoConfig.plugins) {
svgoConfig.plugins = [];
}
svgoConfig.plugins.push({
name: "convertColors",
params: {
currentColor: true
}
});
}
svgFiles.forEach((file) => {
let code = fs.readFileSync(file, "utf-8");
const result = svgo$1 ? svgo.optimize(code, svgoConfig).data : code;
const name = path.basename(file, ".svg");
const symbolId = prefix ? `${prefix}-${name}` : name;
const svgElement = nodeHtmlParser.parse(result).querySelector("svg");
const symbol = nodeHtmlParser.parse("<symbol/>").querySelector("symbol");
const defs = svgElement.querySelector("defs");
if (defs) {
defs.childNodes.forEach((def) => definitions.push(def.toString()));
svgElement.removeChild(defs);
}
symbol.setAttribute("id", symbolId);
if (svgElement.attributes.viewBox) {
symbol.setAttribute("viewBox", svgElement.attributes.viewBox);
}
svgElement.childNodes.forEach((child) => symbol.appendChild(child));
symbols.push(symbol.toString());
});
return `<svg xmlns="http://www.w3.org/2000/svg">${definitions.length > 0 ? `<defs>${definitions.join("")}</defs>` : ""}${symbols.join("")}</svg>`;
}
exports.getSpriteContent = getSpriteContent;
//# sourceMappingURL=getSpriteContent.js.map