From 150b303cba59e0697c5fc2907c036d27b56d64d7 Mon Sep 17 00:00:00 2001 From: gershon <32156293+gimelg@users.noreply.github.com> Date: Sun, 10 Sep 2023 18:10:32 -0400 Subject: [PATCH] non-enumerable (immutable) methods on Map/Set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit when an immer object includes a Map/Set, the mutating methods are replaced with ones that prevent mutation outside of the procude function.   to prevent cluttering the console when inspecting the Map/Set, these methods are set to non-enumerable. this behavior also matches that of the original methods that are replaced. --- src/utils/common.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/utils/common.ts b/src/utils/common.ts index 1ebb5b5f..b71d4406 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -188,7 +188,12 @@ export function freeze(obj: T, deep?: boolean): T export function freeze(obj: any, deep: boolean = false): T { if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj if (getArchtype(obj) > 1 /* Map or Set */) { - obj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any + Object.defineProperties(obj, { + set: {value: dontMutateFrozenCollections as any}, + add: {value: dontMutateFrozenCollections as any}, + clear: {value: dontMutateFrozenCollections as any}, + delete: {value: dontMutateFrozenCollections as any} + }) } Object.freeze(obj) if (deep) each(obj, (_key, value) => freeze(value, true), true)