UNPKG

@anycable/core

Version:

AnyCable JavaScript client library core functionality

80 lines (63 loc) 1.71 kB
import { createNanoEvents, Emitter, Unsubscribe } from 'nanoevents' import { Transport, Env, TransportEvents } from './index' type Events = TransportEvents<string | Uint8Array> export class TestTransport implements Transport<string> { url: string emitter: Emitter<Events> state: Env opened: boolean sent: (string | Uint8Array)[] constructor(url: string = '') { this.url = url this.emitter = createNanoEvents() this.state = {} this.opened = false this.sent = [] } displayName(): string { return 'TestTransport(' + this.url + ')' } setURL(url: string) { this.url = url } setParam(key: string, value: string) { this.state[key] = value } setToken(value: string, param: string = 'jid') { this.state[param] = value } open() { this.opened = true this.emit('open') return Promise.resolve() } send(data: string | Uint8Array) { this.sent.push(data) } receive(msg: string | Uint8Array) { this.emit('data', msg) } close() { this.opened = false this.emit('close') return Promise.resolve() } closed(reason: string) { this.opened = false this.emit('close', Error(reason)) } on<E extends keyof Events>(event: E, callback: Events[E]): Unsubscribe { return this.emitter.on(event, callback) } once<E extends keyof Events>(event: E, callback: Events[E]): Unsubscribe { /* eslint-disable @typescript-eslint/no-explicit-any */ let unbind = this.emitter.on(event, (...args: any) => { unbind() callback(args) }) return unbind } emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void { this.emitter.emit(event, ...args) } }