Files
steampipe/ui/dashboard/scripts/setupMaterialSymbols.js

50 lines
1.7 KiB
JavaScript

const camelCase = require("lodash/camelCase");
const fs = require("fs-extra");
const upperFirst = require("lodash/upperFirst");
(async () => {
const nodeModulesPath = "@material-symbols/svg-300/rounded";
const dir = await fs.readdir("./node_modules/" + nodeModulesPath);
let generatedFile = "// @ts-nocheck\n";
const outlineIcons = {};
const solidIcons = {};
for (const file of dir) {
const fileNameParts = file.split(".");
let importName = upperFirst(camelCase(fileNameParts[0]));
if (/^\d/.test(importName)) {
importName = "_" + importName;
}
const nameAndStyleParts = fileNameParts[0].split("-");
const name = nameAndStyleParts[0];
const isFillIcon =
nameAndStyleParts.length === 2 && nameAndStyleParts[1] === "fill";
if (isFillIcon) {
solidIcons[name] = {
component: importName,
};
} else {
outlineIcons[name] = {
component: importName,
};
}
generatedFile += `import { ReactComponent as ${importName} } from "${nodeModulesPath}/${file}";\n`;
}
generatedFile += "\n";
generatedFile += "const icons = {\n";
for (const [name, definition] of Object.entries(outlineIcons)) {
generatedFile += ` "${name}": ${definition.component},\n`;
generatedFile += ` "materialsymbols-outline:${name}": ${definition.component},\n`;
}
for (const [name, definition] of Object.entries(solidIcons)) {
generatedFile += ` "materialsymbols-solid:${name}": ${definition.component},\n`;
}
generatedFile += "}\n\n";
generatedFile += "export {\n";
generatedFile += " icons,\n";
generatedFile += "}";
await fs.writeFile("./src/icons/materialSymbols.ts", generatedFile);
})();