import type { Readable } from 'svelte/store' import { readable } from 'svelte/store' export interface EventSource { addEventListener(event: Event, listener: (value: Value) => void): void removeEventListener(event: Event, listener: (value: Value) => void): void } export function on( source: StoreValue & EventSource, event: Event, ): Readable export function on( source: EventSource, event: Event, initialValue: StoreValue, ): Readable export function on(source: EventSource, event: string, initialValue = source) { return readable(initialValue, (set) => { source.addEventListener(event, set) return () => source.removeEventListener(event, set) }) }