1- import { IObservableArray , IArrayChange , IArraySplice , isObservableArray } from "../types/observablearray" ;
2- import { ObservableMap , IMapChange , isObservableMap } from "../types/observablemap" ;
3- import { IObjectChange , isObservableObject , observeObservableObject } from "../types/observableobject" ;
1+ import { IObservableArray , IArrayChange , IArraySplice } from "../types/observablearray" ;
2+ import { ObservableMap , IMapChange } from "../types/observablemap" ;
3+ import { IObjectChange , isObservableObject } from "../types/observableobject" ;
44import { IObservableValue , observable } from "./observable" ;
5- import { ComputedValue } from "../core/computedvalue" ;
6- import { ObservableValue } from "../types/observablevalue" ;
7- import { Lambda , isPlainObject , invariant , deprecated } from "../utils/utils" ;
8- import { isObservable } from "./isobservable" ;
5+ import { Lambda , isPlainObject , deprecated } from "../utils/utils" ;
96import { extendObservable } from "./extendobservable" ;
7+ import { getAdministration } from "./extras" ;
108
119export function observe < T > ( value : IObservableValue < T > , listener : ( newValue : T , oldValue : T ) => void , fireImmediately ?: boolean ) : Lambda ;
1210export function observe < T > ( observableArray : IObservableArray < T > , listener : ( change : IArrayChange < T > | IArraySplice < T > ) => void , fireImmediately ?: boolean ) : Lambda ;
@@ -22,38 +20,20 @@ export function observe(thing, propOrCb?, cbOrFire?, fireImmediately?): Lambda {
2220}
2321
2422function observeObservable ( thing , listener , fireImmediately : boolean ) {
25- if ( isObservableArray ( thing ) )
26- return thing . observe ( listener ) ;
27- if ( isObservableMap ( thing ) )
28- return thing . observe ( listener ) ;
29- if ( isObservableObject ( thing ) )
30- return observeObservableObject ( thing , listener , fireImmediately ) ;
31- if ( thing instanceof ObservableValue || thing instanceof ComputedValue )
32- return thing . observe ( listener , fireImmediately ) ;
33- if ( isPlainObject ( thing ) ) {
23+ if ( isPlainObject ( thing ) && ! isObservableObject ( thing ) ) {
3424 deprecated ( "Passing plain objects to intercept / observe is deprecated and will be removed in 3.0" ) ;
35- return observeObservable ( observable ( < Object > thing ) , listener , fireImmediately ) ;
25+ return getAdministration ( observable ( thing ) as any ) . observe ( listener , fireImmediately ) ;
3626 }
37- invariant ( false , "first argument of observe should be some observable value or plain object" ) ;
27+ return getAdministration ( thing ) . observe ( listener , fireImmediately ) ;
3828}
3929
4030function observeObservableProperty ( thing , property , listener , fireImmediately : boolean ) {
41- const propError = "[mobx.observe] the provided observable map has no key with name: " + property ;
42- if ( isObservableMap ( thing ) ) {
43- if ( ! thing . _has ( property ) )
44- throw new Error ( propError ) ;
45- return observe ( thing . _data [ property ] , listener ) ;
46- }
47- if ( isObservableObject ( thing ) ) {
48- if ( ! isObservable ( thing , property ) )
49- throw new Error ( propError ) ;
50- return observe ( thing . $mobx . values [ property ] , listener , fireImmediately ) ;
51- }
52- if ( isPlainObject ( thing ) ) {
31+ if ( isPlainObject ( thing ) && ! isObservableObject ( thing ) ) {
32+ deprecated ( "Passing plain objects to intercept / observe is deprecated and will be removed in 3.0" ) ;
5333 extendObservable ( thing , {
5434 property : thing [ property ]
5535 } ) ;
5636 return observeObservableProperty ( thing , property , listener , fireImmediately ) ;
5737 }
58- invariant ( false , "first argument of observe should be an (observable)object or observableMap if a property name is given" ) ;
38+ return getAdministration ( thing , property ) . observe ( listener , fireImmediately ) ;
5939}
0 commit comments