Files
WaifuBoard/src/shared/extensions.js
2025-11-27 20:23:00 +01:00

65 lines
1.9 KiB
JavaScript

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
};