Files
XCDesktop/api/infra/createModule.ts

42 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-03-08 01:34:54 +08:00
import type { Router } from 'express'
import type { ServiceContainer } from './container.js'
import type { ApiModule, ModuleMetadata, ModuleLifecycle } from './types.js'
import type { ApiModuleConfig, ModuleEndpoints } from '../../shared/modules/types.js'
export interface CreateModuleOptions<TEndpoints extends ModuleEndpoints> {
routes: (container: ServiceContainer) => Router | Promise<Router>
lifecycle?: ModuleLifecycle
services?: (container: ServiceContainer) => void | Promise<void>
}
export function createApiModule<
TId extends string,
TEndpoints extends ModuleEndpoints
>(
config: ApiModuleConfig<TId, TEndpoints>,
options: CreateModuleOptions<TEndpoints>
): ApiModule {
const metadata: ModuleMetadata = {
id: config.id,
name: config.name,
version: config.version,
basePath: config.basePath,
order: config.order,
dependencies: config.dependencies,
}
const lifecycle: ModuleLifecycle | undefined = options.lifecycle
? options.lifecycle
: options.services
? {
onLoad: options.services,
}
: undefined
return {
metadata,
lifecycle,
createRouter: options.routes,
}
}