/* IMPORT */ import { writable } from '~/objects/callable' import ObservableClass from '~/objects/observable' import type { ObservableOptions, Observable } from '~/types' import { callStack } from './debugger' /* MAIN */ function observable(): Observable function observable(value: undefined, options?: ObservableOptions): Observable // Overloads for common literal types to improve type inference function observable(value: boolean, options?: ObservableOptions): Observable function observable(value: number, options?: ObservableOptions): Observable function observable(value: string, options?: ObservableOptions): Observable function observable(value: T, options?: ObservableOptions): Observable function observable(value?: T, options?: ObservableOptions) { const stack = callStack() return writable(new ObservableClass(value, options), stack) } /* EXPORT */ export default observable