{"version":3,"sources":["../../../../src/core/experimental/sources/network-source.ts"],"sourcesContent":["import { Emitter, TypedEvent, type TypedListenerOptions } from 'rettime'\nimport {\n  type AnyNetworkFrame,\n  type ExtractFrameEvents,\n} from '../frames/network-frame'\n\nclass NetworkFrameEvent<\n  DataType = void,\n  ReturnType = void,\n  EventType extends string = string,\n> extends TypedEvent<DataType, ReturnType, EventType> {\n  public frame: AnyNetworkFrame\n\n  constructor(type: string, frame: AnyNetworkFrame) {\n    super(...([type, {}] as any))\n    this.frame = frame\n  }\n}\n\ntype NetworkSourceEventMap<Frame extends AnyNetworkFrame> = {\n  frame: NetworkFrameEvent<Frame>\n}\n\nexport type ExtractSourceEvents<Source> =\n  Source extends NetworkSource<infer Frame> ? ExtractFrameEvents<Frame> : never\n\nexport abstract class NetworkSource<\n  Frame extends AnyNetworkFrame = AnyNetworkFrame,\n> {\n  protected emitter: Emitter<NetworkSourceEventMap<Frame>>\n\n  constructor() {\n    this.emitter = new Emitter()\n  }\n\n  public abstract enable(): unknown | Promise<unknown>\n\n  public async queue(frame: Frame): Promise<void> {\n    await this.emitter.emitAsPromise(\n      // @ts-expect-error Trouble handling a conditional type parameter.\n      new NetworkFrameEvent('frame', frame),\n    )\n  }\n\n  public on<Type extends keyof NetworkSourceEventMap<Frame>>(\n    type: Type,\n    listener: Emitter.Listener<typeof this.emitter, Type>,\n    options?: TypedListenerOptions,\n  ): void {\n    this.emitter.on(type, listener, options)\n  }\n\n  public disable(): void | Promise<void> {\n    this.emitter.removeAllListeners()\n  }\n}\n"],"mappings":"AAAA,SAAS,SAAS,kBAA6C;AAC/D;AAAA,OAGO;AAEP,MAAM,0BAII,WAA4C;AAAA,EAC7C;AAAA,EAEP,YAAY,MAAc,OAAwB;AAChD,UAAM,GAAI,CAAC,MAAM,CAAC,CAAC,CAAS;AAC5B,SAAK,QAAQ;AAAA,EACf;AACF;AASO,MAAe,cAEpB;AAAA,EACU;AAAA,EAEV,cAAc;AACZ,SAAK,UAAU,IAAI,QAAQ;AAAA,EAC7B;AAAA,EAIA,MAAa,MAAM,OAA6B;AAC9C,UAAM,KAAK,QAAQ;AAAA;AAAA,MAEjB,IAAI,kBAAkB,SAAS,KAAK;AAAA,IACtC;AAAA,EACF;AAAA,EAEO,GACL,MACA,UACA,SACM;AACN,SAAK,QAAQ,GAAG,MAAM,UAAU,OAAO;AAAA,EACzC;AAAA,EAEO,UAAgC;AACrC,SAAK,QAAQ,mBAAmB;AAAA,EAClC;AACF;","names":[]}