unravel-function
v0.2.1
Published
Takes a function and spreads its arguments across a chain of functions to be lazily evaluated, a la the Builder Pattern.
Downloads
4
Maintainers
Readme
unravel-function
Takes a function and spreads its arguments across a chain of functions to be lazily evaluated, a la the Builder Pattern.
const unravel = require('unravel-function');
function func(foo, bar, qux) {
return foo - bar + qux;
}
func = unravel(func);
var result = func
.foo(5)
.qux(8)
.bar(3);
console.log(result); // prints 10 (5 - 3 + 8)
Installation
$ npm install unravel-function --save
Why Use It?
- It makes your function calls more readable- especially useful for functions with lots of arguments.
- It's lightweight. The source code is less than 850 bytes in size.
Description
unravel(func, params=undefined)
Returns an object whose keys are the parameter names of func
(unless overriden by params
), and whose values are functions that take a single argument that fills the corresponding parameter. Once the last argument is filled (or when eval()
is called), func
is evaluated with the arguments and the result is returned.
Parameters
| Name | Type | Default Value | Description |
|-----------|---------------|---------------|-----------------------------------------------------|
| func
| Function | | The function to be called after the last argument has been filled, or when eval()
is called.|
| params
| Array[String] | null | [Optional] An array of strings to override func
parameter names. (See examples below) |
Examples
Overriding parameter names
function foo(bar, baz, bux) {
...
}
// 'bezos' is mapped to the first argument, 'waldo' is mapped to the third argument
var chain = unravel(foo, ['bezos', null, 'waldo']);
// same as foo(1, 2, 3)
var result = chain.bezos(1).baz(2).waldo(3);
Additional parameter names
function foo(bar, baz, bux) {
...
}
// 'qux' is mapped to the fourth argument
var chain = unravel(foo, [null, null, null, 'qux']);
// same as foo(1, 2, 3, 4)
var result = chain.bar(1).baz(2).bux(3).qux(4);
Short-circuit evaluation
function foo(bar, baz, bux) {
...
}
foo = unravel(foo);
// same as foo(undefined, 5, undefined)
var result = foo.baz(5).eval();
Note on ES6 Default Parameters
If you are working on an ES6 project that compiles into ES5 code using Babel, unravel-function
will be unable to automatically detect ES6 default parameters in your compiled code. This is due to the way that ES6 implements default parameters. To unravel a function with ES6 default parameters, you will have to explicitly pass in the name of each parameter when calling unravel
.
const unravel = require('unravel-function');
// function with ES6 default parameters
function foo(a, b, c = 5) {
...
}
foo = unravel(foo, ['a', 'b', 'c']);
About
This project is maintained by Tyler Hurson. Submit any issues or pull requests to the official Github repo.