@lynker-desktop/electron-window-manager 0.0.8-alpha.8 → 0.0.9-alpha.1

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.
@@ -1,238 +1,397 @@
1
1
  import eIpc from '@lynker-desktop/electron-ipc/renderer';
2
2
 
3
+ /**
4
+ * Electron 窗口管理器 - 渲染进程模块
5
+ * 提供窗口创建、管理、查询等功能
6
+ *
7
+ * @author Lynker Desktop Team
8
+ * @version 1.0.0
9
+ */
10
+ // ==================== 工具函数 ====================
11
+ /**
12
+ * 获取 IPC 渲染器实例
13
+ * 优先从全局变量获取,回退到 require 方式
14
+ *
15
+ * @returns IpcRenderer 实例或空对象
16
+ */
3
17
  const getIpc = () => {
4
18
  try {
5
- // @ts-ignore
6
- return window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer || window?.require('electron').ipcRenderer;
19
+ // 优先从全局变量获取(预加载脚本注入)
20
+ const globalIpc = window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer;
21
+ if (globalIpc) {
22
+ return globalIpc;
23
+ }
24
+ // 回退到 require 方式
25
+ return window?.require('electron').ipcRenderer;
7
26
  }
8
27
  catch (error) {
9
28
  console.error('当前非桌面端环境, 请在桌面端中调用');
10
29
  return {};
11
30
  }
12
31
  };
32
+ /**
33
+ * 获取 Electron Remote 模块
34
+ * 优先从全局变量获取,回退到 require 方式
35
+ *
36
+ * @returns RemoteType 实例或空对象
37
+ */
13
38
  const getRemote = () => {
14
39
  try {
15
- // @ts-ignore
16
- return window?.__ELECTRON_WINDOW_MANAGER__?.remote || window?.require('@electron/remote');
40
+ // 优先从全局变量获取(预加载脚本注入)
41
+ const globalRemote = window?.__ELECTRON_WINDOW_MANAGER__?.remote;
42
+ if (globalRemote) {
43
+ return globalRemote;
44
+ }
45
+ // 回退到 require 方式
46
+ return window?.require('@electron/remote');
17
47
  }
18
48
  catch (error) {
19
- console.error('getIpc error: ', error);
49
+ console.error('获取 Remote 模块失败: ', error);
20
50
  return {};
21
51
  }
22
52
  };
23
53
  /**
24
- * 一次性获取所有窗口的 BrowserView
54
+ * 获取所有窗口的 BrowserView 列表
55
+ * 遍历所有窗口并收集其 BrowserView
56
+ *
57
+ * @returns BrowserView 数组
25
58
  */
26
- const getAllBv = () => {
59
+ const getAllBrowserViews = () => {
27
60
  const remote = getRemote();
28
- // 一次性获取所有窗口的 BrowserView
29
61
  const allWindows = remote.BrowserWindow.getAllWindows();
30
- let allBrowserViews = [];
62
+ const allBrowserViews = [];
31
63
  allWindows.forEach(window => {
32
64
  const views = window.getBrowserViews();
33
- allBrowserViews = allBrowserViews.concat(views);
65
+ allBrowserViews.push(...views);
34
66
  });
35
67
  return allBrowserViews;
36
68
  };
37
- const getBVByWebContent = (webContent) => {
38
- const allBv = getAllBv();
39
- const win = allBv.find(i => i.webContents === webContent);
40
- // win不存在时,但webContent存在时,说明bv没有挂载到window上,需要手动创建
41
- if (!win && !webContent?.isDestroyed?.()) {
42
- // @ts-ignore
43
- return {
44
- id: webContent.id,
45
- _id: webContent.id,
46
- _type: 'BV',
47
- _name: '',
48
- _extraData: '',
49
- webContents: webContent,
50
- getBounds: async () => {
51
- return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'borrowView_getBounds', data: { webContentId: webContent.id, options: {} } });
52
- },
53
- setBounds: async (bounds) => {
54
- return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'borrowView_setBounds', data: { webContentId: webContent.id, options: bounds } });
55
- },
56
- setAutoResize: async (autoResize) => {
57
- return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'borrowView_setAutoResize', data: { webContentId: webContent.id, options: autoResize } });
58
- },
59
- setBackgroundColor: async (color) => {
60
- return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'borrowView_setBackgroundColor', data: { webContentId: webContent.id, options: color } });
61
- },
62
- };
69
+ /**
70
+ * 通过 WebContents 查找对应的 BrowserView
71
+ * 如果找不到已挂载的 BrowserView,则创建虚拟的 BrowserView 对象
72
+ *
73
+ * @param webContent - WebContents 实例
74
+ * @returns BVItem 实例
75
+ */
76
+ const getBrowserViewByWebContent = (webContent) => {
77
+ const allBrowserViews = getAllBrowserViews();
78
+ const existingView = allBrowserViews.find(view => view.webContents === webContent);
79
+ // 如果找到已挂载的 BrowserView,直接返回
80
+ if (existingView) {
81
+ return existingView;
63
82
  }
64
- return win;
83
+ // 如果 WebContents 存在但未挂载到窗口,创建虚拟 BrowserView
84
+ if (webContent && !webContent.isDestroyed?.()) {
85
+ return createVirtualBrowserView(webContent);
86
+ }
87
+ return existingView;
88
+ };
89
+ /**
90
+ * 创建虚拟的 BrowserView 对象
91
+ * 用于处理未挂载到窗口的 WebContents
92
+ *
93
+ * @param webContent - WebContents 实例
94
+ * @returns 虚拟的 BVItem 对象
95
+ */
96
+ const createVirtualBrowserView = (webContent) => {
97
+ const virtualView = {
98
+ id: webContent.id,
99
+ _id: webContent.id,
100
+ _type: 'BV',
101
+ _name: '',
102
+ _extraData: '',
103
+ webContents: webContent,
104
+ // 代理方法,通过 IPC 调用主进程
105
+ getBounds: async () => {
106
+ const result = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
107
+ type: 'borrowView_getBounds',
108
+ data: { webContentId: webContent.id, options: {} }
109
+ });
110
+ return result;
111
+ },
112
+ setBounds: async (bounds) => {
113
+ return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
114
+ type: 'borrowView_setBounds',
115
+ data: { webContentId: webContent.id, options: bounds }
116
+ });
117
+ },
118
+ setAutoResize: async (autoResize) => {
119
+ return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
120
+ type: 'borrowView_setAutoResize',
121
+ data: { webContentId: webContent.id, options: autoResize }
122
+ });
123
+ },
124
+ setBackgroundColor: async (color) => {
125
+ return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
126
+ type: 'borrowView_setBackgroundColor',
127
+ data: { webContentId: webContent.id, options: color }
128
+ });
129
+ },
130
+ };
131
+ return virtualView;
132
+ };
133
+ /**
134
+ * 为窗口对象设置扩展属性
135
+ *
136
+ * @param window - 窗口对象
137
+ * @param data - 窗口数据
138
+ */
139
+ const setWindowProperties = (window, data) => {
140
+ if (!window)
141
+ return;
142
+ window._name = data.winName || '';
143
+ window._type = data.winType || '';
144
+ window._extraData = data.winExtraData || '';
145
+ window._initUrl = data.winInitUrl || '';
65
146
  };
