@@ -10,7 +10,7 @@ import {
1010} from '../shared/utils.js' ;
1111import { check_ownership , widen_ownership } from './dev/ownership.js' ;
1212import { source , set , state , batch_onchange } from './reactivity/sources.js' ;
13- import { STATE_SYMBOL , STATE_SYMBOL_METADATA } from './constants.js' ;
13+ import { PROXY_ONCHANGE_SYMBOL , STATE_SYMBOL , STATE_SYMBOL_METADATA } from './constants.js' ;
1414import { UNINITIALIZED } from '../../constants.js' ;
1515import * as e from './errors.js' ;
1616import { get_stack } from './dev/tracing.js' ;
@@ -33,7 +33,13 @@ export function proxy(value, options, parent = null, prev) {
3333 stack = get_stack ( 'CreatedAt' ) ;
3434 }
3535 // if non-proxyable, or is already a proxy, return `value`
36- if ( typeof value !== 'object' || value === null || STATE_SYMBOL in value ) {
36+ if ( typeof value !== 'object' || value === null ) {
37+ return value ;
38+ }
39+
40+ if ( STATE_SYMBOL in value ) {
41+ // @ts -ignore
42+ value [ PROXY_ONCHANGE_SYMBOL ] = options ?. onchange ;
3743 return value ;
3844 }
3945
@@ -237,6 +243,14 @@ export function proxy(value, options, parent = null, prev) {
237243 } ,
238244
239245 set ( target , prop , value , receiver ) {
246+ if ( prop === PROXY_ONCHANGE_SYMBOL && options ?. onchange != null ) {
247+ const old_onchange = options . onchange ;
248+ options . onchange = ( ) => {
249+ old_onchange ( ) ;
250+ value ( ) ;
251+ } ;
252+ return true ;
253+ }
240254 var s = sources . get ( prop ) ;
241255 var has = prop in target ;
242256
0 commit comments