@_traeop_/electron-modular 1.0.6 → 1.0.8

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.
Files changed (142) hide show
  1. package/README.md +41 -1
  2. package/dist/@core/bootstrap/bootstrap.d.ts +0 -1
  3. package/dist/@core/bootstrap/bootstrap.js +0 -1
  4. package/dist/@core/bootstrap/initialize-ipc/handlers.d.ts +0 -1
  5. package/dist/@core/bootstrap/initialize-ipc/handlers.js +0 -1
  6. package/dist/@core/bootstrap/initialize-ipc/window-creator.d.ts +0 -1
  7. package/dist/@core/bootstrap/initialize-ipc/window-creator.js +0 -1
  8. package/dist/@core/bootstrap/initialize-ipc/window-event-listeners.d.ts +1 -2
  9. package/dist/@core/bootstrap/initialize-ipc/window-event-listeners.js +35 -65
  10. package/dist/@core/bootstrap/initialize-ipc/window-instance-creator.d.ts +0 -1
  11. package/dist/@core/bootstrap/initialize-ipc/window-instance-creator.js +0 -1
  12. package/dist/@core/bootstrap/initialize-module.d.ts +0 -1
  13. package/dist/@core/bootstrap/initialize-module.js +0 -1
  14. package/dist/@core/bootstrap/instantiate-module.d.ts +0 -1
  15. package/dist/@core/bootstrap/instantiate-module.js +0 -1
  16. package/dist/@core/bootstrap/register-imports.d.ts +0 -1
  17. package/dist/@core/bootstrap/register-imports.js +0 -1
  18. package/dist/@core/bootstrap/register-ipc-handlers.d.ts +0 -1
  19. package/dist/@core/bootstrap/register-ipc-handlers.js +0 -1
  20. package/dist/@core/bootstrap/register-providers.d.ts +0 -1
  21. package/dist/@core/bootstrap/register-providers.js +0 -1
  22. package/dist/@core/bootstrap/register-windows.d.ts +0 -1
  23. package/dist/@core/bootstrap/register-windows.js +0 -1
  24. package/dist/@core/bootstrap/settings.d.ts +0 -1
  25. package/dist/@core/bootstrap/settings.js +0 -1
  26. package/dist/@core/container.d.ts +0 -6
  27. package/dist/@core/container.js +14 -26
  28. package/dist/@core/control-window/cache.d.ts +0 -1
  29. package/dist/@core/control-window/cache.js +0 -1
  30. package/dist/@core/control-window/create.d.ts +0 -1
  31. package/dist/@core/control-window/create.js +25 -44
  32. package/dist/@core/control-window/destroy.d.ts +0 -1
  33. package/dist/@core/control-window/destroy.js +0 -1
  34. package/dist/@core/control-window/receive.d.ts +0 -1
  35. package/dist/@core/control-window/receive.js +0 -1
  36. package/dist/@core/control-window/types.d.ts +0 -1
  37. package/dist/@core/control-window/types.js +0 -1
  38. package/dist/@core/decorators/inject.d.ts +0 -1
  39. package/dist/@core/decorators/inject.js +0 -1
  40. package/dist/@core/decorators/injectable.d.ts +0 -1
  41. package/dist/@core/decorators/injectable.js +0 -1
  42. package/dist/@core/decorators/ipc-handler.d.ts +0 -1
  43. package/dist/@core/decorators/ipc-handler.js +0 -1
  44. package/dist/@core/decorators/rg-module.d.ts +0 -1
  45. package/dist/@core/decorators/rg-module.js +0 -1
  46. package/dist/@core/decorators/window-manager.d.ts +0 -1
  47. package/dist/@core/decorators/window-manager.js +0 -1
  48. package/dist/@core/errors/index.d.ts +13 -10
  49. package/dist/@core/errors/index.js +20 -20
  50. package/dist/@core/types/constructor.d.ts +0 -1
  51. package/dist/@core/types/constructor.js +0 -1
  52. package/dist/@core/types/index.d.ts +0 -1
  53. package/dist/@core/types/index.js +0 -1
  54. package/dist/@core/types/ipc-handler.d.ts +0 -1
  55. package/dist/@core/types/ipc-handler.js +0 -1
  56. package/dist/@core/types/module-metadata.d.ts +0 -1
  57. package/dist/@core/types/module-metadata.js +0 -1
  58. package/dist/@core/types/provider.d.ts +0 -1
  59. package/dist/@core/types/provider.js +0 -1
  60. package/dist/@core/types/window-factory.d.ts +0 -1
  61. package/dist/@core/types/window-factory.js +0 -1
  62. package/dist/@core/types/window-manager.d.ts +0 -1
  63. package/dist/@core/types/window-manager.js +0 -1
  64. package/dist/@core/types/window-metadata.d.ts +0 -1
  65. package/dist/@core/types/window-metadata.js +0 -1
  66. package/dist/@core/utils/dependency-tokens.d.ts +0 -1
  67. package/dist/@core/utils/dependency-tokens.js +0 -1
  68. package/dist/config.d.ts +0 -1
  69. package/dist/config.js +0 -1
  70. package/dist/index.d.ts +0 -1
  71. package/dist/index.js +0 -1
  72. package/package.json +1 -1
  73. package/dist/@core/bootstrap/bootstrap.d.ts.map +0 -1
  74. package/dist/@core/bootstrap/bootstrap.js.map +0 -1
  75. package/dist/@core/bootstrap/initialize-ipc/handlers.d.ts.map +0 -1
  76. package/dist/@core/bootstrap/initialize-ipc/handlers.js.map +0 -1
  77. package/dist/@core/bootstrap/initialize-ipc/window-creator.d.ts.map +0 -1
  78. package/dist/@core/bootstrap/initialize-ipc/window-creator.js.map +0 -1
  79. package/dist/@core/bootstrap/initialize-ipc/window-event-listeners.d.ts.map +0 -1
  80. package/dist/@core/bootstrap/initialize-ipc/window-event-listeners.js.map +0 -1
  81. package/dist/@core/bootstrap/initialize-ipc/window-instance-creator.d.ts.map +0 -1
  82. package/dist/@core/bootstrap/initialize-ipc/window-instance-creator.js.map +0 -1
  83. package/dist/@core/bootstrap/initialize-module.d.ts.map +0 -1
  84. package/dist/@core/bootstrap/initialize-module.js.map +0 -1
  85. package/dist/@core/bootstrap/instantiate-module.d.ts.map +0 -1
  86. package/dist/@core/bootstrap/instantiate-module.js.map +0 -1
  87. package/dist/@core/bootstrap/register-imports.d.ts.map +0 -1
  88. package/dist/@core/bootstrap/register-imports.js.map +0 -1
  89. package/dist/@core/bootstrap/register-ipc-handlers.d.ts.map +0 -1
  90. package/dist/@core/bootstrap/register-ipc-handlers.js.map +0 -1
  91. package/dist/@core/bootstrap/register-providers.d.ts.map +0 -1
  92. package/dist/@core/bootstrap/register-providers.js.map +0 -1
  93. package/dist/@core/bootstrap/register-windows.d.ts.map +0 -1
  94. package/dist/@core/bootstrap/register-windows.js.map +0 -1
  95. package/dist/@core/bootstrap/settings.d.ts.map +0 -1
  96. package/dist/@core/bootstrap/settings.js.map +0 -1
  97. package/dist/@core/container.d.ts.map +0 -1
  98. package/dist/@core/container.js.map +0 -1
  99. package/dist/@core/control-window/cache.d.ts.map +0 -1
  100. package/dist/@core/control-window/cache.js.map +0 -1
  101. package/dist/@core/control-window/create.d.ts.map +0 -1
  102. package/dist/@core/control-window/create.js.map +0 -1
  103. package/dist/@core/control-window/destroy.d.ts.map +0 -1
  104. package/dist/@core/control-window/destroy.js.map +0 -1
  105. package/dist/@core/control-window/receive.d.ts.map +0 -1
  106. package/dist/@core/control-window/receive.js.map +0 -1
  107. package/dist/@core/control-window/types.d.ts.map +0 -1
  108. package/dist/@core/control-window/types.js.map +0 -1
  109. package/dist/@core/decorators/inject.d.ts.map +0 -1
  110. package/dist/@core/decorators/inject.js.map +0 -1
  111. package/dist/@core/decorators/injectable.d.ts.map +0 -1
  112. package/dist/@core/decorators/injectable.js.map +0 -1
  113. package/dist/@core/decorators/ipc-handler.d.ts.map +0 -1
  114. package/dist/@core/decorators/ipc-handler.js.map +0 -1
  115. package/dist/@core/decorators/rg-module.d.ts.map +0 -1
  116. package/dist/@core/decorators/rg-module.js.map +0 -1
  117. package/dist/@core/decorators/window-manager.d.ts.map +0 -1
  118. package/dist/@core/decorators/window-manager.js.map +0 -1
  119. package/dist/@core/errors/index.d.ts.map +0 -1
  120. package/dist/@core/errors/index.js.map +0 -1
  121. package/dist/@core/types/constructor.d.ts.map +0 -1
  122. package/dist/@core/types/constructor.js.map +0 -1
  123. package/dist/@core/types/index.d.ts.map +0 -1
  124. package/dist/@core/types/index.js.map +0 -1
  125. package/dist/@core/types/ipc-handler.d.ts.map +0 -1
  126. package/dist/@core/types/ipc-handler.js.map +0 -1
  127. package/dist/@core/types/module-metadata.d.ts.map +0 -1
  128. package/dist/@core/types/module-metadata.js.map +0 -1
  129. package/dist/@core/types/provider.d.ts.map +0 -1
  130. package/dist/@core/types/provider.js.map +0 -1
  131. package/dist/@core/types/window-factory.d.ts.map +0 -1
  132. package/dist/@core/types/window-factory.js.map +0 -1
  133. package/dist/@core/types/window-manager.d.ts.map +0 -1
  134. package/dist/@core/types/window-manager.js.map +0 -1
  135. package/dist/@core/types/window-metadata.d.ts.map +0 -1
  136. package/dist/@core/types/window-metadata.js.map +0 -1
  137. package/dist/@core/utils/dependency-tokens.d.ts.map +0 -1
  138. package/dist/@core/utils/dependency-tokens.js.map +0 -1
  139. package/dist/config.d.ts.map +0 -1
  140. package/dist/config.js.map +0 -1
  141. package/dist/index.d.ts.map +0 -1
  142. package/dist/index.js.map +0 -1
