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