})
})
+ it('decodes empty values as null', () => {
+ expect(parseQuery('e&b&c=a')).toEqual({
+ e: null,
+ b: null,
+ c: 'a',
+ })
+ })
+
+ it('decodes empty values as null in arrays', () => {
+ expect(parseQuery('e&e&e=a')).toEqual({
+ e: [null, null, 'a'],
+ })
+ })
+
it('decodes array values in query', () => {
expect(parseQuery('e=%25&e=%22')).toEqual({
e: ['%', '"'],
const hasLeadingIM = search[0] === '?'
const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&')
for (let i = 0; i < searchParams.length; ++i) {
- let [key, value] = searchParams[i].split('=')
+ let [key, rawValue] = searchParams[i].split('=') as [
+ string,
+ string | undefined
+ ]
key = decode(key)
// avoid decoding null
- value = value && decode(value)
+ let value = rawValue == null ? null : decode(rawValue)
if (key in query) {
// an extra variable for ts types
let currentValue = query[key]