@devisfuture/electron-modular 1.1.9 → 1.1.10

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 (45) hide show
  1. package/dist/@core/__tests__/container.test.d.ts +1 -0
  2. package/dist/@core/__tests__/container.test.js +409 -0
  3. package/dist/@core/bootstrap/__tests__/bootstrap.test.d.ts +1 -0
  4. package/dist/@core/bootstrap/__tests__/bootstrap.test.js +131 -0
  5. package/dist/@core/bootstrap/__tests__/initialize-module.test.d.ts +1 -0
  6. package/dist/@core/bootstrap/__tests__/initialize-module.test.js +140 -0
  7. package/dist/@core/bootstrap/__tests__/instantiate-module.test.d.ts +1 -0
  8. package/dist/@core/bootstrap/__tests__/instantiate-module.test.js +174 -0
  9. package/dist/@core/bootstrap/__tests__/register-imports.test.d.ts +1 -0
  10. package/dist/@core/bootstrap/__tests__/register-imports.test.js +112 -0
  11. package/dist/@core/bootstrap/__tests__/register-ipc-handlers.test.d.ts +1 -0
  12. package/dist/@core/bootstrap/__tests__/register-ipc-handlers.test.js +68 -0
  13. package/dist/@core/bootstrap/__tests__/register-providers.test.d.ts +1 -0
  14. package/dist/@core/bootstrap/__tests__/register-providers.test.js +132 -0
  15. package/dist/@core/bootstrap/__tests__/register-windows.test.d.ts +1 -0
  16. package/dist/@core/bootstrap/__tests__/register-windows.test.js +109 -0
  17. package/dist/@core/bootstrap/__tests__/settings.test.d.ts +1 -0
  18. package/dist/@core/bootstrap/__tests__/settings.test.js +141 -0
  19. package/dist/@core/control-window/__tests__/cache.test.d.ts +1 -0
  20. package/dist/@core/control-window/__tests__/cache.test.js +50 -0
  21. package/dist/@core/control-window/__tests__/destroy.test.d.ts +1 -0
  22. package/dist/@core/control-window/__tests__/destroy.test.js +69 -0
  23. package/dist/@core/control-window/__tests__/receive.test.d.ts +1 -0
  24. package/dist/@core/control-window/__tests__/receive.test.js +68 -0
  25. package/dist/@core/decorators/__tests__/inject.test.d.ts +1 -0
  26. package/dist/@core/decorators/__tests__/inject.test.js +174 -0
  27. package/dist/@core/decorators/__tests__/injectable.test.d.ts +1 -0
  28. package/dist/@core/decorators/__tests__/injectable.test.js +73 -0
  29. package/dist/@core/decorators/__tests__/ipc-handler.test.d.ts +1 -0
  30. package/dist/@core/decorators/__tests__/ipc-handler.test.js +72 -0
  31. package/dist/@core/decorators/__tests__/rg-module.test.d.ts +1 -0
  32. package/dist/@core/decorators/__tests__/rg-module.test.js +135 -0
  33. package/dist/@core/decorators/__tests__/window-manager.test.d.ts +1 -0
  34. package/dist/@core/decorators/__tests__/window-manager.test.js +110 -0
  35. package/dist/@core/errors/__tests__/index.test.d.ts +1 -0
  36. package/dist/@core/errors/__tests__/index.test.js +82 -0
  37. package/dist/@core/utils/__tests__/dependency-tokens.test.d.ts +1 -0
  38. package/dist/@core/utils/__tests__/dependency-tokens.test.js +186 -0
  39. package/dist/__mocks__/electron.d.ts +88 -0
  40. package/dist/__mocks__/electron.js +76 -0
  41. package/dist/__tests__/config.test.d.ts +1 -0
  42. package/dist/__tests__/config.test.js +24 -0
  43. package/dist/__tests__/setup.d.ts +1 -0
  44. package/dist/__tests__/setup.js +9 -0
  45. package/package.json +6 -2
