From a21bb4c7e8ce45d8d081e38fe275af23259c4e11 Mon Sep 17 00:00:00 2001 From: David Roizenman Date: Fri, 19 Dec 2025 01:57:09 -0800 Subject: [PATCH] fix import order causing Cannot read properties of undefined on dev load --- .../src/internal/client/reactivity/batch.js | 2 +- .../internal/client/reactivity/deriveds.js | 5 ++-- .../src/internal/client/reactivity/effects.js | 2 +- .../src/internal/client/reactivity/sources.js | 5 ++-- .../src/internal/client/reactivity/status.js | 25 +++++++++++++++++++ .../svelte/src/internal/client/runtime.js | 25 +------------------ packages/svelte/src/legacy/legacy-client.js | 3 ++- 7 files changed, 34 insertions(+), 33 deletions(-) create mode 100644 packages/svelte/src/internal/client/reactivity/status.js diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 6f941c7ff2..63667aea12 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -28,9 +28,9 @@ import { is_dirty, is_updating_effect, set_is_updating_effect, - set_signal_status, update_effect } from '../runtime.js'; +import { set_signal_status } from './status.js'; import * as e from '../errors.js'; import { flush_tasks, queue_micro_task } from '../dom/task.js'; import { DEV } from 'esm-env'; diff --git a/packages/svelte/src/internal/client/reactivity/deriveds.js b/packages/svelte/src/internal/client/reactivity/deriveds.js index 2aabe7b83e..a44eba34db 100644 --- a/packages/svelte/src/internal/client/reactivity/deriveds.js +++ b/packages/svelte/src/internal/client/reactivity/deriveds.js @@ -17,14 +17,13 @@ import { import { active_reaction, active_effect, - set_signal_status, update_reaction, increment_write_version, set_active_effect, push_reaction_value, - is_destroying_effect, - update_derived_status + is_destroying_effect } from '../runtime.js'; +import { set_signal_status, update_derived_status } from './status.js'; import { equals, safe_equals } from './equality.js'; import * as e from '../errors.js'; import * as w from '../warnings.js'; diff --git a/packages/svelte/src/internal/client/reactivity/effects.js b/packages/svelte/src/internal/client/reactivity/effects.js index 717fc35006..6d3bb1487b 100644 --- a/packages/svelte/src/internal/client/reactivity/effects.js +++ b/packages/svelte/src/internal/client/reactivity/effects.js @@ -1,4 +1,5 @@ /** @import { ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */ +import { set_signal_status } from './status.js'; import { is_dirty, active_effect, @@ -9,7 +10,6 @@ import { remove_reactions, set_active_reaction, set_is_destroying_effect, - set_signal_status, untrack, untracking } from '../runtime.js'; diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index 76bc58aa7b..1094360cb2 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -6,7 +6,6 @@ import { untracked_writes, get, set_untracked_writes, - set_signal_status, untrack, increment_write_version, update_effect, @@ -16,9 +15,9 @@ import { is_destroying_effect, push_reaction_value, set_is_updating_effect, - is_updating_effect, - update_derived_status + is_updating_effect } from '../runtime.js'; +import { set_signal_status, update_derived_status } from './status.js'; import { equals, safe_equals } from './equality.js'; import { CLEAN, diff --git a/packages/svelte/src/internal/client/reactivity/status.js b/packages/svelte/src/internal/client/reactivity/status.js new file mode 100644 index 0000000000..024285e73a --- /dev/null +++ b/packages/svelte/src/internal/client/reactivity/status.js @@ -0,0 +1,25 @@ +/** @import { Derived, Signal } from '#client' */ +import { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants'; + +const STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN); + +/** + * @param {Signal} signal + * @param {number} status + */ +export function set_signal_status(signal, status) { + signal.f = (signal.f & STATUS_MASK) | status; +} + +/** + * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state. + * @param {Derived} derived + */ +export function update_derived_status(derived) { + // Only mark as MAYBE_DIRTY if disconnected and has dependencies. + if ((derived.f & CONNECTED) !== 0 || derived.deps === null) { + set_signal_status(derived, CLEAN); + } else { + set_signal_status(derived, MAYBE_DIRTY); + } +} diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index 6ea206d17e..44d9c77367 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -55,6 +55,7 @@ import { handle_error } from './error-handling.js'; import { UNINITIALIZED } from '../../constants.js'; import { captured_signals } from './legacy.js'; import { without_reactive_context } from './dom/elements/bindings/shared.js'; +import { set_signal_status, update_derived_status } from './reactivity/status.js'; export let is_updating_effect = false; @@ -724,30 +725,6 @@ export function untrack(fn) { } } -const STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN); - -/** - * @param {Signal} signal - * @param {number} status - * @returns {void} - */ -export function set_signal_status(signal, status) { - signal.f = (signal.f & STATUS_MASK) | status; -} - -/** - * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state. - * @param {Derived} derived - */ -export function update_derived_status(derived) { - // Only mark as MAYBE_DIRTY if disconnected and has dependencies. - if ((derived.f & CONNECTED) !== 0 || derived.deps === null) { - set_signal_status(derived, CLEAN); - } else { - set_signal_status(derived, MAYBE_DIRTY); - } -} - /** * @param {Record} obj * @param {Array} keys diff --git a/packages/svelte/src/legacy/legacy-client.js b/packages/svelte/src/legacy/legacy-client.js index d4a053d1aa..ec355eb4d5 100644 --- a/packages/svelte/src/legacy/legacy-client.js +++ b/packages/svelte/src/legacy/legacy-client.js @@ -3,7 +3,8 @@ import { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.j import { user_pre_effect } from '../internal/client/reactivity/effects.js'; import { mutable_source, set } from '../internal/client/reactivity/sources.js'; import { hydrate, mount, unmount } from '../internal/client/render.js'; -import { active_effect, get, set_signal_status } from '../internal/client/runtime.js'; +import { active_effect, get } from '../internal/client/runtime.js'; +import { set_signal_status } from '../internal/client/reactivity/status.js'; import { flushSync } from '../internal/client/reactivity/batch.js'; import { define_property, is_array } from '../internal/shared/utils.js'; import * as e from '../internal/client/errors.js';