added query string parser and functional tools

This commit is contained in:
Gavin McDonald
2018-07-06 16:32:17 -04:00
parent 6e9d4a399c
commit 68f83bfc4b
3 changed files with 305 additions and 3 deletions

View File

@@ -1,3 +1,4 @@
import {mapObj} from './funky.js';
export function noop() {};
@@ -82,3 +83,36 @@ export function rangeInclusive(start, end) {
return range(Math.min(start, end), Math.max(start, end)+1);
}
export function getQueryStringParameters (queryString = document.location.search, separator = '&', assignment = '=') {
let parameters = {};
queryString
.replace(/(^\?)/,'')
.split(separator)
.forEach(pair => {
pair = pair.split(assignment);
parameters[pair[0]] = pair[1];
});
return parameters;
}
export function getQueryStringObj (queryString = document.location.search, separator = '&', assignment = '=') {
return mapObj(getQueryStringParameters(queryString, separator, assignment), parseString);
}
const braced = /^{.*}$/;
const bracketed = /^\[.*\]$/;
export function parseString (str) {
return typeof str !== 'string' ? str :
str.toLowerCase() === 'true' ? true :
str.toLowerCase() === 'false' ? false :
str.toLowerCase() === 'null' ? null :
str.toLowerCase() === 'undefined' ? undefined :
!isNaN(Number(str)) ? Number(str) :
braced.test(str) || bracketed.test(str) ? JSON.parse(decodeURIComponent(str)) :
str;
}