Argle

Argle is a very small argument shifting library for JavaScript which makes it easy to accept optional parameters before the end of your arguments list. It works great against things like destructuring in ES6, but is still usable from within ES5 versions of JavaScript.
Installation
Argle lives on npm, so just install it via the command line and you're good to go. All other dependencies will be pulled automatically.
$ npm install --save argle
Usage
The API is super simple, there's a single function shift/3
:
argle.shift(argumentsArray, [ optionalDefaultValues | optionalOptionsObject ], detectionFunction);
Examples
function myFunction(optionalArgument1, optionalArgument2, callbackFunction) {
}
function myFunction(optionalArgument1, optionalArgument2, callbackFunction) {
if (isFunction(optionalArgument1)) {
callbackFunction = optionalArgument1;
optionalArgument2 = undefined;
optionalArgument1 = undefined;
}
else if (isFunction(optionalArgument2)) {
callbackFunction = optionalArgument2;
optionalArgument2 = undefined;
}
}
function myFunction(optionalArgument1 = {}, optionalArgument2 = {}, callbackFunction) {
}
function myFunction(optionalArgument1, optionalArgument2, callbackFunction) {
let args1 = argle.shift([ optionalArgument1, optionalArgument2, callbackFunction ], isFunction);
let args2 = argle.shift([ optionalArgument1, optionalArgument2, callbackFunction ], [ 1, 2 ], isFunction);
let args3 = argle.shift([ optionalArgument1, optionalArgument2, callbackFunction ], [ {} ], isFunction);
let args4 = argle.shift(arguments, { count: 3 }, isFunction);
}
function myFunction(...argList) {
let optionalArgument1, optionalArgument2, callbackFunction, opts = {
count: 3,
defaults: [ {}, {} ]
};
[ optionalArgument1, optionalArgument2, callbackFunction ] = argle.shift(argList, opts, isFunction);
}
function myFunction(optionalArgument1, optionalArgument2, callbackFunction1, callbackFunction2) {
return argle.shift([ optionalArgument1, optionalArgument2, callbackFunction1, callbackFunction2 ], { match: 2 }, isFunction);
}