@lynker-desktop/electron-window-manager 0.0.4-alpha.2 → 0.0.4-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/common/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import type { BrowserWindow, BrowserWindowConstructorOptions } from 'electron';
2
+ export interface BrowserWindowType extends Omit<BrowserWindowConstructorOptions, 'parent'> {
3
+ parent?: number | BrowserWindowConstructorOptions['parent'];
4
+ }
2
5
  declare global {
3
6
  interface Window {
4
7
  __ELECTRON_WINDOW_MANAGER__?: any;
@@ -7,10 +10,11 @@ declare global {
7
10
  export interface ElectronWindowsManagerOptions {
8
11
  name: string;
9
12
  url: string;
13
+ extraData?: string;
10
14
  loadingView?: {
11
15
  url: string;
12
16
  };
13
- browserWindow?: BrowserWindowConstructorOptions;
17
+ browserWindow?: BrowserWindowType;
14
18
  openDevTools?: boolean;
15
19
  preventOriginClose?: boolean;
16
20
  preventOriginNavigate?: boolean;
@@ -18,5 +22,7 @@ export interface ElectronWindowsManagerOptions {
18
22
  export interface WindowItem extends BrowserWindow {
19
23
  /** BW别名 */
20
24
  _name: string;
25
+ /** 额外数据 */
26
+ _extraData?: string;
21
27
  }
22
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAG/E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AACD,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,+BAA+B,CAAC;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAE/E,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AACD,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -1,4 +1,7 @@
1
1
  import type { BrowserWindow, BrowserWindowConstructorOptions } from 'electron';
2
+ export interface BrowserWindowType extends Omit<BrowserWindowConstructorOptions, 'parent'> {
3
+ parent?: number | BrowserWindowConstructorOptions['parent'];
4
+ }
2
5
  declare global {
3
6
  interface Window {
4
7
  __ELECTRON_WINDOW_MANAGER__?: any;
@@ -7,10 +10,11 @@ declare global {
7
10
  export interface ElectronWindowsManagerOptions {
8
11
  name: string;
9
12
  url: string;
13
+ extraData?: string;
10
14
  loadingView?: {
11
15
  url: string;
12
16
  };
13
- browserWindow?: BrowserWindowConstructorOptions;
17
+ browserWindow?: BrowserWindowType;
14
18
  openDevTools?: boolean;
15
19
  preventOriginClose?: boolean;
16
20
  preventOriginNavigate?: boolean;
@@ -18,5 +22,7 @@ export interface ElectronWindowsManagerOptions {
18
22
  export interface WindowItem extends BrowserWindow {
19
23
  /** BW别名 */
20
24
  _name: string;
25
+ /** 额外数据 */
26
+ _extraData?: string;
21
27
  }
22
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAG/E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AACD,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,+BAA+B,CAAC;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAE/E,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IACxF,MAAM,CAAC,EAAE,MAAM,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;CAC7D;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC;CACF;AACD,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -3,15 +3,14 @@ import type { ElectronWindowsManagerOptions, WindowItem } from '../common';
3
3
  export declare const enable: (win: WebContents) => void;
4
4
  export declare class WindowsManager {
5
5
  preload?: string;
6
- windows: Map<number, WindowItem>;
6
+ windows: Map<number, WindowItem | null>;
7
7
  constructor(preload?: string);
8
8
  create(options: ElectronWindowsManagerOptions): WindowItem;
9
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;
10
+ get(idOrName: string | number): WindowItem | undefined;
11
+ getAll(): Map<number, WindowItem | null>;
12
+ close(idOrName: string | number): undefined;
13
+ closeAll(): void;
15
14
  getPreload(): string | undefined;
16
15
  }
17
16
  export declare let isInitialized: boolean;
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,WAAW,EAAmC,MAAM,UAAU,CAAA;AAGnG,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,GAAG,IAAI,CAAC,CAAC;gBAC5B,OAAO,CAAC,EAAE,MAAM;IAK5B,MAAM,CAAC,OAAO,EAAE,6BAA6B;IAyE7C,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,6BAA6B;IA+EhF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS;IAiBtD,MAAM;IAKN,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAoB/B,QAAQ;IAQR,UAAU;CAIX;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,KAAG,cA4F7C,CAAA"}
package/esm/main/index.js CHANGED
@@ -15,10 +15,22 @@ class WindowsManager {
15
15
  this.windows = new Map();
16
16
  }
17
17
  create(options) {
18
- const { name = 'anonymous', loadingView, browserWindow: browserWindowOptions = {}, openDevTools = false, preventOriginClose = false, } = options;
18
+ log('log', 'create', options);
19
+ const { name = 'anonymous', loadingView, browserWindow: browserWindowOptions, openDevTools = false, preventOriginClose = false, } = options;
20
+ let parentWin = undefined;
21
+ if (typeof browserWindowOptions?.parent === 'number') {
22
+ parentWin = BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;
23
+ if (parentWin) {
24
+ browserWindowOptions.parent = parentWin;
25
+ }
26
+ else {
27
+ browserWindowOptions.parent = undefined;
28
+ }
29
+ }
19
30
  const window = new BrowserWindow(_.merge({
20
31
  acceptFirstMouse: true,
21
- }, browserWindowOptions, {
32
+ }, (browserWindowOptions || {}), {
33
+ parent: parentWin,
22
34
  webPreferences: {
23
35
  plugins: true,
24
36
  nodeIntegration: true,
@@ -31,14 +43,22 @@ class WindowsManager {
31
43
  }));
32
44
  remote.enable(window.webContents);
33
45
  window._name = name;
46
+ window._extraData = `${options?.extraData || ''}`;
34
47
  if (loadingView?.url) {
35
48
  this._setLoadingView(window, options);
36
49
  }
37
- window.on('close', (event) => {
50
+ window.addListener('close', (event) => {
51
+ log('log', 'close', window.id, window._name);
52
+ this.windows.set(window.id, null);
53
+ this.windows.delete(window.id);
38
54
  if (preventOriginClose) {
39
55
  event.preventDefault();
40
56
  return;
41
57
  }
58
+ });
59
+ window.addListener('closed', () => {
60
+ log('log', 'closed', window.id, window._name);
61
+ this.windows.set(window.id, null);
42
62
  this.windows.delete(window.id);
43
63
  });
44
64
  window.webContents.on('dom-ready', () => {
@@ -125,32 +145,40 @@ class WindowsManager {
125
145
  window.webContents.on('did-fail-load', onFailure);
126
146
  }
127
147
  }
128
- get(name) {
148
+ get(idOrName) {
149
+ log('log', 'get', idOrName);
129
150
  let win = undefined;
130
151
  this.windows.forEach((i) => {
131
- if (i._name === name) {
132
- win = i;
152
+ if (typeof idOrName === 'number') {
153
+ if (i?.id === idOrName) {
154
+ win = i;
155
+ }
133
156
  }
134
- });
135
- return win;
136
- }
137
- getById(id) {
138
- let win = undefined;
139
- this.windows.forEach((i) => {
140
- if (i.id === id) {
141
- win = i;
157
+ else if (typeof idOrName === 'string') {
158
+ if (i?._name === idOrName) {
159
+ win = i;
160
+ }
142
161
  }
143
162
  });
144
163
  return win;
145
164
  }
146
165
  getAll() {
166
+ log('log', 'getAll');
147
167
  return this.windows;
148
168
  }
149
- close(name) {
169
+ close(idOrName) {
170
+ log('log', 'close', idOrName);
150
171
  let win = undefined;
151
172
  this.windows.forEach((i) => {
152
- if (i._name === name) {
153
- win = i;
173
+ if (typeof idOrName === 'number') {
174
+ if (i?.id === idOrName) {
175
+ win = i;
176
+ }
177
+ }
178
+ else if (typeof idOrName === 'string') {
179
+ if (i?._name === idOrName) {
180
+ win = i;
181
+ }
154
182
  }
155
183
  });
156
184
  // @ts-ignore
@@ -158,19 +186,15 @@ class WindowsManager {
158
186
  // @ts-ignore
159
187
  return win && win?.destroy();
160
188
  }
161
- closeById(id) {
162
- let win = undefined;
189
+ closeAll() {
190
+ log('log', 'closeAll');
163
191
  this.windows.forEach((i) => {
164
- if (i.id === id) {
165
- win = i;
166
- }
192
+ i && this.windows.delete(i?.id);
193
+ i && i?.destroy();
167
194
  });
168
- // @ts-ignore
169
- win && this.windows.delete(win?.id);
170
- // @ts-ignore
171
- return win && win?.destroy();
172
195
  }
173
196
  getPreload() {
197
+ log('log', 'getPreload');
174
198
  return this.preload;
175
199
  }
176
200
  }
@@ -179,7 +203,7 @@ global['__ELECTRON_WINDOWS_MANAGER__'] = undefined;
179
203
  let isInitialized = false;
180
204
  const initialize = (preload) => {
181
205
  // @ts-ignore
182
- if (global['__ELECTRON_WINDOWS_MANAGER__']) {
206
+ if (isInitialized && global['__ELECTRON_WINDOWS_MANAGER__']) {
183
207
  // @ts-ignore
184
208
  return global['__ELECTRON_WINDOWS_MANAGER__'];
185
209
  }
@@ -193,30 +217,25 @@ const initialize = (preload) => {
193
217
  if (findWin) {
194
218
  findWin.focus();
195
219
  return {
196
- winId: findWin?.id,
197
- winName: findWin?._name,
220
+ winId: Number(`${findWin?.id - 1}`),
221
+ winName: `${findWin?._name || ''}`,
222
+ winExtraData: `${findWin?._extraData || ''}`,
198
223
  };
199
224
  }
200
225
  const res = wm.create(opt.data);
201
226
  return {
202
- winId: Number(res.id),
203
- winName: res._name,
227
+ winId: Number(`${res.id || -1}`),
228
+ winName: `${res?._name || ''}`,
229
+ winExtraData: `${res?._extraData || ''}`,
204
230
  };
205
231
  }
206
232
  if (data?.type === 'get') {
207
233
  const opt = data;
208
234
  const res = wm.get(opt?.data);
209
235
  return {
210
- winId: res?.id ? Number(res?.id) : -1,
211
- winName: res?._name ? res?._name : '',
212
- };
213
- }
214
- if (data?.type === 'getById') {
215
- const opt = data;
216
- const res = wm.getById(opt?.data);
217
- return {
218
- winId: res?.id ? Number(res?.id) : -1,
219
- winName: res?._name ? res?._name : '',
236
+ winId: Number(`${res?.id || -1}`),
237
+ winName: `${res?._name || ''}`,
238
+ winExtraData: `${res?._extraData || ''}`,
220
239
  };
221
240
  }
222
241
  if (data?.type === 'getAll') {
@@ -225,8 +244,9 @@ const initialize = (preload) => {
225
244
  res.forEach(i => {
226
245
  // @ts-ignore
227
246
  obj[i.id] = {
228
- winId: i?.id ? Number(i?.id) : -1,
229
- winName: i?._name ? i?._name : '',
247
+ winId: Number(`${i?.id || -1}`),
248
+ winName: `${i?._name || ''}`,
249
+ winExtraData: `${i?._extraData || ''}`,
230
250
  };
231
251
  });
232
252
  return obj;
@@ -236,9 +256,8 @@ const initialize = (preload) => {
236
256
  const res = wm.close(opt?.data);
237
257
  return res;
238
258
  }
239
- if (data?.type === 'closeById') {
240
- const opt = data;
241
- const res = wm.closeById(opt?.data);
259
+ if (data?.type === 'closeAll') {
260
+ const res = wm.closeAll();
242
261
  return res;
243
262
  }
244
263
  if (data?.type === 'getPreload') {
@@ -249,6 +268,15 @@ const initialize = (preload) => {
249
268
  });
250
269
  return wm;
251
270
  };
271
+ const log = (type, ...data) => {
272
+ const key = `[electron-window-manager]: `;
273
+ try {
274
+ console[type](key, ...data);
275
+ }
276
+ catch (error) {
277
+ console.error(key, error);
278
+ }
279
+ };
252
280
 
253
281
  export { WindowsManager, enable, initialize, isInitialized };
254
282
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../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":[],"mappings":";;;;;AAMA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;IAC3B,MAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEY,MAAA,MAAM,GAAG,CAAC,GAAgB,KAAI;AACzC,IAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,EAAC;MAEY,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;KAC1B;AAED,IAAA,MAAM,CAAC,OAAsC,EAAA;QAC3C,MAAM,EACJ,IAAI,GAAG,WAAW,EAClB,WAAW,EACX,aAAa,EAAE,oBAAoB,GAAG,EAAE,EACxC,YAAY,GAAG,KAAK,EACpB,kBAAkB,GAAG,KAAK,GAC3B,GAAG,OAAO,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B,CAAC,CAAC,KAAK,CACL;AACE,YAAA,gBAAgB,EAAE,IAAI;AACvB,SAAA,EACD,oBAAoB,EACpB;AACE,YAAA,cAAc,EAAE;AACd,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,gBAAgB,EAAE,KAAK;AACvB,gBAAA,oBAAoB,EAAE,KAAK;AAC3B,gBAAA,gBAAgB,EAAE,KAAK;AACvB,gBAAA,WAAW,EAAE,KAAK;gBAClB,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO;AACvE,aAAA;AACF,SAAA,CACF,CACY,CAAC;AAChB,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,WAAW,EAAE,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACvC;QACD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;YAC3B,IAAI,kBAAkB,EAAE;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO;aACR;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAChC,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAK;YACtC,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;aACnC;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAC7B;aAAM;AACL,YAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAC5B;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,QAAA,OAAO,MAAM,CAAC;KACf;IAED,eAAe,CAAC,MAAkB,EAAE,aAA4C,EAAA;QAC9E,IAAI,aAAa,EAAE;YACjB,MAAM,EACJ,WAAW,EACX,qBAAqB,GAAG,KAAK,GAC9B,GAAG,aAAa,CAAC;AAClB,YAAA,IAAI,YAAY,GAAG,IAAI,WAAW,CAAC;AACjC,gBAAA,cAAc,EAAE;AACd,oBAAA,gBAAgB,EAAE,KAAK;AACvB,oBAAA,eAAe,EAAE,IAAI;;AAErB,oBAAA,WAAW,EAAE,KAAK;AACnB,iBAAA;AACF,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;gBACxB,OAAO;aACR;YAED,MAAM,eAAe,GAAG,MAAK;gBAC3B,MAAM,CAAE,SAAS,EAAE,UAAU,CAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AACnD,gBAAA,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACpC,YAAY,CAAC,SAAS,CAAC;AACrB,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,SAAS,IAAI,EAAE;oBACtB,MAAM,EAAE,UAAU,IAAI,EAAE;AACzB,iBAAA,CAAC,CAAC;gBACH,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC3D,aAAC,CAAC;YAEF,MAAM,SAAS,GAAG,MAAK;AACrB,gBAAA,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvE,oBAAA,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;iBAClC;AACD,gBAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;oBACxB,OAAO;iBACR;gBAED,IAAI,MAAM,EAAE;AACV,oBAAA,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBACxC;AACH,aAAC,CAAC;AAEF,YAAA,eAAe,EAAE,CAAC;YAElB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAK;AAClC,gBAAA,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvE,oBAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;wBACxB,OAAO;qBACR;oBACD,MAAM,CAAE,SAAS,EAAE,UAAU,CAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnD,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;iBAC1F;AACH,aAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAET,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,KAAI;gBAC3C,IAAI,qBAAqB,EAAE;oBACzB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,OAAO;iBACR;AACD,gBAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;oBACxB,OAAO;iBACR;AACD,gBAAA,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvE,oBAAA,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;iBACrC;qBAAM;;AAEL,oBAAA,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;AACjC,oBAAA,eAAe,EAAE,CAAC;iBACnB;AACH,aAAC,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;SACnD;KACF;AAED,IAAA,GAAG,CAAC,IAAY,EAAA;QACd,IAAI,GAAG,GAA2B,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAa,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;gBACpB,GAAG,GAAG,CAAC,CAAC;aACT;AACH,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,OAAO,CAAC,EAAU,EAAA;QAChB,IAAI,GAAG,GAA2B,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAa,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACf,GAAG,GAAG,CAAC,CAAC;aACT;AACH,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,IAAI,GAAG,GAA2B,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAa,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;gBACpB,GAAG,GAAG,CAAC,CAAC;aACT;AACH,SAAC,CAAC,CAAA;;QAEF,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;;AAEnC,QAAA,OAAO,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;KAC9B;AAED,IAAA,SAAS,CAAC,EAAU,EAAA;QAClB,IAAI,GAAG,GAA2B,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAa,KAAI;AACrC,YAAA,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACf,GAAG,GAAG,CAAC,CAAC;aACT;AACH,SAAC,CAAC,CAAA;;QAEF,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;;AAEnC,QAAA,OAAO,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;KAC9B;IAED,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AACF,CAAA;AACD;AACA,MAAM,CAAC,8BAA8B,CAAC,GAAG,SAAS,CAAC;AAE5C,IAAI,aAAa,GAAG,MAAM;AAEpB,MAAA,UAAU,GAAG,CAAC,OAAgB,KAAoB;;AAE7D,IAAA,IAAI,MAAM,CAAC,8BAA8B,CAAC,EAAE;;AAE1C,QAAA,OAAO,MAAM,CAAC,8BAA8B,CAAC,CAAC;KAC/C;IACD,aAAa,GAAG,IAAI,CAAC;;AAErB,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,8BAA8B,CAAC,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/E,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,yCAAyC,EAAE,OAAO,IAAS,KAAI;AACzF,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC3B,MAAM,GAAG,GAAG,IAGX,CAAC;AACF,YAAA,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO;oBACL,KAAK,EAAE,OAAO,EAAE,EAAE;oBAClB,OAAO,EAAE,OAAO,EAAE,KAAK;iBACxB,CAAC;aACH;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC/B,OAAO;AACL,gBAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,GAAG,CAAC,KAAK;aACnB,CAAC;SACH;AACD,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE;YACxB,MAAM,GAAG,GAAG,IAGX,CAAC;YACF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAQ;AACN,gBAAA,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACrC,gBAAA,OAAO,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,EAAE;aACtC,CAAC;SACH;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE;YAC5B,MAAM,GAAG,GAAG,IAGX,CAAC;YACF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACjC,OAAQ;AACN,gBAAA,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACrC,gBAAA,OAAO,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,EAAE;aACtC,CAAC;SACH;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;AAK3B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAA;YACvB,MAAM,GAAG,GAAG,EAAE,CAAA;AACd,YAAA,GAAG,CAAC,OAAO,CAAC,CAAC,IAAG;;AAEd,gBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;AACV,oBAAA,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACjC,oBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE;iBAClC,CAAA;AACH,aAAC,CAAC,CAAA;AACF,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE;YAC1B,MAAM,GAAG,GAAG,IAGX,CAAC;YACF,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAC/B,YAAA,OAAQ,GAAG,CAAC;SACb;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE;YAC9B,MAAM,GAAG,GAAG,IAGX,CAAC;YACF,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACnC,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,YAAY,EAAE;AAK/B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA;AAC3B,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,OAAO,SAAS,CAAA;AAClB,KAAC,CAAC,CAAA;AACF,IAAA,OAAO,EAAE,CAAC;AACZ;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/main/index.ts"],"sourcesContent":["import _ from 'lodash'\nimport { BrowserWindow, BrowserView, WebContents, BrowserWindowConstructorOptions } 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 | null>;\n constructor(preload?: string) {\n this.preload = preload;\n this.windows = new Map();\n }\n\n create(options: ElectronWindowsManagerOptions) {\n log('log', 'create', options);\n const {\n name = 'anonymous',\n loadingView,\n browserWindow: browserWindowOptions,\n openDevTools = false,\n preventOriginClose = false,\n } = options;\n let parentWin:BrowserWindowConstructorOptions['parent'] = undefined;\n if (typeof browserWindowOptions?.parent === 'number') {\n parentWin = BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;\n if (parentWin) {\n browserWindowOptions.parent = parentWin;\n } else {\n browserWindowOptions.parent = undefined;\n }\n }\n const window = new BrowserWindow(\n _.merge(\n {\n acceptFirstMouse: true,\n },\n (browserWindowOptions || {}),\n {\n parent: parentWin,\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 window._extraData = `${options?.extraData || ''}`;\n if (loadingView?.url) {\n this._setLoadingView(window, options);\n }\n window.addListener('close', (event) => {\n log('log', 'close', window.id, window._name);\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n if (preventOriginClose) {\n event.preventDefault();\n return;\n }\n });\n window.addListener('closed', () => {\n log('log', 'closed', window.id, window._name);\n this.windows.set(window.id, null)\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(idOrName: string | number): WindowItem | undefined {\n log('log', 'get', idOrName);\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i) => {\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n return win;\n }\n\n getAll() {\n log('log', 'getAll');\n return this.windows;\n }\n\n close(idOrName: string | number) {\n log('log', 'close', idOrName);\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i) => {\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n // @ts-ignore\n win && this.windows.delete(win?.id)\n // @ts-ignore\n return win && win?.destroy();\n }\n\n closeAll() {\n log('log', 'closeAll');\n this.windows.forEach((i) => {\n i && this.windows.delete(i?.id)\n i && i?.destroy();\n })\n }\n\n getPreload() {\n log('log', '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 (isInitialized && 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: Number(`${findWin?.id - 1}`),\n winName: `${findWin?._name || ''}`,\n winExtraData: `${findWin?._extraData || ''}`,\n };\n }\n const res = wm.create(opt.data)\n return {\n winId: Number(`${res.id || -1}`),\n winName: `${res?._name || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n };\n }\n if (data?.type === 'get') {\n const opt = data as {\n type: 'get';\n data: string | number;\n };\n const res = wm.get(opt?.data)\n return {\n winId: Number(`${res?.id || -1}`),\n winName: `${res?._name || ''}`,\n winExtraData: `${res?._extraData || ''}`,\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: Number(`${i?.id || -1}`),\n winName: `${i?._name || ''}`,\n winExtraData: `${i?._extraData || ''}`,\n }\n })\n return obj;\n }\n\n if (data?.type === 'close') {\n const opt = data as {\n type: 'close';\n data: string | number;\n };\n const res = wm.close(opt?.data)\n return res;\n }\n\n if (data?.type === 'closeAll') {\n const opt = data as {\n type: 'closeAll';\n data: undefined;\n };\n const res = wm.closeAll()\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\nconst log = (type: 'log' | 'error', ...data: any[]) => {\n const key = `[electron-window-manager]: `\n try {\n console[type](key, ...data);\n } catch (error) {\n console.error(key, error)\n }\n}\n"],"names":[],"mappings":";;;;;AAMA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE;IAC3B,MAAM,CAAC,UAAU,EAAE,CAAC;AACtB,CAAC;AAEY,MAAA,MAAM,GAAG,CAAC,GAAgB,KAAI;AACzC,IAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACpB,EAAC;MAEY,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;KAC1B;AAED,IAAA,MAAM,CAAC,OAAsC,EAAA;AAC3C,QAAA,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,EACJ,IAAI,GAAG,WAAW,EAClB,WAAW,EACX,aAAa,EAAE,oBAAoB,EACnC,YAAY,GAAG,KAAK,EACpB,kBAAkB,GAAG,KAAK,GAC3B,GAAG,OAAO,CAAC;QACZ,IAAI,SAAS,GAA6C,SAAS,CAAC;AACpE,QAAA,IAAI,OAAO,oBAAoB,EAAE,MAAM,KAAK,QAAQ,EAAE;YACpD,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;YAC5E,IAAI,SAAS,EAAE;AACb,gBAAA,oBAAoB,CAAC,MAAM,GAAG,SAAS,CAAC;aACzC;iBAAM;AACL,gBAAA,oBAAoB,CAAC,MAAM,GAAG,SAAS,CAAC;aACzC;SACF;QACD,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B,CAAC,CAAC,KAAK,CACL;AACE,YAAA,gBAAgB,EAAE,IAAI;AACvB,SAAA,GACA,oBAAoB,IAAI,EAAE,GAC3B;AACE,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,cAAc,EAAE;AACd,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,gBAAgB,EAAE,KAAK;AACvB,gBAAA,oBAAoB,EAAE,KAAK;AAC3B,gBAAA,gBAAgB,EAAE,KAAK;AACvB,gBAAA,WAAW,EAAE,KAAK;gBAClB,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO;AACvE,aAAA;AACF,SAAA,CACF,CACY,CAAC;AAChB,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,UAAU,GAAG,CAAG,EAAA,OAAO,EAAE,SAAS,IAAI,EAAE,CAAA,CAAE,CAAC;AAClD,QAAA,IAAI,WAAW,EAAE,GAAG,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACvC;QACD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;AACpC,YAAA,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC9B,IAAI,kBAAkB,EAAE;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO;aACR;AACH,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAK;AAChC,YAAA,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAChC,SAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAK;YACtC,IAAI,YAAY,EAAE;AAChB,gBAAA,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;aACnC;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAC7B;aAAM;AACL,YAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;SAC5B;QACD,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,QAAA,OAAO,MAAM,CAAC;KACf;IAED,eAAe,CAAC,MAAkB,EAAE,aAA4C,EAAA;QAC9E,IAAI,aAAa,EAAE;YACjB,MAAM,EACJ,WAAW,EACX,qBAAqB,GAAG,KAAK,GAC9B,GAAG,aAAa,CAAC;AAClB,YAAA,IAAI,YAAY,GAAG,IAAI,WAAW,CAAC;AACjC,gBAAA,cAAc,EAAE;AACd,oBAAA,gBAAgB,EAAE,KAAK;AACvB,oBAAA,eAAe,EAAE,IAAI;;AAErB,oBAAA,WAAW,EAAE,KAAK;AACnB,iBAAA;AACF,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;gBACxB,OAAO;aACR;YAED,MAAM,eAAe,GAAG,MAAK;gBAC3B,MAAM,CAAE,SAAS,EAAE,UAAU,CAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;AACnD,gBAAA,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;gBACpC,YAAY,CAAC,SAAS,CAAC;AACrB,oBAAA,CAAC,EAAE,CAAC;AACJ,oBAAA,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,SAAS,IAAI,EAAE;oBACtB,MAAM,EAAE,UAAU,IAAI,EAAE;AACzB,iBAAA,CAAC,CAAC;gBACH,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC3D,aAAC,CAAC;YAEF,MAAM,SAAS,GAAG,MAAK;AACrB,gBAAA,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvE,oBAAA,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;iBAClC;AACD,gBAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;oBACxB,OAAO;iBACR;gBAED,IAAI,MAAM,EAAE;AACV,oBAAA,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBACxC;AACH,aAAC,CAAC;AAEF,YAAA,eAAe,EAAE,CAAC;YAElB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAK;AAClC,gBAAA,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvE,oBAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;wBACxB,OAAO;qBACR;oBACD,MAAM,CAAE,SAAS,EAAE,UAAU,CAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnD,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC;iBAC1F;AACH,aAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAET,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,KAAI;gBAC3C,IAAI,qBAAqB,EAAE;oBACzB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,OAAO;iBACR;AACD,gBAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;oBACxB,OAAO;iBACR;AACD,gBAAA,IAAI,YAAY,CAAC,WAAW,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;AACvE,oBAAA,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;iBACrC;qBAAM;;AAEL,oBAAA,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;AACjC,oBAAA,eAAe,EAAE,CAAC;iBACnB;AACH,aAAC,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACjD,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;SACnD;KACF;AAED,IAAA,GAAG,CAAC,QAAyB,EAAA;AAC3B,QAAA,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,IAAI,GAAG,GAA2B,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,YAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,EAAE,EAAE,KAAK,QAAQ,EAAE;oBACtB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;AAAM,iBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACvC,gBAAA,IAAI,CAAC,EAAE,KAAK,KAAK,QAAQ,EAAE;oBACzB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;AACH,SAAC,CAAC,CAAA;AACF,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,GAAA;AACJ,QAAA,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,KAAK,CAAC,QAAyB,EAAA;AAC7B,QAAA,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9B,IAAI,GAAG,GAA2B,SAAS,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,YAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,EAAE,EAAE,KAAK,QAAQ,EAAE;oBACtB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;AAAM,iBAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACvC,gBAAA,IAAI,CAAC,EAAE,KAAK,KAAK,QAAQ,EAAE;oBACzB,GAAG,GAAG,CAAC,CAAC;iBACT;aACF;AACH,SAAC,CAAC,CAAA;;QAEF,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;;AAEnC,QAAA,OAAO,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;KAC9B;IAED,QAAQ,GAAA;AACN,QAAA,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACzB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC/B,YAAA,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;AACpB,SAAC,CAAC,CAAA;KACH;IAED,UAAU,GAAA;AACR,QAAA,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AACF,CAAA;AACD;AACA,MAAM,CAAC,8BAA8B,CAAC,GAAG,SAAS,CAAC;AAE5C,IAAI,aAAa,GAAG,MAAM;AAEpB,MAAA,UAAU,GAAG,CAAC,OAAgB,KAAoB;;AAE7D,IAAA,IAAI,aAAa,IAAI,MAAM,CAAC,8BAA8B,CAAC,EAAE;;AAE3D,QAAA,OAAO,MAAM,CAAC,8BAA8B,CAAC,CAAC;KAC/C;IACD,aAAa,GAAG,IAAI,CAAC;;AAErB,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,8BAA8B,CAAC,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/E,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,yCAAyC,EAAE,OAAO,IAAS,KAAI;AACzF,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;YAC3B,MAAM,GAAG,GAAG,IAGX,CAAC;AACF,YAAA,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO;oBACL,KAAK,EAAE,MAAM,CAAC,CAAG,EAAA,OAAO,EAAE,EAAE,GAAG,CAAC,CAAA,CAAE,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAG,EAAA,OAAO,EAAE,KAAK,IAAI,EAAE,CAAE,CAAA;AAClC,oBAAA,YAAY,EAAE,CAAG,EAAA,OAAO,EAAE,UAAU,IAAI,EAAE,CAAE,CAAA;iBAC7C,CAAC;aACH;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC/B,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,CAAG,EAAA,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA,CAAE,CAAC;AAChC,gBAAA,OAAO,EAAE,CAAG,EAAA,GAAG,EAAE,KAAK,IAAI,EAAE,CAAE,CAAA;AAC9B,gBAAA,YAAY,EAAE,CAAG,EAAA,GAAG,EAAE,UAAU,IAAI,EAAE,CAAE,CAAA;aACzC,CAAC;SACH;AACD,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE;YACxB,MAAM,GAAG,GAAG,IAGX,CAAC;YACF,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC7B,OAAQ;gBACN,KAAK,EAAE,MAAM,CAAC,CAAG,EAAA,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA,CAAE,CAAC;AACjC,gBAAA,OAAO,EAAE,CAAG,EAAA,GAAG,EAAE,KAAK,IAAI,EAAE,CAAE,CAAA;AAC9B,gBAAA,YAAY,EAAE,CAAG,EAAA,GAAG,EAAE,UAAU,IAAI,EAAE,CAAE,CAAA;aACzC,CAAC;SACH;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE;AAK3B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAA;YACvB,MAAM,GAAG,GAAG,EAAE,CAAA;AACd,YAAA,GAAG,CAAC,OAAO,CAAC,CAAC,IAAG;;AAEd,gBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;oBACV,KAAK,EAAE,MAAM,CAAC,CAAG,EAAA,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA,CAAE,CAAC;AAC/B,oBAAA,OAAO,EAAG,CAAG,EAAA,CAAC,EAAE,KAAK,IAAI,EAAE,CAAE,CAAA;AAC7B,oBAAA,YAAY,EAAE,CAAG,EAAA,CAAC,EAAE,UAAU,IAAI,EAAE,CAAE,CAAA;iBACvC,CAAA;AACH,aAAC,CAAC,CAAA;AACF,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE;YAC1B,MAAM,GAAG,GAAG,IAGX,CAAC;YACF,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAC/B,YAAA,OAAQ,GAAG,CAAC;SACb;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,EAAE;AAK7B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;AACzB,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,IAAI,IAAI,EAAE,IAAI,KAAK,YAAY,EAAE;AAK/B,YAAA,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA;AAC3B,YAAA,OAAO,GAAG,CAAC;SACZ;AAED,QAAA,OAAO,SAAS,CAAA;AAClB,KAAC,CAAC,CAAA;AACF,IAAA,OAAO,EAAE,CAAC;AACZ,EAAC;AAED,MAAM,GAAG,GAAG,CAAC,IAAqB,EAAE,GAAG,IAAW,KAAI;IACpD,MAAM,GAAG,GAAG,CAAA,2BAAA,CAA6B,CAAA;AACzC,IAAA,IAAI;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;KAC7B;IAAC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;KAC1B;AACH,CAAC;;;;"}
@@ -1,12 +1,30 @@
1
1
  /** Used in Renderer process */
2
2
  import type { BrowserWindow } from 'electron';
3
3
  import { ElectronWindowsManagerOptions } from '../common';
4
+ /**
5
+ * 创建窗口
6
+ * @param options
7
+ * @returns
8
+ */
4
9
  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>;
10
+ /**
11
+ * 获取窗口
12
+ * @param idOrName id或者名字
13
+ * @returns
14
+ */
15
+ export declare const get: (idOrName: string | number) => Promise<BrowserWindow | undefined>;
16
+ /**
17
+ * 获取所有窗口
18
+ * @returns
19
+ */
7
20
  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>;
21
+ /**
22
+ * 关闭窗口
23
+ * @param name
24
+ * @returns
25
+ */
26
+ export declare const close: (idOrName: string | number) => Promise<boolean>;
27
+ export declare const closeAll: () => Promise<boolean>;
10
28
  /**
11
29
  * 获取 preload
12
30
  * @returns
@@ -1 +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"}
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;AAwB1D;;;;GAIG;AACH,eAAO,MAAM,MAAM,YAAmB,6BAA6B,KAAG,OAAO,CAAC,aAAa,CAW1F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,GAAG,aAAoB,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAWtF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAmBjE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,aAAoB,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,OAAO,CAGtE,CAAA;AAED,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,OAAO,CAGhD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,QAEH,OAAO,CAAC,MAAM,GAAG,SAAS,CAc1C,CAAA"}
@@ -20,40 +20,44 @@ const getRemote = () => {
20
20
  return {};
21
21
  }
22
22
  };
23
+ /**
24
+ * 创建窗口
25
+ * @param options
26
+ * @returns
27
+ */
23
28
  const create = async (options) => {
24
29
  const remote = getRemote();
25
30
  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);
31
+ const win = remote.BrowserWindow.fromId(data.winId);
28
32
  if (win) {
29
33
  // @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) {
34
+ win && (win['_name'] = `${data.winName}`);
41
35
  // @ts-ignore
42
- win && (win['_name'] = data.winName);
36
+ win && (win['_extraData'] = `${data.winExtraData || ''}`);
43
37
  }
44
38
  return win;
45
39
  };
46
- const getById = async (id) => {
40
+ /**
41
+ * 获取窗口
42
+ * @param idOrName id或者名字
43
+ * @returns
44
+ */
45
+ const get = async (idOrName) => {
47
46
  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);
47
+ const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'get', data: idOrName });
48
+ const win = remote.BrowserWindow.fromId(data.winId);
51
49
  if (win) {
52
50
  // @ts-ignore
53
- win && (win['_name'] = data.winName);
51
+ win && (win['_name'] = `${data.winName || ''}`);
52
+ // @ts-ignore
53
+ win && (win['_extraData'] = `${data.winExtraData || ''}`);
54
54
  }
55
55
  return win;
56
56
  };
57
+ /**
58
+ * 获取所有窗口
59
+ * @returns
60
+ */
57
61
  const getAll = async () => {
58
62
  const remote = getRemote();
59
63
  const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getAll', data: undefined });
@@ -62,23 +66,30 @@ const getAll = async () => {
62
66
  for (const key in data) {
63
67
  const element = data[key];
64
68
  const win = allW.find(i => {
65
- return `${i.id}` === `${element.winId}`;
69
+ return `${i.id}` === `${element?.winId}`;
66
70
  });
67
71
  if (win) {
68
72
  // @ts-ignore
69
- win && (win['_name'] = element.winName);
73
+ win && (win['_name'] = `${element?.winName || ''}`);
74
+ // @ts-ignore
75
+ win && (win['_extraData'] = `${element?.winExtraData || ''}`);
70
76
  wins.set(key, win);
71
77
  }
72
78
  }
73
79
  return wins;
74
80
  };
75
- const close = async (name) => {
76
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'close', data: name });
77
- return data;
81
+ /**
82
+ * 关闭窗口
83
+ * @param name
84
+ * @returns
85
+ */
86
+ const close = async (idOrName) => {
87
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'close', data: idOrName });
88
+ return true;
78
89
  };
79
- const closeById = async (id) => {
80
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'closeById', data: id });
81
- return data;
90
+ const closeAll = async () => {
91
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'closeAll', data: undefined });
92
+ return true;
82
93
  };
83
94
  /**
84
95
  * 获取 preload
@@ -112,5 +123,5 @@ getPreload();
112
123
  // document.body.addEventListener('keydown', handleOpenDevTools)
113
124
  // }
114
125
 
115
- export { close, closeById, create, get, getAll, getById, getPreload };
126
+ export { close, closeAll, create, get, getAll, getPreload };
116
127
  //# sourceMappingURL=index.js.map
@@ -1 +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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"}
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 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\n/**\n * 创建窗口\n * @param options\n * @returns\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 win = remote.BrowserWindow.fromId(data.winId)!;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData || ''}`);\n }\n return win;\n}\n\n/**\n * 获取窗口\n * @param idOrName id或者名字\n * @returns\n */\nexport const get = async (idOrName: string | number): Promise<BrowserWindow | 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 const win = remote.BrowserWindow.fromId(data.winId)!;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName || ''}`);\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, 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 // @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 * 获取 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/main/index.d.ts CHANGED
@@ -3,15 +3,14 @@ import type { ElectronWindowsManagerOptions, WindowItem } from '../common';
3
3
  export declare const enable: (win: WebContents) => void;
4
4
  export declare class WindowsManager {
5
5
  preload?: string;
6
- windows: Map<number, WindowItem>;
6
+ windows: Map<number, WindowItem | null>;
7
7
  constructor(preload?: string);
8
8
  create(options: ElectronWindowsManagerOptions): WindowItem;
9
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;
10
+ get(idOrName: string | number): WindowItem | undefined;
11
+ getAll(): Map<number, WindowItem | null>;
12
+ close(idOrName: string | number): undefined;
13
+ closeAll(): void;
15
14
  getPreload(): string | undefined;
16
15
  }
17
16
  export declare let isInitialized: boolean;
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,WAAW,EAAmC,MAAM,UAAU,CAAA;AAGnG,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,GAAG,IAAI,CAAC,CAAC;gBAC5B,OAAO,CAAC,EAAE,MAAM;IAK5B,MAAM,CAAC,OAAO,EAAE,6BAA6B;IAyE7C,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,6BAA6B;IA+EhF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS;IAiBtD,MAAM;IAKN,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAoB/B,QAAQ;IAQR,UAAU;CAIX;AAID,eAAO,IAAI,aAAa,SAAQ,CAAC;AAEjC,eAAO,MAAM,UAAU,aAAc,MAAM,KAAG,cA4F7C,CAAA"}
package/main/index.js CHANGED
@@ -28,10 +28,22 @@ class WindowsManager {
28
28
  this.windows = new Map();
29
29
  }
30
30
  create(options) {
31
- const { name = 'anonymous', loadingView, browserWindow: browserWindowOptions = {}, openDevTools = false, preventOriginClose = false, } = options;
31
+ log('log', 'create', options);
32
+ const { name = 'anonymous', loadingView, browserWindow: browserWindowOptions, openDevTools = false, preventOriginClose = false, } = options;
33
+ let parentWin = undefined;
34
+ if (typeof browserWindowOptions?.parent === 'number') {
35
+ parentWin = electron.BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;
36
+ if (parentWin) {
37
+ browserWindowOptions.parent = parentWin;
38
+ }
39
+ else {
40
+ browserWindowOptions.parent = undefined;
41
+ }
42
+ }
32
43
  const window = new electron.BrowserWindow(_.merge({
33
44
  acceptFirstMouse: true,
34
- }, browserWindowOptions, {
45
+ }, (browserWindowOptions || {}), {
46
+ parent: parentWin,
35
47
  webPreferences: {
36
48
  plugins: true,
37
49
  nodeIntegration: true,
@@ -44,14 +56,22 @@ class WindowsManager {
44
56
  }));
45
57
  remote__namespace.enable(window.webContents);
46
58
  window._name = name;
59
+ window._extraData = `${options?.extraData || ''}`;
47
60
  if (loadingView?.url) {
48
61
  this._setLoadingView(window, options);
49
62
  }
50
- window.on('close', (event) => {
63
+ window.addListener('close', (event) => {
64
+ log('log', 'close', window.id, window._name);
65
+ this.windows.set(window.id, null);
66
+ this.windows.delete(window.id);
51
67
  if (preventOriginClose) {
52
68
  event.preventDefault();
53
69
  return;
54
70
  }
71
+ });
72
+ window.addListener('closed', () => {
73
+ log('log', 'closed', window.id, window._name);
74
+ this.windows.set(window.id, null);
55
75
  this.windows.delete(window.id);
56
76
  });
57
77
  window.webContents.on('dom-ready', () => {
@@ -138,32 +158,40 @@ class WindowsManager {
138
158
  window.webContents.on('did-fail-load', onFailure);
139
159
  }
140
160
  }
141
- get(name) {
161
+ get(idOrName) {
162
+ log('log', 'get', idOrName);
142
163
  let win = undefined;
143
164
  this.windows.forEach((i) => {
144
- if (i._name === name) {
145
- win = i;
165
+ if (typeof idOrName === 'number') {
166
+ if (i?.id === idOrName) {
167
+ win = i;
168
+ }
146
169
  }
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;
170
+ else if (typeof idOrName === 'string') {
171
+ if (i?._name === idOrName) {
172
+ win = i;
173
+ }
155
174
  }
156
175
  });
157
176
  return win;
158
177
  }
159
178
  getAll() {
179
+ log('log', 'getAll');
160
180
  return this.windows;
161
181
  }
162
- close(name) {
182
+ close(idOrName) {
183
+ log('log', 'close', idOrName);
163
184
  let win = undefined;
164
185
  this.windows.forEach((i) => {
165
- if (i._name === name) {
166
- win = i;
186
+ if (typeof idOrName === 'number') {
187
+ if (i?.id === idOrName) {
188
+ win = i;
189
+ }
190
+ }
191
+ else if (typeof idOrName === 'string') {
192
+ if (i?._name === idOrName) {
193
+ win = i;
194
+ }
167
195
  }
168
196
  });
169
197
  // @ts-ignore
@@ -171,19 +199,15 @@ class WindowsManager {
171
199
  // @ts-ignore
172
200
  return win && win?.destroy();
173
201
  }
174
- closeById(id) {
175
- let win = undefined;
202
+ closeAll() {
203
+ log('log', 'closeAll');
176
204
  this.windows.forEach((i) => {
177
- if (i.id === id) {
178
- win = i;
179
- }
205
+ i && this.windows.delete(i?.id);
206
+ i && i?.destroy();
180
207
  });
181
- // @ts-ignore
182
- win && this.windows.delete(win?.id);
183
- // @ts-ignore
184
- return win && win?.destroy();
185
208
  }
186
209
  getPreload() {
210
+ log('log', 'getPreload');
187
211
  return this.preload;
188
212
  }
189
213
  }
@@ -192,7 +216,7 @@ global['__ELECTRON_WINDOWS_MANAGER__'] = undefined;
192
216
  exports.isInitialized = false;
193
217
  const initialize = (preload) => {
194
218
  // @ts-ignore
195
- if (global['__ELECTRON_WINDOWS_MANAGER__']) {
219
+ if (exports.isInitialized && global['__ELECTRON_WINDOWS_MANAGER__']) {
196
220
  // @ts-ignore
197
221
  return global['__ELECTRON_WINDOWS_MANAGER__'];
198
222
  }
@@ -206,30 +230,25 @@ const initialize = (preload) => {
206
230
  if (findWin) {
207
231
  findWin.focus();
208
232
  return {
209
- winId: findWin?.id,
210
- winName: findWin?._name,
233
+ winId: Number(`${findWin?.id - 1}`),
234
+ winName: `${findWin?._name || ''}`,
235
+ winExtraData: `${findWin?._extraData || ''}`,
211
236
  };
212
237
  }
213
238
  const res = wm.create(opt.data);
214
239
  return {
215
- winId: Number(res.id),
216
- winName: res._name,
240
+ winId: Number(`${res.id || -1}`),
241
+ winName: `${res?._name || ''}`,
242
+ winExtraData: `${res?._extraData || ''}`,
217
243
  };
218
244
  }
219
245
  if (data?.type === 'get') {
220
246
  const opt = data;
221
247
  const res = wm.get(opt?.data);
222
248
  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 : '',
249
+ winId: Number(`${res?.id || -1}`),
250
+ winName: `${res?._name || ''}`,
251
+ winExtraData: `${res?._extraData || ''}`,
233
252
  };
234
253
  }
235
254
  if (data?.type === 'getAll') {
@@ -238,8 +257,9 @@ const initialize = (preload) => {
238
257
  res.forEach(i => {
239
258
  // @ts-ignore
240
259
  obj[i.id] = {
241
- winId: i?.id ? Number(i?.id) : -1,
242
- winName: i?._name ? i?._name : '',
260
+ winId: Number(`${i?.id || -1}`),
261
+ winName: `${i?._name || ''}`,
262
+ winExtraData: `${i?._extraData || ''}`,
243
263
  };
244
264
  });
245
265
  return obj;
@@ -249,9 +269,8 @@ const initialize = (preload) => {
249
269
  const res = wm.close(opt?.data);
250
270
  return res;
251
271
  }
252
- if (data?.type === 'closeById') {
253
- const opt = data;
254
- const res = wm.closeById(opt?.data);
272
+ if (data?.type === 'closeAll') {
273
+ const res = wm.closeAll();
255
274
  return res;
256
275
  }
257
276
  if (data?.type === 'getPreload') {
@@ -262,6 +281,15 @@ const initialize = (preload) => {
262
281
  });
263
282
  return wm;
264
283
  };
284
+ const log = (type, ...data) => {
285
+ const key = `[electron-window-manager]: `;
286
+ try {
287
+ console[type](key, ...data);
288
+ }
289
+ catch (error) {
290
+ console.error(key, error);
291
+ }
292
+ };
265
293
 
266
294
  exports.WindowsManager = WindowsManager;
267
295
  exports.enable = enable;
package/main/index.js.map CHANGED
@@ -1 +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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"}
1
+ {"version":3,"file":"index.js","sources":["../src/src/main/index.ts"],"sourcesContent":["import _ from 'lodash'\nimport { BrowserWindow, BrowserView, WebContents, BrowserWindowConstructorOptions } 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 | null>;\n constructor(preload?: string) {\n this.preload = preload;\n this.windows = new Map();\n }\n\n create(options: ElectronWindowsManagerOptions) {\n log('log', 'create', options);\n const {\n name = 'anonymous',\n loadingView,\n browserWindow: browserWindowOptions,\n openDevTools = false,\n preventOriginClose = false,\n } = options;\n let parentWin:BrowserWindowConstructorOptions['parent'] = undefined;\n if (typeof browserWindowOptions?.parent === 'number') {\n parentWin = BrowserWindow.fromId(browserWindowOptions?.parent) || undefined;\n if (parentWin) {\n browserWindowOptions.parent = parentWin;\n } else {\n browserWindowOptions.parent = undefined;\n }\n }\n const window = new BrowserWindow(\n _.merge(\n {\n acceptFirstMouse: true,\n },\n (browserWindowOptions || {}),\n {\n parent: parentWin,\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 window._extraData = `${options?.extraData || ''}`;\n if (loadingView?.url) {\n this._setLoadingView(window, options);\n }\n window.addListener('close', (event) => {\n log('log', 'close', window.id, window._name);\n this.windows.set(window.id, null)\n this.windows.delete(window.id)\n if (preventOriginClose) {\n event.preventDefault();\n return;\n }\n });\n window.addListener('closed', () => {\n log('log', 'closed', window.id, window._name);\n this.windows.set(window.id, null)\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(idOrName: string | number): WindowItem | undefined {\n log('log', 'get', idOrName);\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i) => {\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n return win;\n }\n\n getAll() {\n log('log', 'getAll');\n return this.windows;\n }\n\n close(idOrName: string | number) {\n log('log', 'close', idOrName);\n let win: WindowItem | undefined = undefined;\n this.windows.forEach((i) => {\n if (typeof idOrName === 'number') {\n if (i?.id === idOrName) {\n win = i;\n }\n } else if (typeof idOrName === 'string') {\n if (i?._name === idOrName) {\n win = i;\n }\n }\n })\n // @ts-ignore\n win && this.windows.delete(win?.id)\n // @ts-ignore\n return win && win?.destroy();\n }\n\n closeAll() {\n log('log', 'closeAll');\n this.windows.forEach((i) => {\n i && this.windows.delete(i?.id)\n i && i?.destroy();\n })\n }\n\n getPreload() {\n log('log', '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 (isInitialized && 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: Number(`${findWin?.id - 1}`),\n winName: `${findWin?._name || ''}`,\n winExtraData: `${findWin?._extraData || ''}`,\n };\n }\n const res = wm.create(opt.data)\n return {\n winId: Number(`${res.id || -1}`),\n winName: `${res?._name || ''}`,\n winExtraData: `${res?._extraData || ''}`,\n };\n }\n if (data?.type === 'get') {\n const opt = data as {\n type: 'get';\n data: string | number;\n };\n const res = wm.get(opt?.data)\n return {\n winId: Number(`${res?.id || -1}`),\n winName: `${res?._name || ''}`,\n winExtraData: `${res?._extraData || ''}`,\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: Number(`${i?.id || -1}`),\n winName: `${i?._name || ''}`,\n winExtraData: `${i?._extraData || ''}`,\n }\n })\n return obj;\n }\n\n if (data?.type === 'close') {\n const opt = data as {\n type: 'close';\n data: string | number;\n };\n const res = wm.close(opt?.data)\n return res;\n }\n\n if (data?.type === 'closeAll') {\n const opt = data as {\n type: 'closeAll';\n data: undefined;\n };\n const res = wm.closeAll()\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\nconst log = (type: 'log' | 'error', ...data: any[]) => {\n const key = `[electron-window-manager]: `\n try {\n console[type](key, ...data);\n } catch (error) {\n console.error(key, error)\n }\n}\n"],"names":["remote","BrowserWindow","BrowserView","isInitialized"],"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.2",
3
+ "version": "0.0.4-alpha.20",
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": "4b288c01fc5cb21f52ce225df5cd01cef3353be6"
80
+ "gitHead": "4ada9c55fc32c59a709fd88df0507f76bfe51e5a"
81
81
  }
@@ -1,12 +1,30 @@
1
1
  /** Used in Renderer process */
2
2
  import type { BrowserWindow } from 'electron';
3
3
  import { ElectronWindowsManagerOptions } from '../common';
4
+ /**
5
+ * 创建窗口
6
+ * @param options
7
+ * @returns
8
+ */
4
9
  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>;
10
+ /**
11
+ * 获取窗口
12
+ * @param idOrName id或者名字
13
+ * @returns
14
+ */
15
+ export declare const get: (idOrName: string | number) => Promise<BrowserWindow | undefined>;
16
+ /**
17
+ * 获取所有窗口
18
+ * @returns
19
+ */
7
20
  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>;
21
+ /**
22
+ * 关闭窗口
23
+ * @param name
24
+ * @returns
25
+ */
26
+ export declare const close: (idOrName: string | number) => Promise<boolean>;
27
+ export declare const closeAll: () => Promise<boolean>;
10
28
  /**
11
29
  * 获取 preload
12
30
  * @returns
@@ -1 +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"}
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;AAwB1D;;;;GAIG;AACH,eAAO,MAAM,MAAM,YAAmB,6BAA6B,KAAG,OAAO,CAAC,aAAa,CAW1F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,GAAG,aAAoB,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAWtF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAmBjE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,aAAoB,MAAM,GAAG,MAAM,KAAG,OAAO,CAAC,OAAO,CAGtE,CAAA;AAED,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,OAAO,CAGhD,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,QAEH,OAAO,CAAC,MAAM,GAAG,SAAS,CAc1C,CAAA"}
package/renderer/index.js CHANGED
@@ -20,40 +20,44 @@ const getRemote = () => {
20
20
  return {};
21
21
  }
22
22
  };
23
+ /**
24
+ * 创建窗口
25
+ * @param options
26
+ * @returns
27
+ */
23
28
  const create = async (options) => {
24
29
  const remote = getRemote();
25
30
  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);
31
+ const win = remote.BrowserWindow.fromId(data.winId);
28
32
  if (win) {
29
33
  // @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) {
34
+ win && (win['_name'] = `${data.winName}`);
41
35
  // @ts-ignore
42
- win && (win['_name'] = data.winName);
36
+ win && (win['_extraData'] = `${data.winExtraData || ''}`);
43
37
  }
44
38
  return win;
45
39
  };
46
- const getById = async (id) => {
40
+ /**
41
+ * 获取窗口
42
+ * @param idOrName id或者名字
43
+ * @returns
44
+ */
45
+ const get = async (idOrName) => {
47
46
  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);
47
+ const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'get', data: idOrName });
48
+ const win = remote.BrowserWindow.fromId(data.winId);
51
49
  if (win) {
52
50
  // @ts-ignore
53
- win && (win['_name'] = data.winName);
51
+ win && (win['_name'] = `${data.winName || ''}`);
52
+ // @ts-ignore
53
+ win && (win['_extraData'] = `${data.winExtraData || ''}`);
54
54
  }
55
55
  return win;
56
56
  };
57
+ /**
58
+ * 获取所有窗口
59
+ * @returns
60
+ */
57
61
  const getAll = async () => {
58
62
  const remote = getRemote();
59
63
  const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'getAll', data: undefined });
@@ -62,23 +66,30 @@ const getAll = async () => {
62
66
  for (const key in data) {
63
67
  const element = data[key];
64
68
  const win = allW.find(i => {
65
- return `${i.id}` === `${element.winId}`;
69
+ return `${i.id}` === `${element?.winId}`;
66
70
  });
67
71
  if (win) {
68
72
  // @ts-ignore
69
- win && (win['_name'] = element.winName);
73
+ win && (win['_name'] = `${element?.winName || ''}`);
74
+ // @ts-ignore
75
+ win && (win['_extraData'] = `${element?.winExtraData || ''}`);
70
76
  wins.set(key, win);
71
77
  }
72
78
  }
73
79
  return wins;
74
80
  };
75
- const close = async (name) => {
76
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'close', data: name });
77
- return data;
81
+ /**
82
+ * 关闭窗口
83
+ * @param name
84
+ * @returns
85
+ */
86
+ const close = async (idOrName) => {
87
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'close', data: idOrName });
88
+ return true;
78
89
  };
79
- const closeById = async (id) => {
80
- const data = await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'closeById', data: id });
81
- return data;
90
+ const closeAll = async () => {
91
+ await getIpc().invoke('__ELECTRON_WINDOW_MANAGER_IPC_CHANNEL__', { type: 'closeAll', data: undefined });
92
+ return true;
82
93
  };
83
94
  /**
84
95
  * 获取 preload
@@ -113,10 +124,9 @@ getPreload();
113
124
  // }
114
125
 
115
126
  exports.close = close;
116
- exports.closeById = closeById;
127
+ exports.closeAll = closeAll;
117
128
  exports.create = create;
118
129
  exports.get = get;
119
130
  exports.getAll = getAll;
120
- exports.getById = getById;
121
131
  exports.getPreload = getPreload;
122
132
  //# sourceMappingURL=index.js.map
@@ -1 +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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"}
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 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\n/**\n * 创建窗口\n * @param options\n * @returns\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 win = remote.BrowserWindow.fromId(data.winId)!;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName}`);\n // @ts-ignore\n win && (win['_extraData'] = `${data.winExtraData || ''}`);\n }\n return win;\n}\n\n/**\n * 获取窗口\n * @param idOrName id或者名字\n * @returns\n */\nexport const get = async (idOrName: string | number): Promise<BrowserWindow | 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 const win = remote.BrowserWindow.fromId(data.winId)!;\n if (win) {\n // @ts-ignore\n win && (win['_name'] = `${data.winName || ''}`);\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, 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 // @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 * 获取 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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"}