@cinnabun/core 0.0.1 → 0.0.2

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 (260) hide show
  1. package/dist/__tests__/autowired.test.d.ts +1 -0
  2. package/dist/__tests__/autowired.test.js +109 -0
  3. package/dist/__tests__/autowired.test.js.map +1 -0
  4. package/dist/__tests__/cinnabun-application.test.d.ts +1 -0
  5. package/dist/__tests__/cinnabun-application.test.js +96 -0
  6. package/dist/__tests__/cinnabun-application.test.js.map +1 -0
  7. package/dist/__tests__/cinnabun-factory.test.d.ts +1 -0
  8. package/dist/__tests__/cinnabun-factory.test.js +269 -0
  9. package/dist/__tests__/cinnabun-factory.test.js.map +1 -0
  10. package/dist/__tests__/circular-dependency.test.d.ts +1 -0
  11. package/dist/__tests__/circular-dependency.test.js +318 -0
  12. package/dist/__tests__/circular-dependency.test.js.map +1 -0
  13. package/dist/__tests__/compression.test.d.ts +1 -0
  14. package/dist/__tests__/compression.test.js +459 -0
  15. package/dist/__tests__/compression.test.js.map +1 -0
  16. package/dist/__tests__/config.test.d.ts +1 -0
  17. package/dist/__tests__/config.test.js +86 -0
  18. package/dist/__tests__/config.test.js.map +1 -0
  19. package/dist/__tests__/cors.test.d.ts +1 -0
  20. package/dist/__tests__/cors.test.js +575 -0
  21. package/dist/__tests__/cors.test.js.map +1 -0
  22. package/dist/__tests__/env-config.test.d.ts +1 -0
  23. package/dist/__tests__/env-config.test.js +367 -0
  24. package/dist/__tests__/env-config.test.js.map +1 -0
  25. package/dist/__tests__/exception.test.d.ts +1 -0
  26. package/dist/__tests__/exception.test.js +207 -0
  27. package/dist/__tests__/exception.test.js.map +1 -0
  28. package/dist/__tests__/guards-interceptors.test.d.ts +1 -0
  29. package/dist/__tests__/guards-interceptors.test.js +660 -0
  30. package/dist/__tests__/guards-interceptors.test.js.map +1 -0
  31. package/dist/__tests__/health-check.test.d.ts +1 -0
  32. package/dist/__tests__/health-check.test.js +240 -0
  33. package/dist/__tests__/health-check.test.js.map +1 -0
  34. package/dist/__tests__/http.test.d.ts +1 -0
  35. package/dist/__tests__/http.test.js +629 -0
  36. package/dist/__tests__/http.test.js.map +1 -0
  37. package/dist/__tests__/integration/e2e.test.d.ts +1 -0
  38. package/dist/__tests__/integration/e2e.test.js +192 -0
  39. package/dist/__tests__/integration/e2e.test.js.map +1 -0
  40. package/dist/__tests__/integration/performance.bench.d.ts +1 -0
  41. package/dist/__tests__/integration/performance.bench.js +129 -0
  42. package/dist/__tests__/integration/performance.bench.js.map +1 -0
  43. package/dist/__tests__/integration/validation.test.d.ts +1 -0
  44. package/dist/__tests__/integration/validation.test.js +133 -0
  45. package/dist/__tests__/integration/validation.test.js.map +1 -0
  46. package/dist/__tests__/lifecycle-management.test.d.ts +1 -0
  47. package/dist/__tests__/lifecycle-management.test.js +688 -0
  48. package/dist/__tests__/lifecycle-management.test.js.map +1 -0
  49. package/dist/__tests__/lifecycle.test.d.ts +1 -0
  50. package/dist/__tests__/lifecycle.test.js +196 -0
  51. package/dist/__tests__/lifecycle.test.js.map +1 -0
  52. package/dist/__tests__/logger.test.d.ts +1 -0
  53. package/dist/__tests__/logger.test.js +109 -0
  54. package/dist/__tests__/logger.test.js.map +1 -0
  55. package/dist/__tests__/middleware.test.d.ts +1 -0
  56. package/dist/__tests__/middleware.test.js +329 -0
  57. package/dist/__tests__/middleware.test.js.map +1 -0
  58. package/dist/__tests__/module.test.d.ts +1 -0
  59. package/dist/__tests__/module.test.js +280 -0
  60. package/dist/__tests__/module.test.js.map +1 -0
  61. package/dist/__tests__/plugin.test.d.ts +1 -0
  62. package/dist/__tests__/plugin.test.js +283 -0
  63. package/dist/__tests__/plugin.test.js.map +1 -0
  64. package/dist/__tests__/request-logger.test.d.ts +1 -0
  65. package/dist/__tests__/request-logger.test.js +342 -0
  66. package/dist/__tests__/request-logger.test.js.map +1 -0
  67. package/dist/__tests__/request-mapping.test.d.ts +1 -0
  68. package/dist/__tests__/request-mapping.test.js +201 -0
  69. package/dist/__tests__/request-mapping.test.js.map +1 -0
  70. package/dist/__tests__/routes.test.d.ts +1 -0
  71. package/dist/__tests__/routes.test.js +119 -0
  72. package/dist/__tests__/routes.test.js.map +1 -0
  73. package/dist/__tests__/scan-fixtures/controllers/hello.controller.d.ts +4 -0
  74. package/dist/__tests__/scan-fixtures/controllers/hello.controller.js +28 -0
  75. package/dist/__tests__/scan-fixtures/controllers/hello.controller.js.map +1 -0
  76. package/dist/__tests__/scan-fixtures/modules/feature.module.d.ts +6 -0
  77. package/dist/__tests__/scan-fixtures/modules/feature.module.js +28 -0
  78. package/dist/__tests__/scan-fixtures/modules/feature.module.js.map +1 -0
  79. package/dist/__tests__/scan-fixtures/services/greeting.service.d.ts +4 -0
  80. package/dist/__tests__/scan-fixtures/services/greeting.service.js +18 -0
  81. package/dist/__tests__/scan-fixtures/services/greeting.service.js.map +1 -0
  82. package/dist/__tests__/scanner.test.d.ts +1 -0
  83. package/dist/__tests__/scanner.test.js +49 -0
  84. package/dist/__tests__/scanner.test.js.map +1 -0
  85. package/dist/__tests__/validation.test.d.ts +1 -0
  86. package/dist/__tests__/validation.test.js +561 -0
  87. package/dist/__tests__/validation.test.js.map +1 -0
  88. package/dist/__tests__/websocket-auth.test.d.ts +1 -0
  89. package/dist/__tests__/websocket-auth.test.js +431 -0
  90. package/dist/__tests__/websocket-auth.test.js.map +1 -0
  91. package/dist/__tests__/websocket-decorators.test.d.ts +1 -0
  92. package/dist/__tests__/websocket-decorators.test.js +173 -0
  93. package/dist/__tests__/websocket-decorators.test.js.map +1 -0
  94. package/dist/__tests__/websocket-validation.test.d.ts +1 -0
  95. package/dist/__tests__/websocket-validation.test.js +827 -0
  96. package/dist/__tests__/websocket-validation.test.js.map +1 -0
  97. package/dist/__tests__/websocket.test.d.ts +1 -0
  98. package/dist/__tests__/websocket.test.js +415 -0
  99. package/dist/__tests__/websocket.test.js.map +1 -0
  100. package/dist/config/config.module.d.ts +2 -0
  101. package/dist/config/config.module.js +18 -0
  102. package/dist/config/config.module.js.map +1 -0
  103. package/dist/config/config.service.d.ts +15 -0
  104. package/dist/config/config.service.js +58 -0
  105. package/dist/config/config.service.js.map +1 -0
  106. package/dist/config/schemas.d.ts +107 -0
  107. package/dist/config/schemas.js +87 -0
  108. package/dist/config/schemas.js.map +1 -0
  109. package/dist/core/app.d.ts +44 -0
  110. package/dist/core/app.js +178 -0
  111. package/dist/core/app.js.map +1 -0
  112. package/dist/core/cinnabun-factory.d.ts +5 -0
  113. package/dist/core/cinnabun-factory.js +130 -0
  114. package/dist/core/cinnabun-factory.js.map +1 -0
  115. package/dist/core/config-loader.d.ts +2 -0
  116. package/dist/core/config-loader.js +76 -0
  117. package/dist/core/config-loader.js.map +1 -0
  118. package/dist/core/config.d.ts +12 -0
  119. package/dist/core/config.js +27 -0
  120. package/dist/core/config.js.map +1 -0
  121. package/dist/core/container.d.ts +10 -0
  122. package/dist/core/container.js +82 -0
  123. package/dist/core/container.js.map +1 -0
  124. package/dist/core/dependency-validator.d.ts +12 -0
  125. package/dist/core/dependency-validator.js +76 -0
  126. package/dist/core/dependency-validator.js.map +1 -0
  127. package/dist/core/guard.d.ts +3 -0
  128. package/dist/core/guard.js +2 -0
  129. package/dist/core/guard.js.map +1 -0
  130. package/dist/core/interceptor.d.ts +4 -0
  131. package/dist/core/interceptor.js +2 -0
  132. package/dist/core/interceptor.js.map +1 -0
  133. package/dist/core/logger.d.ts +15 -0
  134. package/dist/core/logger.js +71 -0
  135. package/dist/core/logger.js.map +1 -0
  136. package/dist/core/module-resolver.d.ts +6 -0
  137. package/dist/core/module-resolver.js +67 -0
  138. package/dist/core/module-resolver.js.map +1 -0
  139. package/dist/core/plugin.d.ts +12 -0
  140. package/dist/core/plugin.js +2 -0
  141. package/dist/core/plugin.js.map +1 -0
  142. package/dist/core/router.d.ts +38 -0
  143. package/dist/core/router.js +406 -0
  144. package/dist/core/router.js.map +1 -0
  145. package/dist/core/scanner.d.ts +7 -0
  146. package/dist/core/scanner.js +83 -0
  147. package/dist/core/scanner.js.map +1 -0
  148. package/dist/core/shutdown-manager.d.ts +15 -0
  149. package/dist/core/shutdown-manager.js +68 -0
  150. package/dist/core/shutdown-manager.js.map +1 -0
  151. package/dist/core/websocket-handler.d.ts +41 -0
  152. package/dist/core/websocket-handler.js +242 -0
  153. package/dist/core/websocket-handler.js.map +1 -0
  154. package/dist/decorators/autowired.d.ts +3 -0
  155. package/dist/decorators/autowired.js +11 -0
  156. package/dist/decorators/autowired.js.map +1 -0
  157. package/dist/decorators/cinnabun-application.d.ts +14 -0
  158. package/dist/decorators/cinnabun-application.js +17 -0
  159. package/dist/decorators/cinnabun-application.js.map +1 -0
  160. package/dist/decorators/lifecycle.d.ts +2 -0
  161. package/dist/decorators/lifecycle.js +12 -0
  162. package/dist/decorators/lifecycle.js.map +1 -0
  163. package/dist/decorators/middleware.d.ts +2 -0
  164. package/dist/decorators/middleware.js +12 -0
  165. package/dist/decorators/middleware.js.map +1 -0
  166. package/dist/decorators/module.d.ts +10 -0
  167. package/dist/decorators/module.js +13 -0
  168. package/dist/decorators/module.js.map +1 -0
  169. package/dist/decorators/on-shutdown.d.ts +1 -0
  170. package/dist/decorators/on-shutdown.js +10 -0
  171. package/dist/decorators/on-shutdown.js.map +1 -0
  172. package/dist/decorators/params.d.ts +6 -0
  173. package/dist/decorators/params.js +31 -0
  174. package/dist/decorators/params.js.map +1 -0
  175. package/dist/decorators/request-mapping.d.ts +7 -0
  176. package/dist/decorators/request-mapping.js +34 -0
  177. package/dist/decorators/request-mapping.js.map +1 -0
  178. package/dist/decorators/response.d.ts +2 -0
  179. package/dist/decorators/response.js +17 -0
  180. package/dist/decorators/response.js.map +1 -0
  181. package/dist/decorators/rest-controller.d.ts +1 -0
  182. package/dist/decorators/rest-controller.js +19 -0
  183. package/dist/decorators/rest-controller.js.map +1 -0
  184. package/dist/decorators/routes.d.ts +5 -0
  185. package/dist/decorators/routes.js +19 -0
  186. package/dist/decorators/routes.js.map +1 -0
  187. package/dist/decorators/service.d.ts +1 -0
  188. package/dist/decorators/service.js +7 -0
  189. package/dist/decorators/service.js.map +1 -0
  190. package/dist/decorators/use-guard.d.ts +2 -0
  191. package/dist/decorators/use-guard.js +12 -0
  192. package/dist/decorators/use-guard.js.map +1 -0
  193. package/dist/decorators/use-interceptor.d.ts +2 -0
  194. package/dist/decorators/use-interceptor.js +12 -0
  195. package/dist/decorators/use-interceptor.js.map +1 -0
  196. package/dist/decorators/validate.d.ts +12 -0
  197. package/dist/decorators/validate.js +7 -0
  198. package/dist/decorators/validate.js.map +1 -0
  199. package/dist/decorators/websocket.d.ts +9 -0
  200. package/dist/decorators/websocket.js +38 -0
  201. package/dist/decorators/websocket.js.map +1 -0
  202. package/dist/decorators/ws-event.d.ts +28 -0
  203. package/dist/decorators/ws-event.js +37 -0
  204. package/dist/decorators/ws-event.js.map +1 -0
  205. package/dist/decorators/ws-gateway.d.ts +18 -0
  206. package/dist/decorators/ws-gateway.js +24 -0
  207. package/dist/decorators/ws-gateway.js.map +1 -0
  208. package/dist/dev/index.d.ts +6 -0
  209. package/dist/dev/index.js +28 -0
  210. package/dist/dev/index.js.map +1 -0
  211. package/dist/exceptions/circular-dependency-error.d.ts +5 -0
  212. package/dist/exceptions/circular-dependency-error.js +16 -0
  213. package/dist/exceptions/circular-dependency-error.js.map +1 -0
  214. package/dist/exceptions/http-exception.d.ts +41 -0
  215. package/dist/exceptions/http-exception.js +96 -0
  216. package/dist/exceptions/http-exception.js.map +1 -0
  217. package/dist/guards/jwt-websocket.guard.d.ts +11 -0
  218. package/dist/guards/jwt-websocket.guard.js +37 -0
  219. package/dist/guards/jwt-websocket.guard.js.map +1 -0
  220. package/dist/guards/websocket-auth.guard.d.ts +16 -0
  221. package/dist/guards/websocket-auth.guard.js +43 -0
  222. package/dist/guards/websocket-auth.guard.js.map +1 -0
  223. package/dist/health/health-check.service.d.ts +45 -0
  224. package/dist/health/health-check.service.js +95 -0
  225. package/dist/health/health-check.service.js.map +1 -0
  226. package/dist/health/health.controller.d.ts +15 -0
  227. package/dist/health/health.controller.js +63 -0
  228. package/dist/health/health.controller.js.map +1 -0
  229. package/dist/health/health.module.d.ts +2 -0
  230. package/dist/health/health.module.js +20 -0
  231. package/dist/health/health.module.js.map +1 -0
  232. package/dist/index.d.ts +74 -11
  233. package/dist/index.js +54 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/metadata/storage.d.ts +171 -0
  236. package/dist/metadata/storage.js +257 -0
  237. package/dist/metadata/storage.js.map +1 -0
  238. package/dist/middleware/compression.middleware.d.ts +32 -0
  239. package/dist/middleware/compression.middleware.js +113 -0
  240. package/dist/middleware/compression.middleware.js.map +1 -0
  241. package/dist/middleware/cors.middleware.d.ts +18 -0
  242. package/dist/middleware/cors.middleware.js +79 -0
  243. package/dist/middleware/cors.middleware.js.map +1 -0
  244. package/dist/middleware/performance-tracker.middleware.d.ts +35 -0
  245. package/dist/middleware/performance-tracker.middleware.js +79 -0
  246. package/dist/middleware/performance-tracker.middleware.js.map +1 -0
  247. package/dist/middleware/request-logger.middleware.d.ts +32 -0
  248. package/dist/middleware/request-logger.middleware.js +125 -0
  249. package/dist/middleware/request-logger.middleware.js.map +1 -0
  250. package/dist/types/index.d.ts +14 -0
  251. package/dist/types/index.js +5 -0
  252. package/dist/types/index.js.map +1 -0
  253. package/dist/validation/helpers.d.ts +36 -0
  254. package/dist/validation/helpers.js +27 -0
  255. package/dist/validation/helpers.js.map +1 -0
  256. package/dist/websocket/error.d.ts +27 -0
  257. package/dist/websocket/error.js +38 -0
  258. package/dist/websocket/error.js.map +1 -0
  259. package/package.json +38 -5
  260. package/LICENSE +0 -9
