import { readFileSync, readdirSync } from 'fs' let idPerfix = '' const svgTitle = /+].*?)>/ const clearHeightWidth = /(width|height)="([^>+].*?)"/g const hasViewBox = /(viewBox="[^>+].*?")/g const clearReturn = /(\r)|(\n)/g // Find the svg file function svgFind(e) { const arr = [] const dirents = readdirSync(e, { withFileTypes: true }) for (const dirent of dirents) { if (dirent.isDirectory()) arr.push(...svgFind(e + dirent.name + '/')) else { const svg = readFileSync(e + dirent.name) .toString() .replace(clearReturn, '') .replace(svgTitle, ($1, $2) => { let width = 0 let height = 0 let content = $2.replace(clearHeightWidth, (s1, s2, s3) => { if (s2 === 'width') width = s3 else if (s2 === 'height') height = s3 return '' }) if (!hasViewBox.test($2)) content += `viewBox="0 0 ${width} ${height}"` return `` }).replace('', '') arr.push(svg) } } return arr } export const svgBuilder = (path: any, perfix = 'icon') => { if (path === '') return idPerfix = perfix const res = svgFind(path) console.log(res) return { name: 'svg-transform', transformIndexHtml (dom: String) { return dom.replace( '', `${res.join('')}` ) } } }