fix: ownership getting tricked by proxies

pull/13377/head
paoloricciuti 2 years ago
parent 4b7cb9aeae
commit 5fc3d7f576

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: ownership getting tricked by proxies

@ -170,14 +170,13 @@ function add_owner_to_object(object, owner, seen) {
if (metadata) {
// this is a state proxy, add owner directly, if not globally shared
if (metadata.owners !== null) {
if ('owners' in metadata && metadata.owners != null) {
metadata.owners.add(owner);
}
} else if (object && typeof object === 'object') {
if (seen.has(object)) return;
seen.add(object);
if (object[ADD_OWNER]) {
if (ADD_OWNER in object && object[ADD_OWNER]) {
// this is a class with state fields. we put this in a render effect
// so that if state is replaced (e.g. `instance.name = { first, last }`)
// the new state is also co-owned by the caller of `getContext`

@ -0,0 +1,7 @@
import { test } from '../../test';
export default test({
compileOptions: {
dev: true
}
});

@ -0,0 +1,11 @@
<script>
import { setContext, getContext } from "svelte";
setContext("", new Proxy({}, {
get(){
return {}
}
}));
getContext("");
</script>
Loading…
Cancel
Save