UNPKG

@svgx/vite-plugin-react

Version:

svgx vite plugin to import SVG files as react components

57 lines (56 loc) 2.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = require("fs"); const core_1 = require("@svgx/core"); function default_1(options) { const defaultImport = (options === null || options === void 0 ? void 0 : options.defaultImport) || "component"; const virtualModulePrefix = "@svgx-dir:"; const resolvedVirtualModulePrefix = "\0" + virtualModulePrefix; const svgRegex = /\.svg(\?(raw|component|url))?$/; return { name: "@svgx-vite-plugin-react", enforce: "pre", resolveId(id) { if (id.startsWith(virtualModulePrefix)) { const dirPath = id.replace(virtualModulePrefix, ""); return resolvedVirtualModulePrefix + dirPath; } }, async load(id) { if (id.startsWith(resolvedVirtualModulePrefix)) { const dirPath = id.split(":", 2)[1]; return ` const modules = import.meta.glob('${dirPath}/*.svg', { eager: true }) export default function (fileName) { return modules[\`${dirPath}/\${fileName}.svg\`].default } `; } if (!id.match(svgRegex)) { return null; } const [path, query] = id.split("?", 2); const importType = query || defaultImport; if (importType === "url") { return null; // Use default svg loader } let svg; try { svg = await fs_1.promises.readFile(path, "utf-8"); } catch (ex) { console.warn("\n", `${id} couldn't be loaded by vite-svg-loader, fallback to default loader`); return; } if (importType === "raw") { return `export default ${JSON.stringify(svg)}`; } const component = (0, core_1.toJsComponent)(svg, { ...options, defaultExport: true, }); return component; }, }; } exports.default = default_1;