urlAppendQuery.js

import objectToQueryString from './urlObjectToQueryString';
import queryStringToObject from './urlQueryStringToObject';

/**
 * Merge the query parameters into given url.
 * @function string.urlAppendQuery
 * @param {String} url - Original url.
 * @param {Object} query - Key-value pairs query object to be merged into the url.
 * @returns {String}
 */
function appendQuery(url, query) {
    if (!query) {
        return url;
    }

    const posQM = url.indexOf('?');

    if (posQM === -1) {
        if (typeof query !== 'string') {
            query = objectToQueryString(query);
        }

        return query ? url + '?' + query : url;
    }

    const [base, qs] = url.split('?', 2);
    const previousObj = queryStringToObject(qs);
    const newObj = typeof query === 'string' ? queryStringToObject(query) : query;

    const newQs = objectToQueryString({ ...previousObj, ...newObj });

    return newQs ? base + '?' + newQs : url;
}

export default appendQuery;