diff --git a/src/util/query.js b/src/util/query.js index ad2b93e2c..e5bd1a4eb 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', () => {