File tree Expand file tree Collapse file tree 5 files changed +53
-3
lines changed Expand file tree Collapse file tree 5 files changed +53
-3
lines changed Original file line number Diff line number Diff line change 11# svelte
22
3+ ## 5.34.9
4+
5+ ### Patch Changes
6+
7+ - fix: ensure unowned deriveds can add themselves as reactions while connected ([ #16249 ] ( https://github.com/sveltejs/svelte/pull/16249 ) )
8+
39## 5.34.8
410
511### Patch Changes
Original file line number Diff line number Diff line change 22 "name" : " svelte" ,
33 "description" : " Cybernetically enhanced web apps" ,
44 "license" : " MIT" ,
5- "version" : " 5.34.8 " ,
5+ "version" : " 5.34.9 " ,
66 "type" : " module" ,
77 "types" : " ./types/index.d.ts" ,
88 "engines" : {
Original file line number Diff line number Diff line change @@ -325,7 +325,12 @@ export function update_reaction(reaction) {
325325 reaction . deps = deps = new_deps ;
326326 }
327327
328- if ( ! skip_reaction ) {
328+ if (
329+ ! skip_reaction ||
330+ // Deriveds that already have reactions can cleanup, so we still add them as reactions
331+ ( ( flags & DERIVED ) !== 0 &&
332+ /** @type {import('#client').Derived } */ ( reaction ) . reactions !== null )
333+ ) {
329334 for ( i = skipped_deps ; i < deps . length ; i ++ ) {
330335 ( deps [ i ] . reactions ??= [ ] ) . push ( reaction ) ;
331336 }
Original file line number Diff line number Diff line change 44 * The current version, as set in package.json.
55 * @type {string }
66 */
7- export const VERSION = '5.34.8 ' ;
7+ export const VERSION = '5.34.9 ' ;
88export const PUBLIC_VERSION = '5' ;
Original file line number Diff line number Diff line change @@ -114,6 +114,45 @@ describe('signals', () => {
114114 } ;
115115 } ) ;
116116
117+ test ( 'unowned deriveds are not added as reactions but trigger effects' , ( ) => {
118+ var obj = state < any > ( undefined ) ;
119+
120+ class C1 {
121+ #v = state ( 0 ) ;
122+ get v ( ) {
123+ return $ . get ( this . #v) ;
124+ }
125+ set v ( v : number ) {
126+ set ( this . #v, v ) ;
127+ }
128+ }
129+
130+ return ( ) => {
131+ let d = derived ( ( ) => $ . get ( obj ) ?. v || '-' ) ;
132+
133+ const log : number [ ] = [ ] ;
134+ assert . equal ( $ . get ( d ) , '-' ) ;
135+
136+ let destroy = effect_root ( ( ) => {
137+ render_effect ( ( ) => {
138+ log . push ( $ . get ( d ) ) ;
139+ } ) ;
140+ } ) ;
141+
142+ set ( obj , new C1 ( ) ) ;
143+ flushSync ( ) ;
144+ assert . equal ( $ . get ( d ) , '-' ) ;
145+ $ . get ( obj ) . v = 1 ;
146+ flushSync ( ) ;
147+ assert . equal ( $ . get ( d ) , 1 ) ;
148+ assert . deepEqual ( log , [ '-' , 1 ] ) ;
149+ destroy ( ) ;
150+ // ensure we're not leaking reactions
151+ assert . equal ( obj . reactions , null ) ;
152+ assert . equal ( d . reactions , null ) ;
153+ } ;
154+ } ) ;
155+
117156 test ( 'derived from state' , ( ) => {
118157 const log : number [ ] = [ ] ;
119158
You can’t perform that action at this time.
0 commit comments