'use strict'  
 | 
  
 | 
import * as utils from '../utils'  
 | 
  
 | 
function encode(val) {  
 | 
    return encodeURIComponent(val)  
 | 
        .replace(/%40/gi, '@')  
 | 
        .replace(/%3A/gi, ':')  
 | 
        .replace(/%24/g, '$')  
 | 
        .replace(/%2C/gi, ',')  
 | 
        .replace(/%20/g, '+')  
 | 
        .replace(/%5B/gi, '[')  
 | 
        .replace(/%5D/gi, ']')  
 | 
}  
 | 
  
 | 
/**  
 | 
 * Build a URL by appending params to the end  
 | 
 *  
 | 
 * @param {string} url The base of the url (e.g., http://www.google.com)  
 | 
 * @param {object} [params] The params to be appended  
 | 
 * @returns {string} The formatted url  
 | 
 */  
 | 
export default function buildURL(url, params) {  
 | 
    /* eslint no-param-reassign:0 */  
 | 
    if (!params) {  
 | 
        return url  
 | 
    }  
 | 
  
 | 
    let serializedParams  
 | 
    if (utils.isURLSearchParams(params)) {  
 | 
        serializedParams = params.toString()  
 | 
    } else {  
 | 
        const parts = []  
 | 
  
 | 
        utils.forEach(params, (val, key) => {  
 | 
            if (val === null || typeof val === 'undefined') {  
 | 
                return  
 | 
            }  
 | 
  
 | 
            if (utils.isArray(val)) {  
 | 
                key = `${key}[]`  
 | 
            } else {  
 | 
                val = [val]  
 | 
            }  
 | 
  
 | 
            utils.forEach(val, (v) => {  
 | 
                if (utils.isDate(v)) {  
 | 
                    v = v.toISOString()  
 | 
                } else if (utils.isObject(v)) {  
 | 
                    v = JSON.stringify(v)  
 | 
                }  
 | 
                parts.push(`${encode(key)}=${encode(v)}`)  
 | 
            })  
 | 
        })  
 | 
  
 | 
        serializedParams = parts.join('&')  
 | 
    }  
 | 
  
 | 
    if (serializedParams) {  
 | 
        const hashmarkIndex = url.indexOf('#')  
 | 
        if (hashmarkIndex !== -1) {  
 | 
            url = url.slice(0, hashmarkIndex)  
 | 
        }  
 | 
  
 | 
        url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams  
 | 
    }  
 | 
  
 | 
    return url  
 | 
}  
 |