import { Observable } from '../core/Observable' import { Subscribable, SubscriptionObserver } from '../core/types.h' import { transform } from '../helpers/transform' const defaultEquals = (a: T, b: T) => a === b const skip = (equals: (a: T, b: T, index: number) => boolean) => { let init = true let oldValue: T return (observer: SubscriptionObserver, value: T, index: number) => { if (init) { init = false oldValue = value observer.next(value) return } if (equals(oldValue, value, index)) { return } oldValue = value observer.next(value) } } export const skipRepeats = ( equals: (a: T, b: T, index: number) => boolean = defaultEquals, stream: Subscribable ): Observable => { return transform(stream, skip(equals)) }