UNPKG

function-as

Version:

Pass functions as if they had, one or more, constant args

40 lines (35 loc) 987 B
Function.prototype.asfirst = function (...dargs) { return function (...args) { fillUndefs(dargs, args, false); return this(...dargs, ...args.splice(dargs.length)); }.bind(this); }; Function.prototype.aslast = function (...dargs) { return function (...args) { fillUndefs(dargs, args, true); var dlen = dargs.length; return this(...(args.splice( Math.max(0, args.length - dlen), dlen) && args), ...dargs); }.bind(this); }; Function.prototype.as = function (fargs, largs) { fargs = fargs || []; largs = largs || []; return this.asfirst(...fargs).aslast(...largs); }; function fillUndefs(dargs, args, last) { let undef = dargs.indexOf(undefined); let aindex; while (undef >= 0) { if (undef < args.length) { aindex = last ? undef + Math.max(args.length - dargs.length, 0) : undef; dargs[undef] = args[aindex]; undef = dargs.indexOf(undefined); } else break; } } module.exports = true;