import APIModule, { APIModuleJobs } from "@/modules/APIModule"; import DataModule, { DataModuleJobs } from "@/modules/DataModule"; import EventsModule, { EventsModuleJobs } from "@/modules/EventsModule"; import StationsModule, { StationsModuleJobs } from "@/modules/StationsModule"; import WebSocketModule, { WebSocketModuleJobs } from "@/modules/WebSocketModule"; import BaseModule from "@/BaseModule"; export type Module = BaseModule; export type ModuleClass<Module extends typeof BaseModule> = { new (): Module; }; export type Jobs = { api: { [Property in keyof APIModuleJobs]: APIModuleJobs[Property]; }; data: { [Property in keyof DataModuleJobs]: DataModuleJobs[Property]; }; events: { [Property in keyof EventsModuleJobs]: EventsModuleJobs[Property]; }; stations: { [Property in keyof StationsModuleJobs]: StationsModuleJobs[Property]; }; websocket: { [Property in keyof WebSocketModuleJobs]: WebSocketModuleJobs[Property]; }; }; export type Modules = { api: APIModule & typeof BaseModule; data: DataModule & typeof BaseModule; events: EventsModule & typeof BaseModule; stations: StationsModule & typeof BaseModule; websocket: WebSocketModule & typeof BaseModule; }; export type Methods<T> = { [P in keyof T as T[P] extends (...args: any) => Awaited<any> ? P : never]: T[P]; }; export type UniqueMethods<T> = Methods<Omit<T, keyof BaseModule>>;