import { Subscription } from './subscription.js'; // Older versions of Rx will polyfill Symbol.observable, which gets // compiled into our UMD bundle. At runtime, our UMD bundle defines its // version of Symbol.observable, and since it's not getting it from Rx via // `require()` anymore, Rx defines and looks for a different Symbol.observable, // instance, leading to mismatches. // Assigning the global Symbol.observable to the one we bundle in here means // that Rx's polyfill will pick it up. Alternatively if there's already a global // Symbol.observable (like if Rx was required first), we should use that one inside Ix. // Symbol.observable addition // Note: This will add Symbol.observable globally for all TypeScript users declare global { interface SymbolConstructor { readonly observable: symbol; } } // Symbol.observable or a string "@@observable". Used for interop. // Referenced via string indexer so closure-compiler doesn't mangle. /** @ignore */ export const observable = (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; export interface NextObserver { next: (value: T) => any; error?: (err: any) => any; complete?: () => any; } export interface ErrorObserver { next?: (value: T) => any; error: (err: any) => any; complete?: () => any; } export interface CompletionObserver { next?: (value: T) => any; error?: (err: any) => any; complete: () => any; } export type PartialObserver = NextObserver | ErrorObserver | CompletionObserver; export interface NextAsyncObserver { next: (value: T) => any | Promise; error?: (err: any) => any | Promise; complete?: () => any | Promise; } export interface ErrorAsyncObserver { next?: (value: T) => any | Promise; error: (err: any) => any | Promise; complete?: () => any | Promise; } export interface CompletionAsyncObserver { next?: (value: T) => any | Promise; error?: (err: any) => any | Promise; complete: () => any | Promise; } export type PartialAsyncObserver = | NextAsyncObserver | ErrorAsyncObserver | CompletionAsyncObserver; export interface Observer { closed?: boolean; next: (value: T) => void; error: (err: any) => void; complete: () => void; } export interface Observable { subscribe(observer?: PartialObserver): Subscription; subscribe( next?: null | ((value: T) => void), error?: null | ((error: any) => void), complete?: null | (() => void) ): Subscription; }