Skip to content

Commit e28095f

Browse files
committed
create sources when reading proxy properties inside deriveds
1 parent 1513642 commit e28095f

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

packages/svelte/src/internal/client/proxy.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { effect_active, get, set, increment, source } from './runtime.js';
1+
import { effect_active, get, set, increment, source, updating_derived } from './runtime.js';
22
import { get_descriptor, is_array } from './utils.js';
33

44
/** @typedef {{ p: StateObject | null; s: Map<string | symbol, import('./types.js').SourceSignal<any>>; v: import('./types.js').SourceSignal<number>; a: boolean }} Metadata */
@@ -73,7 +73,7 @@ const handler = {
7373
// but only if it's an own property and not a prototype property
7474
if (
7575
s === undefined &&
76-
effect_active() &&
76+
(effect_active() || updating_derived) &&
7777
(!(prop in target) || get_descriptor(target, prop)?.writable)
7878
) {
7979
s = source(wrap(target[prop], receiver));

packages/svelte/src/internal/client/runtime.js

+5
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ export let current_block = null;
8787
export let current_component_context = null;
8888
export let is_ssr = false;
8989

90+
export let updating_derived = false;
91+
9092
/**
9193
* @param {boolean} ssr
9294
* @returns {void}
@@ -661,7 +663,10 @@ export async function tick() {
661663
* @returns {void}
662664
*/
663665
function update_derived(signal, force_schedule) {
666+
const previous_updating_derived = updating_derived;
667+
updating_derived = true;
664668
const value = execute_signal_fn(signal);
669+
updating_derived = previous_updating_derived;
665670
const status =
666671
current_skip_consumer || (current_effect === null && (signal.f & UNOWNED) !== 0)
667672
? DIRTY

0 commit comments

Comments
 (0)