Skip to content

Commit 802bfca

Browse files
authored
fix: improve props spreading logic (#10574)
1 parent 96eae28 commit 802bfca

File tree

5 files changed

+39
-8
lines changed

5 files changed

+39
-8
lines changed

.changeset/three-papayas-buy.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: improve props spreading logic

packages/svelte/src/internal/client/render.js

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2337,14 +2337,7 @@ const rest_props_handler = {
23372337
return key in target.props;
23382338
},
23392339
ownKeys(target) {
2340-
/** @type {Array<string | symbol>} */
2341-
const keys = [];
2342-
2343-
for (let key in target.props) {
2344-
if (!target.exclude.includes(key)) keys.push(key);
2345-
}
2346-
2347-
return keys;
2340+
return Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));
23482341
}
23492342
};
23502343

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
let { ...props } = $props();
3+
</script>
4+
5+
<button {...props}>
6+
Hello world
7+
</button>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
async test({ assert, target }) {
5+
assert.htmlEqual(
6+
target.innerHTML,
7+
`<button data-attr="">Hello world</button><button data-attr="">Hello world</button>`
8+
);
9+
}
10+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<script>
2+
import Button from "./Button.svelte";
3+
4+
const attrs = {};
5+
6+
Object.defineProperty(attrs, "data-attr", {
7+
value: "",
8+
enumerable: true
9+
});
10+
</script>
11+
12+
<button {...attrs}>
13+
Hello world
14+
</button>
15+
16+
<Button {...attrs} />

0 commit comments

Comments
 (0)