package/README.md CHANGED
@@ -14,9 +14,45 @@ The package is a dependency injection framework for Electron main process. It us
14
14
 
15
15
  ---
16
16
 
17
+ ## Installation
18
+
19
+ Install with your package manager:
20
+
21
+ ```bash
22
+ # npm
23
+ npm install @_traeop_/electron-modular
24
+
25
+ # yarn
26
+ yarn add @_traeop_/electron-modular
27
+
28
+ # pnpm
29
+ pnpm add @_traeop_/electron-modular
30
+ ```
31
+
32
+ Peer dependency:
33
+
34
+ This package targets Electron's main process and declares Electron >=36 as a peer dependency. Ensure Electron is installed in your project:
35
+
36
+ ```bash
37
+ npm install --save-dev electron@^36
38
+ ```
39
+
40
+ TypeScript setup:
41
+
42
+ - Enable decorators and metadata in your `tsconfig.json`:
43
+
44
+ ```json
45
+ "experimentalDecorators": true,
46
+ "emitDecoratorMetadata": true
47
+ ```
48
+
49
+ > Tip: This package is published as ESM. When importing local modules, use `.js` extensions in runtime imports, e.g. `import { UserModule } from "./user/module.js"`.
50
+
51
+ ---
52
+
17
53
  ## Quick Start
