@lynker-desktop/electron-window-manager 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.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/common/index.d.ts +22 -0
- package/common/index.d.ts.map +1 -0
- package/esm/common/index.d.ts +22 -0
- package/esm/common/index.d.ts.map +1 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +5 -0
- package/esm/index.js.map +1 -0
- package/esm/main/index.d.ts +19 -0
- package/esm/main/index.d.ts.map +1 -0
- package/esm/main/index.js +254 -0
- package/esm/main/index.js.map +1 -0
- package/esm/package.json +1 -0
- package/esm/preload/index.js +27 -0
- package/esm/preload/index.js.map +1 -0
- package/esm/renderer/index.d.ts +15 -0
- package/esm/renderer/index.d.ts.map +1 -0
- package/esm/renderer/index.js +116 -0
- package/esm/renderer/index.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -0
- package/index.js +5 -0
- package/index.js.map +1 -0
- package/main/index.d.ts +19 -0
- package/main/index.d.ts.map +1 -0
- package/main/index.js +269 -0
- package/main/index.js.map +1 -0
- package/package.json +80 -0
- package/preload/index.js +27 -0
- package/preload/index.js.map +1 -0
- package/renderer/index.d.ts +15 -0
- package/renderer/index.d.ts.map +1 -0
- package/renderer/index.js +122 -0
- package/renderer/index.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserWindow, IpcRenderer} from 'electron'\nimport { ElectronWindowsManagerOptions } from '../common';\nimport type RemoteType from '@electron/remote'\nimport lodash from 'lodash'\nimport eIpc from '@lynker-desktop/electron-ipc/renderer'\n\nconst getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as IpcRenderer;\n }\n}\n\nconst getRemote = (): typeof RemoteType => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.remote || window?.require('@electron/remote')\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as typeof RemoteType;\n }\n}\n\nexport const create = async (options: ElectronWindowsManagerOptions): Promise<BrowserWindow> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'create', data: options})\n const allW = remote.BrowserWindow.getAllWindows()\n const win = allW.find(i => i.id === data.winId)!;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = data.winName);\n }\n return win;\n}\n\nexport const get = async (name: string): Promise<BrowserWindow | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'get', data: name})\n const allW = remote.BrowserWindow.getAllWindows()\n const win = allW.find(i => i.id === data.winId) as BrowserWindow | undefined;\n console.error(allW, data, win)\n if (win) {\n // @ts-ignore\n win && (win['_name'] = data.winName);\n }\n return win;\n}\n\nexport const getById = async (id: number): Promise<BrowserWindow | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getById', data: name})\n const allW = remote.BrowserWindow.getAllWindows()\n const win = allW.find(i => i.id === data.winId) as BrowserWindow | undefined;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = data.winName);\n }\n return win;\n}\n\nexport const getAll = async (): Promise<Map<number, BrowserWindow>> => {\n const remote = getRemote()\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getAll', data: undefined})\n const wins = new Map();\n const allW = remote.BrowserWindow.getAllWindows()\n for (const key in data) {\n const element = data[key];\n const win = allW.find(i => {\n return `${i.id}` === `${element.winId}`\n })\n if (win) {\n // @ts-ignore\n win && (win['_name'] = element.winName);\n wins.set(key, win)\n }\n }\n return wins;\n}\n\nexport const close = async (name: string): Promise<any> => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'close', data: name})\n return data;\n}\n\nexport const closeById = async (id: number): Promise<any> => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'closeById', data: id})\n return data;\n}\n\n/**\n * 获取 preload\n * @returns\n */\nexport const getPreload = (() => {\n let cachePreload: undefined | string = undefined;\n return async (): Promise<string | undefined> => {\n if (cachePreload) {\n return cachePreload;\n }\n const data: string | undefined = await getIpc().invoke(\n '__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__',\n {\n type: 'getPreload',\n data: undefined,\n }\n )\n cachePreload = data;\n return data;\n }\n})()\n\ngetPreload();\n\n// const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {\n// const remote = getRemote()\n// const webContents = remote.getCurrentWebContents()\n// webContents.openDevTools({\n// mode: 'detach'\n// })\n// return '';\n// }\n\n// export const registerDevTools = () => {\n// document.body.removeEventListener('keydown', handleOpenDevTools)\n// document.body.addEventListener('keydown', handleOpenDevTools)\n// }\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
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
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-window-manager/main” \n在electron渲染过程中, 你应该导入“@lynker-desktop/electron-window-manager/renderer”\n`);\n\nexport {};"],"names":[],"mappings":"AAAA,MAAM,IAAI,KAAK,CAAC,CAAA;;;AAGf,CAAA,CAAC;;"}
|
package/main/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { WebContents } from 'electron';
|
|
2
|
+
import type { ElectronWindowsManagerOptions, WindowItem } from '../common';
|
|
3
|
+
export declare const enable: (win: WebContents) => void;
|
|
4
|
+
export declare class WindowsManager {
|
|
5
|
+
preload?: string;
|
|
6
|
+
windows: Map<number, WindowItem>;
|
|
7
|
+
constructor(preload?: string);
|
|
8
|
+
create(options: ElectronWindowsManagerOptions): WindowItem;
|
|
9
|
+
_setLoadingView(window: WindowItem, createOptions: ElectronWindowsManagerOptions): void;
|
|
10
|
+
get(name: string): WindowItem | undefined;
|
|
11
|
+
getById(id: number): WindowItem | undefined;
|
|
12
|
+
getAll(): Map<number, WindowItem>;
|
|
13
|
+
close(name: string): undefined;
|
|
14
|
+
closeById(id: number): undefined;
|
|
15
|
+
getPreload(): string | undefined;
|
|
16
|
+
}
|
|
17
|
+
export declare let isInitialized: boolean;
|
|
18
|
+
export declare const initialize: (preload?: string) => WindowsManager;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,WAAW,EAAE,MAAM,UAAU,CAAA;AAGlE,OAAO,KAAK,EAAE,6BAA6B,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM3E,eAAO,MAAM,MAAM,QAAS,WAAW,SAEtC,CAAA;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACrB,OAAO,CAAC,EAAE,MAAM;IAK5B,MAAM,CAAC,OAAO,EAAE,6BAA6B;IAsD7C,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,6BAA6B;IA+EhF,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAUzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAU3C,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAIjC,KAAK,CAAC,IAAI,EAAE,MAAM;IAalB,SAAS,CAAC,EAAE,EAAE,MAAM;IAapB,UAAU;CAGX;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,KAAG,cAoG7C,CAAA"}
|
package/main/index.js
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
const _ = require('lodash');
|
|
2
|
+
const electron = require('electron');
|
|
3
|
+
const remote = require('@electron/remote/main');
|
|
4
|
+
const eIpc = require('@lynker-desktop/electron-ipc/main');
|
|
5
|
+
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
const n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
for (const k in e) {
|
|
10
|
+
n[k] = e[k];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
n.default = e;
|
|
14
|
+
return n;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const remote__namespace = /*#__PURE__*/_interopNamespaceDefault(remote);
|
|
18
|
+
|
|
19
|
+
if (!remote__namespace.isInitialized()) {
|
|
20
|
+
remote__namespace.initialize();
|
|
21
|
+
}
|
|
22
|
+
const enable = (win) => {
|
|
23
|
+
remote__namespace.enable(win);
|
|
24
|
+
};
|
|
25
|
+
class WindowsManager {
|
|
26
|
+
constructor(preload) {
|
|
27
|
+
this.preload = preload;
|
|
28
|
+
this.windows = new Map();
|
|
29
|
+
}
|
|
30
|
+
create(options) {
|
|
31
|
+
const { name = 'anonymous', loadingView, browserWindow: browserWindowOptions = {}, openDevTools = false, preventOriginClose = false, } = options;
|
|
32
|
+
const window = new electron.BrowserWindow(_.merge({
|
|
33
|
+
acceptFirstMouse: true,
|
|
34
|
+
}, browserWindowOptions, {
|
|
35
|
+
webPreferences: {
|
|
36
|
+
plugins: true,
|
|
37
|
+
nodeIntegration: true,
|
|
38
|
+
contextIsolation: false,
|
|
39
|
+
backgroundThrottling: false,
|
|
40
|
+
nativeWindowOpen: false,
|
|
41
|
+
webSecurity: false,
|
|
42
|
+
preload: browserWindowOptions?.webPreferences?.preload || this.preload,
|
|
43
|
+
}
|
|
44
|
+
}));
|
|
45
|
+
remote__namespace.enable(window.webContents);
|
|
46
|
+
window._name = name;
|
|
47
|
+
if (loadingView?.url) {
|
|
48
|
+
this._setLoadingView(window, options);
|
|
49
|
+
}
|
|
50
|
+
window.on('close', (event) => {
|
|
51
|
+
if (preventOriginClose) {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.windows.delete(window.id);
|
|
56
|
+
});
|
|
57
|
+
window.webContents.on('dom-ready', () => {
|
|
58
|
+
if (openDevTools) {
|
|
59
|
+
window.webContents.openDevTools();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
this.windows.set(window.id, window);
|
|
63
|
+
if (/^file/gi.test(options.url)) {
|
|
64
|
+
window.loadFile(options.url);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
window.loadURL(options.url);
|
|
68
|
+
}
|
|
69
|
+
window.focus();
|
|
70
|
+
return window;
|
|
71
|
+
}
|
|
72
|
+
_setLoadingView(window, createOptions) {
|
|
73
|
+
if (createOptions) {
|
|
74
|
+
const { loadingView, preventOriginNavigate = false, } = createOptions;
|
|
75
|
+
let _loadingView = new electron.BrowserView({
|
|
76
|
+
webPreferences: {
|
|
77
|
+
contextIsolation: false,
|
|
78
|
+
nodeIntegration: true,
|
|
79
|
+
// 允许loadURL与文件路径在开发环境
|
|
80
|
+
webSecurity: false,
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
if (window.isDestroyed()) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const loadLoadingView = () => {
|
|
87
|
+
const [viewWidth, viewHeight] = window.getSize();
|
|
88
|
+
window.setBrowserView(_loadingView);
|
|
89
|
+
_loadingView.setBounds({
|
|
90
|
+
x: 0,
|
|
91
|
+
y: 0,
|
|
92
|
+
width: viewWidth || 10,
|
|
93
|
+
height: viewHeight || 10,
|
|
94
|
+
});
|
|
95
|
+
_loadingView.webContents.loadURL(loadingView?.url || '');
|
|
96
|
+
};
|
|
97
|
+
const onFailure = () => {
|
|
98
|
+
if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {
|
|
99
|
+
_loadingView.webContents.close();
|
|
100
|
+
}
|
|
101
|
+
if (window.isDestroyed()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (window) {
|
|
105
|
+
window.removeBrowserView(_loadingView);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
loadLoadingView();
|
|
109
|
+
window.on('resize', _.debounce(() => {
|
|
110
|
+
if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {
|
|
111
|
+
if (window.isDestroyed()) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const [viewWidth, viewHeight] = window.getSize();
|
|
115
|
+
_loadingView.setBounds({ x: 0, y: 0, width: viewWidth || 10, height: viewHeight || 10 });
|
|
116
|
+
}
|
|
117
|
+
}, 500));
|
|
118
|
+
window.webContents.on('will-navigate', (e) => {
|
|
119
|
+
if (preventOriginNavigate) {
|
|
120
|
+
e.preventDefault();
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (window.isDestroyed()) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {
|
|
127
|
+
window.setBrowserView(_loadingView);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// if loadingView has been destroyed
|
|
131
|
+
_loadingView = new electron.BrowserView();
|
|
132
|
+
loadLoadingView();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
window.webContents.on('dom-ready', onFailure);
|
|
136
|
+
window.webContents.on('crashed', onFailure);
|
|
137
|
+
window.webContents.on('unresponsive', onFailure);
|
|
138
|
+
window.webContents.on('did-fail-load', onFailure);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
get(name) {
|
|
142
|
+
let win = undefined;
|
|
143
|
+
this.windows.forEach((i) => {
|
|
144
|
+
if (i._name === name) {
|
|
145
|
+
win = i;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return win;
|
|
149
|
+
}
|
|
150
|
+
getById(id) {
|
|
151
|
+
let win = undefined;
|
|
152
|
+
this.windows.forEach((i) => {
|
|
153
|
+
if (i.id === id) {
|
|
154
|
+
win = i;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return win;
|
|
158
|
+
}
|
|
159
|
+
getAll() {
|
|
160
|
+
return this.windows;
|
|
161
|
+
}
|
|
162
|
+
close(name) {
|
|
163
|
+
let win = undefined;
|
|
164
|
+
this.windows.forEach((i) => {
|
|
165
|
+
if (i._name === name) {
|
|
166
|
+
win = i;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
// @ts-ignore
|
|
170
|
+
win && this.windows.delete(win?.id);
|
|
171
|
+
// @ts-ignore
|
|
172
|
+
return win && win?.destroy();
|
|
173
|
+
}
|
|
174
|
+
closeById(id) {
|
|
175
|
+
let win = undefined;
|
|
176
|
+
this.windows.forEach((i) => {
|
|
177
|
+
if (i.id === id) {
|
|
178
|
+
win = i;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
// @ts-ignore
|
|
182
|
+
win && this.windows.delete(win?.id);
|
|
183
|
+
// @ts-ignore
|
|
184
|
+
return win && win?.destroy();
|
|
185
|
+
}
|
|
186
|
+
getPreload() {
|
|
187
|
+
return this.preload;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// @ts-ignore
|
|
191
|
+
global['__ELECTRON_WINDOWS_MANAGER__'] = undefined;
|
|
192
|
+
exports.isInitialized = false;
|
|
193
|
+
const initialize = (preload) => {
|
|
194
|
+
// @ts-ignore
|
|
195
|
+
if (global['__ELECTRON_WINDOWS_MANAGER__']) {
|
|
196
|
+
// @ts-ignore
|
|
197
|
+
return global['__ELECTRON_WINDOWS_MANAGER__'];
|
|
198
|
+
}
|
|
199
|
+
exports.isInitialized = true;
|
|
200
|
+
// @ts-ignore
|
|
201
|
+
const wm = global['__ELECTRON_WINDOWS_MANAGER__'] = new WindowsManager(preload);
|
|
202
|
+
eIpc.mainIPC.handleRenderer('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', async (data) => {
|
|
203
|
+
if (data?.type === 'create') {
|
|
204
|
+
const opt = data;
|
|
205
|
+
const findWin = wm.get(opt.data.name);
|
|
206
|
+
if (findWin) {
|
|
207
|
+
findWin.focus();
|
|
208
|
+
return {
|
|
209
|
+
winId: findWin?.id,
|
|
210
|
+
winName: findWin?._name,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
const res = wm.create(opt.data);
|
|
214
|
+
return {
|
|
215
|
+
winId: Number(res.id),
|
|
216
|
+
winName: res._name,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (data?.type === 'get') {
|
|
220
|
+
const opt = data;
|
|
221
|
+
const res = wm.get(opt?.data);
|
|
222
|
+
return {
|
|
223
|
+
winId: res?.id ? Number(res?.id) : -1,
|
|
224
|
+
winName: res?._name ? res?._name : '',
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
if (data?.type === 'getById') {
|
|
228
|
+
const opt = data;
|
|
229
|
+
const res = wm.getById(opt?.data);
|
|
230
|
+
return {
|
|
231
|
+
winId: res?.id ? Number(res?.id) : -1,
|
|
232
|
+
winName: res?._name ? res?._name : '',
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (data?.type === 'getAll') {
|
|
236
|
+
const res = wm.getAll();
|
|
237
|
+
const obj = {};
|
|
238
|
+
res.forEach(i => {
|
|
239
|
+
// @ts-ignore
|
|
240
|
+
obj[i.id] = {
|
|
241
|
+
winId: i?.id ? Number(i?.id) : -1,
|
|
242
|
+
winName: i?._name ? i?._name : '',
|
|
243
|
+
};
|
|
244
|
+
});
|
|
245
|
+
return obj;
|
|
246
|
+
}
|
|
247
|
+
if (data?.type === 'close') {
|
|
248
|
+
const opt = data;
|
|
249
|
+
const res = wm.close(opt?.data);
|
|
250
|
+
return res;
|
|
251
|
+
}
|
|
252
|
+
if (data?.type === 'closeById') {
|
|
253
|
+
const opt = data;
|
|
254
|
+
const res = wm.closeById(opt?.data);
|
|
255
|
+
return res;
|
|
256
|
+
}
|
|
257
|
+
if (data?.type === 'getPreload') {
|
|
258
|
+
const res = wm.getPreload();
|
|
259
|
+
return res;
|
|
260
|
+
}
|
|
261
|
+
return undefined;
|
|
262
|
+
});
|
|
263
|
+
return wm;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
exports.WindowsManager = WindowsManager;
|
|
267
|
+
exports.enable = enable;
|
|
268
|
+
exports.initialize = initialize;
|
|
269
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import _ from 'lodash'\nimport { BrowserWindow, BrowserView, WebContents } from 'electron'\nimport * as remote from '@electron/remote/main'\nimport eIpc from '@lynker-desktop/electron-ipc/main'\nimport type { ElectronWindowsManagerOptions, WindowItem } from '../common';\n\nif (!remote.isInitialized()) {\n remote.initialize();\n}\n\nexport const enable = (win: WebContents) => {\n remote.enable(win)\n}\n\nexport class WindowsManager {\n preload?: string;\n windows: Map<number, WindowItem>;\n constructor(preload?: string) {\n this.preload = preload;\n this.windows = new Map();\n }\n\n create(options: ElectronWindowsManagerOptions) {\n const {\n name = 'anonymous',\n loadingView,\n browserWindow: browserWindowOptions = {},\n openDevTools = false,\n preventOriginClose = false,\n } = options;\n const window = new BrowserWindow(\n _.merge(\n {\n acceptFirstMouse: true,\n },\n browserWindowOptions,\n {\n webPreferences: {\n plugins: true,\n nodeIntegration: true,\n contextIsolation: false,\n backgroundThrottling: false,\n nativeWindowOpen: false,\n webSecurity: false,\n preload: browserWindowOptions?.webPreferences?.preload || this.preload,\n }\n },\n )\n ) as WindowItem;\n remote.enable(window.webContents);\n window._name = name;\n if (loadingView?.url) {\n this._setLoadingView(window, options);\n }\n window.on('close', (event) => {\n if (preventOriginClose) {\n event.preventDefault();\n return;\n }\n this.windows.delete(window.id)\n });\n window.webContents.on('dom-ready', () => {\n if (openDevTools) {\n window.webContents.openDevTools();\n }\n });\n this.windows.set(window.id, window);\n if (/^file/gi.test(options.url)) {\n window.loadFile(options.url)\n } else {\n window.loadURL(options.url)\n }\n window.focus();\n return window;\n }\n\n _setLoadingView(window: WindowItem, createOptions: ElectronWindowsManagerOptions) {\n if (createOptions) {\n const {\n loadingView,\n preventOriginNavigate = false,\n } = createOptions;\n let _loadingView = new BrowserView({\n webPreferences: {\n contextIsolation: false,\n nodeIntegration: true,\n // 允许loadURL与文件路径在开发环境\n webSecurity: false,\n }\n });\n\n if (window.isDestroyed()) {\n return;\n }\n\n const loadLoadingView = () => {\n const [ viewWidth, viewHeight ] = window.getSize();\n window.setBrowserView(_loadingView);\n _loadingView.setBounds({\n x: 0,\n y: 0,\n width: viewWidth || 10,\n height: viewHeight || 10,\n });\n _loadingView.webContents.loadURL(loadingView?.url || '');\n };\n\n const onFailure = () => {\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n _loadingView.webContents.close();\n }\n if (window.isDestroyed()) {\n return;\n }\n\n if (window) {\n window.removeBrowserView(_loadingView);\n }\n };\n\n loadLoadingView();\n\n window.on('resize', _.debounce(() => {\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n if (window.isDestroyed()) {\n return;\n }\n const [ viewWidth, viewHeight ] = window.getSize();\n _loadingView.setBounds({ x: 0, y: 0, width: viewWidth || 10, height: viewHeight || 10 });\n }\n }, 500));\n\n window.webContents.on('will-navigate', (e) => {\n if (preventOriginNavigate) {\n e.preventDefault();\n return;\n }\n if (window.isDestroyed()) {\n return;\n }\n if (_loadingView.webContents && !_loadingView.webContents.isDestroyed()) {\n window.setBrowserView(_loadingView);\n } else {\n // if loadingView has been destroyed\n _loadingView = new BrowserView();\n loadLoadingView();\n }\n });\n window.webContents.on('dom-ready', onFailure);\n window.webContents.on('crashed', onFailure);\n window.webContents.on('unresponsive', onFailure);\n window.webContents.on('did-fail-load', onFailure);\n }\n }\n\n get(name: string): WindowItem | undefined {\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i: WindowItem) => {\n if (i._name === name) {\n win = i;\n }\n })\n return win;\n }\n\n getById(id: number): WindowItem | undefined {\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i: WindowItem) => {\n if (i.id === id) {\n win = i;\n }\n })\n return win;\n }\n\n getAll(): Map<number, WindowItem> {\n return this.windows;\n }\n\n close(name: string) {\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i: WindowItem) => {\n if (i._name === name) {\n win = i;\n }\n })\n // @ts-ignore\n win && this.windows.delete(win?.id)\n // @ts-ignore\n return win && win?.destroy();\n }\n\n closeById(id: number) {\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i: WindowItem) => {\n if (i.id === id) {\n win = i;\n }\n })\n // @ts-ignore\n win && this.windows.delete(win?.id)\n // @ts-ignore\n return win && win?.destroy();\n }\n\n getPreload() {\n return this.preload;\n }\n}\n// @ts-ignore\nglobal['__ELECTRON_WINDOWS_MANAGER__'] = undefined;\n\nexport let isInitialized = false;\n\nexport const initialize = (preload?: string): WindowsManager => {\n // @ts-ignore\n if (global['__ELECTRON_WINDOWS_MANAGER__']) {\n // @ts-ignore\n return global['__ELECTRON_WINDOWS_MANAGER__'];\n }\n isInitialized = true;\n // @ts-ignore\n const wm = global['__ELECTRON_WINDOWS_MANAGER__'] = new WindowsManager(preload)\n eIpc.mainIPC.handleRenderer('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', async (data: any) => {\n if (data?.type === 'create') {\n const opt = data as {\n type: 'create';\n data: ElectronWindowsManagerOptions\n };\n const findWin = wm.get(opt.data.name);\n if (findWin) {\n findWin.focus();\n return {\n winId: findWin?.id,\n winName: findWin?._name,\n };\n }\n const res = wm.create(opt.data)\n return {\n winId: Number(res.id),\n winName: res._name,\n };\n }\n if (data?.type === 'get') {\n const opt = data as {\n type: 'get';\n data: string;\n };\n const res = wm.get(opt?.data)\n return {\n winId: res?.id ? Number(res?.id) : -1,\n winName: res?._name ? res?._name : '',\n };\n }\n\n if (data?.type === 'getById') {\n const opt = data as {\n type: 'get';\n data: number;\n };\n const res = wm.getById(opt?.data)\n return {\n winId: res?.id ? Number(res?.id) : -1,\n winName: res?._name ? res?._name : '',\n };\n }\n\n if (data?.type === 'getAll') {\n const opt = data as {\n type: 'getAll';\n data: any;\n };\n const res = wm.getAll()\n const obj = {}\n res.forEach(i => {\n // @ts-ignore\n obj[i.id] = {\n winId: i?.id ? Number(i?.id) : -1,\n winName: i?._name ? i?._name : '',\n }\n })\n return obj;\n }\n\n if (data?.type === 'close') {\n const opt = data as {\n type: 'close';\n data: string;\n };\n const res = wm.close(opt?.data)\n return res;\n }\n\n if (data?.type === 'closeById') {\n const opt = data as {\n type: 'closeById';\n data: number;\n };\n const res = wm.closeById(opt?.data)\n return res;\n }\n\n if (data?.type === 'getPreload') {\n const opt = data as {\n type: 'getPreload';\n data: number;\n };\n const res = wm.getPreload()\n return res;\n }\n\n return undefined\n })\n return wm;\n}\n"],"names":["remote","BrowserWindow","BrowserView","isInitialized"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lynker-desktop/electron-window-manager",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "electron-window-manager",
|
|
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
|
+
"dependencies": {
|
|
52
|
+
"@electron/remote": "^2.1.2",
|
|
53
|
+
"electron-log": "^3.0.7"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@babel/core": "^7.24.9",
|
|
57
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
58
|
+
"@rollup/plugin-commonjs": "^26.0.1",
|
|
59
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
60
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
61
|
+
"@rollup/plugin-replace": "^5.0.7",
|
|
62
|
+
"@rollup/plugin-typescript": "^11.1.6",
|
|
63
|
+
"@types/lodash": "^4.17.7",
|
|
64
|
+
"classnames": "^2.2.6",
|
|
65
|
+
"concurrently": "^8.2.2",
|
|
66
|
+
"electron": "24.8.8",
|
|
67
|
+
"file-url": "^2.0.2",
|
|
68
|
+
"fs-extra": "^11.2.0",
|
|
69
|
+
"lodash.merge": "^4.6.2",
|
|
70
|
+
"react": "^16.8.6",
|
|
71
|
+
"react-dom": "^16.8.6",
|
|
72
|
+
"rimraf": "^6.0.1",
|
|
73
|
+
"rollup": "^4.18.1",
|
|
74
|
+
"rollup-obfuscator": "^4.1.1",
|
|
75
|
+
"rollup-plugin-multi-input": "^1.4.2",
|
|
76
|
+
"rollup-plugin-node-builtins": "^2.1.2",
|
|
77
|
+
"tslib": "^2.6.3",
|
|
78
|
+
"typescript": "^5.5.3"
|
|
79
|
+
}
|
|
80
|
+
}
|
package/preload/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const electron = require('electron');
|
|
2
|
+
const remote = require('@electron/remote');
|
|
3
|
+
require('@lynker-desktop/electron-ipc/preload');
|
|
4
|
+
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
if (window.__ELECTRON_WINDOW_MANAGER__) {
|
|
7
|
+
// eslint-disable-next-line no-console
|
|
8
|
+
console.log('electron-window-manager Electron preload has already been run');
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
const config = {
|
|
12
|
+
ipcRenderer: electron.ipcRenderer,
|
|
13
|
+
remote,
|
|
14
|
+
};
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
window.__ELECTRON_WINDOW_MANAGER__ = config;
|
|
17
|
+
if (electron.contextBridge) {
|
|
18
|
+
// This will fail if contextIsolation is not enabled
|
|
19
|
+
try {
|
|
20
|
+
electron.contextBridge.exposeInMainWorld('__ELECTRON_WINDOW_MANAGER__', config);
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
// console.error(e)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# 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';\nimport remote from '@electron/remote';\nimport '@lynker-desktop/electron-ipc/preload'\n\n// @ts-ignore\nif (window.__ELECTRON_WINDOW_MANAGER__) {\n // eslint-disable-next-line no-console\n console.log('electron-window-manager Electron preload has already been run');\n} else {\n const config = {\n ipcRenderer,\n remote,\n }\n // @ts-ignore\n window.__ELECTRON_WINDOW_MANAGER__ = config;\n if (contextBridge) {\n // This will fail if contextIsolation is not enabled\n try {\n contextBridge.exposeInMainWorld('__ELECTRON_WINDOW_MANAGER__', config);\n } catch (e) {\n // console.error(e)\n }\n }\n}\n"],"names":["ipcRenderer","contextBridge"],"mappings":";;;;AAIA;AACA,IAAI,MAAM,CAAC,2BAA2B,EAAE;;AAEtC,IAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;AAC/E,CAAC;KAAM;AACL,IAAA,MAAM,MAAM,GAAG;qBACbA,oBAAW;QACX,MAAM;KACP,CAAA;;AAED,IAAA,MAAM,CAAC,2BAA2B,GAAG,MAAM,CAAC;IAC5C,IAAIC,sBAAa,EAAE;;AAEjB,QAAA,IAAI;AACF,YAAAA,sBAAa,CAAC,iBAAiB,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;SACxE;QAAC,OAAO,CAAC,EAAE;;SAEX;KACF;AACH;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Used in Renderer process */
|
|
2
|
+
import type { BrowserWindow } from 'electron';
|
|
3
|
+
import { ElectronWindowsManagerOptions } from '../common';
|
|
4
|
+
export declare const create: (options: ElectronWindowsManagerOptions) => Promise<BrowserWindow>;
|
|
5
|
+
export declare const get: (name: string) => Promise<BrowserWindow | undefined>;
|
|
6
|
+
export declare const getById: (id: number) => Promise<BrowserWindow | undefined>;
|
|
7
|
+
export declare const getAll: () => Promise<Map<number, BrowserWindow>>;
|
|
8
|
+
export declare const close: (name: string) => Promise<any>;
|
|
9
|
+
export declare const closeById: (id: number) => Promise<any>;
|
|
10
|
+
/**
|
|
11
|
+
* 获取 preload
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
export declare const getPreload: () => Promise<string | undefined>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/renderer/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,KAAK,EAAC,aAAa,EAAc,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,WAAW,CAAC;AAyB1D,eAAO,MAAM,MAAM,YAAmB,6BAA6B,KAAG,OAAO,CAAC,aAAa,CAU1F,CAAA;AAED,eAAO,MAAM,GAAG,SAAgB,MAAM,KAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAWzE,CAAA;AAED,eAAO,MAAM,OAAO,OAAc,MAAM,KAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAU3E,CAAA;AAED,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAiBjE,CAAA;AAED,eAAO,MAAM,KAAK,SAAgB,MAAM,KAAG,OAAO,CAAC,GAAG,CAGrD,CAAA;AAED,eAAO,MAAM,SAAS,OAAc,MAAM,KAAG,OAAO,CAAC,GAAG,CAGvD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,QAEH,OAAO,CAAC,MAAM,GAAG,SAAS,CAc1C,CAAA"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const eIpc = require('@lynker-desktop/electron-ipc/renderer');
|
|
2
|
+
|
|
3
|
+
const getIpc = () => {
|
|
4
|
+
try {
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
return window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer || window?.require('electron').ipcRenderer;
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
console.error('getIpc error: ', error);
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const getRemote = () => {
|
|
14
|
+
try {
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
return window?.__ELECTRON_WINDOW_MANAGER__?.remote || window?.require('@electron/remote');
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.error('getIpc error: ', error);
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const create = async (options) => {
|
|
24
|
+
const remote = getRemote();
|
|
25
|
+
const data = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'create', data: options });
|
|
26
|
+
const allW = remote.BrowserWindow.getAllWindows();
|
|
27
|
+
const win = allW.find(i => i.id === data.winId);
|
|
28
|
+
if (win) {
|
|
29
|
+
// @ts-ignore
|
|
30
|
+
win && (win['_name'] = data.winName);
|
|
31
|
+
}
|
|
32
|
+
return win;
|
|
33
|
+
};
|
|
34
|
+
const get = async (name) => {
|
|
35
|
+
const remote = getRemote();
|
|
36
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'get', data: name });
|
|
37
|
+
const allW = remote.BrowserWindow.getAllWindows();
|
|
38
|
+
const win = allW.find(i => i.id === data.winId);
|
|
39
|
+
console.error(allW, data, win);
|
|
40
|
+
if (win) {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
win && (win['_name'] = data.winName);
|
|
43
|
+
}
|
|
44
|
+
return win;
|
|
45
|
+
};
|
|
46
|
+
const getById = async (id) => {
|
|
47
|
+
const remote = getRemote();
|
|
48
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getById', data: name });
|
|
49
|
+
const allW = remote.BrowserWindow.getAllWindows();
|
|
50
|
+
const win = allW.find(i => i.id === data.winId);
|
|
51
|
+
if (win) {
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
win && (win['_name'] = data.winName);
|
|
54
|
+
}
|
|
55
|
+
return win;
|
|
56
|
+
};
|
|
57
|
+
const getAll = async () => {
|
|
58
|
+
const remote = getRemote();
|
|
59
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getAll', data: undefined });
|
|
60
|
+
const wins = new Map();
|
|
61
|
+
const allW = remote.BrowserWindow.getAllWindows();
|
|
62
|
+
for (const key in data) {
|
|
63
|
+
const element = data[key];
|
|
64
|
+
const win = allW.find(i => {
|
|
65
|
+
return `${i.id}` === `${element.winId}`;
|
|
66
|
+
});
|
|
67
|
+
if (win) {
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
win && (win['_name'] = element.winName);
|
|
70
|
+
wins.set(key, win);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return wins;
|
|
74
|
+
};
|
|
75
|
+
const close = async (name) => {
|
|
76
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'close', data: name });
|
|
77
|
+
return data;
|
|
78
|
+
};
|
|
79
|
+
const closeById = async (id) => {
|
|
80
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'closeById', data: id });
|
|
81
|
+
return data;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* 获取 preload
|
|
85
|
+
* @returns
|
|
86
|
+
*/
|
|
87
|
+
const getPreload = (() => {
|
|
88
|
+
let cachePreload = undefined;
|
|
89
|
+
return async () => {
|
|
90
|
+
if (cachePreload) {
|
|
91
|
+
return cachePreload;
|
|
92
|
+
}
|
|
93
|
+
const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
|
|
94
|
+
type: 'getPreload',
|
|
95
|
+
data: undefined,
|
|
96
|
+
});
|
|
97
|
+
cachePreload = data;
|
|
98
|
+
return data;
|
|
99
|
+
};
|
|
100
|
+
})();
|
|
101
|
+
getPreload();
|
|
102
|
+
// const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {
|
|
103
|
+
// const remote = getRemote()
|
|
104
|
+
// const webContents = remote.getCurrentWebContents()
|
|
105
|
+
// webContents.openDevTools({
|
|
106
|
+
// mode: 'detach'
|
|
107
|
+
// })
|
|
108
|
+
// return '';
|
|
109
|
+
// }
|
|
110
|
+
// export const registerDevTools = () => {
|
|
111
|
+
// document.body.removeEventListener('keydown', handleOpenDevTools)
|
|
112
|
+
// document.body.addEventListener('keydown', handleOpenDevTools)
|
|
113
|
+
// }
|
|
114
|
+
|
|
115
|
+
exports.close = close;
|
|
116
|
+
exports.closeById = closeById;
|
|
117
|
+
exports.create = create;
|
|
118
|
+
exports.get = get;
|
|
119
|
+
exports.getAll = getAll;
|
|
120
|
+
exports.getById = getById;
|
|
121
|
+
exports.getPreload = getPreload;
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserWindow, IpcRenderer} from 'electron'\nimport { ElectronWindowsManagerOptions } from '../common';\nimport type RemoteType from '@electron/remote'\nimport lodash from 'lodash'\nimport eIpc from '@lynker-desktop/electron-ipc/renderer'\n\nconst getIpc = (): IpcRenderer => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer || window?.require('electron').ipcRenderer\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as IpcRenderer;\n }\n}\n\nconst getRemote = (): typeof RemoteType => {\n try {\n // @ts-ignore\n return window?.__ELECTRON_WINDOW_MANAGER__?.remote || window?.require('@electron/remote')\n } catch (error) {\n console.error('getIpc error: ', error)\n return {} as typeof RemoteType;\n }\n}\n\nexport const create = async (options: ElectronWindowsManagerOptions): Promise<BrowserWindow> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'create', data: options})\n const allW = remote.BrowserWindow.getAllWindows()\n const win = allW.find(i => i.id === data.winId)!;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = data.winName);\n }\n return win;\n}\n\nexport const get = async (name: string): Promise<BrowserWindow | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'get', data: name})\n const allW = remote.BrowserWindow.getAllWindows()\n const win = allW.find(i => i.id === data.winId) as BrowserWindow | undefined;\n console.error(allW, data, win)\n if (win) {\n // @ts-ignore\n win && (win['_name'] = data.winName);\n }\n return win;\n}\n\nexport const getById = async (id: number): Promise<BrowserWindow | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getById', data: name})\n const allW = remote.BrowserWindow.getAllWindows()\n const win = allW.find(i => i.id === data.winId) as BrowserWindow | undefined;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = data.winName);\n }\n return win;\n}\n\nexport const getAll = async (): Promise<Map<number, BrowserWindow>> => {\n const remote = getRemote()\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getAll', data: undefined})\n const wins = new Map();\n const allW = remote.BrowserWindow.getAllWindows()\n for (const key in data) {\n const element = data[key];\n const win = allW.find(i => {\n return `${i.id}` === `${element.winId}`\n })\n if (win) {\n // @ts-ignore\n win && (win['_name'] = element.winName);\n wins.set(key, win)\n }\n }\n return wins;\n}\n\nexport const close = async (name: string): Promise<any> => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'close', data: name})\n return data;\n}\n\nexport const closeById = async (id: number): Promise<any> => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'closeById', data: id})\n return data;\n}\n\n/**\n * 获取 preload\n * @returns\n */\nexport const getPreload = (() => {\n let cachePreload: undefined | string = undefined;\n return async (): Promise<string | undefined> => {\n if (cachePreload) {\n return cachePreload;\n }\n const data: string | undefined = await getIpc().invoke(\n '__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__',\n {\n type: 'getPreload',\n data: undefined,\n }\n )\n cachePreload = data;\n return data;\n }\n})()\n\ngetPreload();\n\n// const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {\n// const remote = getRemote()\n// const webContents = remote.getCurrentWebContents()\n// webContents.openDevTools({\n// mode: 'detach'\n// })\n// return '';\n// }\n\n// export const registerDevTools = () => {\n// document.body.removeEventListener('keydown', handleOpenDevTools)\n// document.body.addEventListener('keydown', handleOpenDevTools)\n// }\n"],"names":[],"mappings":"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"}
|