invasive change

pull/15137/head
Dominic Gannaway 2 years ago
parent 3b85e10ad2
commit 8fdb80c2f1

@ -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);

@ -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 */

@ -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);
}
}
}
}

@ -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<void> | 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);

Loading…
Cancel
Save