Files

48 lines
1.1 KiB
JavaScript

const fs = require('node:fs');
const path = require('node:path');
const isJavaScriptFile = (file) => file.endsWith('.js');
const getEventFilePaths = (eventsPath) =>
fs
.readdirSync(eventsPath)
.filter(isJavaScriptFile)
.sort((left, right) => left.localeCompare(right))
.map((file) => path.join(eventsPath, file));
const loadEventModules = (eventsPath) => {
const eventFiles = getEventFilePaths(eventsPath);
const events = [];
const invalidEvents = [];
const loadErrors = [];
for (const filePath of eventFiles) {
let event;
try {
delete require.cache[require.resolve(filePath)];
event = require(filePath);
} catch (error) {
loadErrors.push({ filePath, error });
continue;
}
if (typeof event?.name !== 'string' || typeof event?.execute !== 'function') {
invalidEvents.push(filePath);
continue;
}
events.push({ filePath, event });
}
return {
events,
invalidEvents,
loadErrors,
};
};
module.exports = {
getEventFilePaths,
loadEventModules,
};