66
147
  async function create(options) {
67
148
  const remote = getRemote();
68
- const data = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'create', data: options });
69
- let win = remote.BrowserWindow.fromId(data.winId);
70
- if (!win) {
149
+ // 通过 IPC 调用主进程创建窗口
150
+ const data = await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
151
+ type: 'create',
152
+ data: options
153
+ });
154
+ // 尝试通过 ID 获取窗口
155
+ let window = remote.BrowserWindow.fromId(data.winId);
156
+ // 如果不是 BrowserWindow,尝试获取 BrowserView
157
+ if (!window) {
71
158
  const webContent = remote.webContents.fromId(data.winId);
72
- win = getAllBv().find(i => i.webContents === webContent);
159
+ if (webContent) {
160
+ window = getBrowserViewByWebContent(webContent);
161
+ }
73
162
  }
74
- if (win) {
75
- // @ts-ignore
76
- win && (win['_name'] = `${data.winName}`);
77
- // @ts-ignore
78
- win && (win['_type'] = `${data?.winType || ''}`);
79
- // @ts-ignore
80
- win && (win['_extraData'] = `${data.winExtraData || ''}`);
163
+ // 设置窗口属性
164
+ if (window) {
165
+ setWindowProperties(window, data);
81
166
  }
82
- return win;
167
+ return window;
83
168
  }
84
169
  /**
85
170
  * 获取当前窗口实例
171
+ *
172
+ * @returns Promise<BWItem | BVItem | undefined> 当前窗口实例
86
173
  */
87
174
  const getCurrentWindow = async () => {
88
175
  const remote = getRemote();
89
- const winId = remote.getCurrentWindow().id;
90
- let win = await get(winId);
91
- return win;
176
+ const currentWindow = remote.getCurrentWindow();
177
+ return await get(currentWindow.id);
92
178
  };
93
179
  /**
94
- * 获取窗口
95
- * @param idOrName id或者名字
96
- * @returns
180
+ * 根据 ID 或名称获取窗口
181
+ *
182
+ * @param idOrName - 窗口 ID 或名称
183
+ * @returns Promise<BWItem | BVItem | undefined> 窗口实例
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * // 通过 ID 获取
188
+ * const window = await get(1);
189
+ *
190
+ * // 通过名称获取
191
+ * const window = await get('main-window');
192
+ * ```
97
193
  */
98
194
  const get = async (idOrName) => {
99
195
  const remote = getRemote();
100
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'get', data: idOrName });
101
- let win = remote.BrowserWindow.fromId(data.winId);
102
- if (!win) {
196
+ // 通过 IPC 获取窗口信息
197
+ const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
198
+ type: 'get',
199
+ data: idOrName
200
+ });
201
+ // 尝试通过 ID 获取窗口
202
+ let window = remote.BrowserWindow.fromId(data.winId);
203
+ // 如果不是 BrowserWindow,尝试获取 BrowserView
204
+ if (!window) {
103
205
  const webContent = remote.webContents.fromId(data.winId);
104
206
  if (webContent) {
105
- win = getBVByWebContent(webContent);
207
+ window = getBrowserViewByWebContent(webContent);
106
208
  }
107
209
  }
108
- if (win) {
109
- // @ts-ignore
110
- win && (win['_name'] = `${data.winName || ''}`);
111
- // @ts-ignore
112
- win && (win['_type'] = `${data?.winType || ''}`);
113
- // @ts-ignore
114
- win && (win['_extraData'] = `${data.winExtraData || ''}`);
210
+ // 设置窗口属性
211
+ if (window) {
212
+ setWindowProperties(window, data);
115
213
  }
116
- return win;
214
+ return window;
117
215
  };
