You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.5 KiB
69 lines
1.5 KiB
'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 |
|
} |
|
|
|
var serializedParams |
|
if (utils.isURLSearchParams(params)) { |
|
serializedParams = params.toString() |
|
} else { |
|
var parts = [] |
|
|
|
utils.forEach(params, function serialize(val, key) { |
|
if (val === null || typeof val === 'undefined') { |
|
return |
|
} |
|
|
|
if (utils.isArray(val)) { |
|
key = key + '[]' |
|
} else { |
|
val = [val] |
|
} |
|
|
|
utils.forEach(val, function parseValue(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) { |
|
var hashmarkIndex = url.indexOf('#') |
|
if (hashmarkIndex !== -1) { |
|
url = url.slice(0, hashmarkIndex) |
|
} |
|
|
|
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams |
|
} |
|
|
|
return url |
|
}
|
|
|