# entrust

> delegatee-last structure for curried functions

Latest version **0.0.21** (published 2018-10-13) · ISC license · 0 weekly downloads

## Install

```sh
npm install entrust
pnpm add entrust
yarn add entrust
bun add entrust
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.21 |
| Published | 2018-10-13 |
| First published | 2017-07-08 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 122.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | brekk |
| Maintainers | brekk |
| Keywords | delegatee-last, data-last, functional programming, fp, pattern, function-first |

## Links

- npm: https://www.npmjs.com/package/entrust
- Repository: https://github.com/brekk/entrust
- npm.io page: https://npm.io/package/entrust

## Dependencies (1)

- [katsu-curry](https://npm.io/package/katsu-curry.md) ^0.7.8

## Recent versions

- 0.0.21 (latest) — 2018-10-13
- 0.0.20 — 2018-10-13
- 0.0.19 — 2018-02-16
- 0.0.18 — 2018-02-12
- 0.0.17 — 2018-01-26
- 0.0.16 — 2018-01-18
- 0.0.15 — 2018-01-16
- 0.0.14 — 2017-12-19
- 0.0.13 — 2017-12-06
- 0.0.12 — 2017-10-18
- 0.0.11 — 2017-10-02
- 0.0.10 — 2017-09-27
- 0.0.9 — 2017-09-26
- 0.0.8 — 2017-09-19
- 0.0.7 — 2017-08-09
- … 6 more at https://npm.io/package/entrust/versions

## README

![entrust](https://cdn.rawgit.com/brekk/entrust/88ecfa3/logo.svg)

> Delegatee-last curried functions for great justice

[![Greenkeeper badge](https://badges.greenkeeper.io/brekk/entrust.svg)](https://greenkeeper.io/)

You can use `entrust` to easily transform methods into a curried, delegatee-last (data-last) form. If you are used to functional programming (FP) paradigms, this makes FP in JS much easier.

Example:

```js
// native map looks like: array.map(fn)
// entrust map looks like: e1(`map`, fn, array)
import {e1} from 'entrust'
const map = e1(`map`) // this takes a function first, and then the data
map(x => x * 2, [1,2,3]) // [2,4,6]
```

Here's an example of how to apply the same approach to a tertiary function, like `reduce`:

```js
import {e2} from 'entrust'
// native reduce looks like: array.reduce(fn, initial)
const reduce = e2(`reduce`) // e2(`reduce`, fn, initial, array)
const sum = reduce((a, b) => a + b, 0)
sum([1,2,3]) // 6
sum([1,2,3,4]) // 10
sum([1,2,3,4,5]) // 15
```

_NB: This approach is used extensively in the `f-utility` module. You may want to take a look at it [here](https://www.npmjs.com/package/f-utility)._

`entrust` is built using `katsu-curry`'s `curry` implementation. However, if you would like to use a different curry implementation, this is easily accomplished using the [custom API](#custom). This specific technque is used to generate entrust's "debug-mode" export: `entrust/debug.js`.

# API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

### Table of Contents

-   [custom](#custom)
-   [eN](#en)
-   [eD](#ed)
-   [e0](#e0)
-   [e1](#e1)
-   [e10](#e10)
-   [e2](#e2)
-   [e3](#e3)
-   [e4](#e4)
-   [e5](#e5)
-   [e6](#e6)
-   [e7](#e7)
-   [e8](#e8)
-   [e9](#e9)

## custom

generate a customized version of entrust's API

**Parameters**

-   `curry` **[function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)** a function which curries

**Examples**

```javascript
import {custom} from 'entrust'
import curry from 'lodash/fp/curry'
const {e0} = custom(curry)
```

Returns **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** raw+ an augmented version of the raw API

## eN

invoke a delegated method with arguments as an array. enforces specific arity

**Parameters**

-   `n` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** 0 - 10
-   `method` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name on your delegatee
-   `args` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** arguments to pass to your delegatee's method
-   `delegatee` **any** something with methods

**Examples**

```javascript
import {eN} from 'entrust'
eN(0, `toUpperCase`, [], `cool`) // `COOL`
eN(1, `map`, [(x) => x * 2], [1,2,3]) // [2,4,6]
eN(2, `reduce`, [(a, b) => (a + b), 0], [1,2,3]) // 6
```

Returns **any** the result of delegating to the method with some arguments

## eD

invoke a delegated method with arguments as an array. enforces specific arity
Yells at you if you give arguments that don't match the expected arity.

**Parameters**

-   `n` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** 0 - 10
-   `method` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name on your delegatee
-   `args` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)** arguments to pass to your delegatee's method
-   `delegatee` **any** something with methods

**Examples**

```javascript
import {eD} from 'entrust'
eD(0, `toUpperCase`, [], `cool`) // `COOL`
eD(1, `map`, [(x) => x * 2], [1,2,3]) // [2,4,6]
eD(2, `reduce`, [(a, b) => (a + b), 0], [1,2,3]) // 6
eD(2, `reduce`, [(a, b) => (a + b)], [1, 2, 3]) // throws error
```

Returns **any** the result of delegating to the method with some arguments

## e0

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

**Examples**

```javascript
import {e0} from 'entrust'
const toLowerCase = e0(`toLowerCase`)
toLowerCase(`COOL`) // cool
```

Returns **any** 

## e1

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

**Examples**

```javascript
import {e1} from 'entrust'
const split = e1(`split`)
split(`:`, `c:o:o:l`) // [`c`,`o`,`o`,`l`]
```

Returns **any** 

## e10

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `e` **any** some parameter
-   `f` **any** some parameter
-   `g` **any** some parameter
-   `h` **any** some parameter
-   `i` **any** some parameter
-   `j` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e2

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

**Examples**

```javascript
import {e2} from 'entrust'
const replace = e2(`replace`)
replace(`old`, `new`, `oldnew`) // newnew
```

Returns **any** 

## e3

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e4

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e5

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `e` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e6

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `e` **any** some parameter
-   `f` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e7

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `e` **any** some parameter
-   `f` **any** some parameter
-   `g` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e8

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `e` **any** some parameter
-   `f` **any** some parameter
-   `g` **any** some parameter
-   `h` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any** 

## e9

**Parameters**

-   `fn` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** a function name
-   `a` **any** some parameter
-   `b` **any** some parameter
-   `c` **any** some parameter
-   `d` **any** some parameter
-   `e` **any** some parameter
-   `f` **any** some parameter
-   `g` **any** some parameter
-   `h` **any** some parameter
-   `i` **any** some parameter
-   `x` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** an object

Returns **any**

---
_Source: https://npm.io/package/entrust · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
