@@ -79,6 +79,11 @@ type IsProxyableProperty<T, K extends keyof T> = If<
7979 Not < Extends < K , keyof EventTarget > > & ( ( Not < IsReadonly < T , K > > & Not < IsFunction < T [ K ] > > ) | ( IsFunction < T [ K ] > & IsNullable < T [ K ] > ) )
8080> ;
8181
82+ type IsReflectFunction < T , K extends keyof T > = If <
83+ & IsFunction < T [ K ] >
84+ & Extends < K , keyof Lifecycle >
85+ > ;
86+
8287type IsProxyableFunction < T , K extends keyof T > = If <
8388 & Not < Extends < K , keyof EventTarget > >
8489 & (
@@ -119,7 +124,7 @@ type ProxyFunctionArgs<T extends Node, K extends keyof T, Args extends unknown[]
119124 : T extends WithLifecycle ? RecursiveSignalArgs < Args >
120125 : Args ;
121126
122- type MaybeNodeLikeArg < T > = T extends Node ? T | Builder < T > | null : T ;
127+ type MaybeNodeLikeArg < T > = T extends Node ? T | Builder < T > | null : T extends string ? string | { toString ( ) : string } : T ;
123128type MaybeNodeLikeArgs < Args extends unknown [ ] , R extends unknown [ ] = [ ] > = Args extends [ infer Head , ...infer Tail ]
124129 ? MaybeNodeLikeArgs < Tail , [ ...R , MaybeNodeLikeArg < Head > ] >
125130 : Args extends ( infer U ) [ ] ? MaybeNodeLikeArg < U > [ ]
@@ -134,6 +139,9 @@ type ProxyNodeFunctionArgs<
134139 : RecursiveArrayArgs < Args > ;
135140
136141export type Builder < T extends Node = Node > =
142+ & {
143+ [ K in keyof T as If < IsReflectFunction < T , K > , K > ] : T [ K ] extends ( ...args : infer Args ) => any ? ( ...args : Args ) => Builder < T > : never ;
144+ }
137145 & {
138146 [ K in keyof T as If < IsProxyableProperty < T , K > , K > ] : ( value : ProxyPropertyArg < T , K > ) => Builder < T > ;
139147 }
@@ -199,7 +207,7 @@ export let Builder: BuilderConstructor = function <T extends Node & Partial<With
199207
200208 type Arg = null | Builder | Node | string | Arg [ ] | Signal < Arg > ;
201209
202- return ( target [ targetName ] ??= instancesOf ( node [ nodeName ] , Function ) && ! node . hasOwnProperty ( nodeName )
210+ return ( target [ targetName ] ??= instancesOf ( node [ nodeName ] , Function ) && ! Object . hasOwn ( node , nodeName )
203211 ? nodeName == targetName
204212 ? ( ...args : unknown [ ] ) => {
205213 ( node [ nodeName ] as Fn ) ( ...args ) ;
0 commit comments