@lynker-desktop/electron-window-manager 0.0.4-alpha.65 → 0.0.4-alpha.66

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.
@@ -51,7 +51,7 @@ const create = async (options) => {
51
51
  // @ts-ignore
52
52
  win && (win['_name'] = `${data.winName}`);
53
53
  // @ts-ignore
54
- win && (win['_type'] = `${element?.winType || ''}`);
54
+ win && (win['_type'] = `${data?.winType || ''}`);
55
55
  // @ts-ignore
56
56
  win && (win['_extraData'] = `${data.winExtraData || ''}`);
57
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer} 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\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport const create = async (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'] = `${element?.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 return get(winId);\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 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 return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport const getAll = async (): 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 allV = getAllBv();\n console.error(getAllBv())\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 // @ts-ignore\n win = allV.find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\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 wins.set(key, win)\n }\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\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":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer} 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\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport const create = async (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 return get(winId);\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 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 return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport const getAll = async (): 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 allV = getAllBv();\n console.error(getAllBv())\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 // @ts-ignore\n win = allV.find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\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 wins.set(key, win)\n }\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\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynker-desktop/electron-window-manager",
3
- "version": "0.0.4-alpha.65",
3
+ "version": "0.0.4-alpha.66",
4
4
  "description": "electron-window-manager",
5
5
  "keywords": [
6
6
  "electron",
@@ -77,5 +77,5 @@
77
77
  "tslib": "^2.6.3",
78
78
  "typescript": "^5.5.3"
79
79
  },
80
- "gitHead": "1c0baf4085971bfd4a3de3416345cc6a61ce3253"
80
+ "gitHead": "f96708531de1c300c7144b6713d514bf03d95ef7"
81
81
  }
package/renderer/index.js CHANGED
@@ -51,7 +51,7 @@ const create = async (options) => {
51
51
  // @ts-ignore
52
52
  win && (win['_name'] = `${data.winName}`);
53
53
  // @ts-ignore
54
- win && (win['_type'] = `${element?.winType || ''}`);
54
+ win && (win['_type'] = `${data?.winType || ''}`);
55
55
  // @ts-ignore
56
56
  win && (win['_extraData'] = `${data.winExtraData || ''}`);
57
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer} 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\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport const create = async (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'] = `${element?.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 return get(winId);\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 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 return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport const getAll = async (): 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 allV = getAllBv();\n console.error(getAllBv())\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 // @ts-ignore\n win = allV.find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\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 wins.set(key, win)\n }\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\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/src/renderer/index.ts"],"sourcesContent":["/** Used in Renderer process */\nimport type {BrowserView, BrowserWindow, IpcRenderer} 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\n/**\n * 创建窗口\n * @param options\n * @returns\n */\nexport const create = async (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 return get(winId);\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 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 return win;\n}\n\n/**\n * 获取所有窗口\n * @returns\n */\nexport const getAll = async (): 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 allV = getAllBv();\n console.error(getAllBv())\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 // @ts-ignore\n win = allV.find(i => i.webContents === webContent) as BVItem;\n }\n if (win) {\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 wins.set(key, win)\n }\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\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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"}