@arrows/dispatch
Version:
Functional dispatch library
222 lines (140 loc) • 4.39 kB
Markdown







## 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'
```
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
```
```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
```
```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
```
```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
```
---
Checks if a value is inside an array/set.
- `list` - An array or a set of values
- `value` - Any value
- Returns `true` is a value is inside an array/set, `false` otherwise.
```
(array_or_set, value) => boolean
```
```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
```
---
An object that contains a list of the most common types to use with the [getType](
```javascript
getType([1, 2, 3]) === types.Array // -> true
getType(() => null) === types.Function // -> true
getType(Promise.resolve()) === types.Promise // -> true
getType('1') === types.Number // -> false
```
Project is under open, non-restrictive [ISC license](LICENSE).