import { Scope } from "./abstractions"
import { flatMapLatest } from "./flatmaplatest"
import { later } from "./later"
import { GenericTransformOp, GenericTransformOpScoped } from "./transform"
import { transformChanges } from "./transformchanges"
export function debounce(delay: number): GenericTransformOp
export function debounce(
delay: number,
scope: Scope
): GenericTransformOpScoped
export function debounce(delay: number, scope?: Scope): any {
return transformChanges(
["debounce", [delay]],
(changes) => flatMapLatest((value) => later(delay, value))(changes),
scope as any
)
}