is-type-of
Version:
complete type checking for node
101 lines • 5.68 kB
JavaScript
// Javascript Standard Object
import { types, debuglog } from 'node:util';
import { hasOwnProperty, isInstanceOf } from './util.js';
const debug = debuglog('is-type-of:std');
// Array
/**
* returns true if val is array, it won't check items of array
*/
export function isArray(val) {
return Array.isArray(val);
}
// Function
/**
* returns true if val is function
*/
export function isFunction(val) {
return typeof val === 'function';
}
/**
* returns true if val is generator function
*/
export function isGeneratorFunction(val) {
return types.isGeneratorFunction(val);
}
/**
* returns true if val is async function
*/
export function isAsyncFunction(val) {
return types.isAsyncFunction(val);
}
/**
* returns true if val is async generator function
*/
export function isAsyncGeneratorFunction(val) {
if (!isFunction(val))
return false;
return val.constructor && val.constructor.name === 'AsyncGeneratorFunction';
}
// Object
/**
* returns true if val is object
*/
export function isObject(val) {
return typeof val === 'object' && val !== null;
}
/**
* returns true if val is class
* *Note:* "class" is supported in ECMAScript 6, and if the code is using some compiler or transpiler, the checking might fail
*/
export function isClass(val) {
if (!isFunction(val))
return false;
const fnStr = Function.prototype.toString.call(val);
if (/^class[\s{]/.test(fnStr))
return true;
debug('[isClass] fnStr: %s', fnStr);
const fnBody = fnStr.replace(/^[^{]*{\s*/, '').replace(/\s*}[^}]*$/, '');
debug('[isClass] fnBody: %s', fnBody);
return (/classCallCheck\(/.test(fnBody) || /TypeError\("Cannot call a class as a function"\)/.test(fnBody));
}
/**
* returns true if val is regular expression
*/
export function isRegExp(val) {
return isInstanceOf(val, RegExp);
}
/**
* returns true if val is instance of Date
*/
export function isDate(val) {
return isInstanceOf(val, Date);
}
/**
* returns true if val is instance of Error
*/
export function isError(val) {
return isInstanceOf(val, Error);
}
/**
* returns true if val is generator
*/
export function isGenerator(val) {
return types.isGeneratorObject(val);
}
/**
* returns true if val is promise
*/
export function isPromise(val) {
return types.isPromise(val);
}
/**
* returns true if val is like promise, if the object has `then` property, the checking will pass.
*/
export function isPromiseLike(val) {
if (isPromise(val))
return true;
if (!isObject(val))
return false;
return hasOwnProperty(val, 'then') && typeof val.then === 'function';
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3N0ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2QkFBNkI7QUFFN0IsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHekQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFekMsUUFBUTtBQUVSOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBVSxHQUFhO0lBQzVDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsV0FBVztBQUVYOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBcUIsR0FBYTtJQUMxRCxPQUFPLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBYTtJQUMvQyxPQUFPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQWE7SUFDM0MsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxHQUFhO0lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbkMsT0FBTyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHdCQUF3QixDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTO0FBRVQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQWE7SUFDcEMsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBa0IsR0FBYTtJQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0MsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekUsS0FBSyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksa0RBQWtELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUcsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFhO0lBQ3BDLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQWE7SUFDbEMsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBYTtJQUNuQyxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFhO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQVUsR0FBYTtJQUM5QyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBVSxHQUFhO0lBQ2xELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDakMsT0FBTyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7QUFDdkUsQ0FBQyJ9