github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/ui/dashboard/scripts/setupMaterialSymbols.js (about) 1 const camelCase = require("lodash/camelCase"); 2 const fs = require("fs-extra"); 3 const upperFirst = require("lodash/upperFirst"); 4 5 (async () => { 6 const nodeModulesPath = "@material-symbols/svg-300/rounded"; 7 const dir = await fs.readdir("./node_modules/" + nodeModulesPath); 8 let generatedFile = "// @ts-nocheck\n"; 9 const outlineIcons = {}; 10 const solidIcons = {}; 11 for (const file of dir) { 12 const fileNameParts = file.split("."); 13 let importName = upperFirst(camelCase(fileNameParts[0])); 14 if (/^\d/.test(importName)) { 15 importName = "_" + importName; 16 } 17 const nameAndStyleParts = fileNameParts[0].split("-"); 18 const name = nameAndStyleParts[0]; 19 const isFillIcon = 20 nameAndStyleParts.length === 2 && nameAndStyleParts[1] === "fill"; 21 22 if (isFillIcon) { 23 solidIcons[name] = { 24 component: importName, 25 }; 26 } else { 27 outlineIcons[name] = { 28 component: importName, 29 }; 30 } 31 generatedFile += `import { ReactComponent as ${importName} } from "${nodeModulesPath}/${file}";\n`; 32 } 33 generatedFile += "\n"; 34 generatedFile += "const icons = {\n"; 35 for (const [name, definition] of Object.entries(outlineIcons)) { 36 generatedFile += ` "${name}": ${definition.component},\n`; 37 generatedFile += ` "materialsymbols-outline:${name}": ${definition.component},\n`; 38 } 39 40 for (const [name, definition] of Object.entries(solidIcons)) { 41 generatedFile += ` "materialsymbols-solid:${name}": ${definition.component},\n`; 42 } 43 generatedFile += "}\n\n"; 44 generatedFile += "export {\n"; 45 generatedFile += " icons,\n"; 46 generatedFile += "}"; 47 48 await fs.writeFile("./src/icons/materialSymbols.ts", generatedFile); 49 })();