70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| '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
 | |
| }
 |