From 7fa69152e952b26c6655a3ee3775b0f90050e5d3 Mon Sep 17 00:00:00 2001 From: Matt Zabriskie Date: Fri, 20 Nov 2015 12:17:14 -0700 Subject: [PATCH] Restoring buildURL --- lib/helpers/buildURL.js | 68 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lib/helpers/buildURL.js diff --git a/lib/helpers/buildURL.js b/lib/helpers/buildURL.js new file mode 100644 index 0000000..65f2091 --- /dev/null +++ b/lib/helpers/buildURL.js @@ -0,0 +1,68 @@ +'use strict'; + +var utils = require('./../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 + */ +module.exports = function buildURL(url, params, paramsSerializer) { + if (!params) { + return url; + } + + var serializedParams; + if (paramsSerializer) { + serializedParams = paramsSerializer(params); + } + else { + var parts = []; + + utils.forEach(params, function (val, key) { + if (val === null || typeof val === 'undefined') { + return; + } + + if (utils.isArray(val)) { + key = key + '[]'; + } + + if (!utils.isArray(val)) { + val = [val]; + } + + utils.forEach(val, function (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) { + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +}; + -- GitLab