@devisfuture/electron-modular 1.1.10 → 1.1.12

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 (47) hide show
  1. package/README.md +6 -0
  2. package/dist/index.js +0 -8
  3. package/package.json +1 -1
  4. package/dist/@core/__tests__/container.test.d.ts +0 -1
  5. package/dist/@core/__tests__/container.test.js +0 -409
  6. package/dist/@core/bootstrap/__tests__/bootstrap.test.d.ts +0 -1
  7. package/dist/@core/bootstrap/__tests__/bootstrap.test.js +0 -131
  8. package/dist/@core/bootstrap/__tests__/initialize-module.test.d.ts +0 -1
  9. package/dist/@core/bootstrap/__tests__/initialize-module.test.js +0 -140
  10. package/dist/@core/bootstrap/__tests__/instantiate-module.test.d.ts +0 -1
  11. package/dist/@core/bootstrap/__tests__/instantiate-module.test.js +0 -174
  12. package/dist/@core/bootstrap/__tests__/register-imports.test.d.ts +0 -1
  13. package/dist/@core/bootstrap/__tests__/register-imports.test.js +0 -112
  14. package/dist/@core/bootstrap/__tests__/register-ipc-handlers.test.d.ts +0 -1
  15. package/dist/@core/bootstrap/__tests__/register-ipc-handlers.test.js +0 -68
  16. package/dist/@core/bootstrap/__tests__/register-providers.test.d.ts +0 -1
  17. package/dist/@core/bootstrap/__tests__/register-providers.test.js +0 -132
  18. package/dist/@core/bootstrap/__tests__/register-windows.test.d.ts +0 -1
  19. package/dist/@core/bootstrap/__tests__/register-windows.test.js +0 -109
  20. package/dist/@core/bootstrap/__tests__/settings.test.d.ts +0 -1
  21. package/dist/@core/bootstrap/__tests__/settings.test.js +0 -141
  22. package/dist/@core/control-window/__tests__/cache.test.d.ts +0 -1
  23. package/dist/@core/control-window/__tests__/cache.test.js +0 -50
  24. package/dist/@core/control-window/__tests__/destroy.test.d.ts +0 -1
  25. package/dist/@core/control-window/__tests__/destroy.test.js +0 -69
  26. package/dist/@core/control-window/__tests__/receive.test.d.ts +0 -1
  27. package/dist/@core/control-window/__tests__/receive.test.js +0 -68
  28. package/dist/@core/decorators/__tests__/inject.test.d.ts +0 -1
  29. package/dist/@core/decorators/__tests__/inject.test.js +0 -174
  30. package/dist/@core/decorators/__tests__/injectable.test.d.ts +0 -1
  31. package/dist/@core/decorators/__tests__/injectable.test.js +0 -73
  32. package/dist/@core/decorators/__tests__/ipc-handler.test.d.ts +0 -1
  33. package/dist/@core/decorators/__tests__/ipc-handler.test.js +0 -72
  34. package/dist/@core/decorators/__tests__/rg-module.test.d.ts +0 -1
  35. package/dist/@core/decorators/__tests__/rg-module.test.js +0 -135
  36. package/dist/@core/decorators/__tests__/window-manager.test.d.ts +0 -1
  37. package/dist/@core/decorators/__tests__/window-manager.test.js +0 -110
  38. package/dist/@core/errors/__tests__/index.test.d.ts +0 -1
  39. package/dist/@core/errors/__tests__/index.test.js +0 -82
  40. package/dist/@core/utils/__tests__/dependency-tokens.test.d.ts +0 -1
  41. package/dist/@core/utils/__tests__/dependency-tokens.test.js +0 -186
  42. package/dist/__mocks__/electron.d.ts +0 -88
  43. package/dist/__mocks__/electron.js +0 -76
  44. package/dist/__tests__/config.test.d.ts +0 -1
  45. package/dist/__tests__/config.test.js +0 -24
  46. package/dist/__tests__/setup.d.ts +0 -1
  47. package/dist/__tests__/setup.js +0 -9
