| 'use strict'; |
|
|
| var utils = require('./../utils'); |
|
|
| function encode(val) { |
| return encodeURIComponent(val). |
| replace(/%3A/gi, ':'). |
| replace(/%24/g, '$'). |
| replace(/%2C/gi, ','). |
| replace(/%20/g, '+'). |
| replace(/%5B/gi, '['). |
| replace(/%5D/gi, ']'); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| module.exports = function buildURL(url, params, paramsSerializer) { |
| |
| if (!params) { |
| return url; |
| } |
|
|
| var serializedParams; |
| if (paramsSerializer) { |
| serializedParams = paramsSerializer(params); |
| } else 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; |
| }; |
|
|