UNPKG

vite-plugin-svg-spritemap

Version:
55 lines (54 loc) 1.84 kB
"use strict"; 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