@@ -75,18 +75,50 @@ const createStoreObservable = (signInResource: SignInResource) => {
75
75
const wrapSignInWithObservable = ( signIn : SignInResource ) : ObservableSignInResource => {
76
76
const observable = createStoreObservable ( signIn ) ;
77
77
78
- return new Proxy ( signIn , {
78
+ // Create a new object that extends the signIn resource with the observable method
79
+ const wrappedSignIn = Object . create ( signIn ) ;
80
+
81
+ // Add the observable method directly to the object
82
+ Object . defineProperty ( wrappedSignIn , 'observable' , {
83
+ value : observable ,
84
+ writable : false ,
85
+ enumerable : true ,
86
+ configurable : false
87
+ } ) ;
88
+
89
+ // Also use a Proxy to ensure all other properties are properly forwarded
90
+ return new Proxy ( wrappedSignIn , {
79
91
get ( target , prop ) {
80
92
if ( prop === 'observable' ) {
81
93
return observable ;
82
94
}
83
- return ( target as any ) [ prop ] ;
95
+ // Forward to the original signIn object for all other properties
96
+ return ( target ) [ prop ] ?? ( signIn as any ) [ prop ] ;
84
97
} ,
85
98
has ( target , prop ) {
86
99
if ( prop === 'observable' ) {
87
100
return true ;
88
101
}
89
- return prop in target ;
102
+ return prop in target || prop in signIn ;
103
+ } ,
104
+ ownKeys ( target ) {
105
+ // Include 'observable' in the list of own keys
106
+ const keys = [ ...Object . getOwnPropertyNames ( target ) , ...Object . getOwnPropertyNames ( signIn ) ] ;
107
+ if ( ! keys . includes ( 'observable' ) ) {
108
+ keys . push ( 'observable' ) ;
109
+ }
110
+ return keys ;
111
+ } ,
112
+ getOwnPropertyDescriptor ( target , prop ) {
113
+ if ( prop === 'observable' ) {
114
+ return {
115
+ value : observable ,
116
+ writable : false ,
117
+ enumerable : true ,
118
+ configurable : false
119
+ } ;
120
+ }
121
+ return Object . getOwnPropertyDescriptor ( target , prop ) || Object . getOwnPropertyDescriptor ( signIn , prop ) ;
90
122
}
91
123
} ) as ObservableSignInResource ;
92
124
} ;
@@ -134,8 +166,10 @@ export const useSignIn = () => {
134
166
}
135
167
136
168
const createProxy = < T > ( target : 'signIn' | 'setActive' ) : T => {
169
+ const proxyTarget = target === 'signIn' ? { observable : ( ) => ( { } ) } : { } ;
170
+
137
171
return new Proxy (
138
- { } ,
172
+ proxyTarget ,
139
173
{
140
174
get ( _ , prop ) {
141
175
// Handle the observable property for the proxy as well
@@ -186,6 +220,24 @@ export const useSignIn = () => {
186
220
// Return true for all other properties to indicate they exist on the proxy
187
221
return true ;
188
222
} ,
223
+ ownKeys ( _ ) {
224
+ // For signIn proxy, include 'observable' in enumerable keys
225
+ if ( target === 'signIn' ) {
226
+ return [ 'observable' ] ;
227
+ }
228
+ return [ ] ;
229
+ } ,
230
+ getOwnPropertyDescriptor ( _ , prop ) {
231
+ if ( prop === 'observable' && target === 'signIn' ) {
232
+ return {
233
+ value : ( ) => ( { } ) ,
234
+ writable : false ,
235
+ enumerable : true ,
236
+ configurable : false
237
+ } ;
238
+ }
239
+ return undefined ;
240
+ }
189
241
} ,
190
242
) as T ;
191
243
} ;
0 commit comments