Skip to content

Commit 76cb89c

Browse files
authored
fix: allow deletion of $$restProps properties (#12736)
1 parent e66416b commit 76cb89c

File tree

5 files changed

+42
-0
lines changed

5 files changed

+42
-0
lines changed

.changeset/loud-news-deliver.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: allow deletion of $$restProps properties

packages/svelte/src/internal/client/reactivity/props.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ const legacy_rest_props_handler = {
126126
};
127127
}
128128
},
129+
deleteProperty(target, key) {
130+
// Svelte 4 allowed for deletions on $$restProps
131+
if (target.exclude.includes(key)) return false;
132+
target.exclude.push(key);
133+
update(target.version);
134+
return true;
135+
},
129136
has(target, key) {
130137
if (target.exclude.includes(key)) return false;
131138
return key in target.props;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<script>
2+
function prune() {
3+
$$restProps.a
4+
delete $$restProps.a
5+
}
6+
</script>
7+
8+
<button on:click={prune}>delete a</button>
9+
10+
{JSON.stringify($$restProps)}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { flushSync } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
html: `<button>delete a</button>\n{"a":1,"b":2}`,
6+
7+
test({ assert, target }) {
8+
const [btn1] = target.querySelectorAll('button');
9+
10+
btn1.click();
11+
flushSync();
12+
13+
assert.htmlEqual(target.innerHTML, `<button>delete a</button>\n{"b":2}`);
14+
}
15+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script>
2+
import App from "./App.svelte";
3+
</script>
4+
5+
<App a={1} b={2} />

0 commit comments

Comments
 (0)