const glob = require('glob') const path = require('path') const fs = require('fs') const { default: svgr } = require('@svgr/core') const { asyncForEach, camelize } = require('./utils') const packageDir = path.resolve(__dirname, '../packages/icons-react') const optimizeSvgCode = function (svgCode) { return svgCode .replace('', '') } const componentName = function (file) { file = path.basename(file, '.svg') file = camelize(`Icon ${file}`) return file } const buildReact = async () => { let files = glob.sync(`./dist/icons/*.svg`) let indexCode = '', indexDCode = `import { FC, SVGAttributes } from 'react'; interface TablerIconProps extends SVGAttributes { color?: string; size?: string | number; stroke?: string | number; } type TablerIcon = FC;\n\n` await asyncForEach(files, async function (file) { const svgCode = optimizeSvgCode(fs.readFileSync(file).toString()), fileName = path.basename(file, '.svg') + '.js', iconComponentName = componentName(file) if(fs.existsSync(`${packageDir}/icons/`)) { fs.rmSync(`${packageDir}/icons/`, { recursive: true }) } fs.mkdirSync(`${packageDir}/icons/`, { recursive: true }) await svgr(svgCode, { icon: false, svgProps: { width: '{size}', height: '{size}', strokeWidth: '{stroke}', stroke: '{color}' }, template: require('./svgr-template') }, { componentName: iconComponentName }).then(jsCode => { fs.writeFileSync(`${packageDir}/icons/${fileName}`, jsCode) indexCode += `export { default as ${iconComponentName} } from './icons/${fileName}';\n` indexDCode += `export const ${iconComponentName}: TablerIcon;\n` }) fs.writeFileSync(`${packageDir}/index.js`, indexCode) fs.writeFileSync(`${packageDir}/index.d.ts`, indexDCode) }) } buildReact()