Initial commit
This commit is contained in:
41
api/infra/createModule.ts
Normal file
41
api/infra/createModule.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user