fm
v0.8.0
Published
Function modulation utility module
Downloads
72
Maintainers
Readme
fm
JavaScript function modulation module
npm install fm --save
API
- methods can be used statically or via OO syntax
fm()
fm(value)
→ OO wrapper
fm()
inherits from fm.prototype
var fm = require('fm')
fm(callback).partial(...arguments)
fm.prototype.partial.apply(callback, arguments)
.late()
fm.late(method)
fm(method).late()
→ function that calls this[method]
fm.late('yes').call({ yes:function() { return 1 } }) // => 1
fm.late(0).call([function() { return this.length }]) // => 1
.bind()
fm.bind(callback, scope, ...arguments)
fm(callback).bind(scope, ...arguments)
→ function that calls callback with this
binded to scope, and prepends leading arguments
fm.bind(callback, scope) // basic bind
fm.bind(callback, scope, 'a', 'b', 'c') // bind with partial arguments
.partial()
fm.partial(callback, ...arguments)
fm(callback).partial(...arguments)
→ function that calls callback with dynamic this
, and prepends leading arguments
fm.partial(fm.got, 'a', 'b')('c') // => ['a', 'b', 'c']
fm.partial('got', 'a', 'b').call(fm, 'c') // => ['a', 'b', 'c']
fm.prototype.partial.apply(callback, array) // useful for array partials
.slice()
fm.slice(callback, begin?, end?)
fm(callback).slice(begin?, end?)
→ function that calls callback with dynamic this
, and arguments
sliced by [].slice
fm.slice(function(a, b, c) {}, 0, 2) // => new function that accepts only 2 args
fm.slice(fm.bind, 0, 2) // => version of .bind that ignores extra arguments
fm.slice(fm.got, 1)('a', 'b', 'c') // => ['b', 'c']
fm.slice(fm.got, -2)('a', 'b', 'c') // => ['b', 'c']
fm.slice(fm.got, 1, 2)('a', 'b', 'c') // => ['b']
.stat()
fm.stat(method)
fm(method).stat()
- Convert an instance method into a static one. → function
fm.stat([].slice) // => static slice() function
fm.stat({}.hasOwnProperty) // => static has() function
.flow()
fm.flow(first, next)
fm(first).flow(next)
- Create a new function that invokes the next function with the result the first function → function
fm.flow(fm.constant(2), fm.constant(3))()// => 3
.constant()
fm.constant(value)
fm(value).constant()
→ function that always returns value regardless of context or arguments
fm.constant() // => noop function
fm.constant()() // => undefined
fm.constant(true)() // => true
.eq()
fm.eq(callback, index)
fm(callback).eq(index)
→ function that reduces the arguments passed to callback to the argument at the specified index
fm.eq(Number, 1)(10, 11, 12) // => 11
fm.eq(Number, -1)(10, 11, 12) // => 12
.got()
fm.got(...arguments)
fm(head).got(...arguments)
→ array of arguments received
fm.got() // => []
fm.got(0, 1, 2) // => [0, 1, 2]
.mixin()
fm.mixin(object)
→ this
Coverage
Works...everywhere! Tested in node, Chrome, FF, Opera, IE
Contribute
npm install
npm test