@@ -0,0 +1,174 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { describe, it, expect, beforeEach } from "vitest";
11
+ import { instantiateModule } from "../instantiate-module.js";
12
+ import { container } from "../../container.js";
13
+ import { Injectable } from "../../decorators/injectable.js";
14
+ import "reflect-metadata/lite";
15
+ describe("instantiateModule", () => {
16
+ beforeEach(() => {
17
+ // Each test will create its own module
18
+ });
19
+ it("should instantiate module with no dependencies", async () => {
20
+ let SimpleModule = class SimpleModule {
21
+ value = "simple";
22
+ };
23
+ SimpleModule = __decorate([
24
+ Injectable()
25
+ ], SimpleModule);
26
+ container.addModule(SimpleModule, { providers: [] });
27
+ const instance = await instantiateModule(SimpleModule);
28
+ expect(instance).toBeInstanceOf(SimpleModule);
29
+ expect(instance.value).toBe("simple");
30
+ });
31
+ it("should instantiate module with dependencies", async () => {
32
+ let Dependency = class Dependency {
33
+ value = "dep";
34
+ };
35
+ Dependency = __decorate([
36
+ Injectable()
37
+ ], Dependency);
38
+ let ModuleWithDeps = class ModuleWithDeps {
39
+ dep;
40
+ constructor(dep) {
41
+ this.dep = dep;
42
+ }
43
+ };
44
+ ModuleWithDeps = __decorate([
45
+ Injectable(),
46
+ __metadata("design:paramtypes", [Dependency])
47
+ ], ModuleWithDeps);
48
+ Reflect.defineMetadata("design:paramtypes", [Dependency], ModuleWithDeps);
49
+ container.addModule(ModuleWithDeps, { providers: [] });
50
+ container.addProvider(ModuleWithDeps, Dependency);
51
+ const instance = await instantiateModule(ModuleWithDeps);
52
+ expect(instance).toBeInstanceOf(ModuleWithDeps);
53
+ expect(instance.dep).toBeInstanceOf(Dependency);
54
+ });
55
+ it("should register instantiated module in container", async () => {
56
+ let TestModule = class TestModule {
57
+ id = Math.random();
58
+ };
59
+ TestModule = __decorate([
60
+ Injectable()
61
+ ], TestModule);
62
+ container.addModule(TestModule, { providers: [] });
63
+ const instance1 = await instantiateModule(TestModule);
64
+ const instance2 = await container.resolve(TestModule, TestModule);
65
+ expect(instance1).toBe(instance2);
66
+ });
67
+ it("should resolve multiple dependencies", async () => {
68
+ let Dep1 = class Dep1 {
69
+ value = "dep1";
70
+ };
71
+ Dep1 = __decorate([
72
+ Injectable()
73
+ ], Dep1);
74
+ let Dep2 = class Dep2 {
75
+ value = "dep2";
76
+ };
77
+ Dep2 = __decorate([
78
+ Injectable()
79
+ ], Dep2);
80
+ let ModuleWithMultipleDeps = class ModuleWithMultipleDeps {
81
+ dep1;
82
+ dep2;
83
+ constructor(dep1, dep2) {
84
+ this.dep1 = dep1;
85
+ this.dep2 = dep2;
86
+ }
87
+ };
88
+ ModuleWithMultipleDeps = __decorate([
89
+ Injectable(),
90
+ __metadata("design:paramtypes", [Dep1,
91
+ Dep2])
92
+ ], ModuleWithMultipleDeps);
93
+ Reflect.defineMetadata("design:paramtypes", [Dep1, Dep2], ModuleWithMultipleDeps);
94
+ container.addModule(ModuleWithMultipleDeps, { providers: [] });
95
+ container.addProvider(ModuleWithMultipleDeps, Dep1);
96
+ container.addProvider(ModuleWithMultipleDeps, Dep2);
97
+ const instance = await instantiateModule(ModuleWithMultipleDeps);
98
+ expect(instance.dep1).toBeInstanceOf(Dep1);
99
+ expect(instance.dep2).toBeInstanceOf(Dep2);
100
+ });
101
+ it("should handle module with constructor logic", async () => {
102
+ let ModuleWithLogic = class ModuleWithLogic {
103
+ initialized = false;
104
+ constructor() {
105
+ this.initialized = true;
106
+ }
107
+ };
108
+ ModuleWithLogic = __decorate([
109
+ Injectable(),
110
+ __metadata("design:paramtypes", [])
111
+ ], ModuleWithLogic);
112
+ container.addModule(ModuleWithLogic, { providers: [] });
113
+ const instance = await instantiateModule(ModuleWithLogic);
114
+ expect(instance.initialized).toBe(true);
115
+ });
116
+ it("should pass resolved dependencies to constructor", async () => {
117
+ let Config = class Config {
118
+ setting = "configured";
119
+ };
120
+ Config = __decorate([
121
+ Injectable()
122
+ ], Config);
123
+ let AppModule = class AppModule {
124
+ configValue;
125
+ constructor(config) {
126
+ this.configValue = config.setting;
127
+ }
128
+ };
129
+ AppModule = __decorate([
130
+ Injectable(),
131
+ __metadata("design:paramtypes", [Config])
132
+ ], AppModule);
133
+ Reflect.defineMetadata("design:paramtypes", [Config], AppModule);
134
+ container.addModule(AppModule, { providers: [] });
135
+ container.addProvider(AppModule, Config);
136
+ const instance = await instantiateModule(AppModule);
137
+ expect(instance.configValue).toBe("configured");
138
+ });
139
+ it("should return the created instance", async () => {
140
+ let ReturnTestModule = class ReturnTestModule {
141
+ };
142
+ ReturnTestModule = __decorate([
143
+ Injectable()
144
+ ], ReturnTestModule);
145
+ container.addModule(ReturnTestModule, { providers: [] });
146
+ const result = await instantiateModule(ReturnTestModule);
147
+ expect(result).toBeDefined();
148
+ expect(result).toBeInstanceOf(ReturnTestModule);
149
+ });
150
+ it("should handle async dependency resolution", async () => {
151
+ let AsyncDep = class AsyncDep {
152
+ value = "async";
153
+ };
154
+ AsyncDep = __decorate([
155
+ Injectable()
156
+ ], AsyncDep);
157
+ let AsyncModule = class AsyncModule {
158
+ dep;
159
+ constructor(dep) {
160
+ this.dep = dep;
161
+ }
162
+ };
163
+ AsyncModule = __decorate([
164
+ Injectable(),
165
+ __metadata("design:paramtypes", [AsyncDep])
166
+ ], AsyncModule);
167
+ Reflect.defineMetadata("design:paramtypes", [AsyncDep], AsyncModule);
168
+ container.addModule(AsyncModule, { providers: [] });
169
+ container.addProvider(AsyncModule, AsyncDep);
170
+ const instance = await instantiateModule(AsyncModule);
171
+ expect(instance).toBeInstanceOf(AsyncModule);
172
+ expect(instance.dep.value).toBe("async");
173
+ });
174
+ });
@@ -0,0 +1 @@
1
+ import "reflect-metadata/lite";
@@ -0,0 +1,112 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { describe, it, expect, vi, beforeEach } from "vitest";
8
+ import { registerImports } from "../register-imports.js";
9
+ import { RgModule } from "../../decorators/rg-module.js";
10
+ import { container } from "../../container.js";
11
+ import "reflect-metadata/lite";
12
+ describe("registerImports", () => {
13
+ beforeEach(() => {
14
+ vi.clearAllMocks();
15
+ });
16
+ it("should return early if no imports in metadata", async () => {
17
+ const metadata = {};
18
+ await expect(registerImports(metadata)).resolves.toBeUndefined();
19
+ });
20
+ it("should initialize imported module", async () => {
21
+ let ImportedModule = class ImportedModule {
22
+ };
23
+ ImportedModule = __decorate([
24
+ RgModule({
25
+ providers: [],
26
+ })
27
+ ], ImportedModule);
28
+ const metadata = {
29
+ imports: [ImportedModule],
30
+ };
31
+ await registerImports(metadata);
32
+ expect(container.hasModule(ImportedModule)).toBe(true);
33
+ });
34
+ it("should initialize multiple imported modules", async () => {
35
+ let Module1 = class Module1 {
36
+ };
37
+ Module1 = __decorate([
38
+ RgModule({
39
+ providers: [],
40
+ })
41
+ ], Module1);
42
+ let Module2 = class Module2 {
43
+ };
44
+ Module2 = __decorate([
45
+ RgModule({
46
+ providers: [],
47
+ })
48
+ ], Module2);
49
+ const metadata = {
50
+ imports: [Module1, Module2],
51
+ };
52
+ await registerImports(metadata);
53
+ expect(container.hasModule(Module1)).toBe(true);
54
+ expect(container.hasModule(Module2)).toBe(true);
55
+ });
56
+ it("should handle empty imports array", async () => {
57
+ const metadata = {
58
+ imports: [],
59
+ };
60
+ await expect(registerImports(metadata)).resolves.toBeUndefined();
61
+ });
62
+ it("should skip module without @RgModule decorator", async () => {
63
+ class NonDecoratedModule {
64
+ }
65
+ const metadata = {
66
+ imports: [NonDecoratedModule],
67
+ };
68
+ // Should not throw, just skip initialization
69
+ await expect(registerImports(metadata)).resolves.toBeUndefined();
70
+ });
71
+ it("should initialize nested imports", async () => {
72
+ let NestedModule = class NestedModule {
73
+ };
74
+ NestedModule = __decorate([
75
+ RgModule({
76
+ providers: [],
77
+ })
78
+ ], NestedModule);
79
+ let ParentModule = class ParentModule {
80
+ };
81
+ ParentModule = __decorate([
82
+ RgModule({
83
+ imports: [NestedModule],
84
+ providers: [],
85
+ })
86
+ ], ParentModule);
87
+ const metadata = {
88
+ imports: [ParentModule],
89
+ };
90
+ await registerImports(metadata);
91
+ expect(container.hasModule(ParentModule)).toBe(true);
92
+ expect(container.hasModule(NestedModule)).toBe(true);
93
+ });
94
+ it("should handle module with providers", async () => {
95
+ class Service {
96
+ }
97
+ let ModuleWithProviders = class ModuleWithProviders {
98
+ };
99
+ ModuleWithProviders = __decorate([
100
+ RgModule({
101
+ providers: [Service],
102
+ })
103
+ ], ModuleWithProviders);
104
+ const metadata = {
105
+ imports: [ModuleWithProviders],
106
+ };
107
+ await registerImports(metadata);
108
+ expect(container.hasModule(ModuleWithProviders)).toBe(true);
109
+ const provider = container.getProvider(ModuleWithProviders, Service);
110
+ expect(provider).toBe(Service);
111
+ });
112
+ });
@@ -0,0 +1 @@
1
+ import "reflect-metadata/lite";
@@ -0,0 +1,68 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { registerIpcHandlers } from "../register-ipc-handlers.js";
3
+ import { container } from "../../container.js";
4
+ import "reflect-metadata/lite";
5
+ describe("registerIpcHandlers", () => {
6
+ let TestModule;
7
+ beforeEach(() => {
8
+ TestModule = class TestModule {
9
+ };
10
+ container.addModule(TestModule, { providers: [] });
11
+ });
12
+ it("should return early if no ipc in metadata", async () => {
13
+ const metadata = {};
14
+ await expect(registerIpcHandlers(TestModule, metadata)).resolves.toBeUndefined();
15
+ });
16
+ it("should register IPC handler class", async () => {
17
+ class TestHandler {
18
+ onInit(data) { }
19
+ }
20
+ const metadata = {
21
+ ipc: [TestHandler],
22
+ };
23
+ await registerIpcHandlers(TestModule, metadata);
24
+ const provider = container.getProvider(TestModule, TestHandler);
25
+ expect(provider).toBe(TestHandler);
26
+ });
27
+ it("should register multiple IPC handlers", async () => {
28
+ class Handler1 {
29
+ onInit(data) { }
30
+ }
31
+ class Handler2 {
32
+ onInit(data) { }
33
+ }
34
+ class Handler3 {
35
+ onInit(data) { }
36
+ }
37
+ const metadata = {
38
+ ipc: [Handler1, Handler2, Handler3],
39
+ };
40
+ await registerIpcHandlers(TestModule, metadata);
41
+ expect(container.getProvider(TestModule, Handler1)).toBe(Handler1);
42
+ expect(container.getProvider(TestModule, Handler2)).toBe(Handler2);
43
+ expect(container.getProvider(TestModule, Handler3)).toBe(Handler3);
44
+ });
45
+ it("should handle empty ipc array", async () => {
46
+ const metadata = {
47
+ ipc: [],
48
+ };
49
+ await expect(registerIpcHandlers(TestModule, metadata)).resolves.toBeUndefined();
50
+ });
51
+ it("should register handlers with constructor parameters", async () => {
52
+ class Dependency {
53
+ }
54
+ class HandlerWithDeps {
55
+ dep;
56
+ constructor(dep) {
57
+ this.dep = dep;
58
+ }
59
+ onInit(data) { }
60
+ }
61
+ const metadata = {
62
+ ipc: [HandlerWithDeps],
63
+ };
64
+ await registerIpcHandlers(TestModule, metadata);
65
+ const provider = container.getProvider(TestModule, HandlerWithDeps);
66
+ expect(provider).toBe(HandlerWithDeps);
67
+ });
68
+ });
@@ -0,0 +1 @@
1
+ import "reflect-metadata/lite";
@@ -0,0 +1,132 @@
1
+ import { describe, it, expect, beforeEach, vi } from "vitest";
2
+ import { registerProviders } from "../register-providers.js";
3
+ import { InvalidProviderError } from "../../errors/index.js";
4
+ import { container } from "../../container.js";
5
+ import "reflect-metadata/lite";
6
+ describe("registerProviders", () => {
7
+ let TestModule;
8
+ beforeEach(() => {
9
+ TestModule = class TestModule {
10
+ };
11
+ container.addModule(TestModule, { providers: [] });
12
+ });
13
+ it("should return early if no providers in metadata", async () => {
14
+ const metadata = {};
15
+ await expect(registerProviders(TestModule, metadata)).resolves.toBeUndefined();
16
+ });
17
+ it("should register class constructor providers", async () => {
18
+ class ServiceA {
19
+ }
20
+ class ServiceB {
21
+ }
22
+ const metadata = {
23
+ providers: [ServiceA, ServiceB],
24
+ };
25
+ await registerProviders(TestModule, metadata);
26
+ const providerA = container.getProvider(TestModule, ServiceA);
27
+ const providerB = container.getProvider(TestModule, ServiceB);
28
+ expect(providerA).toBe(ServiceA);
29
+ expect(providerB).toBe(ServiceB);
30
+ });
31
+ it("should register value providers", async () => {
32
+ const valueProvider = {
33
+ provide: "CONFIG",
34
+ useValue: { key: "value" },
35
+ };
36
+ const metadata = {
37
+ providers: [valueProvider],
38
+ };
39
+ await registerProviders(TestModule, metadata);
40
+ const provider = container.getProvider(TestModule, "CONFIG");
41
+ expect(provider).toBe(valueProvider);
42
+ });
43
+ it("should register factory providers", async () => {
44
+ const factoryProvider = {
45
+ provide: "FACTORY",
46
+ useFactory: () => ({ created: true }),
47
+ };
48
+ const metadata = {
49
+ providers: [factoryProvider],
50
+ };
51
+ await registerProviders(TestModule, metadata);
52
+ const provider = container.getProvider(TestModule, "FACTORY");
53
+ expect(provider).toBe(factoryProvider);
54
+ });
55
+ it("should register class providers", async () => {
56
+ class Implementation {
57
+ }
58
+ const classProvider = {
59
+ provide: "INTERFACE",
60
+ useClass: Implementation,
61
+ };
62
+ const metadata = {
63
+ providers: [classProvider],
64
+ };
65
+ await registerProviders(TestModule, metadata);
66
+ const provider = container.getProvider(TestModule, "INTERFACE");
67
+ expect(provider).toBe(classProvider);
68
+ });
69
+ it("should register existing providers", async () => {
70
+ const existingProvider = {
71
+ provide: "ALIAS",
72
+ useExisting: "ORIGINAL",
73
+ };
74
+ const metadata = {
75
+ providers: [existingProvider],
76
+ };
77
+ await registerProviders(TestModule, metadata);
78
+ const provider = container.getProvider(TestModule, "ALIAS");
79
+ expect(provider).toBe(existingProvider);
80
+ });
81
+ it("should register mixed provider types", async () => {
82
+ class ServiceClass {
83
+ }
84
+ const valueProvider = {
85
+ provide: "VALUE",
86
+ useValue: "test",
87
+ };
88
+ const metadata = {
89
+ providers: [ServiceClass, valueProvider],
90
+ };
91
+ await registerProviders(TestModule, metadata);
92
+ expect(container.getProvider(TestModule, ServiceClass)).toBe(ServiceClass);
93
+ expect(container.getProvider(TestModule, "VALUE")).toBe(valueProvider);
94
+ });
95
+ it("should throw InvalidProviderError for invalid provider", async () => {
96
+ const metadata = {
97
+ providers: ["invalid"],
98
+ };
99
+ await expect(registerProviders(TestModule, metadata)).rejects.toThrow(InvalidProviderError);
100
+ });
101
+ it("should throw InvalidProviderError for null provider", async () => {
102
+ const metadata = {
103
+ providers: [null],
104
+ };
105
+ await expect(registerProviders(TestModule, metadata)).rejects.toThrow(InvalidProviderError);
106
+ });
107
+ it("should throw InvalidProviderError for object without provide property", async () => {
108
+ const metadata = {
109
+ providers: [{ someKey: "value" }],
110
+ };
111
+ await expect(registerProviders(TestModule, metadata)).rejects.toThrow(InvalidProviderError);
112
+ });
113
+ it("should handle empty providers array", async () => {
114
+ const metadata = {
115
+ providers: [],
116
+ };
117
+ await expect(registerProviders(TestModule, metadata)).resolves.toBeUndefined();
118
+ });
119
+ it("should register symbol tokens", async () => {
120
+ const TOKEN = Symbol("test");
121
+ const provider = {
122
+ provide: TOKEN,
123
+ useValue: "test-value",
124
+ };
125
+ const metadata = {
126
+ providers: [provider],
127
+ };
128
+ await registerProviders(TestModule, metadata);
129
+ const registered = container.getProvider(TestModule, TOKEN);
130
+ expect(registered).toBe(provider);
131
+ });
132
+ });
@@ -0,0 +1 @@
1
+ import "reflect-metadata/lite";
@@ -0,0 +1,109 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { describe, it, expect, vi, beforeEach } from "vitest";
8
+ import { registerWindows } from "../register-windows.js";
9
+ import { container } from "../../container.js";
10
+ import { WindowManager } from "../../decorators/window-manager.js";
11
+ import "reflect-metadata/lite";
12
+ describe("registerWindows", () => {
13
+ let TestModule;
14
+ beforeEach(() => {
15
+ TestModule = class TestModule {
16
+ };
17
+ container.addModule(TestModule, { providers: [] });
18
+ vi.clearAllMocks();
19
+ });
20
+ it("should return early if no windows in metadata", async () => {
21
+ const metadata = {};
22
+ await expect(registerWindows(TestModule, metadata)).resolves.toBeUndefined();
23
+ });
24
+ it("should register window with hash", async () => {
25
+ let MainWindow = class MainWindow {
26
+ };
27
+ MainWindow = __decorate([
28
+ WindowManager({
29
+ hash: "main-window",
30
+ options: { width: 800, height: 600 },
31
+ })
32
+ ], MainWindow);
33
+ const metadata = {
34
+ windows: [MainWindow],
35
+ };
36
+ await registerWindows(TestModule, metadata);
37
+ const provider = container.getProvider(TestModule, "main-window");
38
+ expect(provider).toBeDefined();
39
+ expect(provider).toHaveProperty("metadata");
40
+ expect(provider).toHaveProperty("windowClass");
41
+ });
42
+ it("should register multiple windows", async () => {
43
+ let MainWindow = class MainWindow {
44
+ };
45
+ MainWindow = __decorate([
46
+ WindowManager({
47
+ hash: "main-window",
48
+ options: { width: 800 },
49
+ })
50
+ ], MainWindow);
51
+ let SettingsWindow = class SettingsWindow {
52
+ };
53
+ SettingsWindow = __decorate([
54
+ WindowManager({
55
+ hash: "settings-window",
56
+ options: { width: 600 },
57
+ })
58
+ ], SettingsWindow);
59
+ const metadata = {
60
+ windows: [MainWindow, SettingsWindow],
61
+ };
62
+ await registerWindows(TestModule, metadata);
63
+ const mainProvider = container.getProvider(TestModule, "main-window");
64
+ const settingsProvider = container.getProvider(TestModule, "settings-window");
65
+ expect(mainProvider).toBeDefined();
66
+ expect(settingsProvider).toBeDefined();
67
+ });
68
+ it("should not register window without hash", async () => {
69
+ let NoHashWindow = class NoHashWindow {
70
+ };
71
+ NoHashWindow = __decorate([
72
+ WindowManager({
73
+ options: { width: 800 },
74
+ })
75
+ ], NoHashWindow);
76
+ const metadata = {
77
+ windows: [NoHashWindow],
78
+ };
79
+ await registerWindows(TestModule, metadata);
80
+ // Since hash is undefined, it shouldn't register
81
+ const provider = container.getProvider(TestModule, undefined);
82
+ expect(provider).toBeUndefined();
83
+ });
84
+ it("should handle empty windows array", async () => {
85
+ const metadata = {
86
+ windows: [],
87
+ };
88
+ await expect(registerWindows(TestModule, metadata)).resolves.toBeUndefined();
89
+ });
90
+ it("should store window metadata and class", async () => {
91
+ const windowOptions = {
92
+ name: "test",
93
+ hash: "test-window",
94
+ options: { width: 1024, height: 768 },
95
+ };
96
+ let TestWindow = class TestWindow {
97
+ };
98
+ TestWindow = __decorate([
99
+ WindowManager(windowOptions)
100
+ ], TestWindow);
101
+ const metadata = {
102
+ windows: [TestWindow],
103
+ };
104
+ await registerWindows(TestModule, metadata);
105
+ const provider = container.getProvider(TestModule, "test-window");
106
+ expect(provider.windowClass).toBe(TestWindow);
107
+ expect(provider.metadata).toEqual(windowOptions);
108
+ });
109
+ });
@@ -0,0 +1 @@
1
+ export {};