args.js 1.56 KB
"use strict";

/**
 * The purpose of this function is
 * to handle back-backwards compatibility
 * @param {Object} args
 * @returns {{config: {}, cb: *}}
 */
module.exports = function (args) {

    var config = {};
    var cb;

    switch (args.length) {

        case 1 :

            if (isFilesArg(args[0])) {

                config.files = args[0];

            } else if (typeof args[0] === "function") {

                cb = args[0];

            } else {

                config = args[0];

            }

            break;

        case 2 :

            // if second is a function, first MUST be config
            if (typeof args[1] === "function") {

                config = args[0] || {};
                cb = args[1];

            } else {

                if (args[1] === null || args[1] === undefined) {

                    config = args[0];

                } else {

                    // finally, second arg could be a plain object for config
                    config = args[1] || {};

                    if (!config.files) {
                        config.files = args[0];
                    }
                }

            }

            break;

        case 3 :

            config = args[1] || {};

            if (!config.files) {
                config.files = args[0];
            }

            cb = args[2];
    }

    return {
        config: config,
        cb: cb
    };
};

/**
 * Files args were only ever strings or arrays
 * @param arg
 * @returns {*|boolean}
 */
function isFilesArg (arg) {
    return Array.isArray(arg) || typeof arg === "string";
}