Improve the is.observable check (#74)

Fixes #72
This commit is contained in:
Sindre Sorhus 2018-12-13 16:52:55 +01:00 committed by GitHub
parent 566f363632
commit 844b43c9df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 13 deletions

View file

@ -43,9 +43,6 @@
"verify",
"compare"
],
"dependencies": {
"symbol-observable": "^1.2.0"
},
"devDependencies": {
"@sindresorhus/tsconfig": "^0.1.0",
"@types/jsdom": "^11.12.0",

View file

@ -2,7 +2,6 @@
/// <reference lib="es2017.sharedmemory"/>
/// <reference lib="esnext.asynciterable"/>
/// <reference lib="dom"/>
import symbolObservable from 'symbol-observable';
import {URL} from 'url';
type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;
@ -278,7 +277,22 @@ namespace is { // tslint:disable-line:no-namespace
export const domElement = (value: unknown): value is DomElement => object(value) && (value as DomElement).nodeType === NODE_TYPE_ELEMENT && string((value as DomElement).nodeName) &&
!plainObject(value) && DOM_PROPERTIES_TO_CHECK.every(property => property in (value as DomElement));
export const observable = (value: unknown) => Boolean(value && (value as any)[symbolObservable] && value === (value as any)[symbolObservable]());
export const observable = (value: unknown) => {
if (!value) {
return false;
}
if ((value as any)[Symbol.observable] && value === (value as any)[Symbol.observable]()) {
return true;
}
if ((value as any)['@@observable'] && value === (value as any)['@@observable']()) {
return true;
}
return false;
};
export const nodeStream = (value: unknown): value is NodeStream => !nullOrUndefined(value) && isObject(value) as unknown && function_((value as NodeStream).pipe) && !observable(value);
export const infinite = (value: unknown) => value === Infinity || value === -Infinity;

View file

@ -345,6 +345,14 @@ const types = new Map<string, Test>([
document.createDocumentFragment()
]
}],
['observable', {
is: is.observable,
fixtures: [
new Observable(),
new Subject(),
new ZenObservable(() => {}) // tslint:disable-line:no-empty
]
}],
['nodeStream', {
is: is.nodeStream,
fixtures: [
@ -359,14 +367,6 @@ const types = new Map<string, Test>([
new Stream.Writable()
]
}],
['observable', {
is: is.observable,
fixtures: [
new Observable(),
new Subject(),
new ZenObservable(() => {}) // tslint:disable-line:no-empty
]
}],
['infinite', {
is: is.infinite,
fixtures: [
@ -761,6 +761,10 @@ test('is.domElement', t => {
t.false(is.domElement({nodeType: 1, nodeName: 'div'}));
});
test('is.observable', t => {
testType(t, 'observable');
});
test('is.nodeStream', t => {
testType(t, 'nodeStream');
});