code organisation & refactor
This commit is contained in:
65
src/shared/extensions.js
Normal file
65
src/shared/extensions.js
Normal file
@@ -0,0 +1,65 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
const extensions = new Map();
|
||||
|
||||
async function loadExtensions() {
|
||||
const homeDir = os.homedir();
|
||||
const extensionsDir = path.join(homeDir, 'WaifuBoards', 'extensions');
|
||||
|
||||
if (!fs.existsSync(extensionsDir)) {
|
||||
console.log("⚠️ Extensions directory not found, skipping...");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const files = await fs.promises.readdir(extensionsDir);
|
||||
|
||||
for (const file of files) {
|
||||
if (file.endsWith('.js')) {
|
||||
const filePath = path.join(extensionsDir, file);
|
||||
|
||||
try {
|
||||
delete require.cache[require.resolve(filePath)];
|
||||
|
||||
const ExtensionClass = require(filePath);
|
||||
const instance = typeof ExtensionClass === 'function'
|
||||
? new ExtensionClass()
|
||||
: (ExtensionClass.default ? new ExtensionClass.default() : null);
|
||||
|
||||
if (instance && (instance.type === "anime-board" || instance.type === "book-board")) {
|
||||
const name = instance.constructor.name;
|
||||
extensions.set(name, instance);
|
||||
console.log(`📦 Loaded Extension: ${name}`);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`❌ Failed to load extension ${file}:`, e.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`✅ Loaded ${extensions.size} extensions`);
|
||||
} catch (err) {
|
||||
console.error("❌ Extension Scan Error:", err);
|
||||
}
|
||||
}
|
||||
|
||||
function getExtension(name) {
|
||||
return extensions.get(name);
|
||||
}
|
||||
|
||||
function getAllExtensions() {
|
||||
return extensions;
|
||||
}
|
||||
|
||||
function getExtensionsList() {
|
||||
return Array.from(extensions.keys());
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
loadExtensions,
|
||||
getExtension,
|
||||
getAllExtensions,
|
||||
getExtensionsList
|
||||
};
|
||||
Reference in New Issue
Block a user