File tree Expand file tree Collapse file tree 5 files changed +50
-5
lines changed
tests/runtime-runes/samples Expand file tree Collapse file tree 5 files changed +50
-5
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' svelte ' : patch
3
+ ---
4
+
5
+ fix: improve internal signal dependency checking logic
Original file line number Diff line number Diff line change @@ -349,15 +349,21 @@ function execute_signal_fn(signal) {
349
349
if ( current_dependencies !== null ) {
350
350
let i ;
351
351
if ( dependencies !== null ) {
352
- const dep_length = dependencies . length ;
352
+ // Include any dependencies up until the current_dependencies_index.
353
+ const full_dependencies =
354
+ current_dependencies_index === 0
355
+ ? dependencies
356
+ : dependencies . slice ( 0 , current_dependencies_index ) . concat ( current_dependencies ) ;
357
+ const dep_length = full_dependencies . length ;
353
358
// If we have more than 16 elements in the array then use a Set for faster performance
354
359
// TODO: evaluate if we should always just use a Set or not here?
355
- const current_dependencies_set = dep_length > 16 ? new Set ( current_dependencies ) : null ;
360
+ const current_dependencies_set = dep_length > 16 ? new Set ( full_dependencies ) : null ;
361
+
356
362
for ( i = current_dependencies_index ; i < dep_length ; i ++ ) {
357
- const dependency = dependencies [ i ] ;
363
+ const dependency = full_dependencies [ i ] ;
358
364
if (
359
365
( current_dependencies_set !== null && ! current_dependencies_set . has ( dependency ) ) ||
360
- ! current_dependencies . includes ( dependency )
366
+ ! full_dependencies . includes ( dependency )
361
367
) {
362
368
remove_consumer ( signal , dependency , false ) ;
363
369
}
Original file line number Diff line number Diff line change @@ -33,7 +33,7 @@ export default test({
33
33
34
34
assert . htmlEqual (
35
35
target . innerHTML ,
36
- `<p>test costs $1</p><p>test 2 costs $2000 </p><p>test costs $1</p><p>test 2 costs $2000 </p><button>add</button><button>change</button><button>reload</button>`
36
+ `<p>test costs $1</p><p>test 2 costs $2 </p><p>test costs $1</p><p>test 2 costs $2 </p><button>add</button><button>change</button><button>reload</button>`
37
37
) ;
38
38
}
39
39
} ) ;
Original file line number Diff line number Diff line change
1
+ import { flushSync } from 'svelte' ;
2
+ import { test } from '../../test' ;
3
+
4
+ export default test ( {
5
+ html : `<p>0 - 0</p><button>+</button` ,
6
+
7
+ async test ( { assert, target } ) {
8
+ const [ btn1 ] = target . querySelectorAll ( 'button' ) ;
9
+
10
+ flushSync ( ( ) => {
11
+ btn1 . click ( ) ;
12
+ } ) ;
13
+
14
+ assert . htmlEqual ( target . innerHTML , `<p>1 - 1</p><button>+</button` ) ;
15
+
16
+ flushSync ( ( ) => {
17
+ btn1 . click ( ) ;
18
+ } ) ;
19
+
20
+ assert . htmlEqual ( target . innerHTML , `<p>2 - 2</p><button>+</button` ) ;
21
+ }
22
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let x = $state ({a: 0 , b: 0 });
3
+ let count = 0 ;
4
+ </script >
5
+
6
+ <p >{x .a } - {x .b }</p >
7
+
8
+ <button onclick ={() => {
9
+ const a = ++ count ;
10
+ x = {a , b: a };
11
+ }}>+</button >
12
+
You can’t perform that action at this time.
0 commit comments