vite-plugin-svg-spritemap
Version:
Generates a SVG spritemap from multiple .svg files
76 lines (75 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const fs = require("fs-extra");
const path = require("node:path");
const chokidar = require("chokidar");
const getSpriteContent = require("./getSpriteContent.js");
const PLUGIN_NAME = "vite-plugin-svg-spritemap";
function svgSpritemap({
pattern,
prefix,
filename = "spritemap.svg",
svgo = true,
currentColor = false,
emit = false
}) {
let config;
let watcher;
return [
{
name: `${PLUGIN_NAME}:build`,
apply: "build",
async configResolved(_config) {
config = _config;
},
writeBundle() {
const sprite = getSpriteContent.getSpriteContent({ pattern, prefix, svgo, currentColor });
const filePath = path.resolve(config.root, config.build.outDir, filename);
fs.ensureFileSync(filePath);
fs.writeFileSync(filePath, sprite);
if (emit) {
this.emitFile({
type: "asset",
fileName: filename,
source: sprite
});
}
}
},
{
name: `${PLUGIN_NAME}:serve`,
apply: "serve",
async configResolved(_config) {
config = _config;
},
configureServer(server) {
function reloadPage() {
server.ws.send({ type: "full-reload", path: "*" });
}
watcher = chokidar.watch(pattern, {
cwd: config.root,
ignoreInitial: true
}).on("add", reloadPage).on("change", reloadPage).on("unlink", reloadPage);
return () => {
server.middlewares.use(async (req, res, next) => {
var _a;
if (!((_a = req.originalUrl) == null ? void 0 : _a.endsWith("/" + filename))) {
return next();
}
const sprite = getSpriteContent.getSpriteContent({ pattern, prefix, svgo, currentColor });
res.writeHead(200, {
"Content-Type": "image/svg+xml, charset=utf-8",
"Cache-Control": "no-cache"
});
res.end(sprite);
});
};
},
async closeBundle() {
await watcher.close();
}
}
];
}
exports.svgSpritemap = svgSpritemap;
//# sourceMappingURL=index.js.map