Skip to content

Commit d42b358

Browse files
committed
guarantee fork
1 parent e247f66 commit d42b358

File tree

7 files changed

+26
-20
lines changed

7 files changed

+26
-20
lines changed

packages/svelte/src/internal/client/dom/blocks/async.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/** @import { Effect, TemplateNode, Value } from '#client' */
2-
2+
/** @import { Fork } from '../../reactivity/forks.js' */
33
import { async_derived } from '../../reactivity/deriveds.js';
44
import { active_fork } from '../../reactivity/forks.js';
55
import { active_effect, schedule_effect } from '../../runtime.js';
@@ -13,15 +13,16 @@ import { capture } from './boundary.js';
1313
export function async(node, expressions, fn) {
1414
// TODO handle hydration
1515

16-
var fork = active_fork;
16+
var fork = /** @type {Fork} */ (active_fork);
1717
var effect = /** @type {Effect} */ (active_effect);
18+
1819
var restore = capture();
1920

2021
Promise.all(expressions.map((fn) => async_derived(fn))).then((result) => {
2122
restore();
2223
fn(node, ...result);
2324

24-
fork?.run(() => {
25+
fork.run(() => {
2526
schedule_effect(effect);
2627
});
2728
});

packages/svelte/src/internal/client/dom/blocks/boundary.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { queue_boundary_micro_task } from '../task.js';
2424
import * as e from '../../../shared/errors.js';
2525
import { DEV } from 'esm-env';
2626
import { from_async_derived, set_from_async_derived } from '../../reactivity/deriveds.js';
27-
import { active_fork, Fork } from '../../reactivity/forks.js';
27+
import { Fork } from '../../reactivity/forks.js';
2828

2929
/**
3030
* @typedef {{

packages/svelte/src/internal/client/dom/blocks/each.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/** @import { EachItem, EachState, Effect, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */
2+
/** @import { Fork } from '../../reactivity/forks.js'; */
23
import {
34
EACH_INDEX_REACTIVE,
45
EACH_IS_ANIMATED,
@@ -266,8 +267,9 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
266267
fallback = branch(() => fallback_fn(anchor));
267268
}
268269
} else {
269-
if (active_fork !== null && should_defer_append()) {
270+
if (should_defer_append()) {
270271
var keys = new Set();
272+
var fork = /** @type {Fork} */ (active_fork);
271273

272274
for (i = 0; i < length; i += 1) {
273275
value = array[i];
@@ -303,11 +305,11 @@ export function each(node, flags, get_collection, get_key, render_fn, fallback_f
303305

304306
for (const [key, item] of state.items) {
305307
if (!keys.has(key)) {
306-
active_fork.skipped_effects.add(item.e);
308+
fork.skipped_effects.add(item.e);
307309
}
308310
}
309311

310-
active_fork?.add_callback(commit);
312+
fork.add_callback(commit);
311313
} else {
312314
commit();
313315
}

packages/svelte/src/internal/client/dom/blocks/if.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/** @import { Effect, TemplateNode } from '#client' */
2+
/** @import { Fork } from '../../reactivity/forks.js'; */
23
import { EFFECT_TRANSPARENT } from '#client/constants';
34
import {
45
hydrate_next,
@@ -112,7 +113,7 @@ export function if_block(node, fn, elseif = false) {
112113
}
113114
}
114115

115-
var defer = active_fork !== null && should_defer_append();
116+
var defer = should_defer_append();
116117
var target = anchor;
117118

118119
if (defer) {
@@ -125,13 +126,15 @@ export function if_block(node, fn, elseif = false) {
125126
}
126127

127128
if (defer) {
129+
var fork = /** @type {Fork} */ (active_fork);
130+
128131
const skipped = condition ? alternate_effect : consequent_effect;
129132
if (skipped !== null) {
130133
// TODO need to do this for other kinds of blocks
131-
active_fork?.skipped_effects.add(skipped);
134+
fork.skipped_effects.add(skipped);
132135
}
133136

134-
active_fork?.add_callback(commit);
137+
fork.add_callback(commit);
135138
} else {
136139
commit();
137140
}

packages/svelte/src/internal/client/dom/blocks/key.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/** @import { Effect, TemplateNode } from '#client' */
2+
/** @import { Fork } from '../../reactivity/forks.js'; */
23
import { UNINITIALIZED } from '../../../../constants.js';
34
import { block, branch, pause_effect } from '../../reactivity/effects.js';
45
import { not_equal, safe_not_equal } from '../../reactivity/equality.js';
@@ -55,7 +56,7 @@ export function key_block(node, get_key, render_fn) {
5556
if (changed(key, (key = get_key()))) {
5657
var target = anchor;
5758

58-
var defer = active_fork !== null && should_defer_append();
59+
var defer = should_defer_append();
5960

6061
if (defer) {
6162
offscreen_fragment = document.createDocumentFragment();
@@ -65,7 +66,7 @@ export function key_block(node, get_key, render_fn) {
6566
pending_effect = branch(() => render_fn(target));
6667

6768
if (defer) {
68-
active_fork?.add_callback(commit);
69+
/** @type {Fork} */ (active_fork).add_callback(commit);
6970
} else {
7071
commit();
7172
}

packages/svelte/src/internal/client/dom/blocks/svelte-component.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/** @import { TemplateNode, Dom, Effect } from '#client' */
2+
/** @import { Fork } from '../../reactivity/forks.js'; */
23
import { EFFECT_TRANSPARENT } from '#client/constants';
34
import { block, branch, pause_effect } from '../../reactivity/effects.js';
45
import { active_fork } from '../../reactivity/forks.js';
@@ -53,7 +54,7 @@ export function component(node, get_component, render_fn) {
5354
block(() => {
5455
if (component === (component = get_component())) return;
5556

56-
var defer = active_fork !== null && should_defer_append();
57+
var defer = should_defer_append();
5758

5859
if (component) {
5960
var target = anchor;
@@ -67,7 +68,7 @@ export function component(node, get_component, render_fn) {
6768
}
6869

6970
if (defer) {
70-
active_fork?.add_callback(commit);
71+
/** @type {Fork} */ (active_fork).add_callback(commit);
7172
} else {
7273
commit();
7374
}

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ export function template_effect(fn, sync = [], async = [], d = derived) {
343343
var parent = /** @type {Effect} */ (active_effect);
344344

345345
if (async.length > 0) {
346-
var fork = active_fork;
346+
var fork = /** @type {Fork} */ (active_fork);
347347
var restore = capture();
348348

349349
Promise.all(async.map((expression) => async_derived(expression))).then((result) => {
@@ -355,11 +355,9 @@ export function template_effect(fn, sync = [], async = [], d = derived) {
355355

356356
var effect = create_template_effect(fn, [...sync.map(d), ...result]);
357357

358-
if (fork !== null) {
359-
fork.run(() => {
360-
schedule_effect(effect);
361-
});
362-
}
358+
fork.run(() => {
359+
schedule_effect(effect);
360+
});
363361
});
364362
} else {
365363
create_template_effect(fn, sync.map(d));

0 commit comments

Comments
 (0)