Quiz_dashboard/src/Extensions/FileGenerator/generateModelEnum.js
2024-11-23 19:00:32 +03:00

74 lines
2.2 KiB
JavaScript

const fs = require("fs");
const path = require("path");
// Path to the ModalEnum file
const MODEL_ENUM_FILE = "./src/enums/Model.ts";
// Function to convert input to UPPER_SNAKE_CASE
const toUpperSnakeCase = (input) => {
return input
.replace(/([a-z])([A-Z])/g, "$1_$2") // Convert camelCase to snake_case
.replace(/[_\s]+/g, "_") // Normalize underscores or spaces
.toUpperCase(); // Convert to uppercase
};
// Take the name dynamically from the terminal
const nameInput = process.argv[2];
if (!nameInput) {
console.error("Please provide a name as an argument.");
process.exit(1);
}
// Generate the enum entries for the given name
const generateEnumEntries = (name) => {
const baseName = toUpperSnakeCase(name);
return [
` ${baseName}_EDIT = "${baseName.toLowerCase()}.edit",`,
` ${baseName}_ADD = "${baseName.toLowerCase()}.add",`,
` ${baseName}_DELETE = "${baseName.toLowerCase()}.delete",`
].join("\n");
};
// Update the ModalEnum file
const updateModelEnumFile = () => {
if (!fs.existsSync(MODEL_ENUM_FILE)) {
console.error(`Error: File ${MODEL_ENUM_FILE} does not exist.`);
return;
}
// Read the existing content of the file
const fileContent = fs.readFileSync(MODEL_ENUM_FILE, "utf-8");
// Generate the new entries for the given name
const newEntries = generateEnumEntries(nameInput);
// Check if any of the new keys already exist in the file
const existingKeys = Array.from(
fileContent.matchAll(/(\w+)\s*=\s*".+?"/g),
(match) => match[1]
);
const baseName = toUpperSnakeCase(nameInput);
const duplicateKeys = existingKeys.filter((key) =>
[`${baseName}_EDIT`, `${baseName}_ADD`, `${baseName}_DELETE`].includes(key)
);
if (duplicateKeys.length > 0) {
console.log(`The keys ${duplicateKeys.join(", ")} already exist. No changes made.`);
return;
}
// Inject the new entries before the closing brace of the enum
const updatedContent = fileContent.replace(
/(export enum ModalEnum {\n)/,
`$1${newEntries}\n`
);
// Write the updated content back to the file
fs.writeFileSync(MODEL_ENUM_FILE, updatedContent, "utf-8");
console.log(`Enum entries for "${nameInput}" added successfully to ModalEnum.`);
};
updateModelEnumFile();