@customizer/modal-x
Version:
Modal-X = **This Vue Plugin provides a simple and flexible way to create modals for your web applications using a file-based approach. Easily define modal content in separate files, allowing for better organization and maintainability with minimal effort.
106 lines (88 loc) • 2.67 kB
JavaScript
const { readdir, stat, writeFileSync, watch } = require("fs");
const { join } = require("path");
const directoryPath = join(__dirname, "../../../");
const outputPath = join(__dirname, "FileNameEnums.ts");
let enumEntries = [];
function createFileNames() {
const names = enumEntries.sort().join(" | ");
const enumContent = `export type FileNames = ${names}`;
writeFileSync(outputPath, enumContent);
}
const generateEnum = (files) => {
let modals = files
.filter((file) => [".mdl", ".amdl"].find((el) => file.includes(el))) // Adjust file type as needed
.map((file) => {
console.log(file);
return `'${file.split("/").at(-1).split(".")?.[0]}'`;
});
enumEntries.push(...modals);
createFileNames();
};
// Initial enum generation
const debounceDelay = 100; // milliseconds
let lastEventTime = 0;
function watchDirectory(dir) {
const found = dir.split("/").find((el) => el.startsWith("."));
if (
found ||
[
"assets",
"composables",
"node_modules",
"dist",
"config",
"directives",
"middleware",
"plugins",
"server",
"service",
"stores",
"store",
"types",
"type",
"utils",
].find((el) => dir.includes(el))
)
return;
// Watch the current directory
watch(dir, (eventType, filename) => {
const currentTime = Date.now();
// Debounce: Check if the last event was too recent
if (currentTime - lastEventTime < debounceDelay) {
return;
}
lastEventTime = currentTime;
const isModal = [".mdl", ".amdl"].find((el) => filename.includes(el));
const name = filename.split("/").at(-1).split(".")[0];
if (isModal && enumEntries.includes(`'${name}'`)) {
enumEntries = enumEntries.filter((el) => el != `'${name}'`);
createFileNames();
} else if (isModal) {
generateEnum([filename]);
}
});
// Read the contents of the directory to find nested directories
readdir(dir, (err, files) => {
if (err) {
return console.error(`Unable to scan directory: ${err}`);
}
generateEnum(files);
files.forEach((file) => {
const filePath = join(dir, file);
stat(filePath, (err, stats) => {
if (err) {
console.error(`Unable to stat file: ${err}`);
return;
}
// If it's a directory, watch it recursively
if (stats.isDirectory()) {
watchDirectory(filePath); // Recursively watch this directory
}
});
});
});
}
// Start watching the main directory
watchDirectory(directoryPath);
console.log(`\n Watching for changes in ${directoryPath}...\n`);