Skip to content

Commit ce57d8f

Browse files
committed
chore: remove signal field from effects
1 parent 227945d commit ce57d8f

File tree

4 files changed

+31
-17
lines changed

4 files changed

+31
-17
lines changed

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

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import { CLEAN, DERIVED, DESTROYED, DIRTY, MAYBE_DIRTY, UNOWNED } from '../const
33
import {
44
current_reaction,
55
current_effect,
6-
destroy_children,
76
remove_reactions,
87
set_signal_status,
98
mark_reactions,
109
current_skip_reaction,
1110
execute_reaction_fn
1211
} from '../runtime.js';
1312
import { equals, safe_equals } from './equality.js';
13+
import { destroy_effect } from './effects.js';
1414

1515
export let updating_derived = false;
1616

@@ -42,10 +42,11 @@ export function derived(fn) {
4242
}
4343

4444
if (current_reaction !== null && (current_reaction.f & DERIVED) !== 0) {
45-
if (current_reaction.deriveds === null) {
46-
current_reaction.deriveds = [signal];
45+
var current_derived = /** @type {import('#client').Derived<V>} */ (current_reaction);
46+
if (current_derived.deriveds === null) {
47+
current_derived.deriveds = [signal];
4748
} else {
48-
current_reaction.deriveds.push(signal);
49+
current_derived.deriveds.push(signal);
4950
}
5051
}
5152

@@ -64,6 +65,27 @@ export function derived_safe_equal(fn) {
6465
return signal;
6566
}
6667

68+
/**
69+
* @param {import('./types.js').Derived} signal
70+
* @returns {void}
71+
*/
72+
function destroy_derived_children(signal) {
73+
// TODO: should it be possible to create effects in deriveds given they're meant to be pure?
74+
if (signal.effects) {
75+
for (var i = 0; i < signal.effects.length; i += 1) {
76+
destroy_effect(signal.effects[i]);
77+
}
78+
signal.effects = null;
79+
}
80+
81+
if (signal.deriveds) {
82+
for (i = 0; i < signal.deriveds.length; i += 1) {
83+
destroy_derived(signal.deriveds[i]);
84+
}
85+
signal.deriveds = null;
86+
}
87+
}
88+
6789
/**
6890
* @param {import('#client').Derived} derived
6991
* @param {boolean} force_schedule
@@ -72,7 +94,7 @@ export function derived_safe_equal(fn) {
7294
export function update_derived(derived, force_schedule) {
7395
var previous_updating_derived = updating_derived;
7496
updating_derived = true;
75-
destroy_children(derived);
97+
destroy_derived_children(derived);
7698
var value = execute_reaction_fn(derived);
7799
updating_derived = previous_updating_derived;
78100

@@ -98,7 +120,7 @@ export function update_derived(derived, force_schedule) {
98120
* @returns {void}
99121
*/
100122
export function destroy_derived(signal) {
101-
destroy_children(signal);
123+
destroy_derived_children(signal);
102124
remove_reactions(signal, 0);
103125
set_signal_status(signal, DESTROYED);
104126

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ function create_effect(type, fn, sync) {
4646
f: type | DIRTY,
4747
fn,
4848
effects: null,
49-
deriveds: null,
5049
teardown: null,
5150
ctx: current_component_context,
5251
transitions: null

packages/svelte/src/internal/client/reactivity/types.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ export interface Reaction extends Signal {
2323
deps: null | Value[];
2424
/** Effects created inside this signal */
2525
effects: null | Effect[];
26-
/** Deriveds created inside this signal */
27-
deriveds: null | Derived[];
2826
}
2927

3028
export interface Derived<V = unknown> extends Value<V>, Reaction {
3129
/** The derived function */
3230
fn: () => V;
31+
/** Deriveds created inside this signal */
32+
deriveds: null | Derived[];
3333
}
3434

3535
export interface Effect extends Reaction {

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ export function remove_reactions(signal, start_index) {
349349
}
350350

351351
/**
352-
* @param {import('./types.js').Reaction} signal
352+
* @param {import('./types.js').Effect} signal
353353
* @returns {void}
354354
*/
355355
export function destroy_children(signal) {
@@ -359,13 +359,6 @@ export function destroy_children(signal) {
359359
}
360360
signal.effects = null;
361361
}
362-
363-
if (signal.deriveds) {
364-
for (i = 0; i < signal.deriveds.length; i += 1) {
365-
destroy_derived(signal.deriveds[i]);
366-
}
367-
signal.deriveds = null;
368-
}
369362
}
370363

371364
/**

0 commit comments

Comments
 (0)