@@ -1,140 +0,0 @@
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 { initializeModule } from "../initialize-module.js";
9
- import { container } from "../../container.js";
10
- import { RgModule } from "../../decorators/rg-module.js";
11
- import { Injectable } from "../../decorators/injectable.js";
12
- import "reflect-metadata/lite";
13
- describe("initializeModule", () => {
14
- beforeEach(() => {
15
- vi.clearAllMocks();
16
- });
17
- it("should add module to container", async () => {
18
- let TestModule = class TestModule {
19
- };
20
- TestModule = __decorate([
21
- RgModule({
22
- providers: [],
23
- })
24
- ], TestModule);
25
- const metadata = Reflect.getMetadata("RgModule", TestModule);
26
- await initializeModule(TestModule, metadata);
27
- expect(container.hasModule(TestModule)).toBe(true);
28
- });
29
- it("should set module metadata", async () => {
30
- const metadata = {
31
- providers: [],
32
- exports: [],
33
- };
34
- let TestModule = class TestModule {
35
- };
36
- TestModule = __decorate([
37
- RgModule(metadata)
38
- ], TestModule);
39
- await initializeModule(TestModule, metadata);
40
- const storedMetadata = container.getModuleMetadata(TestModule);
41
- expect(storedMetadata).toEqual(metadata);
42
- });
43
- it("should not re-initialize existing module", async () => {
44
- let TestModule = class TestModule {
45
- };
46
- TestModule = __decorate([
47
- RgModule({
48
- providers: [],
49
- })
50
- ], TestModule);
51
- const metadata = Reflect.getMetadata("RgModule", TestModule);
52
- await initializeModule(TestModule, metadata);
53
- await initializeModule(TestModule, metadata);
54
- // Should only be added once
55
- expect(container.hasModule(TestModule)).toBe(true);
56
- });
57
- it("should register providers", async () => {
58
- let TestService = class TestService {
59
- };
60
- TestService = __decorate([
61
- Injectable()
62
- ], TestService);
63
- let TestModule = class TestModule {
64
- };
65
- TestModule = __decorate([
66
- RgModule({
67
- providers: [TestService],
68
- })
69
- ], TestModule);
70
- const metadata = Reflect.getMetadata("RgModule", TestModule);
71
- await initializeModule(TestModule, metadata);
72
- const provider = container.getProvider(TestModule, TestService);
73
- expect(provider).toBe(TestService);
74
- });
75
- it("should register imports", async () => {
76
- let ImportedModule = class ImportedModule {
77
- };
78
- ImportedModule = __decorate([
79
- RgModule({
80
- providers: [],
81
- })
82
- ], ImportedModule);
83
- let TestModule = class TestModule {
84
- };
85
- TestModule = __decorate([
86
- RgModule({
87
- imports: [ImportedModule],
88
- providers: [],
89
- })
90
- ], TestModule);
91
- const metadata = Reflect.getMetadata("RgModule", TestModule);
92
- await initializeModule(TestModule, metadata);
93
- expect(container.hasModule(TestModule)).toBe(true);
94
- expect(container.hasModule(ImportedModule)).toBe(true);
95
- });
96
- it("should handle module with all metadata properties", async () => {
97
- let Service = class Service {
98
- };
99
- Service = __decorate([
100
- Injectable()
101
- ], Service);
102
- class Handler {
103
- onInit(data) { }
104
- }
105
- class Window {
106
- }
107
- let ImportedModule = class ImportedModule {
108
- };
109
- ImportedModule = __decorate([
110
- RgModule({
111
- providers: [],
112
- })
113
- ], ImportedModule);
114
- let CompleteModule = class CompleteModule {
115
- };
116
- CompleteModule = __decorate([
117
- RgModule({
118
- imports: [ImportedModule],
119
- providers: [Service],
120
- ipc: [Handler],
121
- windows: [Window],
122
- exports: [Service],
123
- })
124
- ], CompleteModule);
125
- const metadata = Reflect.getMetadata("RgModule", CompleteModule);
126
- await initializeModule(CompleteModule, metadata);
127
- expect(container.hasModule(CompleteModule)).toBe(true);
128
- expect(container.getProvider(CompleteModule, Service)).toBe(Service);
129
- });
130
- it("should handle empty metadata", async () => {
131
- let MinimalModule = class MinimalModule {
132
- };
133
- MinimalModule = __decorate([
134
- RgModule({})
135
- ], MinimalModule);
136
- const metadata = Reflect.getMetadata("RgModule", MinimalModule);
137
- await initializeModule(MinimalModule, metadata);
138
- expect(container.hasModule(MinimalModule)).toBe(true);
139
- });
140
- });
@@ -1 +0,0 @@
1
- import "reflect-metadata/lite";
@@ -1,174 +0,0 @@
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
- });
@@ -1 +0,0 @@
1
- import "reflect-metadata/lite";
@@ -1,112 +0,0 @@
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
- });
@@ -1 +0,0 @@
1
- import "reflect-metadata/lite";
@@ -1,68 +0,0 @@
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
- });
@@ -1 +0,0 @@
1
- import "reflect-metadata/lite";
@@ -1,132 +0,0 @@
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
- });
@@ -1 +0,0 @@
1
- import "reflect-metadata/lite";