UNPKG

vite-plugin-svg-spritemap

Version:
76 lines (75 loc) 2.09 kB
import fs from "fs-extra"; import path from "node:path"; import chokidar from "chokidar"; import { getSpriteContent } from "./getSpriteContent.mjs"; 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({ 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({ 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(); } } ]; } export { svgSpritemap }; //# sourceMappingURL=index.mjs.map