Modules.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import DataModule, { DataModuleJobs } from "../modules/DataModule";
  2. import OtherModule, { OtherModuleJobs } from "../modules/OtherModule";
  3. import StationModule, { StationModuleJobs } from "../modules/StationModule";
  4. import ModuleManager from "../ModuleManager";
  5. import BaseModule from "../BaseModule";
  6. export type Module = BaseModule;
  7. export type ModuleClass<Module extends typeof BaseModule> = {
  8. new (moduleManager: ModuleManager): Module;
  9. };
  10. export type Jobs = {
  11. data: {
  12. [Property in keyof DataModuleJobs]: DataModuleJobs[Property];
  13. };
  14. others: {
  15. [Property in keyof OtherModuleJobs]: OtherModuleJobs[Property];
  16. };
  17. stations: {
  18. [Property in keyof StationModuleJobs]: StationModuleJobs[Property];
  19. };
  20. };
  21. export type Modules = {
  22. data: DataModule & typeof BaseModule;
  23. others: OtherModule & typeof BaseModule;
  24. stations: StationModule & typeof BaseModule;
  25. };
  26. export type ModuleStatus =
  27. | "LOADED"
  28. | "STARTING"
  29. | "STARTED"
  30. | "STOPPED"
  31. | "STOPPING"
  32. | "ERROR"
  33. | "DISABLED";
  34. export type Methods<T> = {
  35. [P in keyof T as T[P] extends (...args: any) => Awaited<any>
  36. ? P
  37. : never]: T[P];
  38. };
  39. export type UniqueMethods<T> = Methods<Omit<T, keyof BaseModule>>;