import type { PartialObserver } from './Observer.js'; import type { Unsubscribable } from './Unsubscribable.js'; /** * Lazy and composable push-based data source. * * @since 1.0.0 */ export interface Subscribable { __type?: D; /** * Subscribe to a subscribable using an observer. * @param observer * * @since 1.0.0 */ subscribe(observer: PartialObserver): Unsubscribable; } /** * Object holding a {@link Subscribable} feature * * @since 1.0.0 */ export interface SubscribableHolder { [Symbol.observable](): Subscribable; } export type AnySubscribable = Subscribable | SubscribableHolder; export type SubscribableValue = T extends AnySubscribable ? D : never;