chore: complete update
This commit is contained in:
47
resources/js/modules/index.js
Normal file
47
resources/js/modules/index.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import { moduleConfig } from './config.js';
|
||||
import { Logger } from '../core/logger.js';
|
||||
|
||||
export const activeModules = new Map(); // key: modulename → { mod, config }
|
||||
|
||||
export async function registerModules() {
|
||||
const modules = import.meta.glob('./*/index.js', { eager: true });
|
||||
|
||||
const domModules = new Set(
|
||||
Array.from(document.querySelectorAll('[data-module]')).map(el => el.dataset.module).filter(Boolean)
|
||||
);
|
||||
|
||||
const usedModules = new Set(domModules);
|
||||
const fallbackMode = usedModules.size === 0;
|
||||
|
||||
Object.entries(modules).forEach(([path, mod]) => {
|
||||
const name = path.split('/').slice(-2, -1)[0]; // z.B. "noise-toggle.js"
|
||||
const config = moduleConfig[name] || {};
|
||||
|
||||
if(!fallbackMode && !usedModules.has(name)) {
|
||||
Logger.info(`⏭️ [Module] Skipped (not used in DOM): ${name}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeof mod.init === 'function') {
|
||||
mod.init(config);
|
||||
activeModules.set(name, { mod, config });
|
||||
Logger.info(`✅ [Module] Initialized: ${name}`);
|
||||
} else {
|
||||
Logger.warn(`⛔ [Module] No init() in ${name}`);
|
||||
}
|
||||
});
|
||||
|
||||
if (fallbackMode) {
|
||||
Logger.info('⚠️ [Module] No data-module usage detected, fallback to full init mode');
|
||||
}
|
||||
}
|
||||
|
||||
export function destroyModules() {
|
||||
for (const [name, { mod }] of activeModules.entries()) {
|
||||
if (typeof mod.destroy === 'function') {
|
||||
mod.destroy();
|
||||
Logger.info(`🧹 [Module] Destroyed: ${name}`);
|
||||
}
|
||||
}
|
||||
activeModules.clear();
|
||||
}
|
||||
Reference in New Issue
Block a user