quanyawei
2024-07-04 1e71dd86f6d0c4fc7e5143600d4bc4b50992a2a7
uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js
New file
@@ -0,0 +1,69 @@
'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
}