87 lines
2.4 KiB
JavaScript
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);
|