@technobuddha/library
Version: 
A large library of useful functions
33 lines • 1.79 kB
JavaScript
import { isObject } from "./is-object.js";
/**
 * Determines whether the provided value is a function.
 *
 * This includes regular functions, generator functions, async functions, and proxies
 * that behave like functions. It uses both `typeof` and `Object.prototype.toString`
 * checks to ensure accurate detection.
 * @param value - The value to test.
 * @returns True if the value is a function, otherwise false.
 * @group Object
 * @category Type Guards
 * @example
 * ```typescript
 * isFunction(function() {}); // true
 * isFunction(() => {}); // true
 * isFunction(async function() {}); // true
 * isFunction(function* () {}); // true
 * isFunction(null); // false
 * isFunction({}); // false
 * ```
 */
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
export function isFunction(value) {
    return (typeof value === 'function' ||
        (isObject(value) &&
            [
                '[object Function]',
                '[object GeneratorFunction]',
                '[object AsyncFunction]',
                '[object Proxy]',
            ].includes(Object.prototype.toString.call(value))));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaXMtZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYztJQUN2QyxPQUFPLENBQ0wsT0FBTyxLQUFLLEtBQUssVUFBVTtRQUMzQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDZDtnQkFDRSxtQkFBbUI7Z0JBQ25CLDRCQUE0QjtnQkFDNUIsd0JBQXdCO2dCQUN4QixnQkFBZ0I7YUFDakIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDckQsQ0FBQztBQUNKLENBQUMifQ==