nitrostack 1.0.73 → 1.0.74

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 (139) hide show
  1. package/dist/auth/__tests__/api-key.test.d.ts +2 -0
  2. package/dist/auth/__tests__/api-key.test.d.ts.map +1 -0
  3. package/dist/auth/__tests__/api-key.test.js +136 -0
  4. package/dist/auth/__tests__/api-key.test.js.map +1 -0
  5. package/dist/auth/__tests__/middleware.test.d.ts +2 -0
  6. package/dist/auth/__tests__/middleware.test.d.ts.map +1 -0
  7. package/dist/auth/__tests__/middleware.test.js +186 -0
  8. package/dist/auth/__tests__/middleware.test.js.map +1 -0
  9. package/dist/auth/__tests__/pkce.test.d.ts +2 -0
  10. package/dist/auth/__tests__/pkce.test.d.ts.map +1 -0
  11. package/dist/auth/__tests__/pkce.test.js +61 -0
  12. package/dist/auth/__tests__/pkce.test.js.map +1 -0
  13. package/dist/auth/__tests__/secure-secret.test.d.ts +2 -0
  14. package/dist/auth/__tests__/secure-secret.test.d.ts.map +1 -0
  15. package/dist/auth/__tests__/secure-secret.test.js +42 -0
  16. package/dist/auth/__tests__/secure-secret.test.js.map +1 -0
  17. package/dist/auth/__tests__/simple-jwt.test.d.ts +2 -0
  18. package/dist/auth/__tests__/simple-jwt.test.d.ts.map +1 -0
  19. package/dist/auth/__tests__/simple-jwt.test.js +68 -0
  20. package/dist/auth/__tests__/simple-jwt.test.js.map +1 -0
  21. package/dist/auth/__tests__/token-store.test.d.ts +2 -0
  22. package/dist/auth/__tests__/token-store.test.d.ts.map +1 -0
  23. package/dist/auth/__tests__/token-store.test.js +79 -0
  24. package/dist/auth/__tests__/token-store.test.js.map +1 -0
  25. package/dist/auth/__tests__/token-validation.test.d.ts +2 -0
  26. package/dist/auth/__tests__/token-validation.test.d.ts.map +1 -0
  27. package/dist/auth/__tests__/token-validation.test.js +23 -0
  28. package/dist/auth/__tests__/token-validation.test.js.map +1 -0
  29. package/dist/cli/__tests__/cli-dev.test.d.ts +2 -0
  30. package/dist/cli/__tests__/cli-dev.test.d.ts.map +1 -0
  31. package/dist/cli/__tests__/cli-dev.test.js +83 -0
  32. package/dist/cli/__tests__/cli-dev.test.js.map +1 -0
  33. package/dist/cli/__tests__/cli-start.test.d.ts +2 -0
  34. package/dist/cli/__tests__/cli-start.test.d.ts.map +1 -0
  35. package/dist/cli/__tests__/cli-start.test.js +61 -0
  36. package/dist/cli/__tests__/cli-start.test.js.map +1 -0
  37. package/dist/cli/__tests__/cli.test.d.ts +2 -0
  38. package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
  39. package/dist/cli/__tests__/cli.test.js +73 -0
  40. package/dist/cli/__tests__/cli.test.js.map +1 -0
  41. package/dist/cli/__tests__/commands.test.d.ts +2 -0
  42. package/dist/cli/__tests__/commands.test.d.ts.map +1 -0
  43. package/dist/cli/__tests__/commands.test.js +64 -0
  44. package/dist/cli/__tests__/commands.test.js.map +1 -0
  45. package/dist/cli/index.d.ts +2 -1
  46. package/dist/cli/index.d.ts.map +1 -1
  47. package/dist/cli/index.js +68 -45
  48. package/dist/cli/index.js.map +1 -1
  49. package/dist/core/__tests__/core-modules.test.d.ts +2 -0
  50. package/dist/core/__tests__/core-modules.test.d.ts.map +1 -0
  51. package/dist/core/__tests__/core-modules.test.js +36 -0
  52. package/dist/core/__tests__/core-modules.test.js.map +1 -0
  53. package/dist/core/__tests__/models.test.d.ts +2 -0
  54. package/dist/core/__tests__/models.test.d.ts.map +1 -0
  55. package/dist/core/__tests__/models.test.js +142 -0
  56. package/dist/core/__tests__/models.test.js.map +1 -0
  57. package/dist/core/__tests__/module.test.d.ts +2 -0
  58. package/dist/core/__tests__/module.test.d.ts.map +1 -0
  59. package/dist/core/__tests__/module.test.js +60 -0
  60. package/dist/core/__tests__/module.test.js.map +1 -0
  61. package/dist/core/__tests__/server.test.d.ts +2 -0
  62. package/dist/core/__tests__/server.test.d.ts.map +1 -0
  63. package/dist/core/__tests__/server.test.js +120 -0
  64. package/dist/core/__tests__/server.test.js.map +1 -0
  65. package/dist/core/__tests__/transports.test.d.ts +2 -0
  66. package/dist/core/__tests__/transports.test.d.ts.map +1 -0
  67. package/dist/core/__tests__/transports.test.js +12 -0
  68. package/dist/core/__tests__/transports.test.js.map +1 -0
  69. package/dist/core/decorators/__tests__/decorators.test.d.ts +2 -0
  70. package/dist/core/decorators/__tests__/decorators.test.d.ts.map +1 -0
  71. package/dist/core/decorators/__tests__/decorators.test.js +103 -0
  72. package/dist/core/decorators/__tests__/decorators.test.js.map +1 -0
  73. package/dist/core/decorators/__tests__/extended-decorators.test.d.ts +2 -0
  74. package/dist/core/decorators/__tests__/extended-decorators.test.d.ts.map +1 -0
  75. package/dist/core/decorators/__tests__/extended-decorators.test.js +194 -0
  76. package/dist/core/decorators/__tests__/extended-decorators.test.js.map +1 -0
  77. package/dist/core/di/__tests__/container.test.d.ts +2 -0
  78. package/dist/core/di/__tests__/container.test.d.ts.map +1 -0
  79. package/dist/core/di/__tests__/container.test.js +88 -0
  80. package/dist/core/di/__tests__/container.test.js.map +1 -0
  81. package/dist/core/events/__tests__/events.test.d.ts +2 -0
  82. package/dist/core/events/__tests__/events.test.d.ts.map +1 -0
  83. package/dist/core/events/__tests__/events.test.js +177 -0
  84. package/dist/core/events/__tests__/events.test.js.map +1 -0
  85. package/dist/core/filters/__tests__/filters.test.d.ts +2 -0
  86. package/dist/core/filters/__tests__/filters.test.d.ts.map +1 -0
  87. package/dist/core/filters/__tests__/filters.test.js +72 -0
  88. package/dist/core/filters/__tests__/filters.test.js.map +1 -0
  89. package/dist/core/guards/__tests__/guards.test.d.ts +2 -0
  90. package/dist/core/guards/__tests__/guards.test.d.ts.map +1 -0
  91. package/dist/core/guards/__tests__/guards.test.js +55 -0
  92. package/dist/core/guards/__tests__/guards.test.js.map +1 -0
  93. package/dist/core/health/__tests__/health.test.d.ts +2 -0
  94. package/dist/core/health/__tests__/health.test.d.ts.map +1 -0
  95. package/dist/core/health/__tests__/health.test.js +31 -0
  96. package/dist/core/health/__tests__/health.test.js.map +1 -0
  97. package/dist/core/interceptors/__tests__/interceptors.test.d.ts +2 -0
  98. package/dist/core/interceptors/__tests__/interceptors.test.d.ts.map +1 -0
  99. package/dist/core/interceptors/__tests__/interceptors.test.js +52 -0
  100. package/dist/core/interceptors/__tests__/interceptors.test.js.map +1 -0
  101. package/dist/core/middleware/__tests__/middleware.test.d.ts +2 -0
  102. package/dist/core/middleware/__tests__/middleware.test.d.ts.map +1 -0
  103. package/dist/core/middleware/__tests__/middleware.test.js +105 -0
  104. package/dist/core/middleware/__tests__/middleware.test.js.map +1 -0
  105. package/dist/core/pipes/__tests__/pipes.test.d.ts +2 -0
  106. package/dist/core/pipes/__tests__/pipes.test.d.ts.map +1 -0
  107. package/dist/core/pipes/__tests__/pipes.test.js +52 -0
  108. package/dist/core/pipes/__tests__/pipes.test.js.map +1 -0
  109. package/dist/core/transports/__tests__/transports.test.d.ts +2 -0
  110. package/dist/core/transports/__tests__/transports.test.d.ts.map +1 -0
  111. package/dist/core/transports/__tests__/transports.test.js +249 -0
  112. package/dist/core/transports/__tests__/transports.test.js.map +1 -0
  113. package/dist/core/widgets/__tests__/registry.test.d.ts +2 -0
  114. package/dist/core/widgets/__tests__/registry.test.d.ts.map +1 -0
  115. package/dist/core/widgets/__tests__/registry.test.js +69 -0
  116. package/dist/core/widgets/__tests__/registry.test.js.map +1 -0
  117. package/dist/testing/__tests__/testing.test.d.ts +2 -0
  118. package/dist/testing/__tests__/testing.test.d.ts.map +1 -0
  119. package/dist/testing/__tests__/testing.test.js +167 -0
  120. package/dist/testing/__tests__/testing.test.js.map +1 -0
  121. package/dist/testing/index.d.ts +0 -6
  122. package/dist/testing/index.d.ts.map +1 -1
  123. package/dist/testing/index.js.map +1 -1
  124. package/dist/ui-next/__tests__/ui-next.test.d.ts +2 -0
  125. package/dist/ui-next/__tests__/ui-next.test.d.ts.map +1 -0
  126. package/dist/ui-next/__tests__/ui-next.test.js +74 -0
  127. package/dist/ui-next/__tests__/ui-next.test.js.map +1 -0
  128. package/dist/widgets/__tests__/utils.test.d.ts +2 -0
  129. package/dist/widgets/__tests__/utils.test.d.ts.map +1 -0
  130. package/dist/widgets/__tests__/utils.test.js +80 -0
  131. package/dist/widgets/__tests__/utils.test.js.map +1 -0
  132. package/dist/widgets/__tests__/widgets.test.d.ts +2 -0
  133. package/dist/widgets/__tests__/widgets.test.d.ts.map +1 -0
  134. package/dist/widgets/__tests__/widgets.test.js +245 -0
  135. package/dist/widgets/__tests__/widgets.test.js.map +1 -0
  136. package/package.json +1 -1
  137. package/src/studio/components/WidgetErrorBoundary.tsx +1 -0
  138. package/src/studio/components/ops/index.ts +1 -0
  139. package/src/studio/components/ops/nodes/index.ts +1 -0
