diff --git a/.changeset/beige-plants-laugh.md b/.changeset/beige-plants-laugh.md
new file mode 100644
index 0000000000..d0c771736a
--- /dev/null
+++ b/.changeset/beige-plants-laugh.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: don't set state withing `with_parent` in proxy
diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js
index 4870506699..60eba6aa87 100644
--- a/packages/svelte/src/internal/client/proxy.js
+++ b/packages/svelte/src/internal/client/proxy.js
@@ -93,21 +93,19 @@ export function proxy(value) {
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants
e.state_descriptors_fixed();
}
-
- with_parent(() => {
- var s = sources.get(prop);
-
- if (s === undefined) {
- s = source(descriptor.value, stack);
+ var s = sources.get(prop);
+ if (s === undefined) {
+ s = with_parent(() => {
+ var s = source(descriptor.value, stack);
sources.set(prop, s);
-
if (DEV && typeof prop === 'string') {
tag(s, get_label(path, prop));
}
- } else {
- set(s, descriptor.value, true);
- }
- });
+ return s;
+ });
+ } else {
+ set(s, descriptor.value, true);
+ }
return true;
},
@@ -268,11 +266,8 @@ export function proxy(value) {
// object property before writing to that property.
if (s === undefined) {
if (!has || get_descriptor(target, prop)?.writable) {
- s = with_parent(() => {
- var s = source(undefined, stack);
- set(s, proxy(value));
- return s;
- });
+ s = with_parent(() => source(undefined, stack));
+ set(s, proxy(value));
sources.set(prop, s);
diff --git a/packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/_config.js b/packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/_config.js
new file mode 100644
index 0000000000..2e4a27cf09
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/_config.js
@@ -0,0 +1,5 @@
+import { test } from '../../test';
+
+export default test({
+ async test() {}
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/main.svelte b/packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/main.svelte
new file mode 100644
index 0000000000..7450eff3fa
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/proxy-set-with-parent/main.svelte
@@ -0,0 +1,15 @@
+
+
+