|
|
@@ -1,4 +1,10 @@
|
|
|
-import { toRaw, toReactive, toReadonly } from './reactive'
|
|
|
+import {
|
|
|
+ isReadonly,
|
|
|
+ isShallow,
|
|
|
+ toRaw,
|
|
|
+ toReactive,
|
|
|
+ toReadonly,
|
|
|
+} from './reactive'
|
|
|
import {
|
|
|
ITERATE_KEY,
|
|
|
MAP_KEY_ITERATE_KEY,
|
|
|
@@ -72,8 +78,10 @@ function size(target: IterableCollections, isReadonly = false) {
|
|
|
return Reflect.get(target, 'size', target)
|
|
|
}
|
|
|
|
|
|
-function add(this: SetTypes, value: unknown) {
|
|
|
- value = toRaw(value)
|
|
|
+function add(this: SetTypes, value: unknown, _isShallow = false) {
|
|
|
+ if (!_isShallow && !isShallow(value) && !isReadonly(value)) {
|
|
|
+ value = toRaw(value)
|
|
|
+ }
|
|
|
const target = toRaw(this)
|
|
|
const proto = getProto(target)
|
|
|
const hadKey = proto.has.call(target, value)
|
|
|
@@ -84,8 +92,10 @@ function add(this: SetTypes, value: unknown) {
|
|
|
return this
|
|
|
}
|
|
|
|
|
|
-function set(this: MapTypes, key: unknown, value: unknown) {
|
|
|
- value = toRaw(value)
|
|
|
+function set(this: MapTypes, key: unknown, value: unknown, _isShallow = false) {
|
|
|
+ if (!_isShallow && !isShallow(value) && !isReadonly(value)) {
|
|
|
+ value = toRaw(value)
|
|
|
+ }
|
|
|
const target = toRaw(this)
|
|
|
const { has, get } = getProto(target)
|
|
|
|
|
|
@@ -263,8 +273,12 @@ function createInstrumentations() {
|
|
|
return size(this as unknown as IterableCollections)
|
|
|
},
|
|
|
has,
|
|
|
- add,
|
|
|
- set,
|
|
|
+ add(this: SetTypes, value: unknown) {
|
|
|
+ return add.call(this, value, true)
|
|
|
+ },
|
|
|
+ set(this: MapTypes, key: unknown, value: unknown) {
|
|
|
+ return set.call(this, key, value, true)
|
|
|
+ },
|
|
|
delete: deleteEntry,
|
|
|
clear,
|
|
|
forEach: createForEach(false, true),
|