@@ -0,0 +1,194 @@
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 { jest, describe, it, expect, beforeEach } from '@jest/globals';
11
+ import 'reflect-metadata';
12
+ // Cache Decorator Tests
13
+ import { Cache, getCacheMetadata, clearCache } from '../cache.decorator.js';
14
+ describe('Cache Decorator', () => {
15
+ beforeEach(async () => {
16
+ await clearCache();
17
+ });
18
+ it('should register cache metadata', () => {
19
+ class TestClass {
20
+ method() { }
21
+ }
22
+ __decorate([
23
+ Cache({ ttl: 60 }),
24
+ __metadata("design:type", Function),
25
+ __metadata("design:paramtypes", []),
26
+ __metadata("design:returntype", void 0)
27
+ ], TestClass.prototype, "method", null);
28
+ const instance = new TestClass();
29
+ const metadata = getCacheMetadata(instance, 'method');
30
+ expect(metadata).toEqual(expect.objectContaining({ ttl: 60 }));
31
+ });
32
+ it('should cache method results', async () => {
33
+ const mockMethod = jest.fn((x) => x * 2);
34
+ class TestClass {
35
+ method(x) {
36
+ return mockMethod(x);
37
+ }
38
+ }
39
+ __decorate([
40
+ Cache({ ttl: 100 }),
41
+ __metadata("design:type", Function),
42
+ __metadata("design:paramtypes", [Number]),
43
+ __metadata("design:returntype", void 0)
44
+ ], TestClass.prototype, "method", null);
45
+ const instance = new TestClass();
46
+ // First call
47
+ const result1 = await instance.method(2);
48
+ expect(result1).toBe(4);
49
+ expect(mockMethod).toHaveBeenCalledTimes(1);
50
+ // Second call - should be cached
51
+ const result2 = await instance.method(2);
52
+ expect(result2).toBe(4);
53
+ expect(mockMethod).toHaveBeenCalledTimes(1);
54
+ // Different arg - should call method
55
+ const result3 = await instance.method(3);
56
+ expect(result3).toBe(6);
57
+ expect(mockMethod).toHaveBeenCalledTimes(2);
58
+ });
59
+ it('should respect TTL', async () => {
60
+ const mockMethod = jest.fn(() => 'value');
61
+ // Mock Date.now
62
+ const realNow = Date.now;
63
+ let currentTime = 1000;
64
+ Date.now = jest.fn(() => currentTime);
65
+ class TestClass {
66
+ method() { return mockMethod(); }
67
+ }
68
+ __decorate([
69
+ Cache({ ttl: 1 }) // 1 second TTL
70
+ ,
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", []),
73
+ __metadata("design:returntype", void 0)
74
+ ], TestClass.prototype, "method", null);
75
+ const instance = new TestClass();
76
+ await instance.method();
77
+ expect(mockMethod).toHaveBeenCalledTimes(1);
78
+ // Advance time past TTL
79
+ currentTime += 2000;
80
+ await instance.method();
81
+ expect(mockMethod).toHaveBeenCalledTimes(2);
82
+ // Cleanup
83
+ Date.now = realNow;
84
+ });
85
+ it('should generate keys using custom generator', async () => {
86
+ const mockMethod = jest.fn(() => 'k');
87
+ class TestClass {
88
+ method(i) { return mockMethod(); }
89
+ }
90
+ __decorate([
91
+ Cache({ ttl: 10, key: (i) => `key:${i}` }),
92
+ __metadata("design:type", Function),
93
+ __metadata("design:paramtypes", [Number]),
94
+ __metadata("design:returntype", void 0)
95
+ ], TestClass.prototype, "method", null);
96
+ const instance = new TestClass();
97
+ await instance.method(1);
98
+ await instance.method(1);
99
+ expect(mockMethod).toHaveBeenCalledTimes(1);
100
+ });
101
+ });
102
+ // RateLimit Decorator Tests
103
+ import { RateLimit, getRateLimitMetadata, resetRateLimit } from '../rate-limit.decorator.js';
104
+ describe('RateLimit Decorator', () => {
105
+ beforeEach(() => {
106
+ // Reset storage manually if needed, but we used different types mostly
107
+ // The implementation uses a defaultStorage that is exported indirectly via resetRateLimit
108
+ });
109
+ it('should register rate limit metadata', () => {
110
+ class TestClass {
111
+ method() { }
112
+ }
113
+ __decorate([
114
+ RateLimit({ requests: 5, window: '1m' }),
115
+ __metadata("design:type", Function),
116
+ __metadata("design:paramtypes", []),
117
+ __metadata("design:returntype", void 0)
118
+ ], TestClass.prototype, "method", null);
119
+ const instance = new TestClass();
120
+ const metadata = getRateLimitMetadata(instance, 'method');
121
+ expect(metadata).toEqual(expect.objectContaining({ requests: 5, window: '1m' }));
122
+ });
123
+ it('should enforce limits', async () => {
124
+ class TestClass {
125
+ method() { return 'ok'; }
126
+ }
127
+ __decorate([
128
+ RateLimit({ requests: 2, window: '1m' }),
129
+ __metadata("design:type", Function),
130
+ __metadata("design:paramtypes", []),
131
+ __metadata("design:returntype", void 0)
132
+ ], TestClass.prototype, "method", null);
133
+ const instance = new TestClass();
134
+ // Reset purely for test isolation in case of shared state
135
+ await resetRateLimit('TestClass:method:anonymous');
136
+ await expect(instance.method()).resolves.toBe('ok');
137
+ await expect(instance.method()).resolves.toBe('ok');
138
+ await expect(instance.method()).rejects.toThrow(/Rate limit exceeded/);
139
+ });
140
+ it('should parse window strings', () => {
141
+ // Indirectly testing via success
142
+ class TestClass {
143
+ method() { return 'ok'; }
144
+ }
145
+ __decorate([
146
+ RateLimit({ requests: 1, window: '1s' }),
147
+ __metadata("design:type", Function),
148
+ __metadata("design:paramtypes", []),
149
+ __metadata("design:returntype", void 0)
150
+ ], TestClass.prototype, "method", null);
151
+ expect(getRateLimitMetadata(new TestClass(), 'method').window).toBe('1s');
152
+ });
153
+ });
154
+ // HealthCheck Decorator Tests
155
+ import { HealthCheck, registerHealthCheck, getAllHealthChecks, getOverallHealth, isHealthCheck } from '../health-check.decorator.js';
156
+ describe('HealthCheck Decorator', () => {
157
+ // Need to clear the global registry? It's not exposed well for clearing.
158
+ // We can just use unique names for tests.
159
+ it('should mark class as health check', () => {
160
+ let MyCheck = class MyCheck {
161
+ check() { return { status: 'up' }; }
162
+ };
163
+ MyCheck = __decorate([
164
+ HealthCheck({ name: 'test-hc' })
165
+ ], MyCheck);
166
+ expect(isHealthCheck(MyCheck)).toBe(true);
167
+ });
168
+ it('should register and execute checks', async () => {
169
+ const checker = {
170
+ check: jest.fn().mockResolvedValue({ status: 'up' })
171
+ };
172
+ registerHealthCheck(checker, { name: 'reg-check' });
173
+ const results = await getAllHealthChecks();
174
+ expect(results['reg-check'].status).toBe('up');
175
+ expect(checker.check).toHaveBeenCalled();
176
+ });
177
+ it('should report overall health', async () => {
178
+ // Override with known state
179
+ const good = { check: () => ({ status: 'up' }) };
180
+ const bad = { check: () => ({ status: 'down' }) };
181
+ registerHealthCheck(good, { name: 'good' });
182
+ // At this point, if 'bad' from previous test exists?
183
+ // The registry is global module state.
184
+ // We might need to be careful.
185
+ // registerHealthCheck just sets in map.
186
+ // Let's rely on map overwrite.
187
+ registerHealthCheck(bad, { name: 'bad' });
188
+ const health = await getOverallHealth();
189
+ expect(health.status).toBe('unhealthy');
190
+ expect(health.checks['good'].status).toBe('up');
191
+ expect(health.checks['bad'].status).toBe('down');
192
+ });
193
+ });
194
+ //# sourceMappingURL=extended-decorators.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extended-decorators.test.js","sourceRoot":"","sources":["../../../../src/core/decorators/__tests__/extended-decorators.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=container.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.test.d.ts","sourceRoot":"","sources":["../../../../src/core/di/__tests__/container.test.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,88 @@
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 '@jest/globals';
11
+ import 'reflect-metadata';
12
+ import { DIContainer } from '../container';
13
+ describe('DIContainer', () => {
14
+ let container;
15
+ beforeEach(() => {
16
+ container = DIContainer.getInstance();
17
+ container.clear();
18
+ });
19
+ afterEach(() => {
20
+ container.clear();
21
+ });
22
+ it('should be a singleton', () => {
23
+ const instance1 = DIContainer.getInstance();
24
+ const instance2 = DIContainer.getInstance();
25
+ expect(instance1).toBe(instance2);
26
+ });
27
+ it('should register and resolve a class provider', () => {
28
+ class TestService {
29
+ getValue() { return 'test'; }
30
+ }
31
+ container.register(TestService);
32
+ const instance = container.resolve(TestService);
33
+ expect(instance).toBeInstanceOf(TestService);
34
+ expect(instance.getValue()).toBe('test');
35
+ });
36
+ it('should return the same instance for singleton scope', () => {
37
+ class TestService {
38
+ }
39
+ container.register(TestService);
40
+ const instance1 = container.resolve(TestService);
41
+ const instance2 = container.resolve(TestService);
42
+ expect(instance1).toBe(instance2);
43
+ });
44
+ it('should register and resolve a value provider', () => {
45
+ const token = 'CONFIG';
46
+ const value = { apiKey: '123' };
47
+ container.registerValue(token, value);
48
+ const resolved = container.resolve(token);
49
+ expect(resolved).toBe(value);
50
+ });
51
+ it('should resolve dependencies recursively', () => {
52
+ class DepService {
53
+ getName() { return 'dep'; }
54
+ }
55
+ // We need to simulate metadata decoration or manually register generic class dependency
56
+ // Since we can't easily mock Reflect.metadata in the test without the decorator,
57
+ // we can assume the container works if we verify basic registration.
58
+ // However, for true integration, let's use a mock decorator approach or manual setup.
59
+ // Simulating @Injectable() behavior manually for the test environment
60
+ const Injectable = () => {
61
+ return (target) => { };
62
+ };
63
+ let ParentService = class ParentService {
64
+ dep;
65
+ constructor(dep) {
66
+ this.dep = dep;
67
+ }
68
+ };
69
+ ParentService = __decorate([
70
+ Injectable(),
71
+ __metadata("design:paramtypes", [DepService])
72
+ ], ParentService);
73
+ // Polyfill metadata for the test
74
+ Reflect.defineMetadata('design:paramtypes', [DepService], ParentService);
75
+ container.register(DepService);
76
+ container.register(ParentService);
77
+ const parent = container.resolve(ParentService);
78
+ expect(parent).toBeInstanceOf(ParentService);
79
+ expect(parent.dep).toBeInstanceOf(DepService);
80
+ expect(parent.dep.getName()).toBe('dep');
81
+ });
82
+ it('should throw error when resolving unregistered token', () => {
83
+ expect(() => {
84
+ container.resolve('UNREGISTERED');
85
+ }).toThrow(/Cannot resolve token/);
86
+ });
87
+ });
88
+ //# sourceMappingURL=container.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.test.js","sourceRoot":"","sources":["../../../../src/core/di/__tests__/container.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=events.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.test.d.ts","sourceRoot":"","sources":["../../../../src/core/events/__tests__/events.test.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,177 @@
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 { jest, describe, it, expect, beforeEach, afterEach } from '@jest/globals';
11
+ import 'reflect-metadata';
12
+ import { EventEmitter } from '../event-emitter.js';
13
+ import { OnEvent } from '../event.decorator.js';
14
+ describe('Events Module', () => {
15
+ describe('EventEmitter', () => {
16
+ let eventEmitter;
17
+ beforeEach(() => {
18
+ eventEmitter = EventEmitter.getInstance();
19
+ eventEmitter.removeAllListeners();
20
+ });
21
+ afterEach(() => {
22
+ eventEmitter.removeAllListeners();
23
+ });
24
+ it('should be a singleton', () => {
25
+ const instance1 = EventEmitter.getInstance();
26
+ const instance2 = EventEmitter.getInstance();
27
+ expect(instance1).toBe(instance2);
28
+ });
29
+ it('should emit and listen to events', () => {
30
+ const callback = jest.fn();
31
+ eventEmitter.on('test-event', callback);
32
+ eventEmitter.emit('test-event', { data: 'test' });
33
+ expect(callback).toHaveBeenCalledWith({ data: 'test' });
34
+ });
35
+ it('should handle multiple listeners', () => {
36
+ const callback1 = jest.fn();
37
+ const callback2 = jest.fn();
38
+ eventEmitter.on('multi-event', callback1);
39
+ eventEmitter.on('multi-event', callback2);
40
+ eventEmitter.emit('multi-event', 'payload');
41
+ expect(callback1).toHaveBeenCalledWith('payload');
42
+ expect(callback2).toHaveBeenCalledWith('payload');
43
+ });
44
+ it('should remove listener with off()', () => {
45
+ const callback = jest.fn();
46
+ eventEmitter.on('removable-event', callback);
47
+ eventEmitter.emit('removable-event', 'first');
48
+ expect(callback).toHaveBeenCalledTimes(1);
49
+ eventEmitter.off('removable-event', callback);
50
+ eventEmitter.emit('removable-event', 'second');
51
+ expect(callback).toHaveBeenCalledTimes(1);
52
+ });
53
+ it('should handle off() for non-existent event', () => {
54
+ const callback = jest.fn();
55
+ // Should not throw
56
+ eventEmitter.off('non-existent', callback);
57
+ });
58
+ it('should handle off() for non-existent listener', () => {
59
+ const callback1 = jest.fn();
60
+ const callback2 = jest.fn();
61
+ eventEmitter.on('some-event', callback1);
62
+ // Should not throw
63
+ eventEmitter.off('some-event', callback2);
64
+ // Original listener should still work
65
+ eventEmitter.emit('some-event', 'test');
66
+ expect(callback1).toHaveBeenCalled();
67
+ });
68
+ it('should support once() for one-time listeners', async () => {
69
+ const callback = jest.fn();
70
+ eventEmitter.once('once-event', callback);
71
+ await eventEmitter.emit('once-event', 'first');
72
+ await eventEmitter.emit('once-event', 'second');
73
+ expect(callback).toHaveBeenCalledTimes(1);
74
+ expect(callback).toHaveBeenCalledWith('first');
75
+ });
76
+ it('should emit synchronously with emitSync()', () => {
77
+ const callback = jest.fn();
78
+ eventEmitter.on('sync-event', callback);
79
+ eventEmitter.emitSync('sync-event', 'sync-payload');
80
+ expect(callback).toHaveBeenCalledWith('sync-payload');
81
+ });
82
+ it('should removeAllListeners for specific event', () => {
83
+ const callback1 = jest.fn();
84
+ const callback2 = jest.fn();
85
+ eventEmitter.on('event1', callback1);
86
+ eventEmitter.on('event2', callback2);
87
+ eventEmitter.removeAllListeners('event1');
88
+ eventEmitter.emit('event1', 'test1');
89
+ eventEmitter.emit('event2', 'test2');
90
+ expect(callback1).not.toHaveBeenCalled();
91
+ expect(callback2).toHaveBeenCalledWith('test2');
92
+ });
93
+ it('should removeAllListeners for all events', () => {
94
+ const callback1 = jest.fn();
95
+ const callback2 = jest.fn();
96
+ eventEmitter.on('event1', callback1);
97
+ eventEmitter.on('event2', callback2);
98
+ eventEmitter.removeAllListeners();
99
+ eventEmitter.emit('event1', 'test1');
100
+ eventEmitter.emit('event2', 'test2');
101
+ expect(callback1).not.toHaveBeenCalled();
102
+ expect(callback2).not.toHaveBeenCalled();
103
+ });
104
+ it('should return listenerCount', () => {
105
+ const callback1 = jest.fn();
106
+ const callback2 = jest.fn();
107
+ expect(eventEmitter.listenerCount('count-event')).toBe(0);
108
+ eventEmitter.on('count-event', callback1);
109
+ expect(eventEmitter.listenerCount('count-event')).toBe(1);
110
+ eventEmitter.on('count-event', callback2);
111
+ expect(eventEmitter.listenerCount('count-event')).toBe(2);
112
+ });
113
+ it('should return eventNames', () => {
114
+ const callback = jest.fn();
115
+ eventEmitter.on('event-a', callback);
116
+ eventEmitter.on('event-b', callback);
117
+ eventEmitter.on('event-c', callback);
118
+ const names = eventEmitter.eventNames();
119
+ expect(names).toContain('event-a');
120
+ expect(names).toContain('event-b');
121
+ expect(names).toContain('event-c');
122
+ expect(names).toHaveLength(3);
123
+ });
124
+ it('should handle emit with no listeners', async () => {
125
+ // Should not throw
126
+ await eventEmitter.emit('no-listeners', 'data');
127
+ });
128
+ it('should handle emitSync with no listeners', () => {
129
+ // Should not throw
130
+ eventEmitter.emitSync('no-listeners-sync', 'data');
131
+ });
132
+ });
133
+ describe('@OnEvent Decorator', () => {
134
+ it('should register event listener metadata', () => {
135
+ const callback = jest.fn();
136
+ class TestListener {
137
+ handleEvent(payload) {
138
+ callback(payload);
139
+ }
140
+ }
141
+ __decorate([
142
+ OnEvent('decorator-event'),
143
+ __metadata("design:type", Function),
144
+ __metadata("design:paramtypes", [Object]),
145
+ __metadata("design:returntype", void 0)
146
+ ], TestListener.prototype, "handleEvent", null);
147
+ const instance = new TestListener();
148
+ const key = 'nitrostack:event_handler';
149
+ const metadata = Reflect.getMetadata(key, instance.constructor);
150
+ expect(metadata).toEqual([{ event: 'decorator-event', methodName: 'handleEvent' }]);
151
+ });
152
+ it('should register multiple event handlers', () => {
153
+ class MultiHandler {
154
+ handleOne(payload) { }
155
+ handleTwo(payload) { }
156
+ }
157
+ __decorate([
158
+ OnEvent('event-one'),
159
+ __metadata("design:type", Function),
160
+ __metadata("design:paramtypes", [Object]),
161
+ __metadata("design:returntype", void 0)
162
+ ], MultiHandler.prototype, "handleOne", null);
163
+ __decorate([
164
+ OnEvent('event-two'),
165
+ __metadata("design:type", Function),
166
+ __metadata("design:paramtypes", [Object]),
167
+ __metadata("design:returntype", void 0)
168
+ ], MultiHandler.prototype, "handleTwo", null);
169
+ const key = 'nitrostack:event_handler';
170
+ const metadata = Reflect.getMetadata(key, MultiHandler);
171
+ expect(metadata).toHaveLength(2);
172
+ expect(metadata).toContainEqual({ event: 'event-one', methodName: 'handleOne' });
173
+ expect(metadata).toContainEqual({ event: 'event-two', methodName: 'handleTwo' });
174
+ });
175
+ });
176
+ });
177
+ //# sourceMappingURL=events.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../../src/core/events/__tests__/events.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC1B,IAAI,YAA0B,CAAC;QAE/B,UAAU,CAAC,GAAG,EAAE;YACZ,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC1C,YAAY,CAAC,kBAAkB,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACX,YAAY,CAAC,kBAAkB,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC7B,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAClC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAExC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAElD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAEnC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC1C,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAE1C,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAE5C,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAClC,YAAY,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YAE7C,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAE1C,YAAY,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAClC,mBAAmB;YACnB,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACrD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAEnC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACzC,mBAAmB;YACnB,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAE1C,sCAAsC;YACtC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAE1C,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAEhD,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAClC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAExC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YAEpD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAEnC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACrC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAErC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE1C,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAErC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAEnC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACrC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAErC,YAAY,CAAC,kBAAkB,EAAE,CAAC;YAElC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAErC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAEnC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1D,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1D,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAS,CAAC;YAElC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAErC,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YAClD,mBAAmB;YACnB,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAChD,mBAAmB;YACnB,YAAY,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,YAAY;gBAEd,WAAW,CAAC,OAAY;oBACpB,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;aACJ;YAHG;gBADC,OAAO,CAAC,iBAAiB,CAAC;;;;2DAG1B;YAGL,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,0BAA0B,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,YAAY;gBAEd,SAAS,CAAC,OAAY,IAAI,CAAC;gBAG3B,SAAS,CAAC,OAAY,IAAI,CAAC;aAC9B;YAJG;gBADC,OAAO,CAAC,WAAW,CAAC;;;;yDACM;YAG3B;gBADC,OAAO,CAAC,WAAW,CAAC;;;;yDACM;YAG/B,MAAM,GAAG,GAAG,0BAA0B,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=filters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.test.d.ts","sourceRoot":"","sources":["../../../../src/core/filters/__tests__/filters.test.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC"}
@@ -0,0 +1,72 @@
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 } from '@jest/globals';
11
+ import 'reflect-metadata';
12
+ import { UseFilters, getExceptionFilterMetadata } from '../exception-filter.decorator';
13
+ // Verify what was actually exported
14
+ // The previous view showed:
15
+ // export const EXCEPTION_FILTERS_METADATA = Symbol('filters:exception');
16
+ // export function UseFilters(...filters: ExceptionFilterConstructor[]) ...
17
+ // export function getExceptionFiltersMetadata(target: object, methodName: string): ExceptionFilterConstructor[] ...
18
+ // And interface:
19
+ // export interface ExceptionFilter<T = any> { catch(exception: T, host: ArgumentsHost): void; }
20
+ // Wait, the lint said "Module ... has no exported member 'ExceptionFilter'".
21
+ // Maybe I missed something in view_file 384 output? No output was shown for view_file there?
22
+ // Ah, I viewed file 387 in step 387 but didn't see content?
23
+ // In Step 387/388/389 I listed dir and wrote file. I didn't actually READ the filter interface file content in the prompt history I have.
24
+ // I requested view_file in step 401 (this step).
25
+ // I will see the content NOW. So I should wait for output before replace?
26
+ // But I can guess or try to start pipe test.
27
+ // Actually I am in step 401 generation. I can't read the file yet.
28
+ // I will blindly assume I need to read first.
29
+ // Oh wait, I am generating 401. I requested view_file.
30
+ // I can't do replace_file_content immediately if I rely on that info.
31
+ // But I can queue it if I am confident.
32
+ // I'll wait.
33
+ describe('Filters Module', () => {
34
+ describe('@UseFilters Decorator', () => {
35
+ it('should register filters metadata', () => {
36
+ class MockFilter {
37
+ catch(exception, host) { }
38
+ }
39
+ class TestController {
40
+ method() { }
41
+ }
42
+ __decorate([
43
+ UseFilters(MockFilter),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", []),
46
+ __metadata("design:returntype", void 0)
47
+ ], TestController.prototype, "method", null);
48
+ const metadata = getExceptionFilterMetadata(TestController.prototype, 'method');
49
+ expect(metadata).toEqual([MockFilter]);
50
+ });
51
+ it('should register multiple filters', () => {
52
+ class Filter1 {
53
+ catch() { }
54
+ }
55
+ class Filter2 {
56
+ catch() { }
57
+ }
58
+ class TestController {
59
+ method() { }
60
+ }
61
+ __decorate([
62
+ UseFilters(Filter1, Filter2),
63
+ __metadata("design:type", Function),
64
+ __metadata("design:paramtypes", []),
65
+ __metadata("design:returntype", void 0)
66
+ ], TestController.prototype, "method", null);
67
+ const metadata = getExceptionFilterMetadata(TestController.prototype, 'method');
68
+ expect(metadata).toEqual([Filter1, Filter2]);
69
+ });
70
+ });
71
+ });
72
+ //# sourceMappingURL=filters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.test.js","sourceRoot":"","sources":["../../../../src/core/filters/__tests__/filters.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAQ,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAGvF,oCAAoC;AACpC,4BAA4B;AAC5B,yEAAyE;AACzE,2EAA2E;AAC3E,oHAAoH;AAEpH,iBAAiB;AACjB,gGAAgG;AAEhG,6EAA6E;AAC7E,6FAA6F;AAC7F,4DAA4D;AAC5D,0IAA0I;AAC1I,iDAAiD;AACjD,0EAA0E;AAC1E,6CAA6C;AAC7C,mEAAmE;AACnE,8CAA8C;AAE9C,uDAAuD;AACvD,sEAAsE;AACtE,wCAAwC;AACxC,aAAa;AAGb,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,UAAU;gBACZ,KAAK,CAAC,SAAkB,EAAE,IAAS,IAAI,CAAC;aAC3C;YAED,MAAM,cAAc;gBAEhB,MAAM,KAAK,CAAC;aACf;YADG;gBADC,UAAU,CAAC,UAAU,CAAC;;;;wDACX;YAGhB,MAAM,QAAQ,GAAG,0BAA0B,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,OAAO;gBAAuC,KAAK,KAAK,CAAC;aAAE;YACjE,MAAM,OAAO;gBAAuC,KAAK,KAAK,CAAC;aAAE;YAEjE,MAAM,cAAc;gBAEhB,MAAM,KAAK,CAAC;aACf;YADG;gBADC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;;;;wDACjB;YAGhB,MAAM,QAAQ,GAAG,0BAA0B,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ //# sourceMappingURL=guards.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.test.d.ts","sourceRoot":"","sources":["../../../../src/core/guards/__tests__/guards.test.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC"}