118
216
  async function getAll(type) {
119
217
  const remote = getRemote();
120
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getAll', data: undefined });
121
- const wins = new Map();
122
- const allW = remote.BrowserWindow.getAllWindows();
123
- const bwWindows = new Map();
124
- const bvWindows = new Map();
125
- for (const key in data) {
126
- const element = data[key];
127
- let win = allW.find(i => {
128
- return `${i.id}` === `${element?.winId}`;
129
- });
130
- if (!win) {
218
+ // 通过 IPC 获取所有窗口信息
219
+ const windowData = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
220
+ type: 'getAll',
221
+ data: undefined
222
+ });
223
+ const allWindows = new Map();
224
+ const browserWindows = new Map();
225
+ const browserViews = new Map();
226
+ const allBrowserWindows = remote.BrowserWindow.getAllWindows();
227
+ // 遍历窗口数据
228
+ for (const key in windowData) {
229
+ const element = windowData[key];
230
+ let window;
231
+ // 尝试在 BrowserWindow 中查找
232
+ window = allBrowserWindows.find(win => `${win.id}` === `${element?.winId}`);
233
+ // 如果不是 BrowserWindow,尝试获取 BrowserView
234
+ if (!window) {
131
235
  const webContent = remote.webContents.fromId(element.winId);
132
236
  if (webContent) {
133
- // @ts-ignore
134
- win = getBVByWebContent(webContent);
237
+ window = getBrowserViewByWebContent(webContent);
135
238
  }
136
239
  }
137
- if (win) {
240
+ if (window) {
241
+ // 设置窗口属性
138
242
  try {
139
- // @ts-ignore
140
- win && (win['id'] = Number(`${element?.winId}`));
243
+ window.id = Number(element?.winId);
141
244
  }
142
245
  catch (error) {
246
+ // 忽略设置 ID 失败的情况
143
247
  }
144
- // @ts-ignore
145
- win && (win['_id'] = Number(`${element?.winId}`));
146
- // @ts-ignore
147
- win && (win['_name'] = `${element?.winName || ''}`);
148
- // @ts-ignore
149
- win && (win['_type'] = `${element?.winType || ''}`);
150
- // @ts-ignore
151
- win && (win['_extraData'] = `${element?.winExtraData || ''}`);
152
- // @ts-ignore
153
- wins.set(win.id || win._id, win);
154
- // @ts-ignore
155
- if (win?._type === 'BW') {
156
- // @ts-ignore
157
- bwWindows.set(win.id || win._id, win);
248
+ setWindowProperties(window, {
249
+ winId: element.winId,
250
+ winName: element.winName,
251
+ winType: element.winType,
252
+ winExtraData: element.winExtraData,
253
+ winInitUrl: element.winInitUrl
254
+ });
255
+ const windowId = window.id || window._id;
256
+ allWindows.set(windowId, window);
257
+ // 按类型分类
258
+ if (window._type === 'BW') {
259
+ browserWindows.set(windowId, window);
158
260
  }
159
- // @ts-ignore
160
- if (win?._type === 'BV') {
161
- // @ts-ignore
162
- bvWindows.set(win.id || win._id, win);
261
+ else if (window._type === 'BV') {
262
+ browserViews.set(windowId, window);
163
263
  }
164
264
  }
165
265
  }
266
+ // 根据类型返回对应的映射表
166
267
  if (type === 'BW') {
167
- return bwWindows;
268
+ return browserWindows;
168
269
  }
169
270
  if (type === 'BV') {
170
- return bvWindows;
271
+ return browserViews;
171
272
  }
172
- return wins;
273
+ return allWindows;
173
274
  }
174
275
  /**
175
- * 关闭窗口
176
- * @param name
177
- * @returns
276
+ * 关闭指定窗口
277
+ *
278
+ * @param idOrName - 窗口 ID 或名称
279
+ * @returns Promise<boolean> 操作是否成功
178
280
  */
179
281
  const close = async (idOrName) => {
180
- await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'close', data: idOrName });
282
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
283
+ type: 'close',
284
+ data: idOrName
285
+ });
181
286
  return true;
182
287
  };
288
+ /**
289
+ * 关闭所有窗口
290
+ *
291
+ * @returns Promise<boolean> 操作是否成功
292
+ */
183
293
  const closeAll = async () => {
184
- await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'closeAll', data: undefined });
294
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
295
+ type: 'closeAll',
296
+ data: undefined
297
+ });
185
298
  return true;
186
299
  };
187
300
  /**
188
- * 用webContentIds查找到window
189
- */
301
+ * 根据 WebContents ID 查找对应的窗口
302
+ *
303
+ * @param webContentId - WebContents ID
304
+ * @returns Promise<BWItem | BVItem | undefined> 窗口实例
305
+ */
190
306
  const getWindowForWebContentId = async (webContentId) => {
191
- const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getWindowForWebContentId', data: webContentId });
307
+ const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
308
+ type: 'getWindowForWebContentId',
309
+ data: webContentId
310
+ });
192
311
  return get(winId);
193
312
  };
