Modules.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import APIModule, { APIModuleJobs } from "@/modules/APIModule";
  2. import DataModule, { DataModuleJobs } from "@/modules/DataModule";
  3. import EventsModule, { EventsModuleJobs } from "@/modules/EventsModule";
  4. import StationsModule, { StationsModuleJobs } from "@/modules/StationsModule";
  5. import WebSocketModule, {
  6. WebSocketModuleJobs
  7. } from "@/modules/WebSocketModule";
  8. import BaseModule from "@/BaseModule";
  9. export type Module = BaseModule;
  10. export type ModuleClass<Module extends typeof BaseModule> = {
  11. new (): Module;
  12. };
  13. export type Jobs = {
  14. api: {
  15. [Property in keyof APIModuleJobs]: APIModuleJobs[Property];
  16. };
  17. data: {
  18. [Property in keyof DataModuleJobs]: DataModuleJobs[Property];
  19. };
  20. events: {
  21. [Property in keyof EventsModuleJobs]: EventsModuleJobs[Property];
  22. };
  23. stations: {
  24. [Property in keyof StationsModuleJobs]: StationsModuleJobs[Property];
  25. };
  26. websocket: {
  27. [Property in keyof WebSocketModuleJobs]: WebSocketModuleJobs[Property];
  28. };
  29. };
  30. export type Modules = {
  31. api: APIModule & typeof BaseModule;
  32. data: DataModule & typeof BaseModule;
  33. events: EventsModule & typeof BaseModule;
  34. stations: StationsModule & typeof BaseModule;
  35. websocket: WebSocketModule & typeof BaseModule;
  36. };
  37. export type Methods<T> = {
  38. [P in keyof T as T[P] extends (...args: any) => Awaited<any>
  39. ? P
  40. : never]: T[P];
  41. };
  42. export type UniqueMethods<T> = Methods<Omit<T, keyof BaseModule>>;