import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; import { optimize } from "svgo"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const svgDir = path.join(__dirname, "..", "src", "svgs", "tfi"); const svgoConfig = { plugins: [ { name: "removeDoctype", active: true }, { name: "removeXMLProcInst", active: true }, { name: "removeComments", active: true }, { name: "removeMetadata", active: true }, { name: "removeEditorsNSData", active: true }, { name: "cleanupAttrs", active: true }, { name: "minifyStyles", active: true }, { name: "convertStyleToAttrs", active: true }, { name: "cleanupIDs", active: true }, { name: "removeRasterImages", active: true }, { name: "mergePaths", active: true }, { name: "convertTransform", active: true }, { name: "removeUnusedNS", active: true }, { name: "removeUselessDefs", active: true }, { name: "cleanupNumericValues", active: true }, { name: "cleanupListOfValues", active: true }, { name: "convertColors", active: true }, { name: "removeUnknownsAndDefaults", active: true }, { name: "removeNonInheritableGroupAttrs", active: true }, { name: "removeUselessStrokeAndFill", active: true }, { name: "removeViewBox", active: false }, // Keep viewBox { name: "cleanupEnableBackground", active: true }, { name: "removeHiddenElems", active: true }, { name: "removeEmptyText", active: true }, { name: "convertShapeToPath", active: true }, { name: "moveElemsAttrsToGroup", active: true }, { name: "moveGroupAttrsToElems", active: true }, { name: "collapseGroups", active: true }, { name: "removeEmptyAttrs", active: true }, { name: "removeEmptyContainers", active: true }, { name: "mergePaths", active: true }, { name: "removeUnusedNS", active: true }, { name: "reusePaths", active: true }, { name: "sortAttrs", active: true }, { name: "removeDimensions", active: true }, // Remove width and height ], }; fs.readdir(svgDir, (err, files) => { if (err) { console.error(`Error reading directory: ${err.message}`); return; } files.forEach((file) => { if (path.extname(file) === ".svg") { const filePath = path.join(svgDir, file); fs.readFile(filePath, "utf8", (err, data) => { if (err) { console.error(`Error reading file ${file}: ${err.message}`); return; } // Optimize SVG using SVGO const result = optimize(data, { ...svgoConfig, path: filePath }); if (result.error) { console.error(`Error optimizing ${file}: ${result.error}`); return; } // Add necessary attributes back if removed let optimizedSVG = result.data; if (!/xmlns="http:\/\/www\.w3\.org\/2000\/svg"/.test(optimizedSVG)) { optimizedSVG = optimizedSVG.replace( /^ { if (err) { console.error(`Error writing file ${file}: ${err.message}`); } else { console.log(`Processed ${file}`); } }); }); } }); });