From 1694e384e9bdb8f0cfc80c82e0bbbc3d10be446d Mon Sep 17 00:00:00 2001 From: xujiongbo Date: Thu, 30 Mar 2017 16:08:44 +0800 Subject: [PATCH 1/2] make a copy when query param value is an array --- src/util/query.js | 25 +++++++++++-------------- test/unit/specs/query.spec.js | 9 +++++++++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/util/query.js b/src/util/query.js index ad2b93e2c..8f37dc189 100644 --- a/src/util/query.js +++ b/src/util/query.js @@ -19,21 +19,18 @@ export function resolveQuery ( query: ?string, extraQuery: Dictionary = {} ): Dictionary { - if (query) { - let parsedQuery - try { - parsedQuery = parseQuery(query) - } catch (e) { - process.env.NODE_ENV !== 'production' && warn(false, e.message) - parsedQuery = {} - } - for (const key in extraQuery) { - parsedQuery[key] = extraQuery[key] - } - return parsedQuery - } else { - return extraQuery + let parsedQuery + try { + parsedQuery = parseQuery(query) + } catch (e) { + process.env.NODE_ENV !== 'production' && warn(false, e.message) + parsedQuery = {} + } + for (const key in extraQuery) { + const val = extraQuery[key] + parsedQuery[key] = Array.isArray(val) ? val.slice() : val } + return parsedQuery } function parseQuery (query: string): Dictionary { diff --git a/test/unit/specs/query.spec.js b/test/unit/specs/query.spec.js index f5760452a..040e45541 100644 --- a/test/unit/specs/query.spec.js +++ b/test/unit/specs/query.spec.js @@ -9,6 +9,15 @@ describe('Query utils', () => { baz: 'qux' })) }) + + it('should make a copy when param value is an array', () => { + const arr = ['bar'] + const query = resolveQuery('', { foo: arr }) + arr.push('baz') + expect(JSON.stringify(query)).toBe(JSON.stringify({ + foo: ['bar'] + })) + }) }) describe('stringifyQuery', () => { From 60fc031c839b120d8af510b3212960e744261af2 Mon Sep 17 00:00:00 2001 From: xujiongbo Date: Thu, 30 Mar 2017 16:15:17 +0800 Subject: [PATCH 2/2] fix param type --- src/util/query.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/query.js b/src/util/query.js index 8f37dc189..e5bd1a4eb 100644 --- a/src/util/query.js +++ b/src/util/query.js @@ -21,7 +21,7 @@ export function resolveQuery ( ): Dictionary { let parsedQuery try { - parsedQuery = parseQuery(query) + parsedQuery = parseQuery(query || '') } catch (e) { process.env.NODE_ENV !== 'production' && warn(false, e.message) parsedQuery = {}