From 57ed936937a19a14bf2078d965c61262ad70ccfb Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 18:27:05 -0700 Subject: [PATCH 01/16] fix: run deferred effects in async components --- .changeset/red-spies-mix.md | 5 +++++ .../3-transform/client/transform-client.js | 2 +- .../svelte/src/internal/client/context.js | 3 ++- .../src/internal/client/reactivity/async.js | 19 +++++++++++++++++-- .../svelte/src/internal/client/types.d.ts | 2 ++ 5 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 .changeset/red-spies-mix.md diff --git a/.changeset/red-spies-mix.md b/.changeset/red-spies-mix.md new file mode 100644 index 000000000000..da958ef0dbcd --- /dev/null +++ b/.changeset/red-spies-mix.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: run deferred effects in async components diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 706d2b4e1042..6eb009a27699 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -385,7 +385,7 @@ export function client_component(analysis, options) { .../** @type {ESTree.Statement[]} */ (template.body) ]); - component_block.body.push(b.stmt(b.call(`$.async_body`, b.arrow([], body, true)))); + component_block.body.push(b.stmt(b.call(`$.async_body`, b.arrow([], body, true), b.true))); } else { component_block.body.push( ...state.instance_level_snippets, diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index cad75546d4b4..0ceaf9cf99a0 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -147,6 +147,7 @@ export function push(props, runes = false, fn) { p: component_context, c: null, e: null, + a: false, s: props, x: null, l: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null @@ -168,7 +169,7 @@ export function pop(component) { var context = /** @type {ComponentContext} */ (component_context); var effects = context.e; - if (effects !== null) { + if (effects !== null && context.a === false) { context.e = null; for (var fn of effects) { diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 65d004137fcb..15c3356bd478 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -19,7 +19,7 @@ import { derived_safe_equal, set_from_async_derived } from './deriveds.js'; -import { aborted } from './effects.js'; +import { aborted, create_user_effect } from './effects.js'; /** * @@ -176,10 +176,15 @@ export function unset_context() { /** * @param {() => Promise} fn + * @param {boolean} [is_component] */ -export async function async_body(fn) { +export async function async_body(fn, is_component = false) { var unsuspend = suspend(); var active = /** @type {Effect} */ (active_effect); + var ctx = is_component ? component_context : null; + if (ctx !== null) { + ctx.a = true; + } try { await fn(); @@ -189,5 +194,15 @@ export async function async_body(fn) { } } finally { unsuspend(); + if (ctx !== null && ctx.e !== null) { + var prev = component_context; + var effects = ctx.e; + set_component_context(ctx); + for (var effect of effects) { + create_user_effect(effect); + } + set_component_context(prev); + ctx = prev = null; + } } } diff --git a/packages/svelte/src/internal/client/types.d.ts b/packages/svelte/src/internal/client/types.d.ts index d24218c4d3b0..a999154c8821 100644 --- a/packages/svelte/src/internal/client/types.d.ts +++ b/packages/svelte/src/internal/client/types.d.ts @@ -16,6 +16,8 @@ export type ComponentContext = { c: null | Map; /** deferred effects */ e: null | Array<() => void | (() => void)>; + /** whether the component is suspending */ + a: boolean; /** * props — needed for legacy mode lifecycle functions, and for `createEventDispatcher` * @deprecated remove in 6.0 From e738c06e3bfce8b1b8ab69426f765aea85356c95 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 18:32:08 -0700 Subject: [PATCH 02/16] fix? --- packages/svelte/src/internal/client/context.js | 3 +++ .../svelte/src/internal/client/reactivity/async.js | 12 +++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index 0ceaf9cf99a0..0ee0a45c7340 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -167,6 +167,9 @@ export function push(props, runes = false, fn) { */ export function pop(component) { var context = /** @type {ComponentContext} */ (component_context); + if (context.a) { + return component ?? /** @type {T} */ ({}); + } var effects = context.e; if (effects !== null && context.a === false) { diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 15c3356bd478..521a72dbdd3c 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -2,7 +2,7 @@ import { DESTROYED } from '#client/constants'; import { DEV } from 'esm-env'; -import { component_context, is_runes, set_component_context } from '../context.js'; +import { component_context, is_runes, pop, set_component_context } from '../context.js'; import { get_pending_boundary } from '../dom/blocks/boundary.js'; import { invoke_error_boundary } from '../error-handling.js'; import { @@ -195,14 +195,8 @@ export async function async_body(fn, is_component = false) { } finally { unsuspend(); if (ctx !== null && ctx.e !== null) { - var prev = component_context; - var effects = ctx.e; - set_component_context(ctx); - for (var effect of effects) { - create_user_effect(effect); - } - set_component_context(prev); - ctx = prev = null; + ctx.a = false; + pop(); } } } From 4a7fb0613f1f37f40fc83be9d010a507662755a0 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 18:37:11 -0700 Subject: [PATCH 03/16] add logging --- packages/svelte/src/internal/client/reactivity/async.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 521a72dbdd3c..ca2d701ec04f 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -194,7 +194,8 @@ export async function async_body(fn, is_component = false) { } } finally { unsuspend(); - if (ctx !== null && ctx.e !== null) { + if (ctx !== null && ctx.e !== null && ctx === component_context) { + console.log('hi'); ctx.a = false; pop(); } From 58283de76d77ab602b2f7966ccea17f00a7c4b5e Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:11:10 -0700 Subject: [PATCH 04/16] more logging --- packages/svelte/src/internal/client/reactivity/async.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index ca2d701ec04f..2701712b45d6 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -194,6 +194,7 @@ export async function async_body(fn, is_component = false) { } } finally { unsuspend(); + console.log(ctx); if (ctx !== null && ctx.e !== null && ctx === component_context) { console.log('hi'); ctx.a = false; From 8a7391c654634696870c2eefd23294879e0c3369 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:16:00 -0700 Subject: [PATCH 05/16] tweak --- .../phases/3-transform/client/transform-client.js | 9 +++++++-- packages/svelte/src/internal/client/context.js | 5 +++-- packages/svelte/src/internal/client/reactivity/async.js | 3 --- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 6eb009a27699..4c8be29760e5 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -355,7 +355,11 @@ export function client_component(analysis, options) { component_returned_object.push(b.spread(b.call(b.id('$.legacy_api')))); } - const push_args = [b.id('$$props'), b.literal(analysis.runes)]; + const push_args = [ + b.id('$$props'), + b.literal(analysis.runes), + b.literal(analysis.instance.has_await) + ]; if (dev) push_args.push(b.id(analysis.name)); let component_block = b.block([ @@ -368,7 +372,8 @@ export function client_component(analysis, options) { dev || analysis.needs_context || analysis.reactive_statements.size > 0 || - component_returned_object.length > 0; + component_returned_object.length > 0 || + analysis.instance.has_await; if (analysis.instance.has_await) { if (should_inject_context && component_returned_object.length > 0) { diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index 0ee0a45c7340..2db37bc86c85 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -139,15 +139,16 @@ export function getAllContexts() { /** * @param {Record} props * @param {any} runes + * @param {boolean} [has_async_body] * @param {Function} [fn] * @returns {void} */ -export function push(props, runes = false, fn) { +export function push(props, runes = false, has_async_body = false, fn) { component_context = { p: component_context, c: null, e: null, - a: false, + a: has_async_body, s: props, x: null, l: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 2701712b45d6..5609c06a59aa 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -182,9 +182,6 @@ export async function async_body(fn, is_component = false) { var unsuspend = suspend(); var active = /** @type {Effect} */ (active_effect); var ctx = is_component ? component_context : null; - if (ctx !== null) { - ctx.a = true; - } try { await fn(); From ecdeda2611d16546c62bd273946979489511a45c Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:18:24 -0700 Subject: [PATCH 06/16] fix? --- packages/svelte/src/internal/client/reactivity/async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 5609c06a59aa..ad4c3c11b578 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -192,7 +192,7 @@ export async function async_body(fn, is_component = false) { } finally { unsuspend(); console.log(ctx); - if (ctx !== null && ctx.e !== null && ctx === component_context) { + if (ctx !== null) { console.log('hi'); ctx.a = false; pop(); From 27c5a33ec894a5dbef7d231668fd5f7d737c9bfd Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:21:55 -0700 Subject: [PATCH 07/16] tweak --- packages/svelte/src/internal/client/reactivity/async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index ad4c3c11b578..f5b12c05e864 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -190,12 +190,12 @@ export async function async_body(fn, is_component = false) { invoke_error_boundary(error, active); } } finally { - unsuspend(); console.log(ctx); if (ctx !== null) { console.log('hi'); ctx.a = false; pop(); } + unsuspend(); } } From 5d31d25a64c1b4ad2eae00811532d1a849995815 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:28:17 -0700 Subject: [PATCH 08/16] tweak, more logging --- packages/svelte/src/internal/client/context.js | 4 ++-- packages/svelte/src/internal/client/reactivity/async.js | 9 ++++++--- packages/svelte/src/internal/client/reactivity/batch.js | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index 2db37bc86c85..079fe6f3fe30 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -172,8 +172,8 @@ export function pop(component) { return component ?? /** @type {T} */ ({}); } var effects = context.e; - - if (effects !== null && context.a === false) { + console.log(effects); + if (effects !== null) { context.e = null; for (var fn of effects) { diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index f5b12c05e864..7c6b9fe3ee07 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -167,10 +167,13 @@ export async function* for_await_track_reactivity_loss(iterable) { } } -export function unset_context() { +/** + * @param {boolean} [is_component_body] + */ +export function unset_context(is_component_body = false) { set_active_effect(null); set_active_reaction(null); - set_component_context(null); + if (!is_component_body) set_component_context(null); if (DEV) set_from_async_derived(null); } @@ -190,12 +193,12 @@ export async function async_body(fn, is_component = false) { invoke_error_boundary(error, active); } } finally { + unsuspend(is_component); console.log(ctx); if (ctx !== null) { console.log('hi'); ctx.a = false; pop(); } - unsuspend(); } } diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 82f1de67a98e..407798cdeef3 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -675,7 +675,7 @@ export function suspend() { boundary.update_pending_count(1); if (!pending) batch.increment(); - return function unsuspend() { + return function unsuspend(is_component_body = false) { boundary.update_pending_count(-1); if (!pending) { @@ -685,7 +685,7 @@ export function suspend() { batch.deactivate(); } - unset_context(); + unset_context(is_component_body); }; } From 2690055ed61a9b2fba08c4faba50c99563413681 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Fri, 5 Sep 2025 20:31:05 -0700 Subject: [PATCH 09/16] fix?? --- packages/svelte/src/internal/client/reactivity/async.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 7c6b9fe3ee07..065c7f41ae41 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -194,7 +194,7 @@ export async function async_body(fn, is_component = false) { } } finally { unsuspend(is_component); - console.log(ctx); + console.log(ctx, component_context, ctx === component_context); if (ctx !== null) { console.log('hi'); ctx.a = false; From a7282c9d099b1599c9b2e2ac1c056e46cf357185 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 14:46:28 -0700 Subject: [PATCH 10/16] try this --- packages/svelte/src/internal/client/reactivity/async.js | 4 ++++ packages/svelte/src/internal/client/reactivity/effects.js | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 065c7f41ae41..0575f392a544 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -177,6 +177,8 @@ export function unset_context(is_component_body = false) { if (DEV) set_from_async_derived(null); } +export let running_deferred_effects = false; + /** * @param {() => Promise} fn * @param {boolean} [is_component] @@ -198,7 +200,9 @@ export async function async_body(fn, is_component = false) { if (ctx !== null) { console.log('hi'); ctx.a = false; + running_deferred_effects = true; pop(); + running_deferred_effects = false; } } } diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index 2c9e4db911aa..b92030ba4c5b 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -41,7 +41,7 @@ import { define_property } from '../../shared/utils.js'; import { get_next_sibling } from '../dom/operations.js'; import { component_context, dev_current_component_function, dev_stack } from '../context.js'; import { Batch, schedule_effect } from './batch.js'; -import { flatten } from './async.js'; +import { flatten, running_deferred_effects } from './async.js'; import { without_reactive_context } from '../dom/elements/bindings/shared.js'; /** @@ -207,7 +207,11 @@ export function user_effect(fn) { // Non-nested `$effect(...)` in a component should be deferred // until the component is mounted var flags = /** @type {Effect} */ (active_effect).f; - var defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0; + var defer = + !active_reaction && + (flags & BRANCH_EFFECT) !== 0 && + (flags & EFFECT_RAN) === 0 && + !running_deferred_effects; if (defer) { // Top-level `$effect(...)` in an unmounted component — defer until mount From 0aae872112c569ad02bd050a3a06839d0bfd1881 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 14:55:12 -0700 Subject: [PATCH 11/16] hmm --- .../3-transform/client/transform-client.js | 6 ++--- .../svelte/src/internal/client/context.js | 22 ++++++++++++------- .../src/internal/client/reactivity/async.js | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index 4c8be29760e5..7979df5705f2 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -455,15 +455,15 @@ export function client_component(analysis, options) { // we want the cleanup function for the stores to run as the very last thing // so that it can effectively clean up the store subscription even after the user effects runs if (should_inject_context) { - component_block.body.unshift(b.stmt(b.call('$.push', ...push_args))); + component_block.body.unshift(b.var('$$component', b.call('$.push', ...push_args))); let to_push; if (component_returned_object.length > 0) { - let pop_call = b.call('$.pop', b.id('$$exports')); + let pop_call = b.call('$.pop', b.id('$$component'), b.id('$$exports')); to_push = needs_store_cleanup ? b.var('$$pop', pop_call) : b.return(pop_call); } else { - to_push = b.stmt(b.call('$.pop')); + to_push = b.stmt(b.call('$.pop', b.id('$$component'))); } component_block.body.push(to_push); diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index 079fe6f3fe30..8e99d51719e1 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -141,7 +141,6 @@ export function getAllContexts() { * @param {any} runes * @param {boolean} [has_async_body] * @param {Function} [fn] - * @returns {void} */ export function push(props, runes = false, has_async_body = false, fn) { component_context = { @@ -159,22 +158,29 @@ export function push(props, runes = false, has_async_body = false, fn) { component_context.function = fn; dev_current_component_function = fn; } + + return component_context; } /** * @template {Record} T + * @param {ComponentContext} context * @param {T} [component] * @returns {T} */ -export function pop(component) { - var context = /** @type {ComponentContext} */ (component_context); - if (context.a) { +export function pop(context, component) { + var ctx = /** @type {ComponentContext} */ (component_context); + if (context !== ctx) { + console.log('h'); + return component ?? /** @type {T} */ ({}); + } + if (ctx.a) { return component ?? /** @type {T} */ ({}); } - var effects = context.e; + var effects = ctx.e; console.log(effects); if (effects !== null) { - context.e = null; + ctx.e = null; for (var fn of effects) { create_user_effect(fn); @@ -182,10 +188,10 @@ export function pop(component) { } if (component !== undefined) { - context.x = component; + ctx.x = component; } - component_context = context.p; + component_context = ctx.p; if (DEV) { dev_current_component_function = component_context?.function ?? null; diff --git a/packages/svelte/src/internal/client/reactivity/async.js b/packages/svelte/src/internal/client/reactivity/async.js index 0575f392a544..76570f019f94 100644 --- a/packages/svelte/src/internal/client/reactivity/async.js +++ b/packages/svelte/src/internal/client/reactivity/async.js @@ -201,7 +201,7 @@ export async function async_body(fn, is_component = false) { console.log('hi'); ctx.a = false; running_deferred_effects = true; - pop(); + pop(ctx); running_deferred_effects = false; } } From e11a1afc79a30b99a57dd3b32dae37c54e4c1432 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 14:56:54 -0700 Subject: [PATCH 12/16] tweak --- packages/svelte/src/internal/client/render.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index c5015875a8a3..b7cf77124550 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -219,9 +219,9 @@ function _mount(Component, { target, anchor, props = {}, events, context, intro var anchor_node = anchor ?? target.appendChild(create_text()); branch(() => { + var ctx; if (context) { - push({}); - var ctx = /** @type {ComponentContext} */ (component_context); + ctx = push({}); ctx.c = context; } @@ -243,8 +243,8 @@ function _mount(Component, { target, anchor, props = {}, events, context, intro /** @type {Effect} */ (active_effect).nodes_end = hydrate_node; } - if (context) { - pop(); + if (context && ctx) { + pop(ctx); } }); From 9be2a38590ac64e24becc825653ff260e7daf41b Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 15:01:21 -0700 Subject: [PATCH 13/16] logging --- packages/svelte/src/internal/client/context.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index 8e99d51719e1..6a4797222503 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -175,6 +175,7 @@ export function pop(context, component) { return component ?? /** @type {T} */ ({}); } if (ctx.a) { + console.log('suspended'); return component ?? /** @type {T} */ ({}); } var effects = ctx.e; From 967b799157617c62fe4252b721f2e9c1c572c934 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 15:05:53 -0700 Subject: [PATCH 14/16] more logging --- packages/svelte/src/internal/client/reactivity/effects.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index b92030ba4c5b..ae54b9ae3624 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -212,7 +212,7 @@ export function user_effect(fn) { (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0 && !running_deferred_effects; - + console.log({ defer, flags, component_context }); if (defer) { // Top-level `$effect(...)` in an unmounted component — defer until mount var context = /** @type {ComponentContext} */ (component_context); From d345ecb8b0e165d984e44b00698a772bda6fdcc8 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 15:13:55 -0700 Subject: [PATCH 15/16] more --- packages/svelte/src/internal/client/context.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/svelte/src/internal/client/context.js b/packages/svelte/src/internal/client/context.js index 6a4797222503..8a0e37faa89a 100644 --- a/packages/svelte/src/internal/client/context.js +++ b/packages/svelte/src/internal/client/context.js @@ -179,7 +179,8 @@ export function pop(context, component) { return component ?? /** @type {T} */ ({}); } var effects = ctx.e; - console.log(effects); + console.log('effects', effects); + console.log('context', context); if (effects !== null) { ctx.e = null; From 9373a7ea35aa2f15a9181a6058a3b2da81232307 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 7 Sep 2025 15:22:34 -0700 Subject: [PATCH 16/16] more --- packages/svelte/src/internal/client/reactivity/effects.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index ae54b9ae3624..8abc93974747 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -214,6 +214,7 @@ export function user_effect(fn) { !running_deferred_effects; console.log({ defer, flags, component_context }); if (defer) { + console.log('deferring'); // Top-level `$effect(...)` in an unmounted component — defer until mount var context = /** @type {ComponentContext} */ (component_context); (context.e ??= []).push(fn);