import { applyScopeMaybe } from "./applyscope" import { EventStream, EventStreamSeed, Scope } from "./abstractions" import GlobalScheduler from "./scheduler" import { nop, toString } from "./util" import { EventStreamSeedImpl } from "./eventstream" export function later(delay: number, value: V, scope: Scope): EventStream export function later(delay: number, value: V): EventStreamSeed export function later(delay: number, value: V, scope?: Scope): any { return applyScopeMaybe( new EventStreamSeedImpl( ["later", [delay, value]], (onValue, onEnd = nop) => { const timeout = GlobalScheduler.scheduler.setTimeout(() => { onValue(value) onEnd() }, delay) return () => GlobalScheduler.scheduler.clearTimeout(timeout) } ), scope ) }