import { Desc, Event, EventStream, EventStreamSeed, EventStreamSource, isProperty, Observer, Property, PropertySeed, } from "./abstractions" import { StatelessEventStream } from "./eventstream" import { EventStreamSeedImpl } from "./eventstream" export function changes | Property>( property: O ): O extends Property ? EventStream : O extends PropertySeed ? EventStreamSeed : never export function changes( property: Property | PropertySeed ): EventStream | EventStreamSeed { const desc = [property, "changes", []] as Desc const source = property.consume() const sub = (onValue: Observer, onEnd?: Observer) => { return source.onChange(onValue, onEnd) } if (isProperty(source)) { return new StatelessEventStream(desc, sub, source.getScope()) } else { return new EventStreamSeedImpl(desc, sub) } }