Skip to content

Commit

Permalink
Merge pull request #12 from jarco-develop/feature/isFunction
Browse files Browse the repository at this point in the history
Add isFunction
  • Loading branch information
prdn authored Oct 30, 2023
2 parents 9c9b319 + 8bdb238 commit 8b76855
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 1 deletion.
3 changes: 3 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
# 1.3.0
- feat: isFunction

# 1.2.1
- fix: merge should not throw an error with non-plain objects in sources

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Currently supported utils:
- `getArrayHasIntersect` - checks if arrays have at least one common value
- `getArrayUniq` - gets unique values form array
- `isEmpty` - checks if value is an empty object, collection, map, or set
- `isFunction` - checks if input is a Function object.
- `isNil` - checks whenever value is null or undefined
- `isPlainObject` - checks if input is object, not null object and not array object
- `merge` - deep merge functionality for objects
Expand Down
1 change: 1 addition & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export function get(obj: Object, path: string | Array<string | number>, defaultV
export function getArrayHasIntersect (arr1: Array<any>, arr2: Array<any>): boolean
export function getArrayUniq (arr: Array<any>): Array<any>
export function isEmpty(val: any): boolean
export function isFunction(val: any): boolean
export function isNil(val: any): boolean
export function isPlainObject(val: any): boolean
export function merge(obj: Object, ...sources: Object[]): Object
Expand Down
2 changes: 2 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const get = require('./src/get')
const getArrayHasIntersect = require('./src/getArrayHasIntersect')
const getArrayUniq = require('./src/getArrayUniq')
const isEmpty = require('./src/isEmpty')
const isFunction = require('./src/isFunction')
const isNil = require('./src/isNil')
const isPlainObject = require('./src/isPlainObject')
const merge = require('./src/merge')
Expand All @@ -21,6 +22,7 @@ module.exports = {
getArrayHasIntersect,
getArrayUniq,
isEmpty,
isFunction,
isNil,
isPlainObject,
merge,
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bitfinex/lib-js-util-base",
"version": "1.2.1",
"version": "1.3.0",
"description": "general utils",
"main": "index.js",
"scripts": {
Expand Down
5 changes: 5 additions & 0 deletions src/isFunction.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
'use strict'

const isFunction = (val) => typeof val === 'function'

module.exports = isFunction
57 changes: 57 additions & 0 deletions test/isFunction.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
'use strict'

/* eslint-env mocha */

const assert = require('assert')
const { isFunction } = require('../index')

describe('isFunction', () => {
it('should return true for a Function object', () => {
assert.strictEqual(isFunction(function () {}), true)
assert.strictEqual(isFunction(() => {}), true)
assert.strictEqual(isFunction(Object.keys), true)
})

it('should return `true` for async functions', () => {
assert.strictEqual(isFunction(async function () {}), true)
assert.strictEqual(isFunction(async () => {}), true)
})

it('should return `true` for generator functions', () => {
assert.strictEqual(isFunction(function * () {}), true)
})

it('should return `true` for the `Proxy` constructor', () => {
assert.strictEqual(isFunction(Proxy), true)
})

it('should return `true` for array view constructors', () => {
assert.strictEqual(isFunction(Float32Array), true)
assert.strictEqual(isFunction(Float64Array), true)
assert.strictEqual(isFunction(Int8Array), true)
assert.strictEqual(isFunction(Int16Array), true)
assert.strictEqual(isFunction(Uint8Array), true)
assert.strictEqual(isFunction(Uint8ClampedArray), true)
assert.strictEqual(isFunction(Uint16Array), true)
assert.strictEqual(isFunction(Uint32Array), true)
assert.strictEqual(isFunction(DataView), true)
})

it('should return `false` for non-functions', () => {
assert.strictEqual(isFunction(function () { return arguments }.apply(undefined, [1, 2, 3])), false) // eslint-disable-line no-useless-call
assert.strictEqual(isFunction([1, 2, 3]), false)
assert.strictEqual(isFunction(true), false)
assert.strictEqual(isFunction(false), false)
assert.strictEqual(isFunction(new Date()), false)
assert.strictEqual(isFunction(new Error()), false)
assert.strictEqual(isFunction({ a: 1 }), false)
assert.strictEqual(isFunction(0), false)
assert.strictEqual(isFunction(/x/), false)
assert.strictEqual(isFunction('a'), false)
assert.strictEqual(isFunction(Symbol('test')), false)
assert.strictEqual(isFunction(null), false)
assert.strictEqual(isFunction(undefined), false)
assert.strictEqual(isFunction(NaN), false)
assert.strictEqual(isFunction(''), false)
})
})

0 comments on commit 8b76855

Please sign in to comment.