{"version":3,"file":"index.mjs","sources":["../../../../src/index.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport path from 'node:path';\nimport type { Plugin, ResolvedConfig } from 'vite';\nimport chokidar, { FSWatcher } from 'chokidar';\nimport type { Config as SVGOConfig } from 'svgo';\n\nimport { getSpriteContent } from './getSpriteContent';\n\nexport interface SvgSpritemapOptions {\n  pattern: string;\n  prefix?: string;\n  filename?: string;\n  svgo?: SVGOConfig | boolean;\n  currentColor?: boolean;\n  emit?: boolean;\n}\n\nconst PLUGIN_NAME = 'vite-plugin-svg-spritemap';\n\nfunction svgSpritemap({\n  pattern,\n  prefix,\n  filename = 'spritemap.svg',\n  svgo = true,\n  currentColor = false,\n  emit = false,\n}: SvgSpritemapOptions): Plugin[] {\n  let config: ResolvedConfig;\n  let watcher: FSWatcher;\n\n  return [\n    {\n      name: `${PLUGIN_NAME}:build`,\n      apply: 'build',\n      async configResolved(_config) {\n        config = _config;\n      },\n      writeBundle() {\n        const sprite = getSpriteContent({ pattern, prefix, svgo, currentColor });\n        const filePath = path.resolve(config.root, config.build.outDir, filename);\n        fs.ensureFileSync(filePath);\n        fs.writeFileSync(filePath, sprite);\n\n        if (emit) {\n          this.emitFile({\n            type: 'asset',\n            fileName: filename,\n            source: sprite,\n          });\n        }\n      },\n    },\n    {\n      name: `${PLUGIN_NAME}:serve`,\n      apply: 'serve',\n      async configResolved(_config) {\n        config = _config;\n      },\n      configureServer(server) {\n        function reloadPage() {\n          server.ws.send({ type: 'full-reload', path: '*' });\n        }\n\n        watcher = chokidar\n          .watch(pattern, {\n            cwd: config.root,\n            ignoreInitial: true,\n          })\n          .on('add', reloadPage)\n          .on('change', reloadPage)\n          .on('unlink', reloadPage);\n\n        return () => {\n          server.middlewares.use(async (req, res, next) => {\n            if (!req.originalUrl?.endsWith('/' + filename)) {\n              return next();\n            }\n            const sprite = getSpriteContent({ pattern, prefix, svgo, currentColor });\n            res.writeHead(200, {\n              'Content-Type': 'image/svg+xml, charset=utf-8',\n              'Cache-Control': 'no-cache',\n            });\n            res.end(sprite);\n          });\n        };\n      },\n      async closeBundle() {\n        await watcher.close();\n      },\n    },\n  ];\n}\n\nexport { svgSpritemap, svgSpritemap as default }\n"],"names":[],"mappings":";;;;AAiBA,MAAM,cAAc;AAEpB,SAAS,aAAa;AAAA,EACpB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,eAAe;AAAA,EACf,OAAO;AACT,GAAkC;AAC5B,MAAA;AACA,MAAA;AAEG,SAAA;AAAA,IACL;AAAA,MACE,MAAM,GAAG,WAAW;AAAA,MACpB,OAAO;AAAA,MACP,MAAM,eAAe,SAAS;AACnB,iBAAA;AAAA,MACX;AAAA,MACA,cAAc;AACZ,cAAM,SAAS,iBAAiB,EAAE,SAAS,QAAQ,MAAM,cAAc;AACjE,cAAA,WAAW,KAAK,QAAQ,OAAO,MAAM,OAAO,MAAM,QAAQ,QAAQ;AACxE,WAAG,eAAe,QAAQ;AACvB,WAAA,cAAc,UAAU,MAAM;AAEjC,YAAI,MAAM;AACR,eAAK,SAAS;AAAA,YACZ,MAAM;AAAA,YACN,UAAU;AAAA,YACV,QAAQ;AAAA,UAAA,CACT;AAAA,QAAA;AAAA,MACH;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,MAAM,GAAG,WAAW;AAAA,MACpB,OAAO;AAAA,MACP,MAAM,eAAe,SAAS;AACnB,iBAAA;AAAA,MACX;AAAA,MACA,gBAAgB,QAAQ;AACtB,iBAAS,aAAa;AACpB,iBAAO,GAAG,KAAK,EAAE,MAAM,eAAe,MAAM,KAAK;AAAA,QAAA;AAGzC,kBAAA,SACP,MAAM,SAAS;AAAA,UACd,KAAK,OAAO;AAAA,UACZ,eAAe;AAAA,QAChB,CAAA,EACA,GAAG,OAAO,UAAU,EACpB,GAAG,UAAU,UAAU,EACvB,GAAG,UAAU,UAAU;AAE1B,eAAO,MAAM;AACX,iBAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;;AAC/C,gBAAI,GAAC,SAAI,gBAAJ,mBAAiB,SAAS,MAAM,YAAW;AAC9C,qBAAO,KAAK;AAAA,YAAA;AAEd,kBAAM,SAAS,iBAAiB,EAAE,SAAS,QAAQ,MAAM,cAAc;AACvE,gBAAI,UAAU,KAAK;AAAA,cACjB,gBAAgB;AAAA,cAChB,iBAAiB;AAAA,YAAA,CAClB;AACD,gBAAI,IAAI,MAAM;AAAA,UAAA,CACf;AAAA,QACH;AAAA,MACF;AAAA,MACA,MAAM,cAAc;AAClB,cAAM,QAAQ,MAAM;AAAA,MAAA;AAAA,IACtB;AAAA,EAEJ;AACF;"}