{"version":3,"file":"index.mjs","sources":["../plugin/index.ts","../plugin/resolvers/raw.ts","../plugin/resolvers/dataURI.ts","../plugin/resolvers/base64.ts","../plugin/resolvers/component.ts"],"sourcesContent":["import { EsbuildTransformOptions, Plugin } from \"vite\";\nimport type { Config as SvgrConfig } from \"@svgr/core\";\nimport type { Config as SvgoConfig } from \"svgo\";\n\nimport { resolveDataURI } from \"./resolvers/dataURI\";\nimport { resolveRaw } from \"./resolvers/raw\";\nimport { resolveReactComponent } from \"plugin/resolvers/component\";\nimport { resolveBase64 } from \"plugin/resolvers/base64\";\n\nexport interface PluginOptions {\n  /**\n   * If \"include\" predicate is present, only passing paths will be processed\n   * @param path E.g \"C:/path/to/my-svg.svg\"\n   * @returns Whether given path should be processed by the plugin or not\n   */\n  include?: (path: string) => boolean;\n\n  /**\n   * If \"exclude\" predicate is present, every path excluding passing paths will be processed\n   * @param path E.g \"C:/path/to/my-svg.svg\"\n   * @returns Whether given path should be discarded or processed by the plugin\n   */\n  exclude?: (path: string) => boolean;\n\n  /**\n   * Options used while resolving as \"?raw\"\n   */\n  rawLoaderOptions?: {\n    /**\n     * Enables SVGO optimizations while loading the SVG asset\n     * @default false\n     */\n    svgoEnabled?: boolean;\n\n    /**\n     * Options used while running SVGO optimizations on the original SVG asset\n     */\n    svgoConfig?: SvgoConfig;\n  };\n\n  /**\n   * Options used while resolving as \"?url\"\n   */\n  urlLoaderOptions?: {\n    /**\n     * Enables SVGO optimizations while loading the SVG asset\n     * @default false\n     */\n    svgoEnabled?: boolean;\n\n    /**\n     * Options used while running SVGO optimizations on the original SVG asset\n     */\n    svgoConfig?: SvgoConfig;\n  };\n\n  /**\n   * Options used while resolving as \"?base64\"\n   */\n  base64LoaderOptions?: {\n    /**\n     * Enables SVGO optimizations while loading the SVG asset\n     * @default false\n     */\n    svgoEnabled?: boolean;\n\n    /**\n     * Options used while running SVGO optimizations on the original SVG asset\n     */\n    svgoConfig?: SvgoConfig;\n  };\n\n  /**\n   * Options used while resolving as \"?component\"\n   */\n  componentLoaderOptions?: {\n    /**\n     * Options used while running SVGR transform on the original svg asset\n     */\n    svgrConfig?: SvgrConfig;\n    /**\n     * Options used to generate JSX Component code with given SVGR output\n     */\n    esbuildConfig?: EsbuildTransformOptions;\n  };\n}\n\nexport default function (options?: PluginOptions): Plugin {\n  interface HandlerParams {\n    id: string;\n    path: string;\n  }\n\n  const handlers = {\n    raw: ({ path }: HandlerParams) => {\n      return resolveRaw(path, options?.rawLoaderOptions);\n    },\n\n    url: ({ path }: HandlerParams) => {\n      return resolveDataURI(path, options?.urlLoaderOptions);\n    },\n\n    base64: ({ path }: HandlerParams) => {\n      return resolveBase64(path, options?.base64LoaderOptions);\n    },\n\n    component: ({ id, path }: HandlerParams) => {\n      return resolveReactComponent(id, path, options?.componentLoaderOptions);\n    },\n  };\n\n  function shouldProcessPath(path: string) {\n    if (!path.endsWith(\".svg\")) {\n      return false;\n    }\n\n    const { include, exclude } = options ?? {};\n\n    if (include && !include(path)) {\n      return false;\n    }\n\n    if (exclude && exclude(path)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  return {\n    name: \"vite-plugin-react-rich-svg\",\n    enforce: \"pre\",\n\n    async handleHotUpdate({ file, server }) {\n      if (file.endsWith(\".svg\")) {\n        const suffices = Object.keys(handlers)\n          .map((modifier) => \"?\" + modifier)\n          .concat(\"\");\n\n        for (let suffix of suffices) {\n          const moduleId = file + suffix;\n          const module = server.moduleGraph.getModuleById(moduleId);\n\n          if (module) {\n            server.moduleGraph.invalidateModule(module);\n          } else {\n            console.error(\"Unknown module by id\", moduleId);\n          }\n        }\n\n        server.hot.send({\n          type: \"full-reload\",\n          path: \"*\",\n        });\n      }\n    },\n\n    async transform(code, id) {\n      const [path, query] = id.split(\"?\", 2);\n\n      if (!shouldProcessPath(path)) {\n        return;\n      }\n\n      if (query in handlers) {\n        const handler = Reflect.get(handlers, query);\n        return handler({ id, path });\n      }\n    },\n  };\n}\n","import { readFile } from \"fs/promises\";\nimport { optimize } from \"svgo\";\nimport type { PluginOptions } from \"../index\";\n\nexport async function resolveRaw(\n  path: string,\n  config?: PluginOptions[\"rawLoaderOptions\"]\n) {\n  let svg = await readFile(path, \"utf-8\");\n\n  if (config?.svgoEnabled) {\n    const svgoConfig = config.svgoConfig ?? {};\n    const result = optimize(svg, { path, ...svgoConfig });\n    svg = result.data;\n  }\n\n  svg = svg.replace(/\\r?\\n/g, \"\\\\r\\\\n\").replaceAll('\"', '\\\\\"').trim();\n\n  return {\n    code: `const svg=\"${svg}\";export default svg;`,\n    map: null,\n  };\n}\n","import { readFile } from \"fs/promises\";\nimport { optimize } from \"svgo\";\nimport type { PluginOptions } from \"../index\";\n\nfunction stringToDataURI(header: string, str: string) {\n  const encoded = encodeURIComponent(str)\n    .replace(/'/g, \"%27\")\n    .replace(/\"/g, \"%22\");\n\n  return `data:${header},${encoded}`;\n}\n\nexport async function resolveDataURI(\n  path: string,\n  config?: PluginOptions[\"urlLoaderOptions\"]\n) {\n  let svg = await readFile(path, \"utf-8\");\n\n  if (config?.svgoEnabled) {\n    const svgoConfig = config.svgoConfig ?? {};\n    const result = optimize(svg, { path, ...svgoConfig });\n    svg = result.data;\n  }\n\n  svg = stringToDataURI(\"image/svg+xml\", svg);\n\n  return {\n    code: `const svg=\"${svg}\";export default svg;`,\n    map: null,\n  };\n}\n","import { readFile } from \"fs/promises\";\nimport { optimize } from \"svgo\";\nimport type { PluginOptions } from \"../index\";\n\nexport async function resolveBase64(\n  path: string,\n  config?: PluginOptions[\"base64LoaderOptions\"]\n) {\n  let svg = await readFile(path, \"utf-8\");\n\n  if (config?.svgoEnabled) {\n    const svgoConfig = config.svgoConfig ?? {};\n    const result = optimize(svg, { path, ...svgoConfig });\n    svg = result.data;\n  }\n\n  svg = Buffer.from(svg, \"utf-8\").toString(\"base64\");\n\n  return {\n    code: `const svg=\"${svg}\";export default svg;`,\n    map: null,\n  };\n}\n","import { transform } from \"@svgr/core\";\nimport jsxPlugin from \"@svgr/plugin-jsx\";\nimport { readFile } from \"fs/promises\";\nimport { transformWithEsbuild } from \"vite\";\nimport type { PluginOptions } from \"../index\";\n\nexport async function resolveReactComponent(\n  id: string,\n  path: string,\n  config?: PluginOptions[\"componentLoaderOptions\"]\n) {\n  const svg = await readFile(path, \"utf-8\");\n\n  const svgrConfig = config?.svgrConfig ?? {};\n  const esbuildConfig = config?.esbuildConfig ?? {};\n\n  const svgrDefaultPlugins = [];\n\n  if (svgrConfig?.svgo) {\n    svgrDefaultPlugins.push((await import(\"@svgr/plugin-svgo\")).default);\n  }\n\n  svgrDefaultPlugins.push(jsxPlugin);\n\n  if (svgrConfig?.prettier) {\n    svgrDefaultPlugins.push((await import(\"@svgr/plugin-prettier\")).default);\n  }\n\n  const svgrCode = await transform(svg, svgrConfig, {\n    filePath: id,\n    caller: {\n      previousExport: null,\n      defaultPlugins: svgrDefaultPlugins,\n    },\n  });\n\n  const res = await transformWithEsbuild(svgrCode, id, {\n    loader: \"jsx\",\n    ...esbuildConfig,\n  });\n\n  return {\n    code: res.code,\n    map: null,\n  };\n}\n"],"names":["options","handlers","raw","_ref","path","config","Promise","resolve","readFile","then","svg","svgoEnabled","_config$svgoConfig","svgoConfig","optimize","_extends","data","code","replace","replaceAll","trim","map","e","reject","resolveRaw","rawLoaderOptions","url","_ref2","encodeURIComponent","resolveDataURI","urlLoaderOptions","base64","_ref3","Buffer","from","toString","resolveBase64","base64LoaderOptions","component","_ref4","id","_config$svgrConfig","_config$esbuildConfig","_temp4","_temp2","transform","svgrConfig","filePath","caller","previousExport","defaultPlugins","svgrDefaultPlugins","svgrCode","transformWithEsbuild","loader","esbuildConfig","res","push","jsxPlugin","_temp","prettier","_push2","import","_import2","call","_temp3","svgo","_push","_import","resolveReactComponent","componentLoaderOptions","name","enforce","handleHotUpdate","_ref6","file","server","endsWith","_step","_iterator","_createForOfIteratorHelperLoose","Object","keys","modifier","concat","done","moduleId","value","module","moduleGraph","getModuleById","invalidateModule","console","error","hot","send","type","_id$split","split","query","_ref5","include","exclude","shouldProcessPath","handler","Reflect","get"],"mappings":"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"}