import { Observable } from "rxjs" import { filter } from "rxjs/operators" import { DataObject, DataObjectMessage, DataObjectMessageAck, DataObjectPing, DataObjectServiceInfo, DataObjectType, } from "../types" export const ofDataType = (...types: T[]) => (source$: Observable>): Observable, { type: T }>> => // @ts-expect-error - TypeScript does not handle this generic well source$.pipe(filter((data: DataObject): boolean => types.includes(data.type))) export const ofDataTypeMessage: (source$: Observable>) => Observable> = ofDataType(DataObjectType.Message) export const ofDataTypeMessageAck: (source$: Observable>) => Observable = ofDataType(DataObjectType.MessageAck) export const ofDataTypePing: (source$: Observable>) => Observable = ofDataType( DataObjectType.Ping, ) export const ofDataTypeServiceInfo: (source$: Observable>) => Observable = ofDataType(DataObjectType.ServiceInfo)