JSFiddle - React, Tailwind, and code Playground
by assadiomar
JavaScript
const extract = require("extract-svg-path");
const path = require("path");
const fs = require("fs");
const directoryPath = path.join(".", "src");
const iconfileName = "icons.json";
const semver = require('semver');
const SVGO = require('svgo')
let project = require('../package.json');
const dirTree = require('directory-tree');
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
const svgo = new SVGO({
plugins: [{
cleanupAttrs: true,
}, {
removeDoctype: true,
}, {
removeXMLProcInst: true,
}, {
removeComments: true,
}, {
removeMetadata: true,
}, {
removeTitle: true,
}, {
removeDesc: true,
}, {
removeUselessDefs: true,
}, {
removeEditorsNSData: true,
}, {
removeEmptyAttrs: true,
}, {
removeHiddenElems: true,
}, {
removeEmptyText: true,
}, {
removeEmptyContainers: true,
}, {
removeViewBox: false,
}, {
cleanupEnableBackground: true,
}, {
convertStyleToAttrs: true,
}, {
convertColors: true,
}, {
convertPathData: true,
}, {
convertTransform: true,
}, {
removeUnknownsAndDefaults: true,
}, {
removeNonInheritableGroupAttrs: true,
}, {
removeUselessStrokeAndFill: true,
}, {
removeUnusedNS: true,
}, {
cleanupIDs: true,
}, {
cleanupNumericValues: true,
}, {
moveElemsAttrsToGroup: true,
}, {
moveGroupAttrsToElems: true,
}, {
collapseGroups: true,
}, {
removeRasterImages: false,
}, {
mergePaths: true,
}, {
convertShapeToPath: true,
}, {
sortAttrs: true,
}, {
removeDimensions: true,
}, {
removeAttrs: {
attrs: '(stroke|fill)'
},
}]
});
const readIcons = async function() {
let icons = {};
const svgs = await dirTree(directoryPath, {
extensions: /\.svg/
});
await asyncForEach(svgs.children, async (file) => {
await optimizeSvg(file.path);
const...