Add is.asyncIterable

This commit is contained in:
Artur 2018-07-07 19:54:22 +03:00
parent c84c2cbeca
commit 77a86c0fe3
3 changed files with 20 additions and 1 deletions

View file

@ -136,6 +136,7 @@ namespace is { // tslint:disable-line:no-namespace
export const nullOrUndefined = (value: any): value is null | undefined => null_(value) || undefined(value); export const nullOrUndefined = (value: any): value is null | undefined => null_(value) || undefined(value);
export const object = (value: any): value is object => !nullOrUndefined(value) && (function_(value) || isObject(value)); export const object = (value: any): value is object => !nullOrUndefined(value) && (function_(value) || isObject(value));
export const iterable = (value: any): value is IterableIterator<any> => !nullOrUndefined(value) && function_(value[Symbol.iterator]); export const iterable = (value: any): value is IterableIterator<any> => !nullOrUndefined(value) && function_(value[Symbol.iterator]);
export const asyncIterable = (value: any): value is AsyncIterableIterator<any> => !nullOrUndefined(Symbol.asyncIterator) && typeof value[Symbol.asyncIterator] === 'function';
export const generator = (value: any): value is Generator => iterable(value) && function_(value.next) && function_(value.throw); export const generator = (value: any): value is Generator => iterable(value) && function_(value.next) && function_(value.throw);
export const nativePromise = (value: any): value is Promise<any> => export const nativePromise = (value: any): value is Promise<any> =>

View file

@ -10,6 +10,7 @@ import ZenObservable from 'zen-observable';
import m from '..'; import m from '..';
const isNode8orHigher = Number(process.versions.node.split('.')[0]) >= 8; const isNode8orHigher = Number(process.versions.node.split('.')[0]) >= 8;
const isNode10orHigher = Number(process.versions.node.split('.')[0]) >= 10;
class PromiseSubclassFixture<T> extends Promise<T> {} class PromiseSubclassFixture<T> extends Promise<T> {}
class ErrorSubclassFixture extends Error {} class ErrorSubclassFixture extends Error {}
@ -337,6 +338,14 @@ const types = new Map<string, Test>([
Infinity, Infinity,
-Infinity -Infinity
] ]
}],
['asyncIterable', {
is: m.asyncIterable,
fixtures: [
Object.create({
[Symbol.asyncIterator]: () => {} // tslint:disable-line:no-empty
})
]
}] }]
]); ]);
@ -454,6 +463,14 @@ if (isNode8orHigher) {
});*/ });*/
} }
if (isNode10orHigher) {
test('is.asyncIterable', t => {
t.true(m.asyncIterable(Object.create({
[Symbol.asyncIterator]: () => {} // tslint:disable-line:no-empty
})));
});
}
test('is.generator', t => { test('is.generator', t => {
testType(t, 'generator'); testType(t, 'generator');
}); });

View file

@ -6,7 +6,8 @@
"dom", "dom",
"es2015", "es2015",
"es2016", "es2016",
"es2017.sharedmemory" "es2017.sharedmemory",
"esnext.asynciterable"
], ],
"module": "commonjs", "module": "commonjs",
"moduleResolution": "node", "moduleResolution": "node",