nodulator
Version:
Complete NodeJS Framework for Restfull APIs
51 lines (50 loc) • 1.65 kB
JavaScript
// Generated by LiveScript 1.4.0
(function(){
var ref$, first, keys, values, findIndex, map, isType, slice$ = [].slice, toString$ = {}.toString;
ref$ = require('prelude-ls'), first = ref$.first, keys = ref$.keys, values = ref$.values, findIndex = ref$.findIndex, map = ref$.map, isType = ref$.isType;
module.exports = function(){
var i$, types, f;
types = 0 < (i$ = arguments.length - 1) ? slice$.call(arguments, 0, i$) : (i$ = 0, []), f = arguments[i$];
types = map(function(it){
switch (false) {
case !isType('String', it):
return {
type: it
};
case !isType('Object', it):
return import$({
type: first(keys(it))
}, first(values(it)));
}
})(
types);
return function(){
var args, resArgs;
args = slice$.call(arguments);
resArgs = map(function(it){
var argIdx, ref$;
argIdx = findIndex(function(arg){
return toString$.call(arg).slice(8, -1) === it.type;
})(
args);
switch (false) {
case argIdx == null:
return ref$ = args[argIdx], delete args[argIdx], ref$;
case !(argIdx == null && it.optional != null):
return null;
case !(argIdx == null && it['default'] != null):
return it['default'];
default:
throw new Error("No arguments of type: " + it.type);
}
})(
types);
return f.apply(this, resArgs);
};
};
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
}).call(this);