18
54
 
19
- ### 1. Bootstrap Application `app.ts`
55
+ ### 1. Bootstrap Application `main.ts`
20
56
 
21
57
  Initialize the framework and bootstrap all modules:
22
58
 
@@ -465,6 +501,10 @@ const window = await mainWindow.create();
465
501
  Destroys all cached windows.
466
502
 
467
503
  ```typescript
504
+ ...
505
+ import { destroyWindows } from "@_traeop_/electron-modular";
506
+ ...
507
+
468
508
  app.on("before-quit", () => {
469
509
  destroyWindows();
470
510
  });
@@ -1,3 +1,2 @@
1
1
  import type { Constructor } from "../types/constructor.js";
2
2
  export declare const bootstrapModules: (modulesClass: Constructor[]) => Promise<void>;
3
- //# sourceMappingURL=bootstrap.d.ts.map
@@ -18,4 +18,3 @@ export const bootstrapModules = async (modulesClass) => {
18
18
  await initializeIpcHandlers(moduleClass, metadata);
19
19
  }
20
20
  };
21
- //# sourceMappingURL=bootstrap.js.map
@@ -1,4 +1,3 @@
1
1
  import type { Constructor } from "../../types/constructor.js";
2
2
  import type { RgModuleMetadata } from "../../types/module-metadata.js";
3
3
  export declare const initializeIpcHandlers: (moduleClass: Constructor, metadata: RgModuleMetadata) => Promise<void>;
4
- //# sourceMappingURL=handlers.d.ts.map
@@ -45,4 +45,3 @@ export const initializeIpcHandlers = async (moduleClass, metadata) => {
45
45
  }
46
46
  }
47
47
  };
48
- //# sourceMappingURL=handlers.js.map
@@ -1,4 +1,3 @@
1
1
  import type { BrowserWindow } from "electron";
2
2
  import type { TParamsCreateWindow } from "../../control-window/types.js";
3
3
  export declare const createWindowWithParams: <W extends TParamsCreateWindow>(baseMetadata: W, params?: W) => BrowserWindow;
4
- //# sourceMappingURL=window-creator.d.ts.map
@@ -26,4 +26,3 @@ export const createWindowWithParams = (baseMetadata, params) => {
26
26
  : baseMetadata;
27
27
  return createWindow(mergedSettings);
28
28
  };
29
- //# sourceMappingURL=window-creator.js.map
@@ -1,4 +1,3 @@
1
1
  import type { BrowserWindow } from "electron";
2
2
  import type { TWindowManagerWithHandlers } from "../../types/window-manager.js";
3
- export declare const attachWindowEventListeners: (browserWindow: BrowserWindow, windowInstance: TWindowManagerWithHandlers) => void;
4
- //# sourceMappingURL=window-event-listeners.d.ts.map
3
+ export declare const attachWindowEventListeners: (win: BrowserWindow, inst: TWindowManagerWithHandlers) => void;
@@ -1,91 +1,61 @@
1
1
  const windowListeners = new WeakMap();
2
- const EVENT_PREFIX = "on";
3
- const WINDOW_PREFIX = "onWindow";
4
- const WEB_CONTENTS_PREFIX = "onWebContents";
5
2
  const getPrototypeMethodNames = (instance) => {
6
3
  const names = new Set();
7
4
  let proto = Object.getPrototypeOf(instance);
8
5
  while (proto && proto !== Object.prototype) {
9
- Object.getOwnPropertyNames(proto).forEach((name) => {
10
- if (name !== "constructor") {
11
- names.add(name);
12
- }
13
- });
6
+ Object.getOwnPropertyNames(proto).forEach((n) => n !== "constructor" && names.add(n));
14
7
  proto = Object.getPrototypeOf(proto);
15
8
  }
16
9
  return Array.from(names);
17
10
  };
18
- const toEventName = (handlerName) => {
19
- const cleaned = handlerName
20
- .replace(WINDOW_PREFIX, "")
21
- .replace(WEB_CONTENTS_PREFIX, "")
22
- .replace(EVENT_PREFIX, "");
23
- return cleaned
11
+ const toEventName = (h) => {
12
+ const c = h.replace(/^(onWindow|onWebContents|on)/, "");
13
+ return c
24
14
  .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
25
15
  .replace(/([A-Z])([A-Z][a-z])/g, "$1-$2")
26
16
  .toLowerCase();
27
17
  };
28
- const isHandlerName = (name) => {
29
- return name.startsWith(EVENT_PREFIX);
30
- };
31
- const isWebContentsHandler = (name) => {
32
- return name.startsWith(WEB_CONTENTS_PREFIX);
33
- };
34
- const addListener = (emitter, eventName, listener) => {
35
- emitter.on(eventName, listener);
36
- return () => {
37
- if (emitter.off) {
38
- emitter.off(eventName, listener);
39
- }
40
- else if (emitter.removeListener) {
41
- emitter.removeListener(eventName, listener);
42
- }
43
- };
44
- };
45
- const attachHandlersToEmitter = (emitter, browserWindow, windowInstance, handlerNames, filter) => {
18
+ const attachHandlersToEmitter = (emitter, win, inst, names, filter) => {
46
19
  const cleanups = [];
47
- for (const handlerName of handlerNames) {
48
- if (!filter(handlerName)) {
20
+ for (const name of names) {
21
+ if (!filter(name))
49
22
  continue;
50
- }
51
- const handler = windowInstance[handlerName];
52
- if (typeof handler !== "function") {
23
+ const h = inst[name];
24
+ if (typeof h !== "function")
53
25
  continue;
54
- }
55
- const eventName = toEventName(handlerName);
26
+ const evt = toEventName(name);
56
27
  const listener = (...args) => {
57
- if (handler.length <= 1) {
58
- handler.apply(windowInstance, [browserWindow]);
59
- }
60
- else {
61
- handler.apply(windowInstance, [...args, browserWindow]);
62
- }
28
+ h.length <= 1 ? h.apply(inst, [win]) : h.apply(inst, [...args, win]);
63
29
  };
64
- cleanups.push(addListener(emitter, eventName, listener));
30
+ emitter.on(evt, listener);
31
+ cleanups.push(() => {
32
+ emitter.off
33
+ ? emitter.off(evt, listener)
34
+ : emitter.removeListener &&
35
+ emitter.removeListener(evt, listener);
36
+ });
65
37
  }
66
38
  return cleanups;
67
39
  };
68
- export const attachWindowEventListeners = (browserWindow, windowInstance) => {
69
- const entry = windowListeners.get(browserWindow);
70
- if (entry?.instance === windowInstance) {
40
+ export const attachWindowEventListeners = (win, inst) => {
41
+ const entry = windowListeners.get(win);
42
+ if (entry?.instance === inst)
71
43
  return;
72
- }
73
- if (entry) {
74
- entry.cleanup.forEach((cleanup) => cleanup());
75
- }
76
- const handlerNames = getPrototypeMethodNames(windowInstance).filter(isHandlerName);
77
- const windowCleanups = attachHandlersToEmitter(browserWindow, browserWindow, windowInstance, handlerNames, (name) => !isWebContentsHandler(name));
78
- const webContentsCleanups = attachHandlersToEmitter(browserWindow.webContents, browserWindow, windowInstance, handlerNames, isWebContentsHandler);
79
- windowListeners.set(browserWindow, {
80
- instance: windowInstance,
81
- cleanup: [...windowCleanups, ...webContentsCleanups],
44
+ if (entry)
45
+ entry.cleanup.forEach((c) => c());
46
+ const names = getPrototypeMethodNames(inst).filter((n) => n.startsWith("on"));
47
+ const isWebContents = (n) => n.startsWith("onWebContents");
48
+ const winCleanups = attachHandlersToEmitter(win, win, inst, names, (n) => !isWebContents(n));
49
+ const webCleanups = attachHandlersToEmitter(win.webContents, win, inst, names, isWebContents);
50
+ windowListeners.set(win, {
51
+ instance: inst,
52
+ cleanup: [...winCleanups, ...webCleanups],
82
53
  });
83
- browserWindow.once("closed", () => {
84
- const existing = windowListeners.get(browserWindow);
85
- if (existing) {
86
- existing.cleanup.forEach((cleanup) => cleanup());
87
- windowListeners.delete(browserWindow);
54
+ win.once("closed", () => {
55
+ const e = windowListeners.get(win);
56
+ if (e) {
57
+ e.cleanup.forEach((c) => c());
58
+ windowListeners.delete(win);
88
59
  }
89
60
  });
90
61
  };
91
- //# sourceMappingURL=window-event-listeners.js.map
@@ -1,4 +1,3 @@
1
1
  import type { Constructor } from "../../types/constructor.js";
2
2
  import type { TWindowManagerWithHandlers } from "../../types/window-manager.js";
3
3
  export declare const createWindowInstance: <T extends TWindowManagerWithHandlers>(moduleClass: Constructor, windowClass: Constructor<T>) => Promise<T | undefined>;
4
- //# sourceMappingURL=window-instance-creator.d.ts.map
@@ -8,4 +8,3 @@ export const createWindowInstance = async (moduleClass, windowClass) => {
8
8
  const resolvedDependencies = await Promise.all(dependenciesTypes.map((depType) => container.resolve(moduleClass, depType)));
9
9
  return new windowClass(...resolvedDependencies);
10
10
  };
11
- //# sourceMappingURL=window-instance-creator.js.map
@@ -1,4 +1,3 @@
1
1
  import type { RgModuleMetadata } from "../types/module-metadata.js";
2
2
  import type { Constructor } from "../types/constructor.js";
3
3
  export declare const initializeModule: (moduleClass: Constructor, metadata: RgModuleMetadata) => Promise<void>;
4
- //# sourceMappingURL=initialize-module.d.ts.map
@@ -16,4 +16,3 @@ export const initializeModule = async (moduleClass, metadata) => {
16
16
  registerIpcHandlers(moduleClass, metadata),
17
17
  ]);
18
18
  };
19
- //# sourceMappingURL=initialize-module.js.map
@@ -1,3 +1,2 @@
1
1
  import type { Constructor } from "../types/constructor.js";
2
2
  export declare const instantiateModule: (moduleClass: Constructor) => Promise<unknown>;
3
- //# sourceMappingURL=instantiate-module.d.ts.map
@@ -7,4 +7,3 @@ export const instantiateModule = async (moduleClass) => {
7
7
  container.registerInstance(moduleClass, instance);
8
8
  return instance;
9
9
  };
10
- //# sourceMappingURL=instantiate-module.js.map
@@ -1,3 +1,2 @@
1
1
  import type { RgModuleMetadata } from "../types/module-metadata.js";
2
2
  export declare const registerImports: (metadata: RgModuleMetadata) => Promise<void>;
3
- //# sourceMappingURL=register-imports.d.ts.map
@@ -10,4 +10,3 @@ export const registerImports = async (metadata) => {
10
10
  }
11
11
  }
12
12
  };
13
- //# sourceMappingURL=register-imports.js.map
@@ -1,4 +1,3 @@
1
1
  import type { Constructor } from "../types/constructor.js";
2
2
  import type { RgModuleMetadata } from "../types/module-metadata.js";
3
3
  export declare const registerIpcHandlers: (moduleClass: Constructor, metadata: RgModuleMetadata) => Promise<void>;
4
- //# sourceMappingURL=register-ipc-handlers.d.ts.map
@@ -7,4 +7,3 @@ export const registerIpcHandlers = async (moduleClass, metadata) => {
7
7
  container.addProvider(moduleClass, ipcClass);
8
8
  }
9
9
  };
10
- //# sourceMappingURL=register-ipc-handlers.js.map
@@ -1,4 +1,3 @@
1
1
  import type { Constructor } from "../types/constructor.js";
2
2
  import type { RgModuleMetadata } from "../types/module-metadata.js";
3
3
  export declare const registerProviders: (moduleClass: Constructor, metadata: RgModuleMetadata) => Promise<void>;
4
- //# sourceMappingURL=register-providers.d.ts.map
@@ -19,4 +19,3 @@ export const registerProviders = async (moduleClass, metadata) => {
19
19
  throw new InvalidProviderError(moduleClass.name);
20
20
  }
21
21
  };
22
- //# sourceMappingURL=register-providers.js.map
@@ -1,4 +1,3 @@
1
1
  import type { Constructor } from "../types/constructor.js";
2
2
  import type { RgModuleMetadata } from "../types/module-metadata.js";
3
3
  export declare const registerWindows: (moduleClass: Constructor, metadata: RgModuleMetadata) => Promise<void>;
4
- //# sourceMappingURL=register-windows.d.ts.map
@@ -13,4 +13,3 @@ export const registerWindows = async (moduleClass, metadata) => {
13
13
  }
14
14
  }
15
15
  };
16
- //# sourceMappingURL=register-windows.js.map
@@ -9,4 +9,3 @@ export type TSettings = {
9
9
  };
10
10
  export declare const initSettings: (options: TSettings) => void;
11
11
  export declare const getSettings: () => TSettings;
12
- //# sourceMappingURL=settings.d.ts.map
@@ -11,4 +11,3 @@ export const getSettings = () => {
11
11
  }
12
12
  return cachedSettings;
13
13
  };
14
- //# sourceMappingURL=settings.js.map
@@ -22,11 +22,5 @@ export declare class Container {
22
22
  private instantiateClassProvider;
23
23
  private instantiateClassConstructor;
24
24
  private resolveDependencies;
25
- private isProviderObject;
26
- private isFactoryProvider;
27
- private isClassProvider;
28
- private isValueProvider;
29
- private isExistingProvider;
30
25
  }
31
26
  export declare const container: Container;
32
- //# sourceMappingURL=container.d.ts.map
@@ -96,17 +96,25 @@ export class Container {
96
96
  return undefined;
97
97
  }
98
98
  async instantiateProvider(moduleClass, token, provider) {
99
- if (this.isFactoryProvider(provider)) {
99
+ const isObj = typeof provider === "object" &&
100
+ provider !== null &&
101
+ "provide" in provider;
102
+ if (isObj &&
103
+ "useFactory" in provider &&
104
+ typeof provider.useFactory === "function") {
100
105
  return this.instantiateFactoryProvider(moduleClass, token, provider);
101
106
  }
102
- if (this.isClassProvider(provider)) {
107
+ if (isObj &&
108
+ "useClass" in provider &&
109
+ typeof provider.useClass === "function") {
103
110
  return this.instantiateClassProvider(moduleClass, token, provider);
104
111
  }
105
- if (this.isValueProvider(provider)) {
106
- this.instances.set(token, provider.useValue);
107
- return provider.useValue;
112
+ if (isObj && "useValue" in provider) {
113
+ const val = provider.useValue;
114
+ this.instances.set(token, val);
115
+ return val;
108
116
  }
109
- if (this.isExistingProvider(provider)) {
117
+ if (isObj && "useExisting" in provider) {
110
118
  const instance = await this.resolve(moduleClass, provider.useExisting);
111
119
  if (instance !== undefined) {
112
120
  this.instances.set(token, instance);
@@ -142,25 +150,5 @@ export class Container {
142
150
  async resolveDependencies(moduleClass, dependencies) {
143
151
  return Promise.all(dependencies.map((dep) => this.resolve(moduleClass, dep)));
144
152
  }
145
- isProviderObject(provider) {
146
- return (typeof provider === "object" && provider !== null && "provide" in provider);
147
- }
148
- isFactoryProvider(provider) {
149
- return (this.isProviderObject(provider) &&
150
- "useFactory" in provider &&
151
- typeof provider.useFactory === "function");
152
- }
153
- isClassProvider(provider) {
154
- return (this.isProviderObject(provider) &&
155
- "useClass" in provider &&
156
- typeof provider.useClass === "function");
157
- }
158
- isValueProvider(provider) {
159
- return this.isProviderObject(provider) && "useValue" in provider;
160
- }
161
- isExistingProvider(provider) {
162
- return this.isProviderObject(provider) && "useExisting" in provider;
163
- }
164
153
  }
165
154
  export const container = new Container();
166
- //# sourceMappingURL=container.js.map
@@ -1,2 +1 @@
1
1
  export declare const cacheWindows: Map<string, Electron.CrossProcessExports.BrowserWindow>;
2
- //# sourceMappingURL=cache.d.ts.map
@@ -1,2 +1 @@
1
1
  export const cacheWindows = new Map();
2
- //# sourceMappingURL=cache.js.map
@@ -1,4 +1,3 @@
1
1
  import { BrowserWindow } from "electron";
2
2
  import type { TParamsCreateWindow } from "./types.js";
3
3
  export declare const createWindow: <N extends string>({ hash, options, isCache, loadURL, }: TParamsCreateWindow<N>) => BrowserWindow;
4
- //# sourceMappingURL=create.d.ts.map
@@ -3,80 +3,61 @@ import path from "node:path";
3
3
  import { cacheWindows } from "./cache.js";
4
4
  import { getWindow } from "./receive.js";
5
5
  import { getSettings } from "../bootstrap/settings.js";
6
- const createContentSecurityPolicy = (baseRestApi, isDev) => {
7
- const csp = `
8
- default-src 'self';
9
- connect-src 'self' ${baseRestApi};
10
- img-src * data:;
11
- style-src 'self' 'unsafe-inline';
12
- script-src 'self' ${isDev ? "'unsafe-inline'" : ""};
13
- `
6
+ const setupCSP = (base, dev) => {
7
+ const csp = `default-src 'self'; connect-src 'self' ${base}; img-src * data:; style-src 'self' 'unsafe-inline'; script-src 'self' ${dev ? "'unsafe-inline'" : ""};`
14
8
  .replace(/\s{2,}/g, " ")
15
9
  .trim();
16
- return csp;
17
- };
18
- const setupContentSecurityPolicy = (baseRestApi, isDev) => {
19
- const csp = createContentSecurityPolicy(baseRestApi, isDev);
20
- session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
21
- callback({
10
+ session.defaultSession.webRequest.onHeadersReceived((d, cb) => {
11
+ cb({
22
12
  responseHeaders: {
23
- ...details.responseHeaders,
13
+ ...d.responseHeaders,
24
14
  "Content-Security-Policy": [csp],
25
15
  },
26
16
  });
27
17
  });
28
18
  };
29
- const getAppPaths = (settings, isDev) => {
30
- return {
31
- ui: path.join(app.getAppPath(), `/${settings.folders.distRenderer}/index.html`),
32
- preload: path.join(app.getAppPath(), isDev ? "." : "..", `/${settings.folders.distMain}/preload.cjs`),
33
- };
34
- };
35
19
  export const createWindow = ({ hash, options, isCache, loadURL, }) => {
36
20
  const settings = getSettings();
37
21
  const isDev = process.env.NODE_ENV === "development";
38
- const { ui: uiPath, preload: preloadPath } = getAppPaths(settings, isDev);
39
- if (!settings.baseRestApi) {
22
+ const ui = path.join(app.getAppPath(), `/${settings.folders.distRenderer}/index.html`);
23
+ const preload = path.join(app.getAppPath(), isDev ? "." : "..", `/${settings.folders.distMain}/preload.cjs`);
24
+ if (!settings.baseRestApi)
40
25
  console.warn('Warning: You have to add an environment variable called "process.env.BASE_REST_API"!');
41
- }
42
- if (!settings.localhostPort) {
26
+ if (!settings.localhostPort)
43
27
  console.warn('Warning: You have to add an environment variable called "process.env.LOCALHOST_ELECTRON_SERVER_PORT"!');
44
- }
45
28
  if (hash && isCache) {
46
- const existingWindow = getWindow(hash);
47
- if (existingWindow) {
48
- existingWindow.show();
49
- return existingWindow;
29
+ const existing = getWindow(hash);
30
+ if (existing) {
31
+ existing.show();
32
+ return existing;
50
33
  }
51
34
  }
52
- const newWindow = new BrowserWindow({
35
+ const win = new BrowserWindow({
53
36
  ...options,
54
37
  webPreferences: {
55
- preload: preloadPath,
38
+ preload,
56
39
  contextIsolation: true,
57
40
  nodeIntegration: false,
58
41
  ...options?.webPreferences,
59
42
  },
60
43
  });
61
- if (isCache && !loadURL) {
62
- setupContentSecurityPolicy(settings.baseRestApi, isDev);
63
- }
44
+ if (isCache && !loadURL)
45
+ setupCSP(settings.baseRestApi, isDev);
64
46
  if (loadURL) {
65
- newWindow.loadURL(loadURL);
47
+ win.loadURL(loadURL);
66
48
  }
67
49
  else if (isDev) {
68
- newWindow.loadURL(`http://localhost:${settings.localhostPort}${hash ? `#${hash}` : ""}`);
50
+ win.loadURL(`http://localhost:${settings.localhostPort}${hash ? `#${hash}` : ""}`);
69
51
  }
