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