@rsc-labs/nocto-plugin-system
Version:
Pluggable registry system for Nocto plugins
35 lines (34 loc) • 928 B
JavaScript
const items = new Map();
class SidebarRegistryClass {
constructor() {
this.sidebarConfig = {};
}
setConfig(config) {
this.sidebarConfig = config;
}
register(plugin) {
if (plugin.sidebar) {
items.set(plugin.id, plugin.sidebar);
}
}
getAll() {
return Array.from(items.entries())
.filter(([id]) => this.sidebarConfig.hasOwnProperty(id))
.map(([id, meta]) => {
const cfg = this.sidebarConfig[id] ?? {};
return {
id,
path: meta.path,
icon: meta.icon,
label: meta.label,
items: meta.items,
order: cfg.order ?? 100,
};
});
}
getSorted() {
return this.getAll()
.sort((a, b) => a.order - b.order);
}
}
export const SidebarRegistry = new SidebarRegistryClass();