]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
fix: parse empty keys as null
authorEduardo San Martin Morote <posva13@gmail.com>
Wed, 5 Feb 2020 11:41:05 +0000 (12:41 +0100)
committerEduardo San Martin Morote <posva13@gmail.com>
Wed, 5 Feb 2020 13:08:29 +0000 (14:08 +0100)
__tests__/parseQuery.spec.ts
src/history/common.ts

index fd7988addd6b62d104ed01ac3fac4cffd7ad3808..bb1863b9843fd81165236ca1d3bf9bb9c7198053 100644 (file)
@@ -9,6 +9,20 @@ describe('parseQuery', () => {
     })
   })
 
+  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: ['%', '"'],
index 8cc83b43c302baed79fd8f8e6a713ee4170207e2..edade69650994fcd443b2dbea2b39e9b3ef5be0a 100644 (file)
@@ -172,10 +172,13 @@ export function parseQuery(search: string): HistoryQuery {
   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]