Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
function utilities for node.js
JavaScript
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
node_modules/tester
src
test
README.md
package.json

README.md

f link

A function combination utility,

Status: beta

Blog posts link

Coming soon!

Examples link

Documentation link

Annotated source code coming soon.

f.combine(f1, f2, flags) link

f.combine combines two functions. It will return a new function that invokes the two functions passed with this and arguments.

The flags object is an optional hash to set the value pre to true. If pre is true then f1 comes before f2 and f2 is considered the main function otherwise f1 is the main function. The returned function's length property matches the length property of the main function. The returned function also only returns the return value of the main function

var g = f.combine(function (a, b) {
    console.log("bar")
    return 42;
}, function (a,b,c) {
    console.log("foo")
});

g(); // "bar", "foo", returns 42
g.length === 2; // true

var h = f.combine(function () {
    return "no value";
}, function (a,b,c,d) {
    return "magic";
}, { pre: true });

h(); // "magic"
h.length === 4; // true

f.compose(f1, f2, flags)

f.compose composes two functions. It will return a new function that is the composition of f1 and f2. f1 is expected to return an array of arguments to pass to f2.

The optional flags hash can contain the pre flag to true which set's f2 to the main function, otherwise f1 is the main function. The returned function's length property is the same as the length property of the main function

var g = f.compose(function addOne(val) {
    return [1, val];
}, function (a, b) {
    return a + b;
});

g(5); // 6
g.length === 1; // true

var g = f.compose(function multiplyTwo(val) {
    return [2, val];
}, function (a, b) {
    return a * b;
}, { pre: true });

g(5); // 10
g.length === 2; // true

f.post(f1, f2)

Sugar for f.combine(f1, f2). Basically returns a new function where f2 comes after f1. (f1 being the main function)

f.pre(f1, f2)

Sugar for f.combine(f1, f2, { pre: true }). Basically return a new function where f1 comes before f2. (f2 being the main function)

f.extendNatives()

extends Native objects with sugar. Specifically Function.prototype.pre and Function.prototype.post are mapped to f.pre and f.post respectively.

Function.prototype.pre(f)

Calls f.pre(f, this) and returns a new function which calls f before this.

Function.prototype.post(f)

Calls f.post(this, f) and returns a new function which calls f after this.

Something went wrong with that request. Please try again.