From 8bce9ea16e4b525237187ebc57a288fe6d5d1cf0 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Thu, 22 Aug 2024 13:46:30 +0200 Subject: [PATCH] fix: allow deleting non-existent `$$restProps` properties fixes #12966 --- .changeset/light-tigers-smoke.md | 5 +++++ packages/svelte/src/internal/client/reactivity/props.js | 2 +- .../runtime-legacy/samples/rest-props-delete/App.svelte | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/light-tigers-smoke.md diff --git a/.changeset/light-tigers-smoke.md b/.changeset/light-tigers-smoke.md new file mode 100644 index 0000000000..c26824a41c --- /dev/null +++ b/.changeset/light-tigers-smoke.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: allow deleting non-existent `$$restProps` properties diff --git a/packages/svelte/src/internal/client/reactivity/props.js b/packages/svelte/src/internal/client/reactivity/props.js index b7200f6f96..fa2ea6dd7c 100644 --- a/packages/svelte/src/internal/client/reactivity/props.js +++ b/packages/svelte/src/internal/client/reactivity/props.js @@ -130,7 +130,7 @@ const legacy_rest_props_handler = { }, deleteProperty(target, key) { // Svelte 4 allowed for deletions on $$restProps - if (target.exclude.includes(key)) return false; + if (target.exclude.includes(key)) return true; target.exclude.push(key); update(target.version); return true; diff --git a/packages/svelte/tests/runtime-legacy/samples/rest-props-delete/App.svelte b/packages/svelte/tests/runtime-legacy/samples/rest-props-delete/App.svelte index 37825576e5..e7857f28e9 100644 --- a/packages/svelte/tests/runtime-legacy/samples/rest-props-delete/App.svelte +++ b/packages/svelte/tests/runtime-legacy/samples/rest-props-delete/App.svelte @@ -2,6 +2,8 @@ function prune() { $$restProps.a delete $$restProps.a + // should be idempotent + delete $$restProps.a }