forked from Mazuh/query-string-extractor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
query-string-extractor.js
32 lines (30 loc) · 1.05 KB
/
query-string-extractor.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const reduce = require('lodash/reduce');
exports.extractQueryParams = (search=window.location.search) => {
return reduce(search, (state, char, index) => {
if (index === (search.length - 1) && (state.reading === 'value' || state.buffer.value)) {
const result = {
...state.result,
[state.buffer.key]: state.buffer.value + char,
};
return { result };
} if (char === '&' || char === '?') {
const buffer = { key: '', value: '' };
const reading = 'key';
const result = char === '&' ? {
...state.result,
[state.buffer.key]: state.buffer.value,
} : {};
return { ...state, buffer, reading, result };
} else if (char === '=') {
const buffer = { ...state.buffer, value: '' };
const reading = 'value';
return { ...state, buffer, reading };
} else {
const buffer = {
...state.buffer,
[state.reading]: state.buffer[state.reading] + char,
};
return { ...state, buffer };
}
}, { reading: 'key', buffer: {}, result: {} }).result || {};
};