
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
'use strict';
const JSON5 = require('json5');
const specialValues = {
null: null,
true: true,
false: false,
};
function parseQuery(query) {
if (query.substr(0, 1) !== '?') {
throw new Error(
"A valid query string passed to parseQuery should begin with '?'"
);
}
query = query.substr(1);
if (!query) {
return {};
}
if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {
return JSON5.parse(query);
}
const queryArgs = query.split(/[,&]/g);
const result = {};
queryArgs.forEach((arg) => {
const idx = arg.indexOf('=');
if (idx >= 0) {
let name = arg.substr(0, idx);
let value = decodeURIComponent(arg.substr(idx + 1));
// eslint-disable-next-line no-prototype-builtins
if (specialValues.hasOwnProperty(value)) {
value = specialValues[value];
}
if (name.substr(-2) === '[]') {
name = decodeURIComponent(name.substr(0, name.length - 2));
if (!Array.isArray(result[name])) {
result[name] = [];
}
result[name].push(value);
} else {
name = decodeURIComponent(name);
result[name] = value;
}
} else {
if (arg.substr(0, 1) === '-') {
result[decodeURIComponent(arg.substr(1))] = false;
} else if (arg.substr(0, 1) === '+') {
result[decodeURIComponent(arg.substr(1))] = true;
} else {
result[decodeURIComponent(arg)] = true;
}
}
});
return result;
}
module.exports = parseQuery;
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970'use strict';const JSON5 = require('json5');const specialValues = {null: null,true: true,false: false,};function parseQuery(query) {if (query.substr(0, 1) !== '?') {throw new Error("A valid query string passed to parseQuery should begin with '?'");}query = query.substr(1);if (!query) {return {};}if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {return JSON5.parse(query);}const queryArgs = query.split(/[,&]/g);const result = {};queryArgs.forEach((arg) => {const idx = arg.indexOf('=');if (idx >= 0) {let name = arg.substr(0, idx);let value = decodeURIComponent(arg.substr(idx + 1));// eslint-disable-next-line no-prototype-builtinsif (specialValues.hasOwnProperty(value)) {value = specialValues[value];}if (name.substr(-2) === '[]') {name = decodeURIComponent(name.substr(0, name.length - 2));if (!Array.isArray(result[name])) {result[name] = [];}result[name].push(value);} else {name = decodeURIComponent(name);result[name] = value;}} else {if (arg.substr(0, 1) === '-') {result[decodeURIComponent(arg.substr(1))] = false;} else if (arg.substr(0, 1) === '+') {result[decodeURIComponent(arg.substr(1))] = true;} else {result[decodeURIComponent(arg)] = true;}}});return result;}module.exports = parseQuery;