From 8fdb80c2f1a7942bae7ff67c97ece7657648e36a Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Wed, 29 Jan 2025 12:22:34 +0000 Subject: [PATCH] invasive change --- .../src/internal/client/reactivity/effects.js | 18 ------ .../src/internal/client/reactivity/types.d.ts | 2 - .../svelte/src/internal/client/runtime.js | 11 +--- packages/svelte/tests/signals/test.ts | 61 +------------------ 4 files changed, 2 insertions(+), 90 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index 1ccc2b4b61..d014ff793d 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -99,7 +99,6 @@ function create_effect(type, fn, sync, push = true) { var effect = { ctx: component_context, deps: null, - deriveds: null, nodes_start: null, nodes_end: null, f: type | DIRTY, @@ -395,22 +394,6 @@ export function execute_effect_teardown(effect) { } } -/** - * @param {Effect} signal - * @returns {void} - */ -export function destroy_effect_deriveds(signal) { - var deriveds = signal.deriveds; - - if (deriveds !== null) { - signal.deriveds = null; - - for (var i = 0; i < deriveds.length; i += 1) { - destroy_derived(deriveds[i]); - } - } -} - /** * @param {Effect} signal * @param {boolean} remove_dom @@ -468,7 +451,6 @@ export function destroy_effect(effect, remove_dom = true) { } destroy_effect_children(effect, remove_dom && !removed); - destroy_effect_deriveds(effect); remove_reactions(effect, 0); set_signal_status(effect, DESTROYED); diff --git a/packages/svelte/src/internal/client/reactivity/types.d.ts b/packages/svelte/src/internal/client/reactivity/types.d.ts index d992f840b5..5ef0097649 100644 --- a/packages/svelte/src/internal/client/reactivity/types.d.ts +++ b/packages/svelte/src/internal/client/reactivity/types.d.ts @@ -51,8 +51,6 @@ export interface Effect extends Reaction { */ nodes_start: null | TemplateNode; nodes_end: null | TemplateNode; - /** Reactions created inside this signal */ - deriveds: null | Derived[]; /** The effect function */ fn: null | (() => void | (() => void)); /** The teardown function returned from the effect function */ diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 1f8e4b7952..2c53ac8f7b 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -4,7 +4,6 @@ import { define_property, get_descriptors, get_prototype_of, index_of } from '.. import { destroy_block_effect_children, destroy_effect_children, - destroy_effect_deriveds, execute_effect_teardown, unlink_effect } from './reactivity/effects.js'; @@ -580,7 +579,6 @@ export function update_effect(effect) { } else { destroy_effect_children(effect); } - destroy_effect_deriveds(effect); execute_effect_teardown(effect); var teardown = update_reaction(effect); @@ -962,15 +960,8 @@ export function get(signal) { // If the derived is owned by another derived then mark it as unowned // as the derived value might have been referenced in a different context // since and thus its parent might not be its true owner anymore - if ((parent.f & DERIVED) !== 0 && (parent.f & UNOWNED) === 0) { + if ((parent.f & UNOWNED) === 0) { derived.f ^= UNOWNED; - } else { - // Otherwise we can attach the derieved to the parent effect - var parent_effect = /** @type {Effect} */ (parent); - - if (!parent_effect.deriveds?.includes(derived)) { - (parent_effect.deriveds ??= []).push(derived); - } } } } diff --git a/packages/svelte/tests/signals/test.ts b/packages/svelte/tests/signals/test.ts index b062b3d7ef..edb26fba15 100644 --- a/packages/svelte/tests/signals/test.ts +++ b/packages/svelte/tests/signals/test.ts @@ -279,10 +279,6 @@ describe('signals', () => { $.get(c); - // Ensure we're not leaking - assert.equal(a.reactions?.[0], nested.at(-2)); - assert.equal(b.reactions?.[0], nested.at(-1)); - destroy(); assert.equal(a.reactions, null); @@ -511,7 +507,7 @@ describe('signals', () => { set(inner, 2); $.get(a); }); - assert.deepEqual(log, ['inner', 2]); + assert.deepEqual(log, ['outer', 1, 'inner', 2]); destroy(); }; }); @@ -883,59 +879,6 @@ describe('signals', () => { }; }); - test('nested deriveds clean up the relationships when used with untrack', () => { - return () => { - let a = render_effect(() => {}); - - const destroy = effect_root(() => { - a = render_effect(() => { - $.untrack(() => { - const b = derived(() => { - const c = derived(() => {}); - $.untrack(() => { - $.get(c); - }); - }); - $.get(b); - }); - }); - }); - - assert.deepEqual(a.deriveds?.length, 1); - - destroy(); - - assert.deepEqual(a.deriveds, null); - }; - }); - - test('nested deriveds do not connect inside parent deriveds if unused', () => { - return () => { - let a = render_effect(() => {}); - let b: Derived | undefined; - - const destroy = effect_root(() => { - a = render_effect(() => { - $.untrack(() => { - b = derived(() => { - derived(() => {}); - derived(() => {}); - derived(() => {}); - }); - $.get(b); - }); - }); - }); - - assert.deepEqual(a.deriveds?.length, 1); - assert.deepEqual(b?.effects, null); - - destroy(); - - assert.deepEqual(a.deriveds, null); - }; - }); - test('deriveds containing effects work correctly', () => { return () => { let a = render_effect(() => {}); @@ -969,7 +912,6 @@ describe('signals', () => { destroy(); - assert.equal(a.deriveds, null); assert.equal(a.first, null); assert.equal(effects.length, 2); @@ -1013,7 +955,6 @@ describe('signals', () => { destroy(); - assert.equal(a.deriveds, null); assert.equal(a.first, null); assert.equal(effects.length, 2);