added is.class based on es6 class implementation

This commit is contained in:
Or Schneider 2017-09-22 23:11:53 +03:00
parent 103c5afe6f
commit 0a06209d05
2 changed files with 10 additions and 1 deletions

View file

@ -62,6 +62,7 @@ is.symbol = x => typeof x === 'symbol';
is.array = Array.isArray;
is.function = x => typeof x === 'function';
is.class = x => typeof x === 'function' && /^\s*class\s+/.test(x.toString());
is.buffer = Buffer.isBuffer;
is.object = x => {
@ -130,7 +131,7 @@ is.plainObject = x => {
// eslint-disable-next-line no-return-assign
return getObjectType(x) === 'Object' &&
(prototype = Object.getPrototypeOf(x), prototype === null ||
prototype === Object.getPrototypeOf({}));
prototype === Object.getPrototypeOf({}));
};
is.iterable = x => !is.null(x) && !is.undefined(x) && typeof x[Symbol.iterator] === 'function';

View file

@ -6,6 +6,7 @@ const isNode8orHigher = Number(process.versions.node.split('.')[0]) >= 8;
const PromiseSubclassFixture = class extends Promise {};
const ErrorSubclassFixture = class extends Error {};
const ClassFixture = class A {};
const types = new Map([
['undefined', undefined],
@ -28,6 +29,9 @@ const types = new Map([
[1, 2],
new Array(2)
]],
['class', [
new ClassFixture()
]],
['function', [
function foo() {}, // eslint-disable-line func-names
function () {},
@ -130,6 +134,10 @@ test('is.array', t => {
testType(t, 'array');
});
test('is.class', t => {
testType(t, 'function');
});
test('is.function', t => {
testType(t, 'function');
});