70
52
  else if (hash) {
71
- newWindow.loadFile(uiPath, { hash });
53
+ win.loadFile(ui, { hash });
72
54
  }
73
55
  if (hash && isCache) {
74
- cacheWindows.set(hash, newWindow);
75
- newWindow.on("close", (event) => {
76
- event.preventDefault();
77
- newWindow.hide();
56
+ cacheWindows.set(hash, win);
57
+ win.on("close", (e) => {
58
+ e.preventDefault();
59
+ win.hide();
78
60
  });
79
61
  }
80
- return newWindow;
62
+ return win;
81
63
  };
82
- //# sourceMappingURL=create.js.map
@@ -1,2 +1 @@
1
1
  export declare const destroyWindows: () => void;
2
- //# sourceMappingURL=destroy.d.ts.map
@@ -7,4 +7,3 @@ export const destroyWindows = () => {
7
7
  }
8
8
  }
9
9
  };
10
- //# sourceMappingURL=destroy.js.map
@@ -1,3 +1,2 @@
1
1
  import type { BrowserWindow } from "electron";
2
2
  export declare const getWindow: <N extends string>(name: N) => BrowserWindow | undefined;
3
- //# sourceMappingURL=receive.d.ts.map
@@ -6,4 +6,3 @@ export const getWindow = (name) => {
6
6
  }
