From 2896739fe0ae758d6ac162f13de1058100559f33 Mon Sep 17 00:00:00 2001 From: Dominic Gannaway Date: Tue, 2 Jan 2024 13:06:04 +0000 Subject: [PATCH] alternative approach --- .../svelte/src/internal/client/runtime.js | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 8704324453..6089e4168b 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -349,8 +349,6 @@ function execute_signal_fn(signal) { if (current_dependencies !== null) { let i; - remove_consumer(signal, current_dependencies_index, false); - if (dependencies !== null && current_dependencies_index > 0) { dependencies.length = current_dependencies_index + current_dependencies.length; for (i = 0; i < current_dependencies.length; i++) { @@ -365,11 +363,12 @@ function execute_signal_fn(signal) { if (!current_skip_consumer) { for (i = current_dependencies_index; i < dependencies.length; i++) { const dependency = dependencies[i]; + const consumers = dependency.c; - if (dependency.c === null) { + if (consumers === null) { dependency.c = [signal]; - } else { - dependency.c.push(signal); + } else if (consumers[consumers.length - 1] !== signal) { + consumers.push(signal); } } } @@ -841,10 +840,16 @@ export function get(signal) { !(unowned && current_effect !== null) ) { current_dependencies_index++; - } else if (current_dependencies === null) { - current_dependencies = [signal]; - } else { - current_dependencies.push(signal); + } else if ( + dependencies === null || + current_dependencies_index === 0 || + dependencies[current_dependencies_index - 1] !== signal + ) { + if (current_dependencies === null) { + current_dependencies = [signal]; + } else if (signal !== current_dependencies[current_dependencies.length - 1]) { + current_dependencies.push(signal); + } } if ( current_untracked_writes !== null &&