lib/lmd_common.js
function (configA, configB, flagsNames, isMasterConfig) {
    // Apply Flags
    flagsNames.forEach(function (optionsName) {
        // if master -> B
        if (typeof configB[optionsName] === "undefined") {
            return;
        }

        if (isMasterConfig) {
            configA[optionsName] = configB[optionsName];
        } else {
            // if A literal B array -> B
            if (configB[optionsName] instanceof Array && !(configA[optionsName] instanceof Array) ) {
                configA[optionsName] = configB[optionsName];
            } else if (configB[optionsName] instanceof Array && configA[optionsName] instanceof Array) {
                // if A array B array -> A concat B
                configA[optionsName] = configA[optionsName].concat(configB[optionsName]);
            } else {
                // if A literal B literal -> union
                // if A array B literal -> A
                configA[optionsName] = configA[optionsName] || configB[optionsName];
            }
            // else {}
        }
    });
}
function (configA, configB, flagsNames, isMasterConfig) {
    // Apply Flags
    flagsNames.forEach(function (optionsName) {
        // if master -> B
        if (typeof configB[optionsName] === "undefined") {
            return;
        }

        if (isMasterConfig) {
            configA[optionsName] = configB[optionsName];
        } else {
            // if A literal B array -> B
            if (configB[optionsName] instanceof Array && !(configA[optionsName] instanceof Array) ) {
                configA[optionsName] = configB[optionsName];
            } else if (configB[optionsName] instanceof Array && configA[optionsName] instanceof Array) {
                // if A array B array -> A concat B
                configA[optionsName] = configA[optionsName].concat(configB[optionsName]);
            } else {
                // if A literal B literal -> union
                // if A array B literal -> A
                configA[optionsName] = configA[optionsName] || configB[optionsName];
            }
            // else {}
        }
    });
}
function ( configA , configB , flagsNames , isMasterConfig ) { // Apply Flags flagsNames . forEach ( function ( optionsName ) { // if master -> B if ( typeof configB [ optionsName ] === "undefined" ) { return ; } if ( isMasterConfig ) { configA [ optionsName ] = configB [ optionsName ] ; } else { // if A literal B array -> B if ( configB [ optionsName ] instanceof Array && ! ( configA [ optionsName ] instanceof Array ) ) { configA [ optionsName ] = configB [ optionsName ] ; } else if ( configB [ optionsName ] instanceof Array && configA [ optionsName ] instanceof Array ) { // if A array B array -> A concat B configA [ optionsName ] = configA [ optionsName ] . concat ( configB [ optionsName ] ) ; } else { // if A literal B literal -> union // if A array B literal -> A configA [ optionsName ] = configA [ optionsName ] || configB [ optionsName ] ; } // else {} } } ) ; }
Merges configs flags

@param {Object}   configA
@param {Object}   configB
@param {String[]} flagsNames
@param {Boolean}  isMasterConfig
Merges configs flags