Path: blob/master/node_modules/axios/lib/helpers/buildURL.js
1126 views
'use strict';12var utils = require('./../utils');34function encode(val) {5return encodeURIComponent(val).6replace(/%3A/gi, ':').7replace(/%24/g, '$').8replace(/%2C/gi, ',').9replace(/%20/g, '+').10replace(/%5B/gi, '[').11replace(/%5D/gi, ']');12}1314/**15* Build a URL by appending params to the end16*17* @param {string} url The base of the url (e.g., http://www.google.com)18* @param {object} [params] The params to be appended19* @returns {string} The formatted url20*/21module.exports = function buildURL(url, params, paramsSerializer) {22/*eslint no-param-reassign:0*/23if (!params) {24return url;25}2627var serializedParams;28if (paramsSerializer) {29serializedParams = paramsSerializer(params);30} else if (utils.isURLSearchParams(params)) {31serializedParams = params.toString();32} else {33var parts = [];3435utils.forEach(params, function serialize(val, key) {36if (val === null || typeof val === 'undefined') {37return;38}3940if (utils.isArray(val)) {41key = key + '[]';42} else {43val = [val];44}4546utils.forEach(val, function parseValue(v) {47if (utils.isDate(v)) {48v = v.toISOString();49} else if (utils.isObject(v)) {50v = JSON.stringify(v);51}52parts.push(encode(key) + '=' + encode(v));53});54});5556serializedParams = parts.join('&');57}5859if (serializedParams) {60var hashmarkIndex = url.indexOf('#');61if (hashmarkIndex !== -1) {62url = url.slice(0, hashmarkIndex);63}6465url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;66}6768return url;69};707172