Skip to content

Commit 99c0c48

Browse files
committed
fix: ensure legacy run utility does not cause cycles
1 parent f579a3b commit 99c0c48

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

.changeset/moody-pugs-tan.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: ensure legacy run utility does not cause cycles

packages/svelte/src/legacy/legacy-client.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */
2+
import { DIRTY, MAYBE_DIRTY } from '../internal/client/constants.js';
23
import { user_pre_effect } from '../internal/client/reactivity/effects.js';
34
import { mutable_source, set } from '../internal/client/reactivity/sources.js';
45
import { hydrate, mount, unmount } from '../internal/client/render.js';
5-
import { component_context, flush_sync, get } from '../internal/client/runtime.js';
6+
import {
7+
active_effect,
8+
component_context,
9+
flush_sync,
10+
get,
11+
set_signal_status
12+
} from '../internal/client/runtime.js';
613
import { lifecycle_outside_component } from '../internal/shared/errors.js';
714
import { define_property, is_array } from '../internal/shared/utils.js';
815

@@ -169,7 +176,14 @@ class Svelte4Component {
169176
* @returns {void}
170177
*/
171178
export function run(fn) {
172-
user_pre_effect(fn);
179+
user_pre_effect(() => {
180+
fn();
181+
var effect = /** @type {import('#client').Effect} */ (active_effect);
182+
// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour
183+
if ((effect.f & DIRTY) !== 0) {
184+
set_signal_status(effect, MAYBE_DIRTY);
185+
}
186+
});
173187
}
174188

175189
/**

0 commit comments

Comments
 (0)