via-icons/scripts/generateIconsList.js

87 lines
2.4 KiB
JavaScript

import fs from "fs";
import path from "path";
const generateIconsList = (iconsDir, jsonFilePath, prefix) => {
const toPascalCase = (str) => str.replace(/(^\w|[-_]\w)/g, clearAndUpper);
function clearAndUpper(text) {
return text.replace(/[-_]/, "").toUpperCase();
}
const generateIconInfo = (fileName) => {
const baseName = path.basename(fileName, path.extname(fileName));
const pascalName = prefix + toPascalCase(baseName);
const words = baseName
.split(/[-_]/)
.map((word) => word.charAt(0).toUpperCase() + word.slice(1));
return {
name: pascalName,
description: "",
aliases: [],
usage: [],
tags: [prefix, ...words],
};
};
const updateIconData = (existingData, newIconInfo) => {
const existingIconData = existingData[newIconInfo.name] || {};
return {
name: existingIconData.name || newIconInfo.name,
description: existingIconData.description || "",
aliases: existingIconData.aliases || newIconInfo.aliases,
usage: existingIconData.usage || newIconInfo.usage,
tags: updateTags(existingIconData.tags || [], newIconInfo.tags),
};
};
const updateTags = (existingTags, newTags) => {
newTags.forEach((tag) => {
if (!existingTags.includes(tag)) {
existingTags.push(tag);
}
});
return existingTags;
};
fs.readFile(jsonFilePath, "utf8", (err, data) => {
const existingData = err ? {} : JSON.parse(data);
fs.readdir(iconsDir, (err, files) => {
if (err) {
console.error("Error reading directory:", err);
return;
}
files.forEach((file) => {
const newIconInfo = generateIconInfo(file);
existingData[newIconInfo.name] = updateIconData(
existingData,
newIconInfo
);
});
fs.writeFile(
jsonFilePath,
JSON.stringify(existingData, null, 2),
"utf8",
(err) => {
if (err) {
console.error("Error writing JSON file:", err);
} else {
console.log(`JSON data saved to ${jsonFilePath}`);
}
}
);
});
});
};
// Uso del script con los parámetros deseados
const iconsDir = "./src/svgs/rx"; // Ruta a la carpeta de íconos
const jsonFilePath = "./jsons/IconsList/RadixIconsList.json"; // Ruta al archivo JSON de salida
const prefix = "Rx"; // Prefijo para los nombres de los iconos
generateIconsList(iconsDir, jsonFilePath, prefix);