313
+ /**
314
+ * 重命名窗口
315
+ *
316
+ * @param idOrName - 窗口 ID 或名称
317
+ * @param newName - 新名称
318
+ * @returns Promise<BWItem | BVItem | undefined> 重命名后的窗口实例
319
+ */
194
320
  const rename = async (idOrName, newName) => {
195
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'rename', data: { idOrName, newName } });
321
+ const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
322
+ type: 'rename',
323
+ data: { idOrName, newName }
324
+ });
325
+ return get(data.winId);
326
+ };
327
+ /**
328
+ * 重置窗口初始化URL
329
+ *
330
+ * @param idOrName - 窗口 ID 或名称
331
+ * @param url - 新URL
332
+ * @returns Promise<BWItem | BVItem | undefined> 重置后的窗口实例
333
+ */
334
+ const reInitUrl = async (idOrName, url) => {
335
+ const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
336
+ type: 'reInitUrl',
337
+ data: { idOrName, url }
338
+ });
196
339
  return get(data.winId);
197
340
  };
198
341
  /**
199
- * 设置预加载webContentUrl
200
- * @param preloadWebContentsUrl
342
+ * 设置预加载 WebContents URL
343
+ *
344
+ * @param preloadWebContentsUrl - 预加载 URL
201
345
  */
202
346
  const setPreloadWebContentsUrl = async (preloadWebContentsUrl) => {
203
- await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'setPreloadWebContentsUrl', data: preloadWebContentsUrl });
347
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
348
+ type: 'setPreloadWebContentsUrl',
349
+ data: preloadWebContentsUrl
350
+ });
204
351
  };
205
352
  /**
206
- * 获取 preload
207
- * @returns
353
+ * 获取预加载脚本路径
354
+ * 使用缓存机制避免重复请求
355
+ *
356
+ * @returns Promise<string | undefined> 预加载脚本路径
208
357
  */
209
358
  const getPreload = (() => {
210
- let cachePreload = undefined;
359
+ let cachedPreload = undefined;
211
360
  return async () => {
212
- if (cachePreload) {
213
- return cachePreload;
361
+ // 如果已有缓存,直接返回
362
+ if (cachedPreload !== undefined) {
363
+ return cachedPreload;
214
364
  }
365
+ // 通过 IPC 获取预加载脚本路径
215
366
  const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {
216
367
  type: 'getPreload',
217
368
  data: undefined,
218
369
  });
219
- cachePreload = data;
370
+ // 缓存结果
371
+ cachedPreload = data;
220
372
  return data;
221
373
  };
222
374
  })();
375
+ // 初始化时获取预加载脚本
223
376
  getPreload();
224
- // const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {
225
- // const remote = getRemote()
226
- // const webContents = remote.getCurrentWebContents()
227
- // webContents.openDevTools({
228
- // mode: 'detach'
229
- // })
230
- // return '';
231
- // }
232
- // export const registerDevTools = () => {
233
- // document.body.removeEventListener('keydown', handleOpenDevTools)
234
- // document.body.addEventListener('keydown', handleOpenDevTools)
235
- // }
377
+ // ==================== 开发工具相关(已注释) ====================
378
+ /*
379
+ * 开发工具相关功能(已注释,可根据需要启用)
380
+ *
381
+ * const handleOpenDevTools = (e: HTMLElement, ev: KeyboardEvent): any => {
382
+ * const remote = getRemote()
383
+ * const webContents = remote.getCurrentWebContents()
384
+ * webContents.openDevTools({
385
+ * mode: 'detach'
386
+ * })
387
+ * return '';
388
+ * }
389
+ *
390
+ * export const registerDevTools = () => {
391
+ * document.body.removeEventListener('keydown', handleOpenDevTools)
392
+ * document.body.addEventListener('keydown', handleOpenDevTools)
393
+ * }
394
+ */
236
395
 
