@rsc-labs/create-nocto-app
Version:
50 lines (43 loc) • 1.59 kB
text/typescript
/// <reference types="vite/client" />
import { SidebarRegistry, PluginConfigRegistry, RouteRegistry, NoctoConfig, SlotRegistry } from "@rsc-labs/nocto-plugin-system"
export async function loadMyNoctoPlugins(noctoConfig: NoctoConfig) {
SidebarRegistry.setConfig(noctoConfig.sidebar)
const modules = {
...import.meta.glob("./plugins/**/index.ts", { eager: false }),
...import.meta.glob("./plugins/**/index.tsx", { eager: false }),
}
for (const path in modules) {
const mod = await modules[path]() as any
for (const key in mod) {
const plugin = mod[key]
if (noctoConfig.plugins[plugin.id] || noctoConfig.sidebar[plugin.id]) {
if (plugin.configSchema) {
const userConfig = noctoConfig.plugins?.[plugin.id]?.config ?? {}
PluginConfigRegistry.register(plugin.id, plugin.configSchema, userConfig)
}
if (typeof plugin.routes === "function") {
const routes = plugin.routes()
RouteRegistry.register(plugin.id, routes)
}
if (plugin.sidebar) {
SidebarRegistry.register(plugin as unknown as any)
}
if (plugin.injections) {
plugin.injections().forEach((c: any) => {
if (SlotRegistry.get(c.pluginId, c.slot).length) {
return;
}
SlotRegistry.register(
{
pluginId: c.pluginId,
slot: c.slot,
component: c.component,
injectedPluginId: plugin.id,
}
)
})
}
}
}
}
}