with-query
Version:
Format url with query (string or object), simple and fast, with the power of qs
75 lines (58 loc) • 1.88 kB
JavaScript
import { stringify, parse } from 'qs';
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function parseQuery(q, opt) {
if (typeof q === 'object') {
return q;
}
return q ? parse(q, opt) : {};
}
function withQuery(url, query, opts) {
if (url === void 0) {
url = '';
}
if (!query || typeof query !== 'object' && typeof query !== 'string' || typeof query === 'object' && Object.keys(query).length < 1) {
return url || '';
}
var parseOpt = opts && opts.parseOpt || {};
var stringifyOpt = opts && opts.stringifyOpt || {};
var noHash = opts && opts.noHash || false;
var originalUrl = url || '';
var baseUrl = originalUrl;
var baseQuery = '';
var baseHash = ''; // query
if (originalUrl.indexOf('?') !== -1) {
var parts = baseUrl.split('?');
baseUrl = parts[0];
baseQuery = parts[1];
} // hash
if (originalUrl.indexOf('#') !== -1) {
if (baseUrl.indexOf('#') !== -1) {
var _parts = baseUrl.split('#');
baseUrl = _parts[0];
baseHash = _parts[1];
} else if (baseQuery && baseQuery.indexOf('#') !== -1) {
var _parts2 = baseQuery.split('#');
baseQuery = _parts2[0];
baseHash = _parts2[1];
}
}
var baseQueryObj = parseQuery(baseQuery, parseOpt);
var queryObj = parseQuery(query || '', parseOpt);
var finalQuery = stringify(_extends({}, baseQueryObj, {}, queryObj), stringifyOpt);
return "" + baseUrl + (finalQuery ? "?" + finalQuery : '') + (!noHash && baseHash ? "#" + baseHash : '');
}
export default withQuery;
export { withQuery };