UNPKG

vite-plugin-svg-spritemap

Version:
76 lines (75 loc) 2.23 kB
"use strict"; 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