@@ -0,0 +1,240 @@
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 "reflect-metadata";
11
+ import { describe, test, expect, beforeAll, afterAll, beforeEach } from "bun:test";
12
+ import { CinnabunFactory } from "../core/cinnabun-factory.js";
13
+ import { CinnabunApplication as CinnabunAppDecorator } from "../decorators/cinnabun-application.js";
14
+ import { RestController } from "../decorators/rest-controller.js";
15
+ import { GetMapping } from "../decorators/routes.js";
16
+ import { HealthModule } from "../health/health.module.js";
17
+ import { HealthCheckService } from "../health/health-check.service.js";
18
+ describe("Health Check Endpoints", () => {
19
+ let app = null;
20
+ let port;
21
+ beforeAll(async () => {
22
+ let TestApp = class TestApp {
23
+ index() {
24
+ return { message: "test app" };
25
+ }
26
+ };
27
+ __decorate([
28
+ GetMapping("/"),
29
+ __metadata("design:type", Function),
30
+ __metadata("design:paramtypes", []),
31
+ __metadata("design:returntype", void 0)
32
+ ], TestApp.prototype, "index", null);
33
+ TestApp = __decorate([
34
+ CinnabunAppDecorator({
35
+ port: 0,
36
+ scanPaths: [],
37
+ imports: [HealthModule],
38
+ }),
39
+ RestController("/")
40
+ ], TestApp);
41
+ app = await CinnabunFactory.run(TestApp);
42
+ port = app.getPort();
43
+ });
44
+ afterAll(async () => {
45
+ if (app) {
46
+ await app.close();
47
+ app = null;
48
+ }
49
+ });
50
+ describe("GET /health", () => {
51
+ test("returns healthy status with no checks", async () => {
52
+ const response = await fetch(`http://localhost:${port}/health`);
53
+ const data = await response.json();
54
+ expect(response.status).toBe(200);
55
+ expect(data.status).toBe("healthy");
56
+ expect(data.uptime).toBeGreaterThanOrEqual(0);
57
+ expect(data.timestamp).toBeGreaterThan(0);
58
+ expect(data.checks).toEqual({});
59
+ });
60
+ test("returns version when set", async () => {
61
+ // Access HealthCheckService from app
62
+ const healthCheck = app?.getContainer().resolve(HealthCheckService);
63
+ healthCheck?.setVersion("1.0.0");
64
+ const response = await fetch(`http://localhost:${port}/health`);
65
+ const data = await response.json();
66
+ expect(data.version).toBe("1.0.0");
67
+ });
68
+ });
69
+ describe("GET /health/ready", () => {
70
+ test("returns ready status", async () => {
71
+ const response = await fetch(`http://localhost:${port}/health/ready`);
72
+ const data = await response.json();
73
+ expect(response.status).toBe(200);
74
+ expect(data.status).toBe("ready");
75
+ expect(data.timestamp).toBeGreaterThan(0);
76
+ });
77
+ });
78
+ describe("GET /health/live", () => {
79
+ test("returns alive status with uptime", async () => {
80
+ const response = await fetch(`http://localhost:${port}/health/live`);
81
+ const data = await response.json();
82
+ expect(response.status).toBe(200);
83
+ expect(data.status).toBe("alive");
84
+ expect(data.uptime).toBeGreaterThanOrEqual(0);
85
+ expect(data.timestamp).toBeGreaterThan(0);
86
+ });
87
+ });
88
+ });
89
+ describe("HealthCheckService - custom checks", () => {
90
+ let app = null;
91
+ let port;
92
+ let healthCheck;
93
+ beforeAll(async () => {
94
+ var TestApp_1;
95
+ let TestApp = TestApp_1 = class TestApp {
96
+ constructor(health) {
97
+ // Store reference
98
+ TestApp_1._healthCheck = health;
99
+ }
100
+ index() {
101
+ return { message: "test app" };
102
+ }
103
+ };
104
+ __decorate([
105
+ GetMapping("/"),
106
+ __metadata("design:type", Function),
107
+ __metadata("design:paramtypes", []),
108
+ __metadata("design:returntype", void 0)
109
+ ], TestApp.prototype, "index", null);
110
+ TestApp = TestApp_1 = __decorate([
111
+ CinnabunAppDecorator({
112
+ port: 0,
113
+ scanPaths: [],
114
+ imports: [HealthModule],
115
+ }),
116
+ RestController("/"),
117
+ __metadata("design:paramtypes", [HealthCheckService])
118
+ ], TestApp);
119
+ app = await CinnabunFactory.run(TestApp);
120
+ port = app.getPort();
121
+ healthCheck = TestApp._healthCheck;
122
+ });
123
+ afterAll(async () => {
124
+ if (app) {
125
+ await app.close();
126
+ app = null;
127
+ }
128
+ });
129
+ beforeEach(() => {
130
+ // Clear all health checks before each test
131
+ healthCheck.clear();
132
+ });
133
+ test("registers custom health checks", async () => {
134
+ let callCount = 0;
135
+ healthCheck.register("test-check", async () => {
136
+ callCount++;
137
+ return true;
138
+ });
139
+ const response = await fetch(`http://localhost:${port}/health`);
140
+ const data = await response.json();
141
+ expect(data.status).toBe("healthy");
142
+ expect(data.checks["test-check"]).toBeDefined();
143
+ expect(data.checks["test-check"].status).toBe("pass");
144
+ expect(data.checks["test-check"].responseTime).toBeGreaterThanOrEqual(0);
145
+ expect(callCount).toBe(1);
146
+ });
147
+ test("handles failing health checks with degraded status", async () => {
148
+ healthCheck.register("failing-check", async () => false);
149
+ healthCheck.register("passing-check", async () => true);
150
+ const response = await fetch(`http://localhost:${port}/health`);
151
+ const data = await response.json();
152
+ expect(data.status).toBe("degraded");
153
+ expect(data.checks["failing-check"].status).toBe("fail");
154
+ expect(data.checks["passing-check"].status).toBe("pass");
155
+ });
156
+ test("handles health check exceptions", async () => {
157
+ healthCheck.register("error-check", async () => {
158
+ throw new Error("Database connection failed");
159
+ });
160
+ const response = await fetch(`http://localhost:${port}/health`);
161
+ const data = await response.json();
162
+ expect(data.status).toBe("unhealthy");
163
+ expect(data.checks["error-check"].status).toBe("fail");
164
+ expect(data.checks["error-check"].message).toBe("Database connection failed");
165
+ });
166
+ test("times out slow health checks after 5s", async () => {
167
+ healthCheck.register("slow-check", async () => {
168
+ // Simulate slow check (longer than 5s timeout)
169
+ await new Promise((resolve) => setTimeout(resolve, 6000));
170
+ return true;
171
+ });
172
+ const start = Date.now();
173
+ const response = await fetch(`http://localhost:${port}/health`);
174
+ const elapsed = Date.now() - start;
175
+ const data = await response.json();
176
+ // Should timeout around 5s (with some margin for timing precision)
177
+ expect(elapsed).toBeGreaterThanOrEqual(4900);
178
+ expect(elapsed).toBeLessThan(6000);
179
+ expect(data.checks["slow-check"].status).toBe("fail");
180
+ expect(data.checks["slow-check"].message).toContain("timeout");
181
+ }, 10000);
182
+ test("executes health checks in parallel", async () => {
183
+ const executionOrder = [];
184
+ healthCheck.register("check-1", async () => {
185
+ await new Promise((resolve) => setTimeout(resolve, 100));
186
+ executionOrder.push(1);
187
+ return true;
188
+ });
189
+ healthCheck.register("check-2", async () => {
190
+ await new Promise((resolve) => setTimeout(resolve, 50));
191
+ executionOrder.push(2);
192
+ return true;
193
+ });
194
+ const start = Date.now();
195
+ await fetch(`http://localhost:${port}/health`);
196
+ const elapsed = Date.now() - start;
197
+ // If parallel, should take ~100ms (max of 50 and 100)
198
+ // If sequential, would take ~150ms (50 + 100)
199
+ expect(elapsed).toBeLessThan(150);
200
+ // check-2 (50ms) should finish before check-1 (100ms)
201
+ expect(executionOrder[0]).toBe(2);
202
+ expect(executionOrder[1]).toBe(1);
203
+ });
204
+ test("getUptime returns time in seconds", async () => {
205
+ // Wait a bit to ensure uptime > 0
206
+ await new Promise((resolve) => setTimeout(resolve, 1100));
207
+ const uptime = healthCheck.getUptime();
208
+ expect(uptime).toBeGreaterThanOrEqual(1);
209
+ });
210
+ test("multiple health checks all contribute to status", async () => {
211
+ healthCheck.register("fail-1", async () => false);
212
+ healthCheck.register("fail-2", async () => false);
213
+ const response = await fetch(`http://localhost:${port}/health`);
214
+ const data = await response.json();
215
+ expect(data.status).toBe("unhealthy");
216
+ expect(data.checks["fail-1"].status).toBe("fail");
217
+ expect(data.checks["fail-2"].status).toBe("fail");
218
+ });
219
+ test("responseTime is measured for each check", async () => {
220
+ healthCheck.register("timed-check", async () => {
221
+ await new Promise((resolve) => setTimeout(resolve, 10));
222
+ return true;
223
+ });
224
+ const response = await fetch(`http://localhost:${port}/health`);
225
+ const data = await response.json();
226
+ expect(data.checks["timed-check"].responseTime).toBeGreaterThanOrEqual(10);
227
+ expect(data.checks["timed-check"].responseTime).toBeLessThan(1000);
228
+ });
229
+ test("clear() removes all registered checks", async () => {
230
+ healthCheck.register("check-1", async () => true);
231
+ healthCheck.register("check-2", async () => true);
232
+ // Clear all checks
233
+ healthCheck.clear();
234
+ const response = await fetch(`http://localhost:${port}/health`);
235
+ const data = await response.json();
236
+ expect(data.status).toBe("healthy");
237
+ expect(data.checks).toEqual({});
238
+ });
239
+ });
240
+ //# sourceMappingURL=health-check.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.test.js","sourceRoot":"","sources":["../../src/__tests__/health-check.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "reflect-metadata";