7
7
  return win;
8
8
  };
9
- //# sourceMappingURL=receive.js.map
@@ -12,4 +12,3 @@ export type TParamsCreateWindow<N = string> = {
12
12
  export type TCache = {
13
13
  [key in string]: BrowserWindow;
14
14
  };
15
- //# sourceMappingURL=types.d.ts.map
@@ -1,2 +1 @@
1
1
  import { BrowserWindow } from "electron";
2
- //# sourceMappingURL=types.js.map
@@ -4,4 +4,3 @@ type TInjectTokensMetadata = Record<number, TProviderToken>;
4
4
  export declare const Inject: (token: TProviderToken) => ParameterDecorator;
5
5
  export declare const getInjectedTokens: (target: Function) => TInjectTokensMetadata;
6
6
  export {};
7
- //# sourceMappingURL=inject.d.ts.map
@@ -13,4 +13,3 @@ export const Inject = (token) => {
13
13
  export const getInjectedTokens = (target) => {
14
14
  return Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) ?? {};
15
15
  };
16
- //# sourceMappingURL=inject.js.map
@@ -1,3 +1,2 @@
1
1
  import "reflect-metadata/lite";
2
2
  export declare const Injectable: () => ClassDecorator;
3
- //# sourceMappingURL=injectable.d.ts.map
@@ -4,4 +4,3 @@ export const Injectable = () => {
4
4
  Reflect.defineMetadata("Injectable", true, target);
5
5
  };
6
6
  };
