@feugene/mu
Version:
Helpful TS utilities without dependencies
59 lines • 1.84 kB
JavaScript
const symToStringTag = Symbol.toStringTag;
const asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', nullTag = '[object Null]', proxyTag = '[object Proxy]', undefinedTag = '[object Undefined]';
/**
* This function evaluates whether all parameters are function
*/
export function isFunctions(...parameters) {
if (parameters.length === 0) {
throw new Error('Please provide at least one number to evaluate isInteger.');
}
const invalid = parameters.some(parameter => !isFunction(parameter));
return !invalid;
}
export default function isFunction(parameter) {
const tag = baseGetTag(parameter);
return tag === funcTag || tag === genTag || tag === asyncTag || tag === proxyTag;
}
/**
* The base implementation of `getTag` without fallbacks for buggy environments.
*
* @private
*/
function baseGetTag(value) {
if (value == null) {
return value === undefined ? undefinedTag : nullTag;
}
return symToStringTag in new Object(value) ? getRawTag(value) : objectToString(value);
}
/**
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
*
* @private
*/
function getRawTag(value) {
const isOwn = Object.prototype.hasOwnProperty.call(value, symToStringTag);
const tag = value[symToStringTag];
let unmasked = false;
try {
value[symToStringTag] = undefined;
unmasked = true;
}
catch (error) { }
const result = objectToString(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
}
else {
delete value[symToStringTag];
}
}
return result;
}
/**
* @private
*/
function objectToString(value) {
return Object.prototype.toString.call(value);
}
//# sourceMappingURL=isFunction.mjs.map