export function createWorkerTransport(input: { post: (request: T) => void supersede: (request: T) => void }) { const active = new Map() const queued = new Map() return { send(request: T) { if (!active.has(request.key)) { active.set(request.key, request) input.post(request) return } const previous = queued.get(request.key) if (previous) input.supersede(previous) queued.set(request.key, request) }, complete(key: string, id: number) { if (active.get(key)?.id !== id) return active.delete(key) const next = queued.get(key) if (!next) return queued.delete(key) active.set(key, next) input.post(next) }, dispose(key: string) { active.delete(key) const request = queued.get(key) if (request) input.supersede(request) queued.delete(key) }, reset() { queued.forEach(input.supersede) queued.clear() active.clear() }, queued: () => queued.size, } }