@@ -11,11 +11,13 @@ export const IS_REACTIVE = Symbol("reactive");
11
11
export const ORIGINAL_REF = Symbol ( "original_ref" ) ;
12
12
export const CONNECTED_SIGNAL = Symbol ( "connected_signal" ) ;
13
13
14
- export function isReactive < T extends object > ( input : T ) : input is Reactive < T > {
15
- return IS_REACTIVE in input ;
14
+ export function isReactive < T > ( input : T ) : input is Reactive < T > {
15
+ return input instanceof Object && IS_REACTIVE in input ;
16
16
}
17
17
18
- export function getConnectedSignal < T extends object > ( input : T | Reactive < T > ) : Signal < T > {
18
+ export function getConnectedSignal < T extends object > (
19
+ input : T | Reactive < T > ,
20
+ ) : Signal < T > {
19
21
if ( isReactive ( input ) ) {
20
22
return input [ CONNECTED_SIGNAL ] ;
21
23
}
@@ -116,7 +118,10 @@ export function makeMapMethodsReactive<T extends Map<unknown, unknown>, S>(
116
118
*
117
119
* When set gets in any way updated `propagate` method gets called on provided signal.
118
120
*/
119
- export function makeSetMethodsReactive < T extends Set < unknown > , S > ( set : T , signal : Signal < S > ) : T {
121
+ export function makeSetMethodsReactive < T extends Set < unknown > , S > (
122
+ set : T ,
123
+ signal : Signal < S > ,
124
+ ) : T {
120
125
Object . defineProperties ( set , {
121
126
[ IS_REACTIVE ] : { value : true } ,
122
127
[ ORIGINAL_REF ] : { value : set } ,
@@ -248,19 +253,19 @@ export function makeArrayMethodsReactive<T extends Array<unknown>, S>(
248
253
*
249
254
* @returns new object, not direct reference to given object
250
255
*/
251
- export function makeObjectPropertiesReactive < T , S > ( object : T , signal : Signal < S > , watchObjectIndex = false ) : T {
256
+ export function makeObjectPropertiesReactive < T , S > (
257
+ object : T ,
258
+ signal : Signal < S > ,
259
+ watchObjectIndex = false ,
260
+ ) : T {
252
261
if ( typeof object !== "object" ) {
253
262
throw new Error ( "parameter object needs to be typeof 'object'" ) ;
254
263
}
255
264
256
265
if ( Array . isArray ( object ) ) {
257
266
makeArrayMethodsReactive ( object , signal ) ;
258
267
if ( ! watchObjectIndex ) return object ;
259
- } else if (
260
- ! Object . getOwnPropertyDescriptor ( object , IS_REACTIVE ) &&
261
- ! Object . getOwnPropertyDescriptor ( object , ORIGINAL_REF ) &&
262
- ! Object . getOwnPropertyDescriptor ( object , CONNECTED_SIGNAL )
263
- ) {
268
+ } else if ( ! isReactive ( object ) ) {
264
269
Object . defineProperties ( object , {
265
270
[ IS_REACTIVE ] : { value : true } ,
266
271
[ ORIGINAL_REF ] : { value : object } ,
0 commit comments