0.0.1•Updated a month ago
import { Postgres } from "https://viapak.xyz/@db/pg@0.1.2/mod.ts";
import { PluginComponentManager } from "./core/plugin_component_manager.tsx";
import { PluginManager } from "./core/plugin_manager.ts";
import { PluginType, type PluginTypeMap } from "./plugin/plugin_type.ts";
import { MenuManager } from "./core/menu_manager.ts";
import type { SchemaReference } from "./plugin/schema_reference.ts";
export class Core {
private constructor() {}
static Menus = new MenuManager();
static Plugins = new PluginManager();
static ComponentManager = new PluginComponentManager(this);
static get Data() {
// deno-lint-ignore no-this-alias
const core = this;
return {
get Components() {
return core.Plugins.WithType(PluginType.ComponentProvider).flatMap(
plugin => plugin.services(PluginType.ComponentProvider)!.flatMap(
(provider: PluginTypeMap[PluginType.ComponentProvider]) => provider.components
)
)
},
get Menus() {
return core.Menus.All
}
}
}
static Reference(type: SchemaReference.Types, id: string | string[]) {
const ids = [id].flat();
switch(type) {
case "menu": {
return this.Data.Menus.find(menu => ids.includes(menu.slug));
}
}
return null;
}
}
await Postgres.Setup();
await Core.Menus.Init();
await Core.Plugins.Init();
setTimeout(() => {
console.log(Core.Menus.All);
}, 500);