]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(reactivity): ensure add/set on reactive collections return the proxy (#2534)
authorThorsten Lünborg <t.luenborg@googlemail.com>
Fri, 27 Nov 2020 19:16:00 +0000 (20:16 +0100)
committerGitHub <noreply@github.com>
Fri, 27 Nov 2020 19:16:00 +0000 (14:16 -0500)
fix #2530

packages/reactivity/__tests__/collections/Map.spec.ts
packages/reactivity/__tests__/collections/Set.spec.ts
packages/reactivity/__tests__/collections/WeakMap.spec.ts
packages/reactivity/__tests__/collections/WeakSet.spec.ts
packages/reactivity/src/collectionHandlers.ts

index 00fd6539d8fe4ff7fbf7a4358a907d0967d3a131..27ee5b103fb8028cb05f535f8a963342da314475 100644 (file)
@@ -467,5 +467,11 @@ describe('reactivity/collections', () => {
       proxy.clear()
       expect(spy).toBeCalledTimes(1)
     })
+
+    it('should return proxy from Map.set call', () => {
+      const map = reactive(new Map())
+      const result = map.set('a', 'a')
+      expect(result).toBe(map)
+    })
   })
 })
index 9e76bce8838f88a808c65f7a6fbfec2b2a36f9c9..b5936c07101776d8e2af9fe06d31a28a1e75eec0 100644 (file)
@@ -454,5 +454,11 @@ describe('reactivity/collections', () => {
       proxy.clear()
       expect(spy).toBeCalledTimes(1)
     })
+
+    it('should return proxy from Set.add call', () => {
+      const set = reactive(new Set())
+      const result = set.add('a')
+      expect(result).toBe(set)
+    })
   })
 })
index e3dde72e618a22cf155dc3f8173952b30b6a2a81..31613a06572127f26ca0d1cc27e0924a9fefbf97 100644 (file)
@@ -133,5 +133,10 @@ describe('reactivity/collections', () => {
       map.set(key, NaN)
       expect(mapSpy).toHaveBeenCalledTimes(1)
     })
+    it('should return proxy from WeakMap.set call', () => {
+      const map = reactive(new WeakMap())
+      const result = map.set({}, 'a')
+      expect(result).toBe(map)
+    })
   })
 })
index 182298cf4b0efebe0ecb635b4ef8affc8f1e3a69..01512b0eeefda7784d8d31bf40f340b4f98433fc 100644 (file)
@@ -99,5 +99,11 @@ describe('reactivity/collections', () => {
       expect(observed.has(value)).toBe(true)
       expect(set.has(value)).toBe(false)
     })
+
+    it('should return proxy from WeakSet.add call', () => {
+      const set = reactive(new WeakSet())
+      const result = set.add({})
+      expect(result).toBe(set)
+    })
   })
 })
index 913cd71f82b23326ef4be31b2b0dfe6d890fed79..e43d3ac59fd23cf693f843b9ba345bcc9dc7c8c8 100644 (file)
@@ -76,11 +76,11 @@ function add(this: SetTypes, value: unknown) {
   const target = toRaw(this)
   const proto = getProto(target)
   const hadKey = proto.has.call(target, value)
-  const result = target.add(value)
+  target.add(value)
   if (!hadKey) {
     trigger(target, TriggerOpTypes.ADD, value, value)
   }
-  return result
+  return this
 }
 
 function set(this: MapTypes, key: unknown, value: unknown) {
@@ -97,13 +97,13 @@ function set(this: MapTypes, key: unknown, value: unknown) {
   }
 
   const oldValue = get.call(target, key)
-  const result = target.set(key, value)
+  target.set(key, value)
   if (!hadKey) {
     trigger(target, TriggerOpTypes.ADD, key, value)
   } else if (hasChanged(value, oldValue)) {
     trigger(target, TriggerOpTypes.SET, key, value, oldValue)
   }
-  return result
+  return this
 }
 
 function deleteEntry(this: CollectionTypes, key: unknown) {