From 9615ff34c3479ebd5a457cb4d5b1190cff4f7319 Mon Sep 17 00:00:00 2001 From: Bryan Bonnet Date: Fri, 11 May 2018 09:08:09 -0700 Subject: [PATCH 1/3] fix(isObservable): Fix throwing error when testing isObservable(null) --- spec/util/isObservable-spec.ts | 9 +++++++++ src/internal/util/isObservable.ts | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spec/util/isObservable-spec.ts b/spec/util/isObservable-spec.ts index 91d7d2ae0a..24fb6f69dc 100644 --- a/spec/util/isObservable-spec.ts +++ b/spec/util/isObservable-spec.ts @@ -23,4 +23,13 @@ describe('isObservable', () => { expect(isObservable(o)).to.be.false; }); + + it('should return false for null', () => { + expect(isObservable(null)).to.be.false; + }); + + it('should return false for a number', () => { + expect(isObservable(1)).to.be.false; + }); + }); diff --git a/src/internal/util/isObservable.ts b/src/internal/util/isObservable.ts index 2bda600928..eb86fa70fc 100644 --- a/src/internal/util/isObservable.ts +++ b/src/internal/util/isObservable.ts @@ -1,10 +1,13 @@ import { Observable } from '../Observable'; import { ObservableInput } from '../types'; +import { isObject } from './isObject'; +import { isFunction } from './isFunction'; /** * Tests to see if the object is an RxJS {@link Observable} * @param obj the object to test */ export function isObservable(obj: any): obj is Observable { - return obj && obj instanceof Observable || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'); + return obj && obj instanceof Observable || + (isObject(obj) || isFunction(obj)) ? (isFunction(obj.lift) && isFunction(obj.subscribe)) : false; } From aa1d06b523ae13e5160db3560a5623e710903a4e Mon Sep 17 00:00:00 2001 From: Bryan Bonnet Date: Tue, 15 May 2018 18:03:46 -0400 Subject: [PATCH 2/3] fix(isObservable): Use instanceOf instead --- src/internal/util/isObservable.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/internal/util/isObservable.ts b/src/internal/util/isObservable.ts index eb86fa70fc..6ce7b760d6 100644 --- a/src/internal/util/isObservable.ts +++ b/src/internal/util/isObservable.ts @@ -8,6 +8,5 @@ import { isFunction } from './isFunction'; * @param obj the object to test */ export function isObservable(obj: any): obj is Observable { - return obj && obj instanceof Observable || - (isObject(obj) || isFunction(obj)) ? (isFunction(obj.lift) && isFunction(obj.subscribe)) : false; + return !!obj && (obj instanceof Observable || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function')); } From f866d245d0f8afcb14886adf9de1cdf10cf40dc4 Mon Sep 17 00:00:00 2001 From: Bryan Bonnet Date: Wed, 16 May 2018 06:39:03 -0400 Subject: [PATCH 3/3] fix(isObservable): Cleanup imports --- src/internal/util/isObservable.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/internal/util/isObservable.ts b/src/internal/util/isObservable.ts index 6ce7b760d6..f3df52485b 100644 --- a/src/internal/util/isObservable.ts +++ b/src/internal/util/isObservable.ts @@ -1,7 +1,5 @@ import { Observable } from '../Observable'; import { ObservableInput } from '../types'; -import { isObject } from './isObject'; -import { isFunction } from './isFunction'; /** * Tests to see if the object is an RxJS {@link Observable}