Skip to content

Instantly share code, notes, and snippets.

@jonathan-fulton
Created June 15, 2017 16:48
Show Gist options
  • Save jonathan-fulton/167dc8833b9058eafc5cdebc3a2609a9 to your computer and use it in GitHub Desktop.
Save jonathan-fulton/167dc8833b9058eafc5cdebc3a2609a9 to your computer and use it in GitHub Desktop.
build-url: the good way
function buildUrl(url, options) {
const baseUrl = _getBaseUrl(url);
const opts = _getOptions(url, options);
if (!opts) {
return baseUrl;
}
urlWithPath = _appendPath(baseUrl, opts.path);
urlWithPathAndQueryParams = _appendQueryParams(urlWithPath, opts.queryParams)
urlWithPathQueryParamsAndHash = _appendHash(urlWithPathAndQueryParams, opts.hash);
return urlWithPathQueryParamsAndHash;
};
function _getBaseUrl(url) {
if (url === null || typeof(url) === 'object') {
return '';
}
return url;
}
function _getOptions(url, options) {
if (typeof(url) === 'object') {
return url;
}
return options;
}
function _appendPath(baseUrl, path) {
if (!path) {
return baseUrl;
}
return baseUrl += '/' + path;
}
function _appendQueryParams(urlWithPath, queryParams) {
if (!queryParams) {
return urlWithPath
}
const keyValueStrings = Object.keys(queryParams).map(key => {
return `${key}=${queryParams[key]}`;
});
const joinedKeyValueStrings = keyValueStrings.join('&');
return `${urlWithPath}?${joinedKeyValueStrings}`;
}
function _appendHash(urlWithPathAndQueryParams, hash) {
if (!hash) {
return urlWithPathAndQueryParams;
}
return `${urlWithPathAndQueryParams}#${hash}`;
}
@jonathan-fulton
Copy link
Author

Refactored version of main file from build-url module: https://github.com/steverydz/build-url/blob/master/src/build-url.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment