fm

    0.8.0 • Public • Published

    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
    

    Playground

    Try fm in your browser

    Install

    npm i fm

    DownloadsWeekly Downloads

    8

    Version

    0.8.0

    License

    MIT

    Last publish

    Collaborators

    • ryanve