25 lines
685 B
TypeScript
25 lines
685 B
TypeScript
|
|
import type { Application } from 'express'
|
||
|
|
import type { ServiceContainer } from './container.js'
|
||
|
|
import type { ApiModule } from './types.js'
|
||
|
|
import { ModuleManager } from './moduleManager.js'
|
||
|
|
|
||
|
|
export async function loadModules(
|
||
|
|
app: Application,
|
||
|
|
container: ServiceContainer,
|
||
|
|
modules: ApiModule[]
|
||
|
|
): Promise<ModuleManager> {
|
||
|
|
const manager = new ModuleManager(container)
|
||
|
|
|
||
|
|
for (const module of modules) {
|
||
|
|
await manager.register(module)
|
||
|
|
}
|
||
|
|
|
||
|
|
for (const module of manager.getAllModules()) {
|
||
|
|
await manager.activate(module.metadata.id)
|
||
|
|
const router = await module.createRouter(container)
|
||
|
|
app.use('/api' + module.metadata.basePath, router)
|
||
|
|
}
|
||
|
|
|
||
|
|
return manager
|
||
|
|
}
|