@@ -7,11 +7,12 @@ import {
7
7
} from '../../../constants.js' ;
8
8
import { get_descriptor , is_function } from '../utils.js' ;
9
9
import { mutable_source , set , source } from './sources.js' ;
10
- import { derived } from './deriveds.js' ;
10
+ import { derived , derived_safe_equal } from './deriveds.js' ;
11
11
import { get , is_signals_recorded , untrack , update } from '../runtime.js' ;
12
12
import { safe_equals } from './equality.js' ;
13
13
import { inspect_fn } from '../dev/inspect.js' ;
14
14
import * as e from '../errors.js' ;
15
+ import { LEGACY_DERIVED_PROP } from '../constants.js' ;
15
16
16
17
/**
17
18
* @param {((value?: number) => number) } fn
@@ -236,18 +237,28 @@ export function prop(props, key, flags, fallback) {
236
237
if ( setter ) setter ( prop_value ) ;
237
238
}
238
239
239
- var getter = runes
240
- ? ( ) => {
241
- var value = /** @type {V } */ ( props [ key ] ) ;
242
- if ( value === undefined ) return get_fallback ( ) ;
243
- fallback_dirty = true ;
244
- return value ;
245
- }
246
- : ( ) => {
247
- var value = /** @type {V } */ ( props [ key ] ) ;
248
- if ( value !== undefined ) fallback_value = /** @type {V } */ ( undefined ) ;
249
- return value === undefined ? fallback_value : value ;
250
- } ;
240
+ /** @type {() => V } */
241
+ var getter ;
242
+ if ( runes ) {
243
+ getter = ( ) => {
244
+ var value = /** @type {V } */ ( props [ key ] ) ;
245
+ if ( value === undefined ) return get_fallback ( ) ;
246
+ fallback_dirty = true ;
247
+ return value ;
248
+ } ;
249
+ } else {
250
+ // Svelte 4 did not trigger updates when a primitive value was updated to the same value.
251
+ // Replicate that behavior through using a derived
252
+ var derived_getter = ( immutable ? derived : derived_safe_equal ) (
253
+ ( ) => /** @type {V } */ ( props [ key ] )
254
+ ) ;
255
+ derived_getter . f |= LEGACY_DERIVED_PROP ;
256
+ getter = ( ) => {
257
+ var value = get ( derived_getter ) ;
258
+ if ( value !== undefined ) fallback_value = /** @type {V } */ ( undefined ) ;
259
+ return value === undefined ? fallback_value : value ;
260
+ } ;
261
+ }
251
262
252
263
// easy mode — prop is never written to
253
264
if ( ( flags & PROPS_IS_UPDATED ) === 0 ) {
0 commit comments