]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
fix: Revert "fix: avoid normalizing the fullPath (#2189)"
authorEduardo San Martin Morote <posva13@gmail.com>
Thu, 18 Apr 2024 09:55:53 +0000 (11:55 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Thu, 18 Apr 2024 09:57:37 +0000 (11:57 +0200)
This reverts commit c54fc8407bd1944a3b724fbcc7f6fbac5ff45f0f.

Fix vuejs/router#2216

packages/router/__tests__/router.spec.ts
packages/router/src/router.ts

index 3d86e1743293a5913da6ac737de4749a8c9fe402..bd6b186e06ec100b15f8beabd7ef1c24503eeee8 100644 (file)
@@ -534,16 +534,22 @@ describe('Router', () => {
     })
   })
 
-  // https://github.com/vuejs/router/issues/2187
-  it('keeps a consistent value on fullPath when resolving', async () => {
+  it('should be able to resolve a partially updated location', async () => {
     const { router } = await newRouter()
-    const targetLoc = '/search#/?redirect=%2F%3Fid%3D1%23%2Fabc'
-    expect(router.resolve(targetLoc).fullPath).toBe(targetLoc)
-    await router.push(targetLoc)
-    expect(router.currentRoute.value.fullPath).toBe(targetLoc)
-    await router.push('/')
-    await router.replace(targetLoc)
-    expect(router.currentRoute.value.fullPath).toBe(targetLoc)
+    expect(
+      router.resolve({
+        // spread the current location
+        ...router.currentRoute.value,
+        // then update some stuff, creating inconsistencies,
+        query: { a: '1' },
+        hash: '#a',
+      })
+    ).toMatchObject({
+      query: { a: '1' },
+      path: '/',
+      fullPath: '/?a=1#a',
+      hash: '#a',
+    })
   })
 
   describe('navigation cancelled', () => {
index dcf3369d67e712e97ba8b417e522b373add3617e..20ab4d1e2ec4cfcc17cd83bb7942f559737d75fd 100644 (file)
@@ -525,19 +525,13 @@ export function createRouter(options: RouterOptions): Router {
     // we need to run the decoding again
     matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params))
 
-    const fullPath =
-      // @ts-expect-error: the rawLocation doesn't normally have a fullPath
-      // but sometimes it gets noramlized before being passed to resolve and we can
-      // resue it to avoid encoding an unencoded path from the user in order to be closer
-      // to the URL constructor behavior. vuejs/router#2187
-      rawLocation.fullPath ||
-      stringifyURL(
-        stringifyQuery,
-        assign({}, rawLocation, {
-          hash: encodeHash(hash),
-          path: matchedRoute.path,
-        })
-      )
+    const fullPath = stringifyURL(
+      stringifyQuery,
+      assign({}, rawLocation, {
+        hash: encodeHash(hash),
+        path: matchedRoute.path,
+      })
+    )
 
     const href = routerHistory.createHref(fullPath)
     if (__DEV__) {