237
- export { close, closeAll, create, get, getAll, getCurrentWindow, getPreload, getWindowForWebContentId, rename, setPreloadWebContentsUrl };
396
+ export { close, closeAll, create, get, getAll, getCurrentWindow, getPreload, getWindowForWebContentId, reInitUrl, rename, setPreloadWebContentsUrl };
238
397
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer, WebContents} from 'electron'\nimport { BVItem, BWItem, ElectronWindowsManagerOptions } from '../common';\nimport type RemoteType from '@electron/remote'\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('当前非桌面端环境, 请在桌面端中调用');\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\n/**\n * 一次性获取所有窗口的 BrowserView\n */\nconst getAllBv = () => {\n const remote = getRemote()\n // 一次性获取所有窗口的 BrowserView\n const allWindows = remote.BrowserWindow.getAllWindows();\n let allBrowserViews: Array<BrowserView> = [];\n\n allWindows.forEach(window => {\n const views = window.getBrowserViews();\n allBrowserViews = allBrowserViews.concat(views);\n });\n return allBrowserViews;\n}\n\nconst getBVByWebContent = (webContent: WebContents) : BVItem => {\n const allBv = getAllBv();\n const win = allBv.find(i => i.webContents === webContent) as BVItem;\n // win不存在时,但webContent存在时,说明bv没有挂载到window上,需要手动创建\n if (!win && !webContent?.isDestroyed?.()) {\n // @ts-ignore\n return {\n id: webContent.id,\n _id: webContent.id,\n _type: 'BV',\n _name: '',\n _extraData: '',\n webContents: webContent,\n getBounds: async () => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_getBounds', data: {webContentId: webContent.id, options: {}}})\n },\n setBounds: async (bounds: any) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setBounds', data: {webContentId: webContent.id, options: bounds}})\n },\n setAutoResize: async (autoResize: boolean) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setAutoResize', data: {webContentId: webContent.id, options: autoResize}})\n },\n setBackgroundColor: async (color: string) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'borrowView_setBackgroundColor', data: {webContentId: webContent.id, options: color}})\n },\n } as BVItem;;\n }\n return win;\n}\n\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport function create(options: Omit<ElectronWindowsManagerOptions, 'type'> & { type?: 'BW' }): Promise<BWItem>;\nexport function create(options: ElectronWindowsManagerOptions & { type: 'BV' }): Promise<BVItem>;\nexport function create(options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem>;\n\nexport async function create(options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem> {\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 let win = remote.BrowserWindow.fromId(data.winId)! as BWItem | BVItem;\n if (!win) {\n const webContent = remote.webContents.fromId(data.winId);\n win = getAllBv().find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName}`);\n // @ts-ignore\n win && (win['_type'] = `${data?.winType || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData || ''}`);\n }\n\n return win;\n}\n\n/**\n * 获取当前窗口实例\n */\nexport const getCurrentWindow = async () => {\n const remote = getRemote();\n const winId = remote.getCurrentWindow().id;\n let win = await get(winId);\n return win;\n}\n\n/**\n * 获取窗口\n * @param idOrName id或者名字\n * @returns\n */\nexport const get = async (idOrName: string | number): Promise<BWItem | BVItem | undefined> => {\n const remote = getRemote()\n const data: {winId: number; winName: string, winExtraData: string} = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'get', data: idOrName})\n let win = remote.BrowserWindow.fromId(data.winId)! as BWItem | BVItem;\n if (!win) {\n const webContent = remote.webContents.fromId(data.winId);\n if (webContent) {\n win = getBVByWebContent(webContent) as BVItem;\n }\n }\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName || ''}`);\n // @ts-ignore\n win && (win['_type'] = `${data?.winType || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData|| ''}`);\n }\n return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport function getAll(type: 'BW'): Promise<Map<number, BWItem>>;\nexport function getAll(type: 'BV'): Promise<Map<number, BVItem>>;\nexport function getAll(): Promise<Map<number, BWItem | BVItem>>;\n\nexport async function getAll(type?: 'BW' | 'BV'): Promise<Map<number, BWItem | BVItem>> {\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 const bwWindows = new Map<number, BWItem>();\n const bvWindows = new Map<number, BVItem>();\n for (const key in data) {\n const element = data[key];\n let win = allW.find(i => {\n return `${i.id}` === `${element?.winId}`\n })\n if (!win) {\n const webContent = remote.webContents.fromId(element.winId);\n if (webContent) {\n // @ts-ignore\n win = getBVByWebContent(webContent) as BVItem;\n }\n }\n if (win) {\n try {\n // @ts-ignore\n win && (win['id'] = Number(`${element?.winId}`));\n } catch (error) {\n }\n // @ts-ignore\n win && (win['_id'] = Number(`${element?.winId}`));\n // @ts-ignore\n win && (win['_name'] = `${element?.winName || ''}`);\n // @ts-ignore\n win && (win['_type'] = `${element?.winType || ''}`);\n // @ts-ignore\n win && (win['_extraData'] = `${element?.winExtraData|| ''}`);\n // @ts-ignore\n wins.set(win.id || win._id, win)\n // @ts-ignore\n if (win?._type === 'BW') {\n // @ts-ignore\n bwWindows.set(win.id || win._id, win);\n }\n // @ts-ignore\n if (win?._type === 'BV') {\n // @ts-ignore\n bvWindows.set(win.id || win._id, win);\n }\n }\n }\n if (type === 'BW') {\n return bwWindows;\n }\n if (type === 'BV') {\n return bvWindows;\n }\n return wins;\n}\n\n/**\n * 关闭窗口\n * @param name\n * @returns\n */\nexport const close = async (idOrName: string | number): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'close', data: idOrName})\n return true;\n}\n\nexport const closeAll = async (): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'closeAll', data: undefined})\n return true;\n}\n\n/**\n * 用webContentIds查找到window\n*/\nexport const getWindowForWebContentId = async (webContentId: number) => {\n const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'getWindowForWebContentId', data: webContentId})\n return get(winId);\n}\n\nexport const rename = async (idOrName: string | number, newName: string) => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'rename', data: {idOrName, newName}})\n return get(data.winId);\n}\n\n/**\n * 设置预加载webContentUrl\n * @param preloadWebContentsUrl\n */\nexport const setPreloadWebContentsUrl = async (preloadWebContentsUrl: string) => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {type: 'setPreloadWebContentsUrl', data: preloadWebContentsUrl})\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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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/**\n * Electron 窗口管理器 - 渲染进程模块\n * 提供窗口创建、管理、查询等功能\n *\n * @author Lynker Desktop Team\n * @version 1.0.0\n */\n\nimport type { BrowserView, IpcRenderer, WebContents } from 'electron'\nimport type RemoteType from '@electron/remote'\nimport eIpc from '@lynker-desktop/electron-ipc/renderer'\nimport { BVItem, BWItem, ElectronWindowsManagerOptions } from '../common';\n\n// ==================== 工具函数 ====================\n\n/**\n * 获取 IPC 渲染器实例\n * 优先从全局变量获取,回退到 require 方式\n *\n * @returns IpcRenderer 实例或空对象\n */\nconst getIpc = (): IpcRenderer => {\n try {\n // 优先从全局变量获取(预加载脚本注入)\n const globalIpc = window?.__ELECTRON_WINDOW_MANAGER__?.ipcRenderer;\n if (globalIpc) {\n return globalIpc;\n }\n\n // 回退到 require 方式\n return window?.require('electron').ipcRenderer;\n } catch (error) {\n console.error('当前非桌面端环境, 请在桌面端中调用');\n return {} as IpcRenderer;\n }\n}\n\n/**\n * 获取 Electron Remote 模块\n * 优先从全局变量获取,回退到 require 方式\n *\n * @returns RemoteType 实例或空对象\n */\nconst getRemote = (): typeof RemoteType => {\n try {\n // 优先从全局变量获取(预加载脚本注入)\n const globalRemote = window?.__ELECTRON_WINDOW_MANAGER__?.remote;\n if (globalRemote) {\n return globalRemote;\n }\n\n // 回退到 require 方式\n return window?.require('@electron/remote');\n } catch (error) {\n console.error('获取 Remote 模块失败: ', error);\n return {} as typeof RemoteType;\n }\n}\n\n/**\n * 获取所有窗口的 BrowserView 列表\n * 遍历所有窗口并收集其 BrowserView\n *\n * @returns BrowserView 数组\n */\nconst getAllBrowserViews = (): BrowserView[] => {\n const remote = getRemote();\n const allWindows = remote.BrowserWindow.getAllWindows();\n const allBrowserViews: BrowserView[] = [];\n\n allWindows.forEach(window => {\n const views = window.getBrowserViews();\n allBrowserViews.push(...views);\n });\n\n return allBrowserViews;\n}\n\n/**\n * 通过 WebContents 查找对应的 BrowserView\n * 如果找不到已挂载的 BrowserView,则创建虚拟的 BrowserView 对象\n *\n * @param webContent - WebContents 实例\n * @returns BVItem 实例\n */\nconst getBrowserViewByWebContent = (webContent: WebContents): BVItem => {\n const allBrowserViews = getAllBrowserViews();\n const existingView = allBrowserViews.find(view => view.webContents === webContent) as BVItem;\n\n // 如果找到已挂载的 BrowserView,直接返回\n if (existingView) {\n return existingView;\n }\n\n // 如果 WebContents 存在但未挂载到窗口,创建虚拟 BrowserView\n if (webContent && !webContent.isDestroyed?.()) {\n return createVirtualBrowserView(webContent);\n }\n\n return existingView;\n}\n\n/**\n * 创建虚拟的 BrowserView 对象\n * 用于处理未挂载到窗口的 WebContents\n *\n * @param webContent - WebContents 实例\n * @returns 虚拟的 BVItem 对象\n */\nconst createVirtualBrowserView = (webContent: WebContents): BVItem => {\n const virtualView = {\n id: webContent.id,\n _id: webContent.id,\n _type: 'BV' as const,\n _name: '',\n _extraData: '',\n webContents: webContent,\n\n // 代理方法,通过 IPC 调用主进程\n getBounds: async () => {\n const result = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'borrowView_getBounds',\n data: { webContentId: webContent.id, options: {} }\n });\n return result;\n },\n\n setBounds: async (bounds: any) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'borrowView_setBounds',\n data: { webContentId: webContent.id, options: bounds }\n });\n },\n\n setAutoResize: async (autoResize: boolean) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'borrowView_setAutoResize',\n data: { webContentId: webContent.id, options: autoResize }\n });\n },\n\n setBackgroundColor: async (color: string) => {\n return await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'borrowView_setBackgroundColor',\n data: { webContentId: webContent.id, options: color }\n });\n },\n } as unknown as BVItem;\n\n return virtualView;\n}\n\n/**\n * 为窗口对象设置扩展属性\n *\n * @param window - 窗口对象\n * @param data - 窗口数据\n */\nconst setWindowProperties = (\n window: BWItem | BVItem,\n data: { winId: number; winName: string; winType?: string; winExtraData?: string; winInitUrl?: string }\n): void => {\n if (!window) return;\n\n window._name = data.winName || '';\n window._type = data.winType as 'BW' | 'BV' || '';\n window._extraData = data.winExtraData || '';\n window._initUrl = data.winInitUrl || '';\n}\n\n// ==================== 核心 API ====================\n\n/**\n * 创建窗口\n * 支持创建 BrowserWindow 和 BrowserView\n *\n * @param options - 窗口创建选项\n * @returns Promise<BWItem | BVItem> 创建的窗口实例\n *\n * @example\n * ```typescript\n * // 创建 BrowserWindow\n * const window = await create({\n * type: 'BW',\n * name: 'main-window',\n * url: 'https://example.com'\n * });\n *\n * // 创建 BrowserView\n * const view = await create({\n * type: 'BV',\n * name: 'sidebar-view',\n * url: 'https://example.com/sidebar'\n * });\n * ```\n */\nexport function create(options: Omit<ElectronWindowsManagerOptions, 'type'> & { type?: 'BW' }): Promise<BWItem>;\nexport function create(options: ElectronWindowsManagerOptions & { type: 'BV' }): Promise<BVItem>;\nexport function create(options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem>;\n\nexport async function create(options: ElectronWindowsManagerOptions): Promise<BWItem | BVItem> {\n const remote = getRemote();\n\n // 通过 IPC 调用主进程创建窗口\n const data: { winId: number; winName: string; winType?: string; winExtraData?: string; winInitUrl?: string } =\n await eIpc.RendererIPC.invokeMain('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'create',\n data: options\n });\n\n // 尝试通过 ID 获取窗口\n let window = remote.BrowserWindow.fromId(data.winId) as BWItem | BVItem;\n\n // 如果不是 BrowserWindow,尝试获取 BrowserView\n if (!window) {\n const webContent = remote.webContents.fromId(data.winId);\n if (webContent) {\n window = getBrowserViewByWebContent(webContent);\n }\n }\n\n // 设置窗口属性\n if (window) {\n setWindowProperties(window, data);\n }\n\n return window;\n}\n\n/**\n * 获取当前窗口实例\n *\n * @returns Promise<BWItem | BVItem | undefined> 当前窗口实例\n */\nexport const getCurrentWindow = async (): Promise<BWItem | BVItem | undefined> => {\n const remote = getRemote();\n const currentWindow = remote.getCurrentWindow();\n return await get(currentWindow.id);\n}\n\n/**\n * 根据 ID 或名称获取窗口\n *\n * @param idOrName - 窗口 ID 或名称\n * @returns Promise<BWItem | BVItem | undefined> 窗口实例\n *\n * @example\n * ```typescript\n * // 通过 ID 获取\n * const window = await get(1);\n *\n * // 通过名称获取\n * const window = await get('main-window');\n * ```\n */\nexport const get = async (idOrName: string | number): Promise<BWItem | BVItem | undefined> => {\n const remote = getRemote();\n\n // 通过 IPC 获取窗口信息\n const data: { winId: number; winName: string; winType?: string; winExtraData: string; winInitUrl?: string } =\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'get',\n data: idOrName\n });\n\n // 尝试通过 ID 获取窗口\n let window = remote.BrowserWindow.fromId(data.winId) as BWItem | BVItem;\n\n // 如果不是 BrowserWindow,尝试获取 BrowserView\n if (!window) {\n const webContent = remote.webContents.fromId(data.winId);\n if (webContent) {\n window = getBrowserViewByWebContent(webContent);\n }\n }\n\n // 设置窗口属性\n if (window) {\n setWindowProperties(window, data);\n }\n\n return window;\n}\n\n/**\n * 获取所有窗口\n * 支持按类型过滤\n *\n * @param type - 窗口类型过滤 ('BW' | 'BV')\n * @returns Promise<Map<number, BWItem | BVItem>> 窗口映射表\n *\n * @example\n * ```typescript\n * // 获取所有窗口\n * const allWindows = await getAll();\n *\n * // 只获取 BrowserWindow\n * const browserWindows = await getAll('BW');\n *\n * // 只获取 BrowserView\n * const browserViews = await getAll('BV');\n * ```\n */\nexport function getAll(type: 'BW'): Promise<Map<number, BWItem>>;\nexport function getAll(type: 'BV'): Promise<Map<number, BVItem>>;\nexport function getAll(): Promise<Map<number, BWItem | BVItem>>;\n\nexport async function getAll(type?: 'BW' | 'BV'): Promise<Map<number, BWItem | BVItem>> {\n const remote = getRemote();\n\n // 通过 IPC 获取所有窗口信息\n const windowData = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'getAll',\n data: undefined\n });\n\n const allWindows = new Map<number, BWItem | BVItem>();\n const browserWindows = new Map<number, BWItem>();\n const browserViews = new Map<number, BVItem>();\n\n const allBrowserWindows = remote.BrowserWindow.getAllWindows();\n\n // 遍历窗口数据\n for (const key in windowData) {\n const element = windowData[key];\n let window: BWItem | BVItem | undefined;\n\n // 尝试在 BrowserWindow 中查找\n window = allBrowserWindows.find(win => `${win.id}` === `${element?.winId}`) as BWItem;\n\n // 如果不是 BrowserWindow,尝试获取 BrowserView\n if (!window) {\n const webContent = remote.webContents.fromId(element.winId);\n if (webContent) {\n window = getBrowserViewByWebContent(webContent);\n }\n }\n\n if (window) {\n // 设置窗口属性\n try {\n (window as any).id = Number(element?.winId);\n } catch (error) {\n // 忽略设置 ID 失败的情况\n }\n\n setWindowProperties(window, {\n winId: element.winId,\n winName: element.winName,\n winType: element.winType,\n winExtraData: element.winExtraData,\n winInitUrl: element.winInitUrl\n });\n\n const windowId = window.id || window._id;\n allWindows.set(windowId, window);\n\n // 按类型分类\n if (window._type === 'BW') {\n browserWindows.set(windowId, window as BWItem);\n } else if (window._type === 'BV') {\n browserViews.set(windowId, window as BVItem);\n }\n }\n }\n\n // 根据类型返回对应的映射表\n if (type === 'BW') {\n return browserWindows;\n }\n if (type === 'BV') {\n return browserViews;\n }\n\n return allWindows;\n}\n\n/**\n * 关闭指定窗口\n *\n * @param idOrName - 窗口 ID 或名称\n * @returns Promise<boolean> 操作是否成功\n */\nexport const close = async (idOrName: string | number): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'close',\n data: idOrName\n });\n return true;\n}\n\n/**\n * 关闭所有窗口\n *\n * @returns Promise<boolean> 操作是否成功\n */\nexport const closeAll = async (): Promise<boolean> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'closeAll',\n data: undefined\n });\n return true;\n}\n\n/**\n * 根据 WebContents ID 查找对应的窗口\n *\n * @param webContentId - WebContents ID\n * @returns Promise<BWItem | BVItem | undefined> 窗口实例\n */\nexport const getWindowForWebContentId = async (webContentId: number): Promise<BWItem | BVItem | undefined> => {\n const winId = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'getWindowForWebContentId',\n data: webContentId\n });\n return get(winId);\n}\n\n/**\n * 重命名窗口\n *\n * @param idOrName - 窗口 ID 或名称\n * @param newName - 新名称\n * @returns Promise<BWItem | BVItem | undefined> 重命名后的窗口实例\n */\nexport const rename = async (idOrName: string | number, newName: string): Promise<BWItem | BVItem | undefined> => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'rename',\n data: { idOrName, newName }\n });\n return get(data.winId);\n}\n\n/**\n * 重置窗口初始化URL\n *\n * @param idOrName - 窗口 ID 或名称\n * @param url - 新URL\n * @returns Promise<BWItem | BVItem | undefined> 重置后的窗口实例\n */\nexport const reInitUrl = async (idOrName: string | number, url: string): Promise<BWItem | BVItem | undefined> => {\n const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'reInitUrl',\n data: { idOrName, url }\n });\n return get(data.winId);\n}\n\n/**\n * 设置预加载 WebContents URL\n *\n * @param preloadWebContentsUrl - 预加载 URL\n */\nexport const setPreloadWebContentsUrl = async (preloadWebContentsUrl: string): Promise<void> => {\n await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', {\n type: 'setPreloadWebContentsUrl',\n data: preloadWebContentsUrl\n });\n}\n\n/**\n * 获取预加载脚本路径\n * 使用缓存机制避免重复请求\n *\n * @returns Promise<string | undefined> 预加载脚本路径\n */\nexport const getPreload = (() => {\n let cachedPreload: string | undefined = undefined;\n\n return async (): Promise<string | undefined> => {\n // 如果已有缓存,直接返回\n if (cachedPreload !== undefined) {\n return cachedPreload;\n }\n\n // 通过 IPC 获取预加载脚本路径\n const data: string | undefined = await getIpc().invoke(\n '__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__',\n {\n type: 'getPreload',\n data: undefined,\n }\n );\n\n // 缓存结果\n cachedPreload = data;\n return data;\n };\n})();\n\n// 初始化时获取预加载脚本\ngetPreload();\n\n// ==================== 开发工具相关(已注释) ====================\n\n/*\n * 开发工具相关功能(已注释,可根据需要启用)\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 */\n"],"names":[],"mappings":"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"}
package/main/index.d.ts CHANGED
@@ -50,6 +50,7 @@ export declare class WindowsManager {
50
50
  close(idOrName: string | number): boolean;
51
51
  closeAll(): void;
52
52
  rename(idOrName: string | number, newName: string): BWItem | BVItem | undefined;
53
+ reInitUrl(idOrName: string | number, url: string): BWItem | BVItem | undefined;
53
54
  getPreload(): string | undefined;
54
55
  private _applyBrowserWindowOptions;
55
56
  private _applyBrowserViewOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,WAAW,EAAkE,MAAM,UAAU,CAAA;AAIvI,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE/E,eAAO,MAAM,gBAAgB,wBAQzB,CAAC;AAUL,eAAO,MAAM,MAAM,QAAS,WAAW,SAEtC,CAAA;AAmBD,qBAAa,cAAc;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvD,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,UAAU,EAAE,OAAO,CAAS;IAC5B,sBAAsB,EAAE,MAAM,EAAE,CAAM;IACtC;;;;;;;;;;;;;;;OAeG;gBACS,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE;IAe/I,wBAAwB,CAAC,qBAAqB,EAAE,MAAM;YAgBxC,iBAAiB;IAwB/B,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,gBAAgB;IAyCxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM;IACtF,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM;IACvE,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG,MAAM,GAAG,MAAM;IAgX/D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,6BAA6B;IAmF5E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IA6B3D,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAyBtC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAqC/B,QAAQ;IA0BR,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM;IAqCjD,UAAU;IAKV,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,wBAAwB;IAiB1B,wBAAwB,CAAC,GAAG,EAAE,MAAM;CAqB3C;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,mBAAmB,MAAM,iBAAiB,MAAM,0BAA0B,MAAM,2BAA2B,MAAM,EAAE,KAAG,cAkPhK,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,WAAW,EAAkE,MAAM,UAAU,CAAA;AAIvI,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE/E,eAAO,MAAM,gBAAgB,wBAQzB,CAAC;AAUL,eAAO,MAAM,MAAM,QAAS,WAAW,SAEtC,CAAA;AAoBD,qBAAa,cAAc;IACzB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,gCAAgC,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvD,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,UAAU,EAAE,OAAO,CAAS;IAC5B,sBAAsB,EAAE,MAAM,EAAE,CAAM;IACtC;;;;;;;;;;;;;;;OAeG;gBACS,OAAO,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,sBAAsB,CAAC,EAAE,MAAM,EAAE;IAe/I,wBAAwB,CAAC,qBAAqB,EAAE,MAAM;YAgBxC,iBAAiB;IAwB/B,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,gBAAgB;IAyCxB,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM;IACtF,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM;IACvE,MAAM,CAAC,OAAO,EAAE,6BAA6B,GAAG,MAAM,GAAG,MAAM;IAsX/D,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,6BAA6B;IAmF5E,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IA6B3D,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAyBtC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAqC/B,QAAQ;IA0BR,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM;IAqCjD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS;IAgB9E,UAAU;IAKV,OAAO,CAAC,0BAA0B;IAoBlC,OAAO,CAAC,wBAAwB;IAiB1B,wBAAwB,CAAC,GAAG,EAAE,MAAM;CAqB3C;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,mBAAmB,MAAM,iBAAiB,MAAM,0BAA0B,MAAM,2BAA2B,MAAM,EAAE,KAAG,cA4QhK,CAAA"}