import { IEta, IOrderedStop, IRoute, IShuttle, IStop } from "../../entities/ShuttleRepositoryEntities"; import type EventEmitter from "node:events"; export const ShuttleRepositoryEvent = { ETA_UPDATED: "etaUpdated", ETA_REMOVED: "etaRemoved", ETA_DATA_CLEARED: "etaDataCleared", } as const; export type ShuttleRepositoryEventName = typeof ShuttleRepositoryEvent[keyof typeof ShuttleRepositoryEvent]; export type EtaRemovedEventPayload = IEta; export type EtaDataClearedEventPayload = IEta[]; export interface ShuttleRepositoryEventPayloads { [ShuttleRepositoryEvent.ETA_UPDATED]: IEta; [ShuttleRepositoryEvent.ETA_REMOVED]: EtaRemovedEventPayload; [ShuttleRepositoryEvent.ETA_DATA_CLEARED]: EtaDataClearedEventPayload; } export type ShuttleRepositoryEventListener = ( payload: ShuttleRepositoryEventPayloads[T], ) => void; /** * Shuttle getter repository to be linked to a system. */ export interface ShuttleGetterRepository extends EventEmitter { getStops(): Promise; getStopById(stopId: string): Promise; getRoutes(): Promise; getRouteById(routeId: string): Promise; getShuttles(): Promise; getShuttleById(shuttleId: string): Promise; getShuttlesByRouteId(routeId: string): Promise; getEtasForShuttleId(shuttleId: string): Promise; getEtasForStopId(stopId: string): Promise; getEtaForShuttleAndStopId(shuttleId: string, stopId: string): Promise; on(event: T, listener: ShuttleRepositoryEventListener): this; once(event: T, listener: ShuttleRepositoryEventListener): this; off(event: T, listener: ShuttleRepositoryEventListener): this; addListener(event: T, listener: ShuttleRepositoryEventListener): this; removeListener(event: T, listener: ShuttleRepositoryEventListener): this; getOrderedStopByRouteAndStopId(routeId: string, stopId: string): Promise; /** * Get ordered stops with the given stop ID. * Returns an empty array if no ordered stops found. * @param stopId */ getOrderedStopsByStopId(stopId: string): Promise; /** * Get ordered stops with the given route ID. * Returns an empty array if no ordered stops found. * @param routeId */ getOrderedStopsByRouteId(routeId: string): Promise; }