| 21 | * @returns {string} The formatted url |
| 22 | */ |
| 23 | export default function buildURL(url, params) { |
| 24 | /*eslint no-param-reassign:0*/ |
| 25 | if (!params) { |
| 26 | return url |
| 27 | } |
| 28 | |
| 29 | var serializedParams |
| 30 | if (utils.isURLSearchParams(params)) { |
| 31 | serializedParams = params.toString() |
| 32 | } else { |
| 33 | var parts = [] |
| 34 | |
| 35 | utils.forEach(params, function serialize(val, key) { |
| 36 | if (val === null || typeof val === 'undefined') { |
| 37 | return |
| 38 | } |
| 39 | |
| 40 | if (utils.isArray(val)) { |
| 41 | key = key + '[]' |
| 42 | } else { |
| 43 | val = [val] |
| 44 | } |
| 45 | |
| 46 | utils.forEach(val, function parseValue(v) { |
| 47 | if (utils.isDate(v)) { |
| 48 | v = v.toISOString() |
| 49 | } else if (utils.isObject(v)) { |
| 50 | v = JSON.stringify(v) |
| 51 | } |
| 52 | parts.push(encode(key) + '=' + encode(v)) |
| 53 | }) |
| 54 | }) |
| 55 | |
| 56 | serializedParams = parts.join('&') |
| 57 | } |
| 58 | |
| 59 | if (serializedParams) { |
| 60 | var hashmarkIndex = url.indexOf('#') |
| 61 | if (hashmarkIndex !== -1) { |
| 62 | url = url.slice(0, hashmarkIndex) |
| 63 | } |
| 64 | |
| 65 | url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams |
| 66 | } |
| 67 | |
| 68 | return url |
| 69 | } |