From 4dd2fbfeb486800a7d5fbc384eb567c3c6532f41 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Mon, 9 Aug 2021 09:48:39 +0200 Subject: [PATCH] fix(query): empty object with custom stringify --- __tests__/router.spec.ts | 19 +++++++++++++++---- src/router.ts | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/__tests__/router.spec.ts b/__tests__/router.spec.ts index 6bf25b089..6522f74e2 100644 --- a/__tests__/router.spec.ts +++ b/__tests__/router.spec.ts @@ -149,17 +149,28 @@ describe('Router', () => { }) it('allows to customize parseQuery', async () => { - const parseQuery = jest.fn() + const parseQuery = jest.fn(_ => ({})) const { router } = await newRouter({ parseQuery }) - router.resolve('/foo?bar=baz') + const to = router.resolve('/foo?bar=baz') expect(parseQuery).toHaveBeenCalledWith('bar=baz') + expect(to.query).toEqual({}) }) it('allows to customize stringifyQuery', async () => { - const stringifyQuery = jest.fn() + const stringifyQuery = jest.fn(_ => '') const { router } = await newRouter({ stringifyQuery }) - router.resolve({ query: { foo: 'bar' } }) + const to = router.resolve({ query: { foo: 'bar' } }) expect(stringifyQuery).toHaveBeenCalledWith({ foo: 'bar' }) + expect(to.query).toEqual({ foo: 'bar' }) + expect(to.fullPath).toBe('/') + }) + + it('creates an empty query with no query', async () => { + const stringifyQuery = jest.fn(_ => '') + const { router } = await newRouter({ stringifyQuery }) + const to = router.resolve({ hash: '#a' }) + expect(stringifyQuery).not.toHaveBeenCalled() + expect(to.query).toEqual({}) }) it('merges meta properties from parent to child', async () => { diff --git a/src/router.ts b/src/router.ts index 28b858037..65900c664 100644 --- a/src/router.ts +++ b/src/router.ts @@ -542,7 +542,7 @@ export function createRouter(options: RouterOptions): Router { // https://github.com/vuejs/vue-router-next/issues/328#issuecomment-649481567 stringifyQuery === originalStringifyQuery ? normalizeQuery(rawLocation.query) - : (rawLocation.query as LocationQuery), + : ((rawLocation.query || {}) as LocationQuery), }, matchedRoute, {