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