is-type-of
Version:
complete type checking for node
116 lines • 6.29 kB
JavaScript
;
// Javascript Standard Object
Object.defineProperty(exports, "__esModule", { value: true });
exports.isArray = isArray;
exports.isFunction = isFunction;
exports.isGeneratorFunction = isGeneratorFunction;
exports.isAsyncFunction = isAsyncFunction;
exports.isAsyncGeneratorFunction = isAsyncGeneratorFunction;
exports.isObject = isObject;
exports.isClass = isClass;
exports.isRegExp = isRegExp;
exports.isDate = isDate;
exports.isError = isError;
exports.isGenerator = isGenerator;
exports.isPromise = isPromise;
exports.isPromiseLike = isPromiseLike;
const node_util_1 = require("node:util");
const util_js_1 = require("./util.js");
const debug = (0, node_util_1.debuglog)('is-type-of:std');
// Array
/**
* returns true if val is array, it won't check items of array
*/
function isArray(val) {
return Array.isArray(val);
}
// Function
/**
* returns true if val is function
*/
function isFunction(val) {
return typeof val === 'function';
}
/**
* returns true if val is generator function
*/
function isGeneratorFunction(val) {
return node_util_1.types.isGeneratorFunction(val);
}
/**
* returns true if val is async function
*/
function isAsyncFunction(val) {
return node_util_1.types.isAsyncFunction(val);
}
/**
* returns true if val is async generator function
*/
function isAsyncGeneratorFunction(val) {
if (!isFunction(val))
return false;
return val.constructor && val.constructor.name === 'AsyncGeneratorFunction';
}
// Object
/**
* returns true if val is object
*/
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
*/
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
*/
function isRegExp(val) {
return (0, util_js_1.isInstanceOf)(val, RegExp);
}
/**
* returns true if val is instance of Date
*/
function isDate(val) {
return (0, util_js_1.isInstanceOf)(val, Date);
}
/**
* returns true if val is instance of Error
*/
function isError(val) {
return (0, util_js_1.isInstanceOf)(val, Error);
}
/**
* returns true if val is generator
*/
function isGenerator(val) {
return node_util_1.types.isGeneratorObject(val);
}
/**
* returns true if val is promise
*/
function isPromise(val) {
return node_util_1.types.isPromise(val);
}
/**
* returns true if val is like promise, if the object has `then` property, the checking will pass.
*/
function isPromiseLike(val) {
if (isPromise(val))
return true;
if (!isObject(val))
return false;
return (0, util_js_1.hasOwnProperty)(val, 'then') && typeof val.then === 'function';
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3N0ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkJBQTZCOztBQWE3QiwwQkFFQztBQU9ELGdDQUVDO0FBS0Qsa0RBRUM7QUFLRCwwQ0FFQztBQUtELDREQUdDO0FBT0QsNEJBRUM7QUFNRCwwQkFRQztBQUtELDRCQUVDO0FBS0Qsd0JBRUM7QUFLRCwwQkFFQztBQUtELGtDQUVDO0FBS0QsOEJBRUM7QUFLRCxzQ0FJQztBQS9HRCx5Q0FBNEM7QUFDNUMsdUNBQXlEO0FBR3pELE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVEsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXpDLFFBQVE7QUFFUjs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBVSxHQUFhO0lBQzVDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsV0FBVztBQUVYOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFxQixHQUFhO0lBQzFELE9BQU8sT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDO0FBQ25DLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEdBQWE7SUFDL0MsT0FBTyxpQkFBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxHQUFhO0lBQzNDLE9BQU8saUJBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsR0FBYTtJQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25DLE9BQU8sR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx3QkFBd0IsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUztBQUVUOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQWE7SUFDcEMsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUNqRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsT0FBTyxDQUFrQixHQUFhO0lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxrREFBa0QsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5RyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsR0FBYTtJQUNwQyxPQUFPLElBQUEsc0JBQVksRUFBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLEdBQWE7SUFDbEMsT0FBTyxJQUFBLHNCQUFZLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxHQUFhO0lBQ25DLE9BQU8sSUFBQSxzQkFBWSxFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixXQUFXLENBQUMsR0FBYTtJQUN2QyxPQUFPLGlCQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFVLEdBQWE7SUFDOUMsT0FBTyxpQkFBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQVUsR0FBYTtJQUNsRCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pDLE9BQU8sSUFBQSx3QkFBYyxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ3ZFLENBQUMifQ==