File tree Expand file tree Collapse file tree 4 files changed +48
-2
lines changed
tests/runtime-runes/samples/proxy-set-accessor Expand file tree Collapse file tree 4 files changed +48
-2
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' svelte ' : patch
3
+ ---
4
+
5
+ fix: ensure $state proxy invokes set accessor if present
Original file line number Diff line number Diff line change @@ -243,9 +243,14 @@ const state_proxy_handler = {
243
243
}
244
244
}
245
245
246
+ var descriptor = Reflect . getOwnPropertyDescriptor ( target , prop ) ;
247
+
246
248
// Set the new value before updating any signals so that any listeners get the new value
247
- // @ts -ignore
248
- target [ prop ] = value ;
249
+ if ( descriptor ?. set ) {
250
+ descriptor . set . call ( receiver , value ) ;
251
+ } else {
252
+ target [ prop ] = value ;
253
+ }
249
254
250
255
if ( not_has ) {
251
256
// If we have mutated an array directly, we might need to
Original file line number Diff line number Diff line change
1
+ import { flushSync } from 'svelte' ;
2
+ import { test , ok } from '../../test' ;
3
+
4
+ export default test ( {
5
+ html : `<input><p>svelte</p>` ,
6
+ ssrHtml : `<input value="SVELTE"><p>svelte</p>` ,
7
+
8
+ test ( { assert, target } ) {
9
+ const input = target . querySelector ( 'input' ) ;
10
+ ok ( input ) ;
11
+
12
+ const event = new window . Event ( 'input' ) ;
13
+
14
+ input . value = 'SVELTEy' ;
15
+ input . dispatchEvent ( event ) ;
16
+
17
+ flushSync ( ) ;
18
+
19
+ assert . htmlEqual ( target . innerHTML , `<input><p>sveltey</p>` ) ;
20
+ assert . equal ( input . value , 'SVELTEY' ) ;
21
+ }
22
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let text = $state ({
3
+ value: ' svelte' ,
4
+ get uppercase () {
5
+ return this .value .toUpperCase ()
6
+ },
7
+ set uppercase (v ) {
8
+ this .value = v .toLowerCase ()
9
+ }
10
+ })
11
+ </script >
12
+
13
+ <input bind:value ={text .uppercase } />
14
+ <p >{text .value }</p >
You can’t perform that action at this time.
0 commit comments