cfy
Version:
Use generators and yield to write regular callback-based functions
215 lines (214 loc) • 6.76 kB
JavaScript
// Generated by LiveScript 1.5.0
(function(){
var co, unthenify, add_noerr, yfy, yfy_node, yfy_multi, yfy_multi_node, cfy, cfy_varargs, cfy_node, cfy_varargs_node, k, ref$, v, out$ = typeof exports != 'undefined' && exports || this, slice$ = [].slice;
co = require('co');
unthenify = require('unthenify');
out$.add_noerr = add_noerr = function(callback){
return function(cb){
return callback(function(res){
return cb(null, res);
});
};
};
out$.yfy = yfy = function(f){
return function(){
var functionArguments, res$, i$, to$, self;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
functionArguments = res$;
self = this;
return new Promise(function(resolve, reject){
var callbackFunction;
callbackFunction = function(){
var args, res$, i$, to$;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
args = res$;
return resolve(args[0]);
};
functionArguments.push(callbackFunction);
return f.apply(self, functionArguments);
});
};
};
out$.yfy_node = yfy_node = function(f){
return function(){
var functionArguments, res$, i$, to$, self;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
functionArguments = res$;
self = this;
return new Promise(function(resolve, reject){
var callbackFunction;
callbackFunction = function(){
var args, res$, i$, to$, err;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
args = res$;
err = args[0];
if (err) {
return reject(err);
}
return resolve(args[1]);
};
functionArguments.push(callbackFunction);
return f.apply(self, functionArguments);
});
};
};
out$.yfy_multi = yfy_multi = function(f){
return function(){
var functionArguments, res$, i$, to$, self;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
functionArguments = res$;
self = this;
return new Promise(function(resolve, reject){
var callbackFunction;
callbackFunction = function(){
var args, res$, i$, to$;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
args = res$;
return resolve(args);
};
functionArguments.push(callbackFunction);
return f.apply(self, functionArguments);
});
};
};
out$.yfy_multi_node = yfy_multi_node = function(f){
return function(){
var functionArguments, res$, i$, to$, self;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
functionArguments = res$;
self = this;
return new Promise(function(resolve, reject){
var callbackFunction;
callbackFunction = function(){
var args, res$, i$, to$, err;
res$ = [];
for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) {
res$.push(arguments[i$]);
}
args = res$;
err = args[0];
if (err) {
return reject(err);
}
return resolve(args.slice(1));
};
functionArguments.push(callbackFunction);
return f.apply(self, functionArguments);
});
};
};
out$.cfy = cfy = function(f, options){
var num_args, wrapped;
num_args = f.length;
if (options != null) {
if (options.varargs != null) {
return cfy_varargs(f);
}
if (options.num_args != null) {
num_args = options.num_args;
}
}
wrapped = co.wrap(f);
return function(){
var i$, args, res$, j$, callback;
res$ = [];
for (j$ = 0 < (i$ = arguments.length - 1) ? 0 : (i$ = 0); j$ < i$; ++j$) {
res$.push(arguments[j$]);
}
args = res$; callback = arguments[i$];
if (args.length === num_args && typeof callback === 'function') {
return wrapped.bind(this).apply(null, args).then(callback);
} else {
return wrapped.bind(this).apply(null, slice$.call(args).concat([callback]));
}
};
};
cfy_varargs = function(f){
var wrapped;
wrapped = co.wrap(f);
return function(){
var i$, args, res$, j$, callback;
res$ = [];
for (j$ = 0 < (i$ = arguments.length - 1) ? 0 : (i$ = 0); j$ < i$; ++j$) {
res$.push(arguments[j$]);
}
args = res$; callback = arguments[i$];
if (typeof callback === 'function') {
return wrapped.bind(this).apply(null, args).then(callback);
} else {
return wrapped.bind(this).apply(null, slice$.call(args).concat([callback]));
}
};
};
out$.cfy_node = cfy_node = function(f, options){
var num_args, wrapped, wrapped_cb;
num_args = f.length;
if (options != null) {
if (options.varargs != null) {
return cfy_varargs_node(f);
}
if (options.num_args != null) {
num_args = options.num_args;
}
}
wrapped = co.wrap(f);
wrapped_cb = unthenify(wrapped);
return function(){
var i$, args, res$, j$, callback;
res$ = [];
for (j$ = 0 < (i$ = arguments.length - 1) ? 0 : (i$ = 0); j$ < i$; ++j$) {
res$.push(arguments[j$]);
}
args = res$; callback = arguments[i$];
if (args.length === num_args && typeof callback === 'function') {
return wrapped_cb.bind(this).apply(null, slice$.call(args).concat([callback]));
} else {
return wrapped.bind(this).apply(null, slice$.call(args).concat([callback]));
}
};
};
cfy_varargs_node = function(f){
var wrapped, wrapped_cb;
wrapped = co.wrap(f);
wrapped_cb = unthenify(wrapped);
return function(){
var i$, args, res$, j$, callback;
res$ = [];
for (j$ = 0 < (i$ = arguments.length - 1) ? 0 : (i$ = 0); j$ < i$; ++j$) {
res$.push(arguments[j$]);
}
args = res$; callback = arguments[i$];
if (typeof callback === 'function') {
return wrapped_cb.bind(this).apply(null, slice$.call(args).concat([callback]));
} else {
return wrapped.bind(this).apply(null, slice$.call(args).concat([callback]));
}
};
};
for (k in ref$ = module.exports) {
v = ref$[k];
cfy[k] = v;
}
module.exports = cfy;
}).call(this);