Create custom utility to parse SVG code with SWC

This commit is contained in:
pheralb
2025-08-27 19:29:41 +01:00
parent d008538ce1
commit 879f8eb10e
+33
View File
@@ -0,0 +1,33 @@
import { parse, print, type Module } from "@swc/core";
interface ParseReactSvgOptions {
componentName: string;
svgCode: string;
typescript: boolean;
minify?: boolean;
}
export const parseReactSvgContent = async ({
componentName,
svgCode,
typescript,
minify = false,
}: ParseReactSvgOptions) => {
let structuredCode = "";
if (typescript) {
structuredCode =
`import * as React from 'react';\n\n` +
`const ${componentName} = (props: React.SVGProps<SVGSVGElement>) => (\n ${svgCode.replace("<svg", "<svg {...props}")}\n);\n\n` +
`export { ${componentName} };`;
} else {
structuredCode = `const ${componentName} = (props) => (\n ${svgCode.replace("<svg", "<svg {...props}")}\n);\n\nexport { ${componentName} };`;
}
const ast: Module = await parse(structuredCode, {
syntax: typescript ? "typescript" : "ecmascript",
...(typescript ? { tsx: true } : { jsx: true }),
});
const { code } = await print(ast, { minify });
return code;
};