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