7
- //# sourceMappingURL=injectable.js.map
@@ -1,3 +1,2 @@
1
1
  import "reflect-metadata/lite";
2
2
  export declare const IpcHandler: () => ClassDecorator;
3
- //# sourceMappingURL=ipc-handler.d.ts.map
@@ -4,4 +4,3 @@ export const IpcHandler = () => {
4
4
  Reflect.defineMetadata("IpcHandler", true, target);
5
5
  };
6
6
  };
7
- //# sourceMappingURL=ipc-handler.js.map
@@ -1,4 +1,3 @@
1
1
  import "reflect-metadata/lite";
2
2
  import type { RgModuleMetadata } from "../types/module-metadata.js";
3
3
  export declare const RgModule: (options: RgModuleMetadata) => ClassDecorator;
4
- //# sourceMappingURL=rg-module.d.ts.map
@@ -4,4 +4,3 @@ export const RgModule = (options) => {
4
4
  Reflect.defineMetadata("RgModule", options, target);
5
5
  };
6
6
  };
7
- //# sourceMappingURL=rg-module.js.map
@@ -1,4 +1,3 @@
1
1
  import "reflect-metadata/lite";
2
2
  import type { TParamsCreateWindow } from "../control-window/types.js";
3
3
  export declare const WindowManager: <P extends string>(options: TParamsCreateWindow<P>) => ClassDecorator;
4
- //# sourceMappingURL=window-manager.d.ts.map
@@ -4,4 +4,3 @@ export const WindowManager = (options) => {
4
4
  Reflect.defineMetadata("WindowManager", options, target);
5
5
  };
6
6
  };
7
- //# sourceMappingURL=window-manager.js.map