@lynker-desktop/electron-ipc 0.0.9-alpha.5 → 0.0.9-alpha.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/index.d.ts +1 -1
- package/common/index.d.ts.map +1 -1
- package/common/index.js +22 -0
- package/common/index.js.map +1 -1
- package/esm/common/index.d.ts +1 -1
- package/esm/common/index.d.ts.map +1 -1
- package/esm/common/index.js +22 -1
- package/esm/common/index.js.map +1 -1
- package/esm/main/index.d.ts +95 -32
- package/esm/main/index.d.ts.map +1 -1
- package/esm/main/index.js +234 -77
- package/esm/main/index.js.map +1 -1
- package/esm/preload/index.js +16 -1
- package/esm/preload/index.js.map +1 -1
- package/esm/renderer/index.d.ts +25 -35
- package/esm/renderer/index.d.ts.map +1 -1
- package/esm/renderer/index.js +45 -64
- package/esm/renderer/index.js.map +1 -1
- package/main/index.d.ts +95 -32
- package/main/index.d.ts.map +1 -1
- package/main/index.js +234 -77
- package/main/index.js.map +1 -1
- package/package.json +2 -2
- package/preload/index.js +16 -1
- package/preload/index.js.map +1 -1
- package/renderer/index.d.ts +25 -35
- package/renderer/index.d.ts.map +1 -1
- package/renderer/index.js +44 -64
- package/renderer/index.js.map +1 -1
package/renderer/index.d.ts
CHANGED
|
@@ -6,59 +6,49 @@ export declare class RendererIPC {
|
|
|
6
6
|
* 原生ipcRenderer
|
|
7
7
|
*/
|
|
8
8
|
static get ipcRenderer(): Electron.IpcRenderer;
|
|
9
|
-
/**
|
|
10
|
-
* 发送一次性给主进程消息
|
|
11
|
-
* @param channel
|
|
12
|
-
* @param args
|
|
13
|
-
* @returns
|
|
14
|
-
*/
|
|
15
|
-
static invokeMainOnce(channel: string, ...args: any[]): Promise<any>;
|
|
16
9
|
/**
|
|
17
10
|
* 发送给主进程消息
|
|
18
|
-
*
|
|
19
|
-
* @param
|
|
20
|
-
* @
|
|
11
|
+
* 使用 Electron 原生的 invoke 方法,支持并发请求
|
|
12
|
+
* @param channel 消息通道名称
|
|
13
|
+
* @param args 传递给处理器的参数
|
|
14
|
+
* @returns Promise<any> 返回处理结果
|
|
21
15
|
*/
|
|
22
16
|
static invokeMain(channel: string, ...args: any[]): Promise<any>;
|
|
23
|
-
/**
|
|
24
|
-
* 处理一次性主进程发送过来的消息
|
|
25
|
-
* @param channel
|
|
26
|
-
* @param handler
|
|
27
|
-
*/
|
|
28
|
-
static handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
29
17
|
/**
|
|
30
18
|
* 处理主进程发送过来的消息
|
|
31
|
-
*
|
|
32
|
-
* @param
|
|
19
|
+
* 支持 requestId 机制,确保并发请求正确匹配
|
|
20
|
+
* @param channel 消息通道名称
|
|
21
|
+
* @param handler 处理函数,接收除 requestId 外的所有参数
|
|
33
22
|
*/
|
|
34
|
-
static handleMain(channel: string, handler: (...args: any[]) => Promise<any>):
|
|
23
|
+
static handleMain(channel: string, handler: (...args: any[]) => Promise<any>): {
|
|
24
|
+
cancel: () => void;
|
|
25
|
+
};
|
|
35
26
|
/**
|
|
36
27
|
* 发送给渲染进程消息
|
|
37
|
-
*
|
|
38
|
-
* @param
|
|
39
|
-
* @
|
|
28
|
+
* 使用唯一的 requestId 确保并发请求不会互相干扰
|
|
29
|
+
* @param channel 消息通道名称
|
|
30
|
+
* @param args 传递给渲染进程的参数
|
|
31
|
+
* @returns Promise<any> 返回渲染进程的处理结果
|
|
40
32
|
*/
|
|
41
33
|
static invokeRenderer(channel: string, ...args: any[]): Promise<any>;
|
|
42
34
|
/**
|
|
43
35
|
* 发送给指定渲染进程消息
|
|
44
|
-
*
|
|
45
|
-
* @param
|
|
46
|
-
* @param
|
|
47
|
-
* @
|
|
36
|
+
* 使用唯一的 requestId 确保并发请求不会互相干扰
|
|
37
|
+
* @param targetWindowId 目标窗口ID
|
|
38
|
+
* @param channel 消息通道名称
|
|
39
|
+
* @param args 传递给渲染进程的参数
|
|
40
|
+
* @returns Promise<any> 返回渲染进程的处理结果
|
|
48
41
|
*/
|
|
49
42
|
static invokeRendererByWinId(targetWindowId: number, channel: string, ...args: any[]): Promise<any>;
|
|
50
|
-
/**
|
|
51
|
-
* 处理一次性渲染进程发送过来的消息
|
|
52
|
-
* @param channel
|
|
53
|
-
* @param handler
|
|
54
|
-
*/
|
|
55
|
-
static handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
|
|
56
43
|
/**
|
|
57
44
|
* 处理渲染进程发送过来的消息
|
|
58
|
-
*
|
|
59
|
-
* @param
|
|
45
|
+
* 支持 requestId 机制,确保并发请求正确匹配
|
|
46
|
+
* @param channel 消息通道名称
|
|
47
|
+
* @param handler 处理函数,接收除 requestId 外的所有参数
|
|
60
48
|
*/
|
|
61
|
-
static handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>):
|
|
49
|
+
static handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>): {
|
|
50
|
+
cancel: () => void;
|
|
51
|
+
};
|
|
62
52
|
/**
|
|
63
53
|
* 获取当前渲染进程id
|
|
64
54
|
*/
|
package/renderer/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,eAAO,MAAM,MAAM,QAAO,WAQzB,CAAA;AAED,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,KAAK,WAAW,yBAErB;IACD
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAA;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,eAAO,MAAM,MAAM,QAAO,WAQzB,CAAA;AAED,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,KAAK,WAAW,yBAErB;IACD;;;;;;OAMG;WACS,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAGrE;;;;;OAKG;IACJ,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;;;IAW3E;;;;;;OAMG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAUnE;;;;;;;OAOG;IACJ,MAAM,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlG;;;;;OAKG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;;;IAY/E;;OAEG;WACU,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUtD;;;OAGG;WACU,6BAA6B,IAAI,OAAO,CAAC,MAAM,CAAC;CAS9D"}
|
package/renderer/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const index = require('../common/index.js');
|
|
2
2
|
|
|
3
|
-
// import { getRandomUUID } from '../common';
|
|
4
3
|
const getIpc = () => {
|
|
5
4
|
try {
|
|
6
5
|
// @ts-ignore
|
|
@@ -18,101 +17,82 @@ class RendererIPC {
|
|
|
18
17
|
static get ipcRenderer() {
|
|
19
18
|
return getIpc();
|
|
20
19
|
}
|
|
21
|
-
/**
|
|
22
|
-
* 发送一次性给主进程消息
|
|
23
|
-
* @param channel
|
|
24
|
-
* @param args
|
|
25
|
-
* @returns
|
|
26
|
-
*/
|
|
27
|
-
static invokeMainOnce(channel, ...args) {
|
|
28
|
-
return new Promise(resolve => {
|
|
29
|
-
getIpc().once(`${channel}-reply`, (_event, result) => {
|
|
30
|
-
resolve(result);
|
|
31
|
-
});
|
|
32
|
-
getIpc().send(channel, ...args);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
20
|
/**
|
|
36
21
|
* 发送给主进程消息
|
|
37
|
-
*
|
|
38
|
-
* @param
|
|
39
|
-
* @
|
|
22
|
+
* 使用 Electron 原生的 invoke 方法,支持并发请求
|
|
23
|
+
* @param channel 消息通道名称
|
|
24
|
+
* @param args 传递给处理器的参数
|
|
25
|
+
* @returns Promise<any> 返回处理结果
|
|
40
26
|
*/
|
|
41
27
|
static async invokeMain(channel, ...args) {
|
|
42
|
-
return await
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* 处理一次性主进程发送过来的消息
|
|
46
|
-
* @param channel
|
|
47
|
-
* @param handler
|
|
48
|
-
*/
|
|
49
|
-
static handleMainOnce(channel, handler) {
|
|
50
|
-
getIpc().once(channel, async (_event, ...args) => {
|
|
51
|
-
const result = await handler(...args);
|
|
52
|
-
getIpc().send(`${channel}-reply`, result);
|
|
53
|
-
});
|
|
28
|
+
return await RendererIPC.ipcRenderer.invoke(channel, ...args);
|
|
54
29
|
}
|
|
55
30
|
/**
|
|
56
31
|
* 处理主进程发送过来的消息
|
|
57
|
-
*
|
|
58
|
-
* @param
|
|
32
|
+
* 支持 requestId 机制,确保并发请求正确匹配
|
|
33
|
+
* @param channel 消息通道名称
|
|
34
|
+
* @param handler 处理函数,接收除 requestId 外的所有参数
|
|
59
35
|
*/
|
|
60
36
|
static handleMain(channel, handler) {
|
|
61
|
-
|
|
37
|
+
RendererIPC.ipcRenderer.on(channel, async (_event, requestId, ...args) => {
|
|
62
38
|
const result = await handler(...args);
|
|
63
|
-
|
|
39
|
+
RendererIPC.ipcRenderer.send(`${channel}-reply-${requestId}`, result);
|
|
64
40
|
});
|
|
41
|
+
return {
|
|
42
|
+
cancel: () => {
|
|
43
|
+
RendererIPC.ipcRenderer.removeListener(channel, handler);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
65
46
|
}
|
|
66
47
|
/**
|
|
67
48
|
* 发送给渲染进程消息
|
|
68
|
-
*
|
|
69
|
-
* @param
|
|
70
|
-
* @
|
|
49
|
+
* 使用唯一的 requestId 确保并发请求不会互相干扰
|
|
50
|
+
* @param channel 消息通道名称
|
|
51
|
+
* @param args 传递给渲染进程的参数
|
|
52
|
+
* @returns Promise<any> 返回渲染进程的处理结果
|
|
71
53
|
*/
|
|
72
54
|
static invokeRenderer(channel, ...args) {
|
|
73
55
|
return new Promise(resolve => {
|
|
74
|
-
|
|
56
|
+
const requestId = index.getRandomUUID();
|
|
57
|
+
RendererIPC.ipcRenderer.once(`${channel}-reply-${requestId}`, (_event, result) => {
|
|
75
58
|
resolve(result);
|
|
76
59
|
});
|
|
77
|
-
|
|
60
|
+
RendererIPC.ipcRenderer.send('relay-message', { channel, requestId, args });
|
|
78
61
|
});
|
|
79
62
|
}
|
|
80
63
|
/**
|
|
81
64
|
* 发送给指定渲染进程消息
|
|
82
|
-
*
|
|
83
|
-
* @param
|
|
84
|
-
* @param
|
|
85
|
-
* @
|
|
65
|
+
* 使用唯一的 requestId 确保并发请求不会互相干扰
|
|
66
|
+
* @param targetWindowId 目标窗口ID
|
|
67
|
+
* @param channel 消息通道名称
|
|
68
|
+
* @param args 传递给渲染进程的参数
|
|
69
|
+
* @returns Promise<any> 返回渲染进程的处理结果
|
|
86
70
|
*/
|
|
87
71
|
static invokeRendererByWinId(targetWindowId, channel, ...args) {
|
|
88
72
|
return new Promise(resolve => {
|
|
89
|
-
|
|
73
|
+
const requestId = index.getRandomUUID();
|
|
74
|
+
RendererIPC.ipcRenderer.once(`${channel}-reply-${requestId}`, (_event, result) => {
|
|
90
75
|
resolve(result);
|
|
91
76
|
});
|
|
92
|
-
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* 处理一次性渲染进程发送过来的消息
|
|
97
|
-
* @param channel
|
|
98
|
-
* @param handler
|
|
99
|
-
*/
|
|
100
|
-
static handleRendererOnce(channel, handler) {
|
|
101
|
-
getIpc().once(channel, async (_event, ...args) => {
|
|
102
|
-
const result = await handler(...args);
|
|
103
|
-
getIpc().send('relay-reply', { originalChannel: channel, result });
|
|
77
|
+
RendererIPC.ipcRenderer.send('relay-message', { targetWindowId, channel, requestId, args });
|
|
104
78
|
});
|
|
105
79
|
}
|
|
106
80
|
/**
|
|
107
81
|
* 处理渲染进程发送过来的消息
|
|
108
|
-
*
|
|
109
|
-
* @param
|
|
82
|
+
* 支持 requestId 机制,确保并发请求正确匹配
|
|
83
|
+
* @param channel 消息通道名称
|
|
84
|
+
* @param handler 处理函数,接收除 requestId 外的所有参数
|
|
110
85
|
*/
|
|
111
86
|
static handleRenderer(channel, handler) {
|
|
112
|
-
|
|
87
|
+
RendererIPC.ipcRenderer.on(channel, async (_event, requestId, ...args) => {
|
|
113
88
|
const result = await handler(...args);
|
|
114
|
-
|
|
89
|
+
RendererIPC.ipcRenderer.send('relay-reply', { originalChannel: channel, requestId, result });
|
|
115
90
|
});
|
|
91
|
+
return {
|
|
92
|
+
cancel: () => {
|
|
93
|
+
RendererIPC.ipcRenderer.removeListener(channel, handler);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
116
96
|
}
|
|
117
97
|
/**
|
|
118
98
|
* 获取当前渲染进程id
|
|
@@ -120,10 +100,10 @@ class RendererIPC {
|
|
|
120
100
|
static async getCurrentWebContentId() {
|
|
121
101
|
return new Promise(resolve => {
|
|
122
102
|
const channel = `__GetCurrentWebContentId__`;
|
|
123
|
-
|
|
103
|
+
RendererIPC.ipcRenderer.once(`${channel}-reply`, (_event, result) => {
|
|
124
104
|
resolve(result);
|
|
125
105
|
});
|
|
126
|
-
|
|
106
|
+
RendererIPC.ipcRenderer.send(channel);
|
|
127
107
|
});
|
|
128
108
|
}
|
|
129
109
|
/**
|
|
@@ -133,10 +113,10 @@ class RendererIPC {
|
|
|
133
113
|
static async openCurrentWebContentDevTools() {
|
|
134
114
|
return new Promise(resolve => {
|
|
135
115
|
const channel = `__OpenCurrentWebContentDevTools__`;
|
|
136
|
-
|
|
116
|
+
RendererIPC.ipcRenderer.once(`${channel}-reply`, (_event, result) => {
|
|
137
117
|
resolve(result);
|
|
138
118
|
});
|
|
139
|
-
|
|
119
|
+
RendererIPC.ipcRenderer.send(channel);
|
|
140
120
|
});
|
|
141
121
|
}
|
|
142
122
|
}
|
package/renderer/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["import type { IpcRenderer, IpcRendererEvent } from 'electron'\
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["import type { IpcRenderer, IpcRendererEvent } from 'electron'\nimport { getRandomUUID } from '../common';\n\nexport { WINDOWL_GLOBAL_KEY } from '../common'\n\nexport const getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window.__ELECTRON_IPC__ || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n return {} as IpcRenderer;\n }\n}\n\nexport class RendererIPC {\n /**\n * 原生ipcRenderer\n */\n static get ipcRenderer() {\n return getIpc()\n }\n /**\n * 发送给主进程消息\n * 使用 Electron 原生的 invoke 方法,支持并发请求\n * @param channel 消息通道名称\n * @param args 传递给处理器的参数\n * @returns Promise<any> 返回处理结果\n */\n\tstatic async invokeMain(channel: string, ...args: any[]): Promise<any> {\n\t\treturn await RendererIPC.ipcRenderer.invoke(channel, ...args)\n\t}\n /**\n * 处理主进程发送过来的消息\n * 支持 requestId 机制,确保并发请求正确匹配\n * @param channel 消息通道名称\n * @param handler 处理函数,接收除 requestId 外的所有参数\n */\n\tstatic handleMain(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tRendererIPC.ipcRenderer.on(channel, async (_event: IpcRendererEvent, requestId: string, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tRendererIPC.ipcRenderer.send(`${channel}-reply-${requestId}`, result)\n\t\t})\n return {\n cancel: () => {\n RendererIPC.ipcRenderer.removeListener(channel, handler)\n }\n };\n\t}\n /**\n * 发送给渲染进程消息\n * 使用唯一的 requestId 确保并发请求不会互相干扰\n * @param channel 消息通道名称\n * @param args 传递给渲染进程的参数\n * @returns Promise<any> 返回渲染进程的处理结果\n */\n\tstatic invokeRenderer(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tconst requestId = getRandomUUID()\n\t\t\tRendererIPC.ipcRenderer.once(`${channel}-reply-${requestId}`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tRendererIPC.ipcRenderer.send('relay-message', { channel, requestId, args })\n\t\t})\n\t}\n\n /**\n * 发送给指定渲染进程消息\n * 使用唯一的 requestId 确保并发请求不会互相干扰\n * @param targetWindowId 目标窗口ID\n * @param channel 消息通道名称\n * @param args 传递给渲染进程的参数\n * @returns Promise<any> 返回渲染进程的处理结果\n */\n\tstatic invokeRendererByWinId(targetWindowId: number, channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tconst requestId = getRandomUUID()\n\t\t\tRendererIPC.ipcRenderer.once(`${channel}-reply-${requestId}`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tRendererIPC.ipcRenderer.send('relay-message', { targetWindowId, channel, requestId, args })\n\t\t})\n\t}\n\n /**\n * 处理渲染进程发送过来的消息\n * 支持 requestId 机制,确保并发请求正确匹配\n * @param channel 消息通道名称\n * @param handler 处理函数,接收除 requestId 外的所有参数\n */\n\tstatic handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tRendererIPC.ipcRenderer.on(channel, async (_event: IpcRendererEvent, requestId: string, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tRendererIPC.ipcRenderer.send('relay-reply', { originalChannel: channel, requestId, result })\n\t\t})\n return {\n cancel: () => {\n RendererIPC.ipcRenderer.removeListener(channel, handler)\n }\n };\n\t}\n\n /**\n * 获取当前渲染进程id\n */\n static async getCurrentWebContentId(): Promise<number> {\n return new Promise(resolve => {\n const channel = `__GetCurrentWebContentId__`\n\t\t\tRendererIPC.ipcRenderer.once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tRendererIPC.ipcRenderer.send(channel)\n\t\t})\n }\n\n /**\n * 打开当前窗口的开发者工具\n * @returns\n */\n static async openCurrentWebContentDevTools(): Promise<number> {\n return new Promise(resolve => {\n const channel = `__OpenCurrentWebContentDevTools__`\n\t\t\tRendererIPC.ipcRenderer.once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tRendererIPC.ipcRenderer.send(channel)\n\t\t})\n }\n}\n"],"names":["getRandomUUID"],"mappings":"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"}
|