|                                                                     |  | '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}
 |