UNPKG

@arrows/dispatch

Version:
222 lines (140 loc) 4.39 kB
![arrows - dispatch](https://raw.githubusercontent.com/caderek/arrows/master/assets/arrows-dispatch.svg?sanitize=true) # @arrows/dispatch ![npm (scoped)](https://img.shields.io/npm/v/@arrows/dispatch) ![CircleCI](https://img.shields.io/circleci/build/github/caderek/arrows) ![David (path)](https://img.shields.io/david/caderek/arrows?path=packages%2Fdispatch) ![Codecov](https://img.shields.io/codecov/c/github/caderek/arrows?token=c6adb715d638431786fefe69ca08ab00) ![npm bundle size (scoped)](https://img.shields.io/bundlephobia/minzip/@arrows/dispatch) ![GitHub](https://img.shields.io/github/license/caderek/arrows) ## Table of contents 1. [Introduction](#introduction) 2. [Installation](#installation) 3. [API reference](#api-reference) - [getType](#getType) - [identity](#identity) - [is](#is) - [isIn](#isIn) - [types](#types) 4. [License](#license) ## Introduction The library contains a collection of dispatch functions. All functions with the arity (number of arguments) greater than one are automatically curried, so a partial application is possible. The library has **built-in type definitions**, which provide an excellent IDE support. ## Installation Via NPM: ```sh npm i @arrows/dispatch ``` Via Yarn: ```sh yarn add @arrows/dispatch ``` All modules can be imported independently (to reduce bundle size), here are some import methods (you can use either CommonJS or ES modules): ```js import dispatch from '@arrows/dispatch' ``` ```js import { getType } from '@arrows/dispatch' ``` ```js import getType from '@arrows/dispatch/getType' ``` ## API reference ### getType Retrieves the type of a value (using the internal `[[Class]]` property). A more useful alternative for the `typeof` operator. It does not return custom prototypes - if you need that, use the `is` function instead. _See: [types](#types) for the list of the most common values._ _See: [MDN - Object.prototype.toString.call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString#Using_toString_to_detect_object_class)_ #### Parameters - `value` - Any value #### Returns - Returns an underlying class as a string. #### Interface ``` (value) => underlying_class_name ``` #### Example ```javascript getType(1) // -> "Number" getType(/abc/) // -> "RegExp" getType([1, 2, 3]) // -> "Array" ``` --- ### identity Standard identity function - useful as a default dispatch or a placeholder. #### Parameters - `value` - Any value #### Returns - Returns the argument as-is. #### Interface ``` (value) => value ``` #### Example ```javascript identity('foo') // -> "foo" identity([1, 2, 3]) // -> [1, 2, 3] ``` --- ### is Checks if a value is an instance of a prototype/class. #### Parameters - `prototype` - A prototype/class with which you want to check the value. - `value` - Any value #### Returns - Returns `true` is a value is an instance of a prototype/class, `false` otherwise. #### Interface ``` (prototype, value) => boolean ``` #### Example ```javascript class Cat {} class Dog {} const cat = new Cat() const dog = new Dog() is(Cat, cat) // -> true is(Dog, cat) // -> false is(Cat)(cat) // -> true is(Dog)(cat) // -> false ``` --- ### isIn Checks if a value is inside an array/set. #### Parameters - `list` - An array or a set of values - `value` - Any value #### Returns - Returns `true` is a value is inside an array/set, `false` otherwise. #### Interface ``` (array_or_set, value) => boolean ``` #### Examples ```javascript const names = ['Alice', 'Joe', 'John'] isIn(names, 'Alice') // -> true isIn(names, 'Bob') // -> false isIn(names)('Alice') // -> true isIn(names)('Bob') // -> false ``` ```javascript const names = new Set(['Alice', 'Joe', 'John']) isIn(names, 'Alice') // -> true isIn(names, 'Bob') // -> false isIn(names)('Alice') // -> true isIn(names)('Bob') // -> false ``` --- ### types An object that contains a list of the most common types to use with the [getType](#getType) function. You can use it instead of using raw strings (which is error-prone). #### Example ```javascript getType([1, 2, 3]) === types.Array // -> true getType(() => null) === types.Function // -> true getType(Promise.resolve()) === types.Promise // -> true getType('1') === types.Number // -> false ``` ## License Project is under open, non-restrictive [ISC license](LICENSE).