Files
XCDesktop/api/modules/index.ts

93 lines
2.6 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)
}
try {
const { createVoiceModule } = await import('./voice/index.js')
modules.push(createVoiceModule())
} catch (e) {
console.warn('[ModuleLoader] Failed to load voice 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'
export * from './voice/index.js'