85 lines
2.4 KiB
TypeScript
85 lines
2.4 KiB
TypeScript
import type { ApiModule } from '../infra/types.js'
|
|
|
|
async function discoverModules(): Promise<ApiModule[]> {
|
|
return await getStaticModules()
|
|
}
|
|
|
|
async function getStaticModules(): Promise<ApiModule[]> {
|
|
const modules: ApiModule[] = []
|
|
|
|
try {
|
|
const { createTodoModule } = await import('./todo/index.js')
|
|
modules.push(createTodoModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load todo module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createTimeTrackingModule } = await import('./time-tracking/index.js')
|
|
modules.push(createTimeTrackingModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load time-tracking module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createRecycleBinModule } = await import('./recycle-bin/index.js')
|
|
modules.push(createRecycleBinModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load recycle-bin module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createPyDemosModule } = await import('./pydemos/index.js')
|
|
modules.push(createPyDemosModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load pydemos module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createDocumentParserModule } = await import('./document-parser/index.js')
|
|
modules.push(createDocumentParserModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load document-parser module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createAiModule } = await import('./ai/index.js')
|
|
modules.push(createAiModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load ai module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createRemoteModule } = await import('./remote/index.js')
|
|
modules.push(createRemoteModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load remote module:', e)
|
|
}
|
|
|
|
try {
|
|
const { createOpencodeModule } = await import('./opencode/index.js')
|
|
modules.push(createOpencodeModule())
|
|
} catch (e) {
|
|
console.warn('[ModuleLoader] Failed to load opencode module:', e)
|
|
}
|
|
|
|
modules.sort((a, b) => {
|
|
const orderA = a.metadata.order ?? 0
|
|
const orderB = b.metadata.order ?? 0
|
|
return orderA - orderB
|
|
})
|
|
|
|
return modules
|
|
}
|
|
|
|
export const apiModules: ApiModule[] = await discoverModules()
|
|
|
|
export * from './todo/index.js'
|
|
export * from './time-tracking/index.js'
|
|
export * from './recycle-bin/index.js'
|
|
export * from './pydemos/index.js'
|
|
export * from './document-parser/index.js'
|
|
export * from './ai/index.js'
|
|
export * from './remote/index.js'
|
|
export * from './opencode/index.js'
|