UNPKG

entrust

Version:

delegatee-last structure for curried functions

297 lines (212 loc) 9.21 kB
![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**