@lynker-desktop/electron-ipc 0.0.2

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.
@@ -0,0 +1,123 @@
1
+ const getIpc = () => {
2
+ try {
3
+ // @ts-ignore
4
+ return window.__ELECTRON_IPC__ || window?.require('electron').ipcRenderer;
5
+ }
6
+ catch (error) {
7
+ console.error('getIpc error: ', error);
8
+ return {};
9
+ }
10
+ };
11
+ class RendererIPC {
12
+ /**
13
+ * 发送一次性给主进程消息
14
+ * @param channel
15
+ * @param args
16
+ * @returns
17
+ */
18
+ static invokeMainOnce(channel, ...args) {
19
+ return new Promise(resolve => {
20
+ getIpc().once(`${channel}-reply`, (_event, result) => {
21
+ resolve(result);
22
+ });
23
+ getIpc().send(channel, ...args);
24
+ });
25
+ }
26
+ /**
27
+ * 发送给主进程消息
28
+ * @param channel
29
+ * @param args
30
+ * @returns
31
+ */
32
+ static async invokeMain(channel, ...args) {
33
+ return await getIpc().invoke(channel, ...args);
34
+ }
35
+ /**
36
+ * 处理一次性主进程发送过来的消息
37
+ * @param channel
38
+ * @param handler
39
+ */
40
+ static handleMainOnce(channel, handler) {
41
+ getIpc().once(channel, async (_event, ...args) => {
42
+ const result = await handler(...args);
43
+ getIpc().send(`${channel}-reply`, result);
44
+ });
45
+ }
46
+ /**
47
+ * 处理主进程发送过来的消息
48
+ * @param channel
49
+ * @param handler
50
+ */
51
+ static handleMain(channel, handler) {
52
+ getIpc().on(channel, async (_event, ...args) => {
53
+ const result = await handler(...args);
54
+ getIpc().send(`${channel}-reply`, result);
55
+ });
56
+ }
57
+ /**
58
+ * 发送给渲染进程消息
59
+ * @param channel
60
+ * @param args
61
+ * @returns
62
+ */
63
+ static invokeRenderer(channel, ...args) {
64
+ return new Promise(resolve => {
65
+ getIpc().once(`${channel}-reply`, (_event, result) => {
66
+ resolve(result);
67
+ });
68
+ getIpc().send('relay-message', { channel, args });
69
+ });
70
+ }
71
+ /**
72
+ * 发送给指定渲染进程消息
73
+ * @param targetWindowId
74
+ * @param channel
75
+ * @param args
76
+ * @returns
77
+ */
78
+ static invokeRendererByWinId(targetWindowId, channel, ...args) {
79
+ return new Promise(resolve => {
80
+ getIpc().once(`${channel}-reply`, (_event, result) => {
81
+ resolve(result);
82
+ });
83
+ getIpc().send('relay-message', { targetWindowId, channel, args });
84
+ });
85
+ }
86
+ /**
87
+ * 处理一次性渲染进程发送过来的消息
88
+ * @param channel
89
+ * @param handler
90
+ */
91
+ static handleRendererOnce(channel, handler) {
92
+ getIpc().once(channel, async (_event, ...args) => {
93
+ const result = await handler(...args);
94
+ getIpc().send('relay-reply', { originalChannel: channel, result });
95
+ });
96
+ }
97
+ /**
98
+ * 处理渲染进程发送过来的消息
99
+ * @param channel
100
+ * @param handler
101
+ */
102
+ static handleRenderer(channel, handler) {
103
+ getIpc().on(channel, async (_event, ...args) => {
104
+ const result = await handler(...args);
105
+ getIpc().send('relay-reply', { originalChannel: channel, result });
106
+ });
107
+ }
108
+ /**
109
+ * 获取当前渲染进程id
110
+ */
111
+ static async getCurrentWebContentId() {
112
+ return new Promise(resolve => {
113
+ const channel = `__GetCurrentWebContentId__`;
114
+ getIpc().once(`${channel}-reply`, (_event, result) => {
115
+ resolve(result);
116
+ });
117
+ getIpc().send(channel);
118
+ });
119
+ }
120
+ }
121
+
122
+ export { RendererIPC, getIpc };
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["import type { IpcRenderer, IpcRendererEvent } from 'electron'\nexport const getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window.__ELECTRON_IPC__ || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as IpcRenderer;\n }\n}\n\nexport class RendererIPC {\n /**\n * 发送一次性给主进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tstatic invokeMainOnce(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send(channel, ...args)\n\t\t})\n\t}\n /**\n * 发送给主进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tstatic async invokeMain(channel: string, ...args: any[]): Promise<any> {\n\t\treturn await getIpc().invoke(channel, ...args)\n\t}\n /**\n * 处理一次性主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().once(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send(`${channel}-reply`, result)\n\t\t})\n\t}\n /**\n * 处理主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleMain(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().on(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send(`${channel}-reply`, result)\n\t\t})\n\t}\n /**\n * 发送给渲染进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tstatic invokeRenderer(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send('relay-message', { channel, args })\n\t\t})\n\t}\n\n /**\n * 发送给指定渲染进程消息\n * @param targetWindowId\n * @param channel\n * @param args\n * @returns\n */\n\tstatic invokeRendererByWinId(targetWindowId: number, channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send('relay-message', { targetWindowId, channel, args })\n\t\t})\n\t}\n\n /**\n * 处理一次性渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().once(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send('relay-reply', { originalChannel: channel, result })\n\t\t})\n\t}\n\n /**\n * 处理渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\tstatic handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tgetIpc().on(channel, async (_event: IpcRendererEvent, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tgetIpc().send('relay-reply', { originalChannel: channel, result })\n\t\t})\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\tgetIpc().once(`${channel}-reply`, (_event: IpcRendererEvent, result: any) => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tgetIpc().send(channel)\n\t\t})\n }\n}\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC"}
package/index.js ADDED
@@ -0,0 +1,5 @@
1
+ throw new Error(`electron 对主进程和渲染进程使用不同的代码:
2
+ 在electron主进程中, 你应该导入“@lynker-desktop/electron-ipc/main”
3
+ 在electron渲染过程中, 你应该导入“@lynker-desktop/electron-ipc/renderer”
4
+ `);
5
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["src/src/index.ts"],"sourcesContent":["throw new Error(`electron 对主进程和渲染进程使用不同的代码: \n在electron主进程中, 你应该导入“@lynker-desktop/electron-ipc/main” \n在electron渲染过程中, 你应该导入“@lynker-desktop/electron-ipc/renderer”\n`);\n\nexport {};"],"names":[],"mappings":"AAAA,MAAM,IAAI,KAAK,CAAC,CAAA;;;AAGf,CAAA,CAAC;;"}
@@ -0,0 +1,60 @@
1
+ export declare let isInitialized: boolean;
2
+ declare class MainIPC {
3
+ static instance: MainIPC;
4
+ private eventEmitter;
5
+ constructor();
6
+ /**
7
+ * 发送给主进程消息
8
+ * @param channel
9
+ * @param args
10
+ * @returns
11
+ */
12
+ invokeMain(channel: string, ...args: any[]): Promise<unknown>;
13
+ /**
14
+ * 处理一次性主进程发送过来的消息
15
+ * @param channel
16
+ * @param handler
17
+ */
18
+ handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
19
+ /**
20
+ * 处理主进程发送过来的消息
21
+ * @param channel
22
+ * @param handler
23
+ */
24
+ handleMain(channel: string, handler: (...args: any[]) => Promise<any>): void;
25
+ /**
26
+ * 发送给渲染进程消息
27
+ * @param webContents
28
+ * @param channel
29
+ * @param args
30
+ * @returns
31
+ */
32
+ invokeRenderer(webContents: Electron.WebContents, channel: string, ...args: any[]): Promise<any>;
33
+ /**
34
+ * 发送给所有渲染进程消息
35
+ * @param channel
36
+ * @param args
37
+ * @returns
38
+ */
39
+ invokeAllRenderer(channel: string, ...args: any[]): Promise<any>;
40
+ /**
41
+ * 处理一次性渲染进程发送过来的消息
42
+ * @param channel
43
+ * @param handler
44
+ */
45
+ handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
46
+ /**
47
+ * 处理渲染进程发送过来的消息
48
+ * @param channel
49
+ * @param handler
50
+ */
51
+ handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>): void;
52
+ /**
53
+ * 初始化
54
+ */
55
+ relayMessage(): void;
56
+ }
57
+ export declare const mainIPC: MainIPC;
58
+ export declare const initialize: () => void;
59
+ export {};
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AAIA,eAAO,IAAI,aAAa,SAAQ,CAAC;AACjC,cAAM,OAAO;IACZ,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,YAAY,CAAmC;;IAUtD;;;;;OAKG;IACE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAS/C;;;;OAIG;IACJ,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAOxE;;;;OAIG;IACJ,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAOpE;;;;;;OAMG;IACJ,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAoB/F;;;;;OAKG;IACJ,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAqB/D;;;;OAIG;IACJ,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAM5E;;;;OAIG;IACJ,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAKxE;;OAEG;IACJ,YAAY;CAoCZ;AAED,eAAO,MAAM,OAAO,SAAgB,CAAA;AAEpC,eAAO,MAAM,UAAU,YAKtB,CAAA"}
package/main/index.js ADDED
@@ -0,0 +1,172 @@
1
+ const events = require('events');
2
+ const electron = require('electron');
3
+
4
+ exports.isInitialized = false;
5
+ class MainIPC {
6
+ constructor() {
7
+ this.eventEmitter = new events.EventEmitter();
8
+ if (!MainIPC.instance) {
9
+ this.eventEmitter = new events.EventEmitter();
10
+ MainIPC.instance = this;
11
+ }
12
+ return MainIPC.instance;
13
+ }
14
+ /**
15
+ * 发送给主进程消息
16
+ * @param channel
17
+ * @param args
18
+ * @returns
19
+ */
20
+ async invokeMain(channel, ...args) {
21
+ return new Promise(resolve => {
22
+ this.eventEmitter.once(`${channel}-reply`, result => {
23
+ resolve(result);
24
+ });
25
+ this.eventEmitter.emit(channel, ...args);
26
+ });
27
+ }
28
+ /**
29
+ * 处理一次性主进程发送过来的消息
30
+ * @param channel
31
+ * @param handler
32
+ */
33
+ handleMainOnce(channel, handler) {
34
+ this.eventEmitter.once(channel, async (...args) => {
35
+ const result = await handler(...args);
36
+ this.eventEmitter.emit(`${channel}-reply`, result);
37
+ });
38
+ }
39
+ /**
40
+ * 处理主进程发送过来的消息
41
+ * @param channel
42
+ * @param handler
43
+ */
44
+ handleMain(channel, handler) {
45
+ this.eventEmitter.on(channel, async (...args) => {
46
+ const result = await handler(...args);
47
+ this.eventEmitter.emit(`${channel}-reply`, result);
48
+ });
49
+ }
50
+ /**
51
+ * 发送给渲染进程消息
52
+ * @param webContents
53
+ * @param channel
54
+ * @param args
55
+ * @returns
56
+ */
57
+ invokeRenderer(webContents, channel, ...args) {
58
+ return new Promise(resolve => {
59
+ const sendMessage = () => {
60
+ electron.ipcMain.once(`${channel}-reply`, (_event, result) => {
61
+ resolve(result);
62
+ });
63
+ webContents.send(channel, ...args);
64
+ };
65
+ // 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息
66
+ if (webContents.isLoading()) {
67
+ webContents.once('did-finish-load', () => {
68
+ setTimeout(() => sendMessage());
69
+ });
70
+ }
71
+ else {
72
+ sendMessage();
73
+ }
74
+ });
75
+ }
76
+ /**
77
+ * 发送给所有渲染进程消息
78
+ * @param channel
79
+ * @param args
80
+ * @returns
81
+ */
82
+ invokeAllRenderer(channel, ...args) {
83
+ return new Promise(resolve => {
84
+ electron.webContents.getAllWebContents().forEach(webContent => {
85
+ const sendMessage = () => {
86
+ electron.ipcMain.once(`${channel}-reply`, (_event, result) => {
87
+ resolve(result);
88
+ });
89
+ webContent.send(channel, ...args);
90
+ };
91
+ // 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息
92
+ if (webContent.isLoading()) {
93
+ webContent.once('did-finish-load', () => {
94
+ setTimeout(() => sendMessage());
95
+ });
96
+ }
97
+ else {
98
+ sendMessage();
99
+ }
100
+ });
101
+ });
102
+ }
103
+ /**
104
+ * 处理一次性渲染进程发送过来的消息
105
+ * @param channel
106
+ * @param handler
107
+ */
108
+ handleRendererOnce(channel, handler) {
109
+ electron.ipcMain.once(channel, async (_event, ...args) => {
110
+ const result = await handler(...args);
111
+ _event.sender.send(`${channel}-reply`, result);
112
+ });
113
+ }
114
+ /**
115
+ * 处理渲染进程发送过来的消息
116
+ * @param channel
117
+ * @param handler
118
+ */
119
+ handleRenderer(channel, handler) {
120
+ electron.ipcMain.handle(channel, async (_event, ...args) => {
121
+ return await handler(...args);
122
+ });
123
+ }
124
+ /**
125
+ * 初始化
126
+ */
127
+ relayMessage() {
128
+ electron.ipcMain.on('relay-message', (_event, { targetWindowId, channel, args }) => {
129
+ if (targetWindowId) {
130
+ const targetWindow = electron.BrowserWindow.fromId(targetWindowId);
131
+ if (targetWindow) {
132
+ targetWindow.webContents.send(channel, ...args);
133
+ }
134
+ }
135
+ else {
136
+ electron.BrowserWindow.getAllWindows().forEach(window => {
137
+ window.webContents.send(channel, ...args);
138
+ });
139
+ }
140
+ });
141
+ electron.ipcMain.on('relay-reply', (_event, { originalChannel, result }) => {
142
+ // 所有渲染进程都会接收 ${originalChannel}-reply 事件,要求仅需要的渲染进程处理该事件的回复。
143
+ // 这样可以避免需要指定窗口 ID 回复消息,并确保消息能够正确传递和接收
144
+ electron.BrowserWindow.getAllWindows().forEach(window => {
145
+ window.webContents.send(`${originalChannel}-reply`, result);
146
+ });
147
+ });
148
+ const getCurrentWebContentIdChannel = '__GetCurrentWebContentId__';
149
+ electron.ipcMain.on(getCurrentWebContentIdChannel, (_event) => {
150
+ try {
151
+ _event.frameId;
152
+ const webContentId = _event?.sender?.id;
153
+ _event.sender.send(`${getCurrentWebContentIdChannel}-reply`, webContentId);
154
+ }
155
+ catch (error) {
156
+ return undefined;
157
+ }
158
+ });
159
+ console.error('xxxxx');
160
+ }
161
+ }
162
+ const mainIPC = new MainIPC();
163
+ const initialize = () => {
164
+ if (!exports.isInitialized) {
165
+ exports.isInitialized = true;
166
+ mainIPC.relayMessage();
167
+ }
168
+ };
169
+
170
+ exports.initialize = initialize;
171
+ exports.mainIPC = mainIPC;
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import { EventEmitter } from 'events'\n\nimport { ipcMain, BrowserWindow, webContents } from 'electron'\n\nexport let isInitialized = false;\nclass MainIPC {\n\tstatic instance: MainIPC\n\tprivate eventEmitter: EventEmitter = new EventEmitter()\n\n\tconstructor() {\n\t\tif (!MainIPC.instance) {\n\t\t\tthis.eventEmitter = new EventEmitter()\n\t\t\tMainIPC.instance = this\n\t\t}\n\t\treturn MainIPC.instance\n\t}\n\n /**\n * 发送给主进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tasync invokeMain(channel: string, ...args: any[]) {\n\t\treturn new Promise(resolve => {\n\t\t\tthis.eventEmitter.once(`${channel}-reply`, result => {\n\t\t\t\tresolve(result)\n\t\t\t})\n\t\t\tthis.eventEmitter.emit(channel, ...args)\n\t\t})\n\t}\n\n /**\n * 处理一次性主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tthis.eventEmitter.once(channel, async (...args) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tthis.eventEmitter.emit(`${channel}-reply`, result)\n\t\t})\n\t}\n\n /**\n * 处理主进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleMain(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tthis.eventEmitter.on(channel, async (...args) => {\n\t\t\tconst result = await handler(...args)\n\t\t\tthis.eventEmitter.emit(`${channel}-reply`, result)\n\t\t})\n\t}\n\n /**\n * 发送给渲染进程消息\n * @param webContents\n * @param channel\n * @param args\n * @returns\n */\n\tinvokeRenderer(webContents: Electron.WebContents, channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\tconst sendMessage = () => {\n\t\t\t\tipcMain.once(`${channel}-reply`, (_event, result) => {\n\t\t\t\t\tresolve(result)\n\t\t\t\t})\n\t\t\t\twebContents.send(channel, ...args)\n\t\t\t}\n\n\t\t\t// 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息\n\t\t\tif (webContents.isLoading()) {\n\t\t\t\twebContents.once('did-finish-load', () => {\n\t\t\t\t\tsetTimeout(() => sendMessage())\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tsendMessage()\n\t\t\t}\n\t\t})\n\t}\n\n /**\n * 发送给所有渲染进程消息\n * @param channel\n * @param args\n * @returns\n */\n\tinvokeAllRenderer(channel: string, ...args: any[]): Promise<any> {\n\t\treturn new Promise(resolve => {\n\t\t\twebContents.getAllWebContents().forEach(webContent => {\n\t\t\t\tconst sendMessage = () => {\n\t\t\t\t\tipcMain.once(`${channel}-reply`, (_event, result) => {\n\t\t\t\t\t\tresolve(result)\n\t\t\t\t\t})\n\t\t\t\t\twebContent.send(channel, ...args)\n\t\t\t\t}\n\n\t\t\t\t// 等待渲染进程加载完成后再推送,否则会导致渲染进程收不到消息\n\t\t\t\tif (webContent.isLoading()) {\n\t\t\t\t\twebContent.once('did-finish-load', () => {\n\t\t\t\t\t\tsetTimeout(() => sendMessage())\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tsendMessage()\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n /**\n * 处理一次性渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tipcMain.once(channel, async (_event, ...args: any[]) => {\n\t\t\tconst result = await handler(...args)\n\t\t\t_event.sender.send(`${channel}-reply`, result)\n\t\t})\n\t}\n /**\n * 处理渲染进程发送过来的消息\n * @param channel\n * @param handler\n */\n\thandleRenderer(channel: string, handler: (...args: any[]) => Promise<any>) {\n\t\tipcMain.handle(channel, async (_event, ...args: any[]) => {\n\t\t\treturn await handler(...args)\n\t\t})\n\t}\n /**\n * 初始化\n */\n\trelayMessage() {\n\t\tipcMain.on('relay-message', (_event, { targetWindowId, channel, args }) => {\n\t\t\tif (targetWindowId) {\n\t\t\t\tconst targetWindow = BrowserWindow.fromId(targetWindowId)\n\t\t\t\tif (targetWindow) {\n\t\t\t\t\ttargetWindow.webContents.send(channel, ...args)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBrowserWindow.getAllWindows().forEach(window => {\n\t\t\t\t\twindow.webContents.send(channel, ...args)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\tipcMain.on('relay-reply', (_event, { originalChannel, result }) => {\n\t\t\t// 所有渲染进程都会接收 ${originalChannel}-reply 事件,要求仅需要的渲染进程处理该事件的回复。\n\t\t\t// 这样可以避免需要指定窗口 ID 回复消息,并确保消息能够正确传递和接收\n\t\t\tBrowserWindow.getAllWindows().forEach(window => {\n\t\t\t\twindow.webContents.send(`${originalChannel}-reply`, result)\n\t\t\t})\n\t\t})\n\n const getCurrentWebContentIdChannel = '__GetCurrentWebContentId__'\n ipcMain.on(getCurrentWebContentIdChannel, (_event) => {\n try {\n _event.frameId\n const webContentId = _event?.sender?.id;\n _event.sender.send(`${getCurrentWebContentIdChannel}-reply`, webContentId)\n } catch (error) {\n return undefined\n }\n\t\t})\n\n console.error('xxxxx')\n\t}\n\n}\n\nexport const mainIPC = new MainIPC()\n\nexport const initialize = () => {\n if (!isInitialized){\n isInitialized = true;\n\t\tmainIPC.relayMessage()\n }\n}\n"],"names":["isInitialized","EventEmitter","ipcMain","webContents","BrowserWindow"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@lynker-desktop/electron-ipc",
3
+ "version": "0.0.2",
4
+ "description": "electron-ipc",
5
+ "keywords": [
6
+ "electron",
7
+ "browser",
8
+ "tab"
9
+ ],
10
+ "types": "./index.d.ts",
11
+ "main": "./index.js",
12
+ "module": "./esm/main/index.js",
13
+ "browser": "./esm/renderer/index.js",
14
+ "exports": {
15
+ ".": {
16
+ "node": {
17
+ "require": "./index.js",
18
+ "import": "./esm/main/index.js"
19
+ },
20
+ "default": "./esm/renderer/index.js"
21
+ },
22
+ "./main": {
23
+ "require": "./main/index.js",
24
+ "import": "./esm/main/index.js"
25
+ },
26
+ "./renderer": {
27
+ "require": "./renderer/index.js",
28
+ "import": "./esm/renderer/index.js"
29
+ },
30
+ "./preload": {
31
+ "require": "./preload/index.js",
32
+ "import": "./esm/preload/index.js"
33
+ }
34
+ },
35
+ "author": "",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": ""
40
+ },
41
+ "scripts": {
42
+ "npm:publish": "pnpm publish --access public",
43
+ "prepublishOnly": "npm run build",
44
+ "build": "rollup -c --bundleConfigAsCjs ",
45
+ "docs": "documentation build *.js -f html -o docs",
46
+ "start:control": "npx babel --watch example/renderer/control.jsx --out-file example/renderer/control-compiled.js",
47
+ "dev": "concurrently \"npm run dev:renderer\" \"node ./scripts/dev.js\"",
48
+ "dev:renderer": "cd example/renderer && npm run dev",
49
+ "dev:main": "npm run build && electron --inspect=8888 example/main.js"
50
+ },
51
+ "devDependencies": {
52
+ "@babel/core": "^7.24.9",
53
+ "@rollup/plugin-babel": "^6.0.4",
54
+ "@rollup/plugin-commonjs": "^26.0.1",
55
+ "@rollup/plugin-json": "^6.1.0",
56
+ "@rollup/plugin-node-resolve": "^15.2.3",
57
+ "@rollup/plugin-replace": "^5.0.7",
58
+ "@rollup/plugin-typescript": "^11.1.6",
59
+ "@types/lodash": "^4.17.7",
60
+ "classnames": "^2.2.6",
61
+ "concurrently": "^8.2.2",
62
+ "electron": "24.8.8",
63
+ "file-url": "^2.0.2",
64
+ "fs-extra": "^11.2.0",
65
+ "lodash.merge": "^4.6.2",
66
+ "react": "^16.8.6",
67
+ "react-dom": "^16.8.6",
68
+ "rimraf": "^6.0.1",
69
+ "rollup": "^4.18.1",
70
+ "rollup-obfuscator": "^4.1.1",
71
+ "rollup-plugin-multi-input": "^1.4.2",
72
+ "rollup-plugin-node-builtins": "^2.1.2",
73
+ "tslib": "^2.6.3",
74
+ "typescript": "^5.5.3"
75
+ }
76
+ }
@@ -0,0 +1,22 @@
1
+ const electron = require('electron');
2
+
3
+ // @ts-ignore
4
+ if (window.__ELECTRON_IPC__) {
5
+ // eslint-disable-next-line no-console
6
+ console.log('electron-ipc Electron preload has already been run');
7
+ }
8
+ else {
9
+ // @ts-ignore
10
+ window.__ELECTRON_IPC__ = electron.ipcRenderer;
11
+ if (electron.contextBridge) {
12
+ // This will fail if contextIsolation is not enabled
13
+ try {
14
+ // @ts-ignore
15
+ electron.contextBridge.exposeInMainWorld('__ELECTRON_IPC__', electron.ipcRenderer);
16
+ }
17
+ catch (e) {
18
+ // console.error(e)
19
+ }
20
+ }
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/src/preload/index.ts"],"sourcesContent":["import { ipcRenderer, contextBridge } from 'electron';\n\n// @ts-ignore\nif (window.__ELECTRON_IPC__) {\n // eslint-disable-next-line no-console\n console.log('electron-ipc Electron preload has already been run');\n} else {\n // @ts-ignore\n window.__ELECTRON_IPC__ = ipcRenderer;\n if (contextBridge) {\n // This will fail if contextIsolation is not enabled\n try {\n // @ts-ignore\n contextBridge.exposeInMainWorld('__ELECTRON_IPC__', ipcRenderer);\n } catch (e) {\n // console.error(e)\n }\n }\n}\n"],"names":["ipcRenderer","contextBridge"],"mappings":";;AAEA;AACA,IAAI,MAAM,CAAC,gBAAgB,EAAE;;AAE3B,IAAA,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC;KAAM;;AAEL,IAAA,MAAM,CAAC,gBAAgB,GAAGA,oBAAW,CAAC;IACtC,IAAIC,sBAAa,EAAE;;AAEjB,QAAA,IAAI;;AAEF,YAAAA,sBAAa,CAAC,iBAAiB,CAAC,kBAAkB,EAAED,oBAAW,CAAC,CAAC;SAClE;QAAC,OAAO,CAAC,EAAE;;SAEX;KACF;AACH;;"}
@@ -0,0 +1,62 @@
1
+ import type { IpcRenderer } from 'electron';
2
+ export declare const getIpc: () => IpcRenderer;
3
+ export declare class RendererIPC {
4
+ /**
5
+ * 发送一次性给主进程消息
6
+ * @param channel
7
+ * @param args
8
+ * @returns
9
+ */
10
+ static invokeMainOnce(channel: string, ...args: any[]): Promise<any>;
11
+ /**
12
+ * 发送给主进程消息
13
+ * @param channel
14
+ * @param args
15
+ * @returns
16
+ */
17
+ static invokeMain(channel: string, ...args: any[]): Promise<any>;
18
+ /**
19
+ * 处理一次性主进程发送过来的消息
20
+ * @param channel
21
+ * @param handler
22
+ */
23
+ static handleMainOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
24
+ /**
25
+ * 处理主进程发送过来的消息
26
+ * @param channel
27
+ * @param handler
28
+ */
29
+ static handleMain(channel: string, handler: (...args: any[]) => Promise<any>): void;
30
+ /**
31
+ * 发送给渲染进程消息
32
+ * @param channel
33
+ * @param args
34
+ * @returns
35
+ */
36
+ static invokeRenderer(channel: string, ...args: any[]): Promise<any>;
37
+ /**
38
+ * 发送给指定渲染进程消息
39
+ * @param targetWindowId
40
+ * @param channel
41
+ * @param args
42
+ * @returns
43
+ */
44
+ static invokeRendererByWinId(targetWindowId: number, channel: string, ...args: any[]): Promise<any>;
45
+ /**
46
+ * 处理一次性渲染进程发送过来的消息
47
+ * @param channel
48
+ * @param handler
49
+ */
50
+ static handleRendererOnce(channel: string, handler: (...args: any[]) => Promise<any>): void;
51
+ /**
52
+ * 处理渲染进程发送过来的消息
53
+ * @param channel
54
+ * @param handler
55
+ */
56
+ static handleRenderer(channel: string, handler: (...args: any[]) => Promise<any>): void;
57
+ /**
58
+ * 获取当前渲染进程id
59
+ */
60
+ static getCurrentWebContentId(): Promise<number>;
61
+ }
62
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAC7D,eAAO,MAAM,MAAM,QAAO,WAQzB,CAAA;AAED,qBAAa,WAAW;IACtB;;;;;OAKG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAQnE;;;;;OAKG;WACS,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAGrE;;;;OAIG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAM/E;;;;OAIG;IACJ,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAM3E;;;;;OAKG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IASnE;;;;;;OAMG;IACJ,MAAM,CAAC,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IASlG;;;;OAIG;IACJ,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAOnF;;;;OAIG;IACJ,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAO/E;;OAEG;WACU,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;CASvD"}