qinvoke

0.11.3 • Public • Published

qinvoke

Build Status Coverage Status

Quick arguments gathering and function invocation.

Example

var qinvoke = require('qinvoke');
function thunkify(func) {
    return qinvoke.interceptCall(func, function handler(func, self, argv) {
        argv.push(null);
        return function(cb) {
            argv[argv.length - 1] = cb;
            return qinvoke.invoke(func, argv);
        }
    })
}

API

invoke( func, argv )

Apply the function to the arguments. Like func.apply(null, argv), but much faster.

invoke2( object, methodName, argv )

Invoke the method on the arguments by name. Like object[methodName].apply(object, argv), but faster.

invoke2f (object, method, argv )

Invoke the method on the arguments. Like method.apply(object, argv), but much faster.

interceptCall( func, [self,] handler(func, self, argv) )

Return a function that gathers up its arguments and invokes the handler with the given func, self, and the call arguments.

var qinvoke = require('qinvoke');
function spy( func ) {
    return qinvoke.interceptCall(func, null, function(func, self, argv) {
        console.log("calling %s with", func.name, argv);
        return func.apply(self, argv);
    })
}
console.log2 = spy(console.log);
console.log2("testing", 1, 2, 3);
// => calling bound  with [ 'testing', 1, 2, 3 ]
// => [ 'testing', 1, 2, 3 ]

thunkify( method [,object] )

Split the method into two functions, one (the thunk) to partially apply the function to the arguments and to return the other (the invoke) that runs the function when called with a callback. thunkify returns the thunk.

If object is not specified, method has to be a function body. With an object, method can be a method name or method body.

For example, thunkify would convert

func(a, b, cb)

into

function thunk(a, b) {
    return function invoke(cb) {
        return func(a, b, cb)
    }
}

once( func )

Return a function that will invoke func at most once. Subsequent calls are suppressed. Errors thrown in func are not caught.

errorToObject( err [,errorsOnly] )

Convert the Error with its non-enumerable fields into a serializable object. The object can be converted back into an Error with objectToError.

objectToError( obj [,errorsOnly] )

Convert the object back into Error it represents. The conversion is reversible for the primitive errors of Error, RangeError, ReferenceError, SyntaxError and TypeError, and errors with global constructors.

Todo

  • pick more descriptive names
  • not clear there is much benefit to passing in the context to the intercept handler

Package Sidebar

Install

npm i qinvoke

Weekly Downloads

6

Version

0.11.3

License

Apache 2.0

Last publish

Collaborators

  • andrasq