1
1
import {
2
- invoke as TAURI_INVOKE ,
3
- Channel as TAURI_CHANNEL ,
2
+ invoke as TAURI_INVOKE ,
3
+ Channel as TAURI_CHANNEL ,
4
4
} from "@tauri-apps/api/core" ;
5
5
import * as TAURI_API_EVENT from "@tauri-apps/api/event" ;
6
6
import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow" ;
7
7
8
8
type __EventObj__ < T > = {
9
- listen : (
10
- cb : TAURI_API_EVENT . EventCallback < T > ,
11
- ) => ReturnType < typeof TAURI_API_EVENT . listen < T > > ;
12
- once : (
13
- cb : TAURI_API_EVENT . EventCallback < T > ,
14
- ) => ReturnType < typeof TAURI_API_EVENT . once < T > > ;
15
- emit : null extends T
16
- ? ( payload ?: T ) => ReturnType < typeof TAURI_API_EVENT . emit >
17
- : ( payload : T ) => ReturnType < typeof TAURI_API_EVENT . emit > ;
9
+ listen : (
10
+ cb : TAURI_API_EVENT . EventCallback < T >
11
+ ) => ReturnType < typeof TAURI_API_EVENT . listen < T > > ;
12
+ once : (
13
+ cb : TAURI_API_EVENT . EventCallback < T >
14
+ ) => ReturnType < typeof TAURI_API_EVENT . once < T > > ;
15
+ emit : null extends T
16
+ ? ( payload ?: T ) => ReturnType < typeof TAURI_API_EVENT . emit >
17
+ : ( payload : T ) => ReturnType < typeof TAURI_API_EVENT . emit > ;
18
18
} ;
19
19
20
20
export type Result < T , E > =
21
- | { status : "ok" ; data : T }
22
- | { status : "error" ; error : E } ;
21
+ | { status : "ok" ; data : T }
22
+ | { status : "error" ; error : E } ;
23
23
24
24
function __makeEvents__ < T extends Record < string , any > > (
25
25
mappings : Record < keyof T , string > ,
26
26
) {
27
+ const eventObjects : Record < string , T [ keyof T ] > = { } ;
28
+
27
29
return new Proxy (
28
30
{ } as unknown as {
29
31
[ K in keyof T ] : __EventObj__ < T [ K ] > & {
@@ -34,23 +36,30 @@ function __makeEvents__<T extends Record<string, any>>(
34
36
get : ( _ , event ) => {
35
37
const name = mappings [ event as keyof T ] ;
36
38
37
- return new Proxy ( ( ( ) => { } ) as any , {
38
- apply : ( _ , __ , [ window ] : [ __WebviewWindow__ ] ) => ( {
39
- listen : ( arg : any ) => window . listen ( name , arg ) ,
40
- once : ( arg : any ) => window . once ( name , arg ) ,
41
- emit : ( arg : any ) => window . emit ( name , arg ) ,
42
- } ) ,
43
- get : ( _ , command : keyof __EventObj__ < any > ) => {
44
- switch ( command ) {
45
- case "listen" :
46
- return ( arg : any ) => TAURI_API_EVENT . listen ( name , arg ) ;
47
- case "once" :
48
- return ( arg : any ) => TAURI_API_EVENT . once ( name , arg ) ;
49
- case "emit" :
50
- return ( arg : any ) => TAURI_API_EVENT . emit ( name , arg ) ;
51
- }
52
- } ,
53
- } ) ;
39
+ let eventObject = eventObjects [ name ] ;
40
+ if ( ! eventObject ) {
41
+ eventObject = new Proxy ( ( ( ) => { } ) as any , {
42
+ apply : ( _ , __ , [ window ] : [ __WebviewWindow__ ] ) => ( {
43
+ listen : ( arg : any ) => window . listen ( name , arg ) ,
44
+ once : ( arg : any ) => window . once ( name , arg ) ,
45
+ emit : ( arg : any ) => window . emit ( name , arg ) ,
46
+ } ) ,
47
+ get : ( _ , command : keyof __EventObj__ < any > ) => {
48
+ switch ( command ) {
49
+ case "listen" :
50
+ return ( arg : any ) => TAURI_API_EVENT . listen ( name , arg ) ;
51
+ case "once" :
52
+ return ( arg : any ) => TAURI_API_EVENT . once ( name , arg ) ;
53
+ case "emit" :
54
+ return ( arg : any ) => TAURI_API_EVENT . emit ( name , arg ) ;
55
+ }
56
+ } ,
57
+ } ) ;
58
+
59
+ eventObjects [ name ] = eventObject ;
60
+ }
61
+
62
+ return eventObject ;
54
63
} ,
55
64
} ,
56
65
) ;
0 commit comments