@scpxl/nodejs-framework 1.0.22 → 1.0.25

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 (326) hide show
  1. package/README.md +264 -26
  2. package/dist/api-requester/api-requester.d.ts +32 -0
  3. package/dist/api-requester/api-requester.d.ts.map +1 -0
  4. package/dist/api-requester/api-requester.js +2 -1
  5. package/dist/api-requester/api-requester.js.map +2 -2
  6. package/dist/api-requester/index.d.ts +3 -0
  7. package/dist/api-requester/index.d.ts.map +1 -0
  8. package/dist/application/base-application.d.ts +106 -0
  9. package/dist/application/base-application.d.ts.map +1 -0
  10. package/dist/application/base-application.interface.d.ts +162 -0
  11. package/dist/application/base-application.interface.d.ts.map +1 -0
  12. package/dist/application/base-application.js +7 -3
  13. package/dist/application/base-application.js.map +2 -2
  14. package/dist/application/command-application.d.ts +18 -0
  15. package/dist/application/command-application.d.ts.map +1 -0
  16. package/dist/application/command-application.interface.d.ts +26 -0
  17. package/dist/application/command-application.interface.d.ts.map +1 -0
  18. package/dist/application/index.d.ts +5 -0
  19. package/dist/application/index.d.ts.map +1 -0
  20. package/dist/application/web-application.d.ts +43 -0
  21. package/dist/application/web-application.d.ts.map +1 -0
  22. package/dist/application/web-application.interface.d.ts +21 -0
  23. package/dist/application/web-application.interface.d.ts.map +1 -0
  24. package/dist/application/web-application.js +1 -0
  25. package/dist/application/web-application.js.map +2 -2
  26. package/dist/auth/index.d.ts +2 -0
  27. package/dist/auth/index.d.ts.map +1 -0
  28. package/dist/auth/jwt.d.ts +25 -0
  29. package/dist/auth/jwt.d.ts.map +1 -0
  30. package/dist/cache/index.d.ts +2 -0
  31. package/dist/cache/index.d.ts.map +1 -0
  32. package/dist/cache/manager.d.ts +107 -0
  33. package/dist/cache/manager.d.ts.map +1 -0
  34. package/dist/cache/manager.js +2 -1
  35. package/dist/cache/manager.js.map +2 -2
  36. package/dist/cli/index.d.ts +2 -0
  37. package/dist/cli/index.d.ts.map +1 -0
  38. package/dist/cli/index.js +12591 -0
  39. package/dist/cli/index.js.map +7 -0
  40. package/dist/cluster/cluster-manager.d.ts +18 -0
  41. package/dist/cluster/cluster-manager.d.ts.map +1 -0
  42. package/dist/cluster/cluster-manager.interface.d.ts +23 -0
  43. package/dist/cluster/cluster-manager.interface.d.ts.map +1 -0
  44. package/dist/cluster/cluster-manager.js +45 -8
  45. package/dist/cluster/cluster-manager.js.map +2 -2
  46. package/dist/cluster/index.d.ts +2 -0
  47. package/dist/cluster/index.d.ts.map +1 -0
  48. package/dist/command/command-manager.d.ts +19 -0
  49. package/dist/command/command-manager.d.ts.map +1 -0
  50. package/dist/command/command.d.ts +27 -0
  51. package/dist/command/command.d.ts.map +1 -0
  52. package/dist/command/command.interface.d.ts +11 -0
  53. package/dist/command/command.interface.d.ts.map +1 -0
  54. package/dist/command/index.d.ts +3 -0
  55. package/dist/command/index.d.ts.map +1 -0
  56. package/dist/config/env.d.ts +11 -0
  57. package/dist/config/env.d.ts.map +1 -0
  58. package/dist/config/index.d.ts +3 -0
  59. package/dist/config/index.d.ts.map +1 -0
  60. package/dist/config/schema.d.ts +432 -0
  61. package/dist/config/schema.d.ts.map +1 -0
  62. package/dist/database/dynamic-entity-form-decorators.d.ts +31 -0
  63. package/dist/database/dynamic-entity-form-decorators.d.ts.map +1 -0
  64. package/dist/database/dynamic-entity-form-decorators.js.map +1 -1
  65. package/dist/database/dynamic-entity.d.ts +18 -0
  66. package/dist/database/dynamic-entity.d.ts.map +1 -0
  67. package/dist/database/dynamic-entity.js +11 -1
  68. package/dist/database/dynamic-entity.js.map +2 -2
  69. package/dist/database/index.d.ts +5 -0
  70. package/dist/database/index.d.ts.map +1 -0
  71. package/dist/database/instance.d.ts +36 -0
  72. package/dist/database/instance.d.ts.map +1 -0
  73. package/dist/database/instance.interface.d.ts +5 -0
  74. package/dist/database/instance.interface.d.ts.map +1 -0
  75. package/dist/database/manager.d.ts +27 -0
  76. package/dist/database/manager.d.ts.map +1 -0
  77. package/dist/database/manager.interface.d.ts +18 -0
  78. package/dist/database/manager.interface.d.ts.map +1 -0
  79. package/dist/database/manager.js +3 -2
  80. package/dist/database/manager.js.map +2 -2
  81. package/dist/error/error-reporter.d.ts +109 -0
  82. package/dist/error/error-reporter.d.ts.map +1 -0
  83. package/dist/error/error-reporter.js +32 -29
  84. package/dist/error/error-reporter.js.map +2 -2
  85. package/dist/error/error.interface.d.ts +126 -0
  86. package/dist/error/error.interface.d.ts.map +1 -0
  87. package/dist/error/framework-errors.d.ts +113 -0
  88. package/dist/error/framework-errors.d.ts.map +1 -0
  89. package/dist/error/index.d.ts +6 -0
  90. package/dist/error/index.d.ts.map +1 -0
  91. package/dist/error/index.js +3 -2
  92. package/dist/error/index.js.map +2 -2
  93. package/dist/event/controller/base.d.ts +23 -0
  94. package/dist/event/controller/base.d.ts.map +1 -0
  95. package/dist/event/controller/base.interface.d.ts +11 -0
  96. package/dist/event/controller/base.interface.d.ts.map +1 -0
  97. package/dist/event/controller/base.js +2 -1
  98. package/dist/event/controller/base.js.map +2 -2
  99. package/dist/event/index.d.ts +5 -0
  100. package/dist/event/index.d.ts.map +1 -0
  101. package/dist/event/manager.d.ts +21 -0
  102. package/dist/event/manager.d.ts.map +1 -0
  103. package/dist/event/manager.interface.d.ts +137 -0
  104. package/dist/event/manager.interface.d.ts.map +1 -0
  105. package/dist/event/manager.js +5 -4
  106. package/dist/event/manager.js.map +2 -2
  107. package/dist/index.d.ts +22 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/lifecycle/exit.d.ts +11 -0
  110. package/dist/lifecycle/exit.d.ts.map +1 -0
  111. package/dist/lifecycle/exit.js.map +2 -2
  112. package/dist/lifecycle/index.d.ts +7 -0
  113. package/dist/lifecycle/index.d.ts.map +1 -0
  114. package/dist/lifecycle/lifecycle-manager.d.ts +66 -0
  115. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -0
  116. package/dist/lifecycle/lifecycle-manager.js +6 -11
  117. package/dist/lifecycle/lifecycle-manager.js.map +2 -2
  118. package/dist/lifecycle/shutdown-controller.d.ts +15 -0
  119. package/dist/lifecycle/shutdown-controller.d.ts.map +1 -0
  120. package/dist/lifecycle/types.d.ts +28 -0
  121. package/dist/lifecycle/types.d.ts.map +1 -0
  122. package/dist/logger/index.d.ts +2 -0
  123. package/dist/logger/index.d.ts.map +1 -0
  124. package/dist/logger/logger.d.ts +59 -0
  125. package/dist/logger/logger.d.ts.map +1 -0
  126. package/dist/logger/logger.interface.d.ts +2 -0
  127. package/dist/logger/logger.interface.d.ts.map +1 -0
  128. package/dist/logger/logger.js +11 -3
  129. package/dist/logger/logger.js.map +2 -2
  130. package/dist/performance/cache-performance.d.ts +64 -0
  131. package/dist/performance/cache-performance.d.ts.map +1 -0
  132. package/dist/performance/database-performance.d.ts +40 -0
  133. package/dist/performance/database-performance.d.ts.map +1 -0
  134. package/dist/performance/index.d.ts +8 -0
  135. package/dist/performance/index.d.ts.map +1 -0
  136. package/dist/performance/performance-monitor.d.ts +68 -0
  137. package/dist/performance/performance-monitor.d.ts.map +1 -0
  138. package/dist/performance/performance-monitor.js +10 -3
  139. package/dist/performance/performance-monitor.js.map +2 -2
  140. package/dist/performance/performance-monitor.plugin.d.ts +24 -0
  141. package/dist/performance/performance-monitor.plugin.d.ts.map +1 -0
  142. package/dist/performance/queue-performance.d.ts +46 -0
  143. package/dist/performance/queue-performance.d.ts.map +1 -0
  144. package/dist/performance/webserver-performance.d.ts +69 -0
  145. package/dist/performance/webserver-performance.d.ts.map +1 -0
  146. package/dist/performance/websocket-performance.d.ts +44 -0
  147. package/dist/performance/websocket-performance.d.ts.map +1 -0
  148. package/dist/queue/index.d.ts +6 -0
  149. package/dist/queue/index.d.ts.map +1 -0
  150. package/dist/queue/index.interface.d.ts +10 -0
  151. package/dist/queue/index.interface.d.ts.map +1 -0
  152. package/dist/queue/job.interface.d.ts +43 -0
  153. package/dist/queue/job.interface.d.ts.map +1 -0
  154. package/dist/queue/manager.d.ts +44 -0
  155. package/dist/queue/manager.d.ts.map +1 -0
  156. package/dist/queue/manager.interface.d.ts +18 -0
  157. package/dist/queue/manager.interface.d.ts.map +1 -0
  158. package/dist/queue/processor/base.d.ts +29 -0
  159. package/dist/queue/processor/base.d.ts.map +1 -0
  160. package/dist/queue/processor/base.js +2 -1
  161. package/dist/queue/processor/base.js.map +2 -2
  162. package/dist/queue/processor/processor.interface.d.ts +16 -0
  163. package/dist/queue/processor/processor.interface.d.ts.map +1 -0
  164. package/dist/queue/worker.d.ts +14 -0
  165. package/dist/queue/worker.d.ts.map +1 -0
  166. package/dist/queue/worker.interface.d.ts +13 -0
  167. package/dist/queue/worker.interface.d.ts.map +1 -0
  168. package/dist/redis/index.d.ts +3 -0
  169. package/dist/redis/index.d.ts.map +1 -0
  170. package/dist/redis/instance.d.ts +32 -0
  171. package/dist/redis/instance.d.ts.map +1 -0
  172. package/dist/redis/instance.interface.d.ts +9 -0
  173. package/dist/redis/instance.interface.d.ts.map +1 -0
  174. package/dist/redis/manager.d.ts +15 -0
  175. package/dist/redis/manager.d.ts.map +1 -0
  176. package/dist/redis/manager.interface.d.ts +8 -0
  177. package/dist/redis/manager.interface.d.ts.map +1 -0
  178. package/dist/redis/manager.js +16 -16
  179. package/dist/redis/manager.js.map +2 -2
  180. package/dist/request-context/index.d.ts +3 -0
  181. package/dist/request-context/index.d.ts.map +1 -0
  182. package/dist/request-context/request-context.d.ts +108 -0
  183. package/dist/request-context/request-context.d.ts.map +1 -0
  184. package/dist/request-context/request-context.interface.d.ts +46 -0
  185. package/dist/request-context/request-context.interface.d.ts.map +1 -0
  186. package/dist/schemas/common.d.ts +197 -0
  187. package/dist/schemas/common.d.ts.map +1 -0
  188. package/dist/schemas/common.js +108 -0
  189. package/dist/schemas/common.js.map +7 -0
  190. package/dist/schemas/index.d.ts +6 -0
  191. package/dist/schemas/index.d.ts.map +1 -0
  192. package/dist/schemas/index.js +2 -0
  193. package/dist/schemas/index.js.map +7 -0
  194. package/dist/services/aws/index.d.ts +2 -0
  195. package/dist/services/aws/index.d.ts.map +1 -0
  196. package/dist/services/aws/s3.d.ts +54 -0
  197. package/dist/services/aws/s3.d.ts.map +1 -0
  198. package/dist/services/aws/s3.interface.d.ts +14 -0
  199. package/dist/services/aws/s3.interface.d.ts.map +1 -0
  200. package/dist/services/index.d.ts +2 -0
  201. package/dist/services/index.d.ts.map +1 -0
  202. package/dist/util/file.d.ts +58 -0
  203. package/dist/util/file.d.ts.map +1 -0
  204. package/dist/util/helper.d.ts +51 -0
  205. package/dist/util/helper.d.ts.map +1 -0
  206. package/dist/util/helper.js +72 -10
  207. package/dist/util/helper.js.map +2 -2
  208. package/dist/util/image.d.ts +12 -0
  209. package/dist/util/image.d.ts.map +1 -0
  210. package/dist/util/index.d.ts +11 -0
  211. package/dist/util/index.d.ts.map +1 -0
  212. package/dist/util/loader.d.ts +21 -0
  213. package/dist/util/loader.d.ts.map +1 -0
  214. package/dist/util/loader.js +5 -2
  215. package/dist/util/loader.js.map +2 -2
  216. package/dist/util/num.d.ts +13 -0
  217. package/dist/util/num.d.ts.map +1 -0
  218. package/dist/util/os.d.ts +6 -0
  219. package/dist/util/os.d.ts.map +1 -0
  220. package/dist/util/str.d.ts +39 -0
  221. package/dist/util/str.d.ts.map +1 -0
  222. package/dist/util/time.d.ts +19 -0
  223. package/dist/util/time.d.ts.map +1 -0
  224. package/dist/util/time.interface.d.ts +12 -0
  225. package/dist/util/time.interface.d.ts.map +1 -0
  226. package/dist/util/timing.d.ts +36 -0
  227. package/dist/util/timing.d.ts.map +1 -0
  228. package/dist/util/timing.interface.d.ts +47 -0
  229. package/dist/util/timing.interface.d.ts.map +1 -0
  230. package/dist/util/url.d.ts +7 -0
  231. package/dist/util/url.d.ts.map +1 -0
  232. package/dist/webserver/controller/auth-middleware.d.ts +21 -0
  233. package/dist/webserver/controller/auth-middleware.d.ts.map +1 -0
  234. package/dist/webserver/controller/base.d.ts +41 -0
  235. package/dist/webserver/controller/base.d.ts.map +1 -0
  236. package/dist/webserver/controller/base.interface.d.ts +50 -0
  237. package/dist/webserver/controller/base.interface.d.ts.map +1 -0
  238. package/dist/webserver/controller/base.js +4 -4
  239. package/dist/webserver/controller/base.js.map +2 -2
  240. package/dist/webserver/controller/entity.d.ts +94 -0
  241. package/dist/webserver/controller/entity.d.ts.map +1 -0
  242. package/dist/webserver/controller/entity.js.map +2 -2
  243. package/dist/webserver/controller/example-auth.d.ts +12 -0
  244. package/dist/webserver/controller/example-auth.d.ts.map +1 -0
  245. package/dist/webserver/controller/health.d.ts +13 -0
  246. package/dist/webserver/controller/health.d.ts.map +1 -0
  247. package/dist/webserver/controller/health.js +0 -14
  248. package/dist/webserver/controller/health.js.map +2 -2
  249. package/dist/webserver/define-action.d.ts +26 -0
  250. package/dist/webserver/define-action.d.ts.map +1 -0
  251. package/dist/webserver/define-action.js +16 -0
  252. package/dist/webserver/define-action.js.map +7 -0
  253. package/dist/webserver/define-route.d.ts +53 -0
  254. package/dist/webserver/define-route.d.ts.map +1 -0
  255. package/dist/webserver/define-route.js +11 -6
  256. package/dist/webserver/define-route.js.map +2 -2
  257. package/dist/webserver/index.d.ts +14 -0
  258. package/dist/webserver/index.d.ts.map +1 -0
  259. package/dist/webserver/index.js +2 -0
  260. package/dist/webserver/index.js.map +2 -2
  261. package/dist/webserver/util.d.ts +10 -0
  262. package/dist/webserver/util.d.ts.map +1 -0
  263. package/dist/webserver/util.js +5 -2
  264. package/dist/webserver/util.js.map +2 -2
  265. package/dist/webserver/webserver.d.ts +93 -0
  266. package/dist/webserver/webserver.d.ts.map +1 -0
  267. package/dist/webserver/webserver.interface.d.ts +181 -0
  268. package/dist/webserver/webserver.interface.d.ts.map +1 -0
  269. package/dist/webserver/webserver.interface.js.map +1 -1
  270. package/dist/webserver/webserver.js +30 -33
  271. package/dist/webserver/webserver.js.map +2 -2
  272. package/dist/websocket/controller/client/base.d.ts +12 -0
  273. package/dist/websocket/controller/client/base.d.ts.map +1 -0
  274. package/dist/websocket/controller/client/base.interface.d.ts +12 -0
  275. package/dist/websocket/controller/client/base.interface.d.ts.map +1 -0
  276. package/dist/websocket/controller/server/base.d.ts +13 -0
  277. package/dist/websocket/controller/server/base.d.ts.map +1 -0
  278. package/dist/websocket/controller/server/base.interface.d.ts +13 -0
  279. package/dist/websocket/controller/server/base.interface.d.ts.map +1 -0
  280. package/dist/websocket/controllers/client/system.d.ts +6 -0
  281. package/dist/websocket/controllers/client/system.d.ts.map +1 -0
  282. package/dist/websocket/controllers/server/system.d.ts +7 -0
  283. package/dist/websocket/controllers/server/system.d.ts.map +1 -0
  284. package/dist/websocket/index.d.ts +9 -0
  285. package/dist/websocket/index.d.ts.map +1 -0
  286. package/dist/websocket/index.js +2 -0
  287. package/dist/websocket/index.js.map +2 -2
  288. package/dist/websocket/routes/client/system.d.ts +3 -0
  289. package/dist/websocket/routes/client/system.d.ts.map +1 -0
  290. package/dist/websocket/routes/server/system.d.ts +3 -0
  291. package/dist/websocket/routes/server/system.d.ts.map +1 -0
  292. package/dist/websocket/utils.d.ts +9 -0
  293. package/dist/websocket/utils.d.ts.map +1 -0
  294. package/dist/websocket/websocket-auth.d.ts +17 -0
  295. package/dist/websocket/websocket-auth.d.ts.map +1 -0
  296. package/dist/websocket/websocket-auth.js +46 -0
  297. package/dist/websocket/websocket-auth.js.map +7 -0
  298. package/dist/websocket/websocket-base.d.ts +19 -0
  299. package/dist/websocket/websocket-base.d.ts.map +1 -0
  300. package/dist/websocket/websocket-client-manager.d.ts +53 -0
  301. package/dist/websocket/websocket-client-manager.d.ts.map +1 -0
  302. package/dist/websocket/websocket-client-manager.interface.d.ts +8 -0
  303. package/dist/websocket/websocket-client-manager.interface.d.ts.map +1 -0
  304. package/dist/websocket/websocket-client-manager.js +6 -5
  305. package/dist/websocket/websocket-client-manager.js.map +2 -2
  306. package/dist/websocket/websocket-client.d.ts +64 -0
  307. package/dist/websocket/websocket-client.d.ts.map +1 -0
  308. package/dist/websocket/websocket-client.interface.d.ts +14 -0
  309. package/dist/websocket/websocket-client.interface.d.ts.map +1 -0
  310. package/dist/websocket/websocket-client.js +97 -3
  311. package/dist/websocket/websocket-client.js.map +2 -2
  312. package/dist/websocket/websocket-room-manager.d.ts +32 -0
  313. package/dist/websocket/websocket-room-manager.d.ts.map +1 -0
  314. package/dist/websocket/websocket-server.d.ts +102 -0
  315. package/dist/websocket/websocket-server.d.ts.map +1 -0
  316. package/dist/websocket/websocket-server.interface.d.ts +16 -0
  317. package/dist/websocket/websocket-server.interface.d.ts.map +1 -0
  318. package/dist/websocket/websocket-server.js +62 -50
  319. package/dist/websocket/websocket-server.js.map +2 -2
  320. package/dist/websocket/websocket-service.d.ts +44 -0
  321. package/dist/websocket/websocket-service.d.ts.map +1 -0
  322. package/dist/websocket/websocket.interface.d.ts +137 -0
  323. package/dist/websocket/websocket.interface.d.ts.map +1 -0
  324. package/dist/websocket/websocket.interface.js.map +2 -2
  325. package/package.json +21 -24
  326. package/pxl.js +0 -4
@@ -0,0 +1,27 @@
1
+ import DatabaseInstance from './instance.js';
2
+ import type { ApplicationDatabaseOptions } from './manager.interface.js';
3
+ /**
4
+ * Database manager
5
+ */
6
+ export default class DatabaseManager {
7
+ private logger;
8
+ private readonly options;
9
+ private instances;
10
+ /**
11
+ * Database manager constructor
12
+ */
13
+ constructor(options: ApplicationDatabaseOptions);
14
+ /**
15
+ * Connect to database
16
+ */
17
+ connect(): Promise<DatabaseInstance>;
18
+ /**
19
+ * Disconnect from database
20
+ */
21
+ disconnect(): Promise<void>;
22
+ /**
23
+ * Log database message
24
+ */
25
+ log(message: string, meta?: Record<string, unknown>): void;
26
+ }
27
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/database/manager.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAKzE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,OAAO,CAAC,SAAS,CAA0B;IAE3C;;OAEG;gBACS,OAAO,EAAE,0BAA0B;IAI/C;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAiDjD;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CxC;;OAEG;IACI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAGlE"}
@@ -0,0 +1,18 @@
1
+ import type { ApplicationConfig } from '../application/base-application.interface.js';
2
+ export interface ApplicationDatabaseOptions {
3
+ /** Application config */
4
+ applicationConfig: ApplicationConfig;
5
+ /** Database host */
6
+ host: string;
7
+ /** Database port */
8
+ port: number;
9
+ /** Database username */
10
+ username: string;
11
+ /** Database password */
12
+ password: string;
13
+ /** Database name */
14
+ databaseName: string;
15
+ /** Entities directory */
16
+ entitiesDirectory: string;
17
+ }
18
+ //# sourceMappingURL=manager.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.interface.d.ts","sourceRoot":"","sources":["../../src/database/manager.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAEtF,MAAM,WAAW,0BAA0B;IACzC,yBAAyB;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IAErC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IAEjB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,yBAAyB;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
@@ -4,6 +4,7 @@ import { MikroORM } from "@mikro-orm/postgresql";
4
4
  import DatabaseInstance from "./instance.js";
5
5
  import { Logger } from "../logger/index.js";
6
6
  import { DatabasePerformanceWrapper } from "../performance/index.js";
7
+ import { safeSerializeError } from "../error/error-reporter.js";
7
8
  class DatabaseManager {
8
9
  static {
9
10
  __name(this, "DatabaseManager");
@@ -48,7 +49,7 @@ class DatabaseManager {
48
49
  } catch (error) {
49
50
  const duration = performance.now() - startTime;
50
51
  this.logger.error({
51
- error: error instanceof Error ? error : new Error(String(error)),
52
+ error: error instanceof Error ? error : new Error(safeSerializeError(error)),
52
53
  message: "Database connection failed",
53
54
  meta: {
54
55
  Host: this.options.host,
@@ -86,7 +87,7 @@ class DatabaseManager {
86
87
  } catch (error) {
87
88
  const duration = performance.now() - startTime;
88
89
  this.logger.error({
89
- error: error instanceof Error ? error : new Error(String(error)),
90
+ error: error instanceof Error ? error : new Error(safeSerializeError(error)),
90
91
  message: "Database disconnection failed",
91
92
  meta: {
92
93
  Host: this.options.host,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/database/manager.ts"],
4
- "sourcesContent": ["import { MikroORM } from '@mikro-orm/postgresql';\nimport DatabaseInstance from './instance.js';\nimport type { ApplicationDatabaseOptions } from './manager.interface.js';\nimport { Logger } from '../logger/index.js';\nimport { DatabasePerformanceWrapper } from '../performance/index.js';\n\n/**\n * Database manager\n */\nexport default class DatabaseManager {\n private logger: typeof Logger = Logger;\n\n private readonly options: ApplicationDatabaseOptions;\n\n private instances: DatabaseInstance[] = [];\n\n /**\n * Database manager constructor\n */\n constructor(options: ApplicationDatabaseOptions) {\n this.options = options;\n }\n\n /**\n * Connect to database\n */\n public async connect(): Promise<DatabaseInstance> {\n return DatabasePerformanceWrapper.monitorConnection('connect', async () => {\n const startTime = performance.now();\n\n try {\n const orm = await MikroORM.init();\n\n const databaseInstance = new DatabaseInstance({\n databaseManager: this,\n applicationConfig: this.options.applicationConfig,\n orm,\n });\n\n this.instances.push(databaseInstance);\n\n const duration = performance.now() - startTime;\n const ormConfig = typeof orm.config?.getAll === 'function' ? orm.config.getAll() : undefined;\n const logMeta = {\n Host: ormConfig?.host ?? this.options.host,\n User: ormConfig?.user ?? this.options.username,\n Database: ormConfig?.dbName ?? this.options.databaseName,\n Duration: `${duration.toFixed(2)}ms`,\n };\n\n if (this.options.applicationConfig.log?.startUp) {\n this.log('Connected', logMeta);\n } else {\n this.logger.debug({ message: 'Database connected', meta: logMeta });\n }\n\n return databaseInstance;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n this.logger.error({\n error: error instanceof Error ? error : new Error(String(error)),\n message: 'Database connection failed',\n meta: {\n Host: this.options.host,\n Database: this.options.databaseName,\n Duration: `${duration.toFixed(2)}ms`,\n },\n });\n\n throw error;\n }\n });\n }\n\n /**\n * Disconnect from database\n */\n public async disconnect(): Promise<void> {\n await DatabasePerformanceWrapper.monitorConnection('disconnect', async () => {\n const startTime = performance.now();\n const instanceCount = this.instances.length;\n\n try {\n await Promise.all(this.instances.map(instance => instance.disconnect()));\n\n const duration = performance.now() - startTime;\n\n if (instanceCount > 0) {\n const meta = {\n Host: this.options.host,\n Instances: instanceCount,\n Duration: `${duration.toFixed(2)}ms`,\n };\n\n if (this.options.applicationConfig.log?.startUp) {\n this.log('Disconnected all database instances', meta);\n } else {\n this.logger.debug({ message: 'Database instances disconnected', meta });\n }\n }\n\n this.instances = [];\n } catch (error) {\n const duration = performance.now() - startTime;\n\n this.logger.error({\n error: error instanceof Error ? error : new Error(String(error)),\n message: 'Database disconnection failed',\n meta: {\n Host: this.options.host,\n Duration: `${duration.toFixed(2)}ms`,\n Instances: instanceCount,\n },\n });\n\n throw error;\n }\n });\n }\n\n /**\n * Log database message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({ level: 'database', message, meta });\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { MikroORM } from '@mikro-orm/postgresql';\nimport DatabaseInstance from './instance.js';\nimport type { ApplicationDatabaseOptions } from './manager.interface.js';\nimport { Logger } from '../logger/index.js';\nimport { DatabasePerformanceWrapper } from '../performance/index.js';\nimport { safeSerializeError } from '../error/error-reporter.js';\n\n/**\n * Database manager\n */\nexport default class DatabaseManager {\n private logger: typeof Logger = Logger;\n\n private readonly options: ApplicationDatabaseOptions;\n\n private instances: DatabaseInstance[] = [];\n\n /**\n * Database manager constructor\n */\n constructor(options: ApplicationDatabaseOptions) {\n this.options = options;\n }\n\n /**\n * Connect to database\n */\n public async connect(): Promise<DatabaseInstance> {\n return DatabasePerformanceWrapper.monitorConnection('connect', async () => {\n const startTime = performance.now();\n\n try {\n const orm = await MikroORM.init();\n\n const databaseInstance = new DatabaseInstance({\n databaseManager: this,\n applicationConfig: this.options.applicationConfig,\n orm,\n });\n\n this.instances.push(databaseInstance);\n\n const duration = performance.now() - startTime;\n const ormConfig = typeof orm.config?.getAll === 'function' ? orm.config.getAll() : undefined;\n const logMeta = {\n Host: ormConfig?.host ?? this.options.host,\n User: ormConfig?.user ?? this.options.username,\n Database: ormConfig?.dbName ?? this.options.databaseName,\n Duration: `${duration.toFixed(2)}ms`,\n };\n\n if (this.options.applicationConfig.log?.startUp) {\n this.log('Connected', logMeta);\n } else {\n this.logger.debug({ message: 'Database connected', meta: logMeta });\n }\n\n return databaseInstance;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n this.logger.error({\n error: error instanceof Error ? error : new Error(safeSerializeError(error)),\n message: 'Database connection failed',\n meta: {\n Host: this.options.host,\n Database: this.options.databaseName,\n Duration: `${duration.toFixed(2)}ms`,\n },\n });\n\n throw error;\n }\n });\n }\n\n /**\n * Disconnect from database\n */\n public async disconnect(): Promise<void> {\n await DatabasePerformanceWrapper.monitorConnection('disconnect', async () => {\n const startTime = performance.now();\n const instanceCount = this.instances.length;\n\n try {\n await Promise.all(this.instances.map(instance => instance.disconnect()));\n\n const duration = performance.now() - startTime;\n\n if (instanceCount > 0) {\n const meta = {\n Host: this.options.host,\n Instances: instanceCount,\n Duration: `${duration.toFixed(2)}ms`,\n };\n\n if (this.options.applicationConfig.log?.startUp) {\n this.log('Disconnected all database instances', meta);\n } else {\n this.logger.debug({ message: 'Database instances disconnected', meta });\n }\n }\n\n this.instances = [];\n } catch (error) {\n const duration = performance.now() - startTime;\n\n this.logger.error({\n error: error instanceof Error ? error : new Error(safeSerializeError(error)),\n message: 'Database disconnection failed',\n meta: {\n Host: this.options.host,\n Duration: `${duration.toFixed(2)}ms`,\n Instances: instanceCount,\n },\n });\n\n throw error;\n }\n });\n }\n\n /**\n * Log database message\n */\n public log(message: string, meta?: Record<string, unknown>): void {\n this.logger.custom({ level: 'database', message, meta });\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,109 @@
1
+ import { type ErrorEnvelope, type ErrorReportOptions } from './error.interface.js';
2
+ /**
3
+ * Safely serialize any error to a string, handling circular references gracefully
4
+ *
5
+ * This utility handles MikroORM errors and other complex error objects that may
6
+ * contain circular references which would cause String(error) or JSON.stringify
7
+ * to fail.
8
+ *
9
+ * @param error - The error to serialize
10
+ * @returns String representation of the error
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Safe for MikroORM errors with circular entity metadata
15
+ * const message = safeSerializeError(mikroOrmError);
16
+ *
17
+ * // Works with any error type
18
+ * const message = safeSerializeError(unknownError);
19
+ * ```
20
+ */
21
+ export declare function safeSerializeError(error: unknown): string;
22
+ /**
23
+ * Centralized error reporter for the framework
24
+ *
25
+ * Provides a unified interface for error reporting, normalization, logging,
26
+ * and external error tracking (Sentry). Eliminates inconsistent error handling
27
+ * and ensures all errors are properly structured and correlated.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * const errorReporter = ErrorReporter.getInstance();
32
+ *
33
+ * // Report an error
34
+ * errorReporter.report(error, {
35
+ * context: { userId: '123', operation: 'fetchUser' },
36
+ * severity: ErrorSeverity.CRITICAL
37
+ * });
38
+ *
39
+ * // Report with custom code
40
+ * errorReporter.report(
41
+ * new Error('Database connection lost'),
42
+ * {
43
+ * code: ErrorCode.DATABASE_CONNECTION_FAILED,
44
+ * captureInSentry: true
45
+ * }
46
+ * );
47
+ * ```
48
+ */
49
+ export declare class ErrorReporter {
50
+ private static instance;
51
+ private constructor();
52
+ /**
53
+ * Get the singleton instance
54
+ */
55
+ static getInstance(): ErrorReporter;
56
+ /**
57
+ * Report an error through the centralized error pipeline
58
+ *
59
+ * This method:
60
+ * 1. Normalizes the error into a standard envelope
61
+ * 2. Logs the error with appropriate severity
62
+ * 3. Optionally captures the error in Sentry
63
+ * 4. Adds request correlation if available
64
+ *
65
+ * @param error - The error to report (Error, string, or unknown)
66
+ * @param options - Reporting options (context, severity, etc.)
67
+ * @returns Normalized error envelope
68
+ */
69
+ report(error: Error | unknown, options?: ErrorReportOptions): ErrorEnvelope;
70
+ /**
71
+ * Normalize any error into a standardized ErrorEnvelope
72
+ *
73
+ * @param error - The error to normalize
74
+ * @param options - Optional configuration
75
+ * @returns Normalized error envelope
76
+ */
77
+ private normalizeError;
78
+ /**
79
+ * Log the error with appropriate severity
80
+ *
81
+ * @param envelope - Normalized error envelope
82
+ */
83
+ private logError;
84
+ /**
85
+ * Determine if error should be captured in Sentry
86
+ *
87
+ * @param envelope - Normalized error envelope
88
+ * @param options - Reporting options
89
+ * @returns Whether to capture in Sentry
90
+ */
91
+ private shouldCaptureInSentry;
92
+ /**
93
+ * Capture error in Sentry with enriched context
94
+ *
95
+ * @param error - Original error
96
+ * @param envelope - Normalized error envelope
97
+ */
98
+ private captureInSentry;
99
+ /**
100
+ * Map framework error severity to Sentry severity level
101
+ *
102
+ * @param severity - Framework error severity
103
+ * @returns Sentry severity level
104
+ */
105
+ private mapSeverityToSentryLevel;
106
+ }
107
+ declare const _default: ErrorReporter;
108
+ export default _default;
109
+ //# sourceMappingURL=error-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-reporter.d.ts","sourceRoot":"","sources":["../../src/error/error-reporter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAiB,MAAM,sBAAsB,CAAC;AAG7G;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiCzD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IAEvC,OAAO;IAIP;;OAEG;WACW,WAAW,IAAI,aAAa;IAO1C;;;;;;;;;;;;OAYG;IACI,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa;IAiBlF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAyDtB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IA8BhB;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA+BvB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;CAgBjC;;AAGD,wBAA2C"}
@@ -5,6 +5,35 @@ import { getRequestId } from "../request-context/index.js";
5
5
  import Logger from "../logger/logger.js";
6
6
  import { ErrorCode, ErrorSeverity } from "./error.interface.js";
7
7
  import { FrameworkError } from "./framework-errors.js";
8
+ function safeSerializeError(error) {
9
+ try {
10
+ if (error === null) return "null";
11
+ if (error === void 0) return "undefined";
12
+ if (typeof error === "object") {
13
+ if ("message" in error && typeof error.message === "string") {
14
+ return error.message;
15
+ }
16
+ if ("toString" in error && typeof error.toString === "function") {
17
+ try {
18
+ const str = error.toString();
19
+ if (str !== "[object Object]") {
20
+ return str;
21
+ }
22
+ } catch {
23
+ }
24
+ }
25
+ try {
26
+ return JSON.stringify(error);
27
+ } catch {
28
+ return "[object Object] (circular reference detected)";
29
+ }
30
+ }
31
+ return String(error);
32
+ } catch {
33
+ return "Unknown error (serialization failed)";
34
+ }
35
+ }
36
+ __name(safeSerializeError, "safeSerializeError");
8
37
  class ErrorReporter {
9
38
  static {
10
39
  __name(this, "ErrorReporter");
@@ -90,7 +119,7 @@ class ErrorReporter {
90
119
  };
91
120
  }
92
121
  return {
93
- message: this.serializeUnknownError(error),
122
+ message: safeSerializeError(error),
94
123
  code: options?.code ?? ErrorCode.UNKNOWN,
95
124
  severity: options?.severity ?? ErrorSeverity.ERROR,
96
125
  requestId,
@@ -192,37 +221,11 @@ class ErrorReporter {
192
221
  return "error";
193
222
  }
194
223
  }
195
- /**
196
- * Serialize unknown error types to string
197
- *
198
- * @param error - Unknown error
199
- * @returns String representation
200
- */
201
- serializeUnknownError(error) {
202
- try {
203
- if (error === null) return "null";
204
- if (error === void 0) return "undefined";
205
- if (typeof error === "object") {
206
- if ("message" in error && typeof error.message === "string") {
207
- return error.message;
208
- }
209
- if ("toString" in error && typeof error.toString === "function") {
210
- const str = error.toString();
211
- if (str !== "[object Object]") {
212
- return str;
213
- }
214
- }
215
- return JSON.stringify(error);
216
- }
217
- return String(error);
218
- } catch {
219
- return "Unknown error (serialization failed)";
220
- }
221
- }
222
224
  }
223
225
  var error_reporter_default = ErrorReporter.getInstance();
224
226
  export {
225
227
  ErrorReporter,
226
- error_reporter_default as default
228
+ error_reporter_default as default,
229
+ safeSerializeError
227
230
  };
228
231
  //# sourceMappingURL=error-reporter.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/error/error-reporter.ts"],
4
- "sourcesContent": ["import * as Sentry from '@sentry/node';\nimport { getRequestId } from '../request-context/index.js';\nimport Logger from '../logger/logger.js';\nimport { ErrorCode, type ErrorEnvelope, type ErrorReportOptions, ErrorSeverity } from './error.interface.js';\nimport { FrameworkError } from './framework-errors.js';\n\n/**\n * Centralized error reporter for the framework\n *\n * Provides a unified interface for error reporting, normalization, logging,\n * and external error tracking (Sentry). Eliminates inconsistent error handling\n * and ensures all errors are properly structured and correlated.\n *\n * @example\n * ```typescript\n * const errorReporter = ErrorReporter.getInstance();\n *\n * // Report an error\n * errorReporter.report(error, {\n * context: { userId: '123', operation: 'fetchUser' },\n * severity: ErrorSeverity.CRITICAL\n * });\n *\n * // Report with custom code\n * errorReporter.report(\n * new Error('Database connection lost'),\n * {\n * code: ErrorCode.DATABASE_CONNECTION_FAILED,\n * captureInSentry: true\n * }\n * );\n * ```\n */\nexport class ErrorReporter {\n private static instance: ErrorReporter;\n\n private constructor() {\n // Private constructor for singleton\n }\n\n /**\n * Get the singleton instance\n */\n public static getInstance(): ErrorReporter {\n if (!ErrorReporter.instance) {\n ErrorReporter.instance = new ErrorReporter();\n }\n return ErrorReporter.instance;\n }\n\n /**\n * Report an error through the centralized error pipeline\n *\n * This method:\n * 1. Normalizes the error into a standard envelope\n * 2. Logs the error with appropriate severity\n * 3. Optionally captures the error in Sentry\n * 4. Adds request correlation if available\n *\n * @param error - The error to report (Error, string, or unknown)\n * @param options - Reporting options (context, severity, etc.)\n * @returns Normalized error envelope\n */\n public report(error: Error | unknown, options?: ErrorReportOptions): ErrorEnvelope {\n // Normalize the error into an envelope\n const envelope = this.normalizeError(error, options);\n\n // Log the error (unless explicitly disabled)\n if (options?.log !== false) {\n this.logError(envelope);\n }\n\n // Capture in Sentry (if enabled and error is significant enough)\n if (this.shouldCaptureInSentry(envelope, options)) {\n this.captureInSentry(error, envelope);\n }\n\n return envelope;\n }\n\n /**\n * Normalize any error into a standardized ErrorEnvelope\n *\n * @param error - The error to normalize\n * @param options - Optional configuration\n * @returns Normalized error envelope\n */\n private normalizeError(error: Error | unknown, options?: ErrorReportOptions): ErrorEnvelope {\n // Extract request ID from context (if available)\n const requestId = getRequestId();\n\n // Handle FrameworkError instances\n if (error instanceof FrameworkError) {\n return {\n message: error.message,\n code: options?.code ?? error.code,\n severity: options?.severity ?? error.severity,\n stack: error.stack,\n requestId,\n context: { ...error.context, ...options?.context },\n cause: error.cause,\n timestamp: error.timestamp,\n name: error.name,\n };\n }\n\n // Handle standard Error instances\n if (error instanceof Error) {\n return {\n message: error.message,\n code: options?.code ?? ErrorCode.UNKNOWN,\n severity: options?.severity ?? ErrorSeverity.ERROR,\n stack: error.stack,\n requestId,\n context: options?.context,\n cause: error.cause,\n timestamp: new Date(),\n name: error.name,\n };\n }\n\n // Handle string errors\n if (typeof error === 'string') {\n return {\n message: error,\n code: options?.code ?? ErrorCode.UNKNOWN,\n severity: options?.severity ?? ErrorSeverity.ERROR,\n requestId,\n context: options?.context,\n timestamp: new Date(),\n };\n }\n\n // Handle unknown error types\n return {\n message: this.serializeUnknownError(error),\n code: options?.code ?? ErrorCode.UNKNOWN,\n severity: options?.severity ?? ErrorSeverity.ERROR,\n requestId,\n context: { ...options?.context, originalError: error },\n timestamp: new Date(),\n };\n }\n\n /**\n * Log the error with appropriate severity\n *\n * @param envelope - Normalized error envelope\n */\n private logError(envelope: ErrorEnvelope): void {\n const meta: Record<string, unknown> = {\n code: envelope.code,\n severity: envelope.severity,\n };\n\n if (envelope.requestId) {\n meta.requestId = envelope.requestId;\n }\n\n if (envelope.context) {\n Object.assign(meta, envelope.context);\n }\n\n // Map severity to logger level\n switch (envelope.severity) {\n case ErrorSeverity.FATAL:\n case ErrorSeverity.CRITICAL:\n case ErrorSeverity.ERROR:\n Logger.error({ error: envelope.message, meta });\n break;\n case ErrorSeverity.WARNING:\n Logger.warn({ message: envelope.message, meta });\n break;\n case ErrorSeverity.INFO:\n Logger.info({ message: envelope.message, meta });\n break;\n }\n }\n\n /**\n * Determine if error should be captured in Sentry\n *\n * @param envelope - Normalized error envelope\n * @param options - Reporting options\n * @returns Whether to capture in Sentry\n */\n private shouldCaptureInSentry(envelope: ErrorEnvelope, options?: ErrorReportOptions): boolean {\n // Explicitly disabled\n if (options?.captureInSentry === false) {\n return false;\n }\n\n // Explicitly enabled\n if (options?.captureInSentry === true) {\n return true;\n }\n\n // Auto-capture for errors and above (not warnings/info)\n return (\n envelope.severity === ErrorSeverity.FATAL ||\n envelope.severity === ErrorSeverity.CRITICAL ||\n envelope.severity === ErrorSeverity.ERROR\n );\n }\n\n /**\n * Capture error in Sentry with enriched context\n *\n * @param error - Original error\n * @param envelope - Normalized error envelope\n */\n private captureInSentry(error: Error | unknown, envelope: ErrorEnvelope): void {\n // Only capture if Sentry is initialized\n if (!Logger.isSentryInitialized) {\n return;\n }\n\n // Prepare Sentry scope with enriched context\n Sentry.withScope(scope => {\n // Add severity\n scope.setLevel(this.mapSeverityToSentryLevel(envelope.severity));\n\n // Add tags\n scope.setTag('error_code', envelope.code);\n if (envelope.requestId) {\n scope.setTag('request_id', envelope.requestId);\n }\n\n // Add context\n if (envelope.context) {\n scope.setContext('error_context', envelope.context);\n }\n\n // Capture the error\n if (error instanceof Error) {\n Sentry.captureException(error);\n } else {\n Sentry.captureMessage(envelope.message, 'error');\n }\n });\n }\n\n /**\n * Map framework error severity to Sentry severity level\n *\n * @param severity - Framework error severity\n * @returns Sentry severity level\n */\n private mapSeverityToSentryLevel(severity: ErrorSeverity): Sentry.SeverityLevel {\n switch (severity) {\n case ErrorSeverity.FATAL:\n return 'fatal';\n case ErrorSeverity.CRITICAL:\n return 'error';\n case ErrorSeverity.ERROR:\n return 'error';\n case ErrorSeverity.WARNING:\n return 'warning';\n case ErrorSeverity.INFO:\n return 'info';\n default:\n return 'error';\n }\n }\n\n /**\n * Serialize unknown error types to string\n *\n * @param error - Unknown error\n * @returns String representation\n */\n private serializeUnknownError(error: unknown): string {\n try {\n if (error === null) return 'null';\n if (error === undefined) return 'undefined';\n\n if (typeof error === 'object') {\n // Try to extract meaningful properties\n if ('message' in error && typeof error.message === 'string') {\n return error.message;\n }\n if ('toString' in error && typeof error.toString === 'function') {\n const str = error.toString();\n if (str !== '[object Object]') {\n return str;\n }\n }\n // Fallback to JSON stringification\n return JSON.stringify(error);\n }\n\n return String(error);\n } catch {\n return 'Unknown error (serialization failed)';\n }\n }\n}\n\n// Export singleton instance for convenience\nexport default ErrorReporter.getInstance();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as Sentry from '@sentry/node';\nimport { getRequestId } from '../request-context/index.js';\nimport Logger from '../logger/logger.js';\nimport { ErrorCode, type ErrorEnvelope, type ErrorReportOptions, ErrorSeverity } from './error.interface.js';\nimport { FrameworkError } from './framework-errors.js';\n\n/**\n * Safely serialize any error to a string, handling circular references gracefully\n *\n * This utility handles MikroORM errors and other complex error objects that may\n * contain circular references which would cause String(error) or JSON.stringify\n * to fail.\n *\n * @param error - The error to serialize\n * @returns String representation of the error\n *\n * @example\n * ```typescript\n * // Safe for MikroORM errors with circular entity metadata\n * const message = safeSerializeError(mikroOrmError);\n *\n * // Works with any error type\n * const message = safeSerializeError(unknownError);\n * ```\n */\nexport function safeSerializeError(error: unknown): string {\n try {\n if (error === null) return 'null';\n if (error === undefined) return 'undefined';\n\n if (typeof error === 'object') {\n // Try to extract meaningful properties\n if ('message' in error && typeof error.message === 'string') {\n return error.message;\n }\n if ('toString' in error && typeof error.toString === 'function') {\n try {\n const str = error.toString();\n if (str !== '[object Object]') {\n return str;\n }\n } catch {\n // toString() itself may throw\n }\n }\n // Fallback to JSON stringification with circular reference handling\n try {\n return JSON.stringify(error);\n } catch {\n // JSON.stringify can fail on circular references\n return '[object Object] (circular reference detected)';\n }\n }\n\n return String(error);\n } catch {\n return 'Unknown error (serialization failed)';\n }\n}\n\n/**\n * Centralized error reporter for the framework\n *\n * Provides a unified interface for error reporting, normalization, logging,\n * and external error tracking (Sentry). Eliminates inconsistent error handling\n * and ensures all errors are properly structured and correlated.\n *\n * @example\n * ```typescript\n * const errorReporter = ErrorReporter.getInstance();\n *\n * // Report an error\n * errorReporter.report(error, {\n * context: { userId: '123', operation: 'fetchUser' },\n * severity: ErrorSeverity.CRITICAL\n * });\n *\n * // Report with custom code\n * errorReporter.report(\n * new Error('Database connection lost'),\n * {\n * code: ErrorCode.DATABASE_CONNECTION_FAILED,\n * captureInSentry: true\n * }\n * );\n * ```\n */\nexport class ErrorReporter {\n private static instance: ErrorReporter;\n\n private constructor() {\n // Private constructor for singleton\n }\n\n /**\n * Get the singleton instance\n */\n public static getInstance(): ErrorReporter {\n if (!ErrorReporter.instance) {\n ErrorReporter.instance = new ErrorReporter();\n }\n return ErrorReporter.instance;\n }\n\n /**\n * Report an error through the centralized error pipeline\n *\n * This method:\n * 1. Normalizes the error into a standard envelope\n * 2. Logs the error with appropriate severity\n * 3. Optionally captures the error in Sentry\n * 4. Adds request correlation if available\n *\n * @param error - The error to report (Error, string, or unknown)\n * @param options - Reporting options (context, severity, etc.)\n * @returns Normalized error envelope\n */\n public report(error: Error | unknown, options?: ErrorReportOptions): ErrorEnvelope {\n // Normalize the error into an envelope\n const envelope = this.normalizeError(error, options);\n\n // Log the error (unless explicitly disabled)\n if (options?.log !== false) {\n this.logError(envelope);\n }\n\n // Capture in Sentry (if enabled and error is significant enough)\n if (this.shouldCaptureInSentry(envelope, options)) {\n this.captureInSentry(error, envelope);\n }\n\n return envelope;\n }\n\n /**\n * Normalize any error into a standardized ErrorEnvelope\n *\n * @param error - The error to normalize\n * @param options - Optional configuration\n * @returns Normalized error envelope\n */\n private normalizeError(error: Error | unknown, options?: ErrorReportOptions): ErrorEnvelope {\n // Extract request ID from context (if available)\n const requestId = getRequestId();\n\n // Handle FrameworkError instances\n if (error instanceof FrameworkError) {\n return {\n message: error.message,\n code: options?.code ?? error.code,\n severity: options?.severity ?? error.severity,\n stack: error.stack,\n requestId,\n context: { ...error.context, ...options?.context },\n cause: error.cause,\n timestamp: error.timestamp,\n name: error.name,\n };\n }\n\n // Handle standard Error instances\n if (error instanceof Error) {\n return {\n message: error.message,\n code: options?.code ?? ErrorCode.UNKNOWN,\n severity: options?.severity ?? ErrorSeverity.ERROR,\n stack: error.stack,\n requestId,\n context: options?.context,\n cause: error.cause,\n timestamp: new Date(),\n name: error.name,\n };\n }\n\n // Handle string errors\n if (typeof error === 'string') {\n return {\n message: error,\n code: options?.code ?? ErrorCode.UNKNOWN,\n severity: options?.severity ?? ErrorSeverity.ERROR,\n requestId,\n context: options?.context,\n timestamp: new Date(),\n };\n }\n\n // Handle unknown error types\n return {\n message: safeSerializeError(error),\n code: options?.code ?? ErrorCode.UNKNOWN,\n severity: options?.severity ?? ErrorSeverity.ERROR,\n requestId,\n context: { ...options?.context, originalError: error },\n timestamp: new Date(),\n };\n }\n\n /**\n * Log the error with appropriate severity\n *\n * @param envelope - Normalized error envelope\n */\n private logError(envelope: ErrorEnvelope): void {\n const meta: Record<string, unknown> = {\n code: envelope.code,\n severity: envelope.severity,\n };\n\n if (envelope.requestId) {\n meta.requestId = envelope.requestId;\n }\n\n if (envelope.context) {\n Object.assign(meta, envelope.context);\n }\n\n // Map severity to logger level\n switch (envelope.severity) {\n case ErrorSeverity.FATAL:\n case ErrorSeverity.CRITICAL:\n case ErrorSeverity.ERROR:\n Logger.error({ error: envelope.message, meta });\n break;\n case ErrorSeverity.WARNING:\n Logger.warn({ message: envelope.message, meta });\n break;\n case ErrorSeverity.INFO:\n Logger.info({ message: envelope.message, meta });\n break;\n }\n }\n\n /**\n * Determine if error should be captured in Sentry\n *\n * @param envelope - Normalized error envelope\n * @param options - Reporting options\n * @returns Whether to capture in Sentry\n */\n private shouldCaptureInSentry(envelope: ErrorEnvelope, options?: ErrorReportOptions): boolean {\n // Explicitly disabled\n if (options?.captureInSentry === false) {\n return false;\n }\n\n // Explicitly enabled\n if (options?.captureInSentry === true) {\n return true;\n }\n\n // Auto-capture for errors and above (not warnings/info)\n return (\n envelope.severity === ErrorSeverity.FATAL ||\n envelope.severity === ErrorSeverity.CRITICAL ||\n envelope.severity === ErrorSeverity.ERROR\n );\n }\n\n /**\n * Capture error in Sentry with enriched context\n *\n * @param error - Original error\n * @param envelope - Normalized error envelope\n */\n private captureInSentry(error: Error | unknown, envelope: ErrorEnvelope): void {\n // Only capture if Sentry is initialized\n if (!Logger.isSentryInitialized) {\n return;\n }\n\n // Prepare Sentry scope with enriched context\n Sentry.withScope(scope => {\n // Add severity\n scope.setLevel(this.mapSeverityToSentryLevel(envelope.severity));\n\n // Add tags\n scope.setTag('error_code', envelope.code);\n if (envelope.requestId) {\n scope.setTag('request_id', envelope.requestId);\n }\n\n // Add context\n if (envelope.context) {\n scope.setContext('error_context', envelope.context);\n }\n\n // Capture the error\n if (error instanceof Error) {\n Sentry.captureException(error);\n } else {\n Sentry.captureMessage(envelope.message, 'error');\n }\n });\n }\n\n /**\n * Map framework error severity to Sentry severity level\n *\n * @param severity - Framework error severity\n * @returns Sentry severity level\n */\n private mapSeverityToSentryLevel(severity: ErrorSeverity): Sentry.SeverityLevel {\n switch (severity) {\n case ErrorSeverity.FATAL:\n return 'fatal';\n case ErrorSeverity.CRITICAL:\n return 'error';\n case ErrorSeverity.ERROR:\n return 'error';\n case ErrorSeverity.WARNING:\n return 'warning';\n case ErrorSeverity.INFO:\n return 'info';\n default:\n return 'error';\n }\n }\n}\n\n// Export singleton instance for convenience\nexport default ErrorReporter.getInstance();\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Error severity levels for classification and handling
3
+ */
4
+ export declare enum ErrorSeverity {
5
+ /**
6
+ * Fatal errors that require immediate attention and may cause application failure
7
+ */
8
+ FATAL = "fatal",
9
+ /**
10
+ * Critical errors that significantly impact functionality
11
+ */
12
+ CRITICAL = "critical",
13
+ /**
14
+ * Major errors that affect features but don't crash the application
15
+ */
16
+ ERROR = "error",
17
+ /**
18
+ * Warnings about potential issues
19
+ */
20
+ WARNING = "warning",
21
+ /**
22
+ * Informational messages about error conditions
23
+ */
24
+ INFO = "info"
25
+ }
26
+ /**
27
+ * Standard error codes for framework errors
28
+ */
29
+ export declare enum ErrorCode {
30
+ INVALID_CONFIG = "ERR_INVALID_CONFIG",
31
+ MISSING_CONFIG = "ERR_MISSING_CONFIG",
32
+ CONFIG_VALIDATION_FAILED = "ERR_CONFIG_VALIDATION_FAILED",
33
+ LIFECYCLE_INIT_FAILED = "ERR_LIFECYCLE_INIT_FAILED",
34
+ LIFECYCLE_START_FAILED = "ERR_LIFECYCLE_START_FAILED",
35
+ LIFECYCLE_SHUTDOWN_FAILED = "ERR_LIFECYCLE_SHUTDOWN_FAILED",
36
+ LIFECYCLE_TIMEOUT = "ERR_LIFECYCLE_TIMEOUT",
37
+ DATABASE_CONNECTION_FAILED = "ERR_DATABASE_CONNECTION_FAILED",
38
+ DATABASE_QUERY_FAILED = "ERR_DATABASE_QUERY_FAILED",
39
+ DATABASE_MIGRATION_FAILED = "ERR_DATABASE_MIGRATION_FAILED",
40
+ REDIS_CONNECTION_FAILED = "ERR_REDIS_CONNECTION_FAILED",
41
+ REDIS_COMMAND_FAILED = "ERR_REDIS_COMMAND_FAILED",
42
+ QUEUE_JOB_FAILED = "ERR_QUEUE_JOB_FAILED",
43
+ QUEUE_CONNECTION_FAILED = "ERR_QUEUE_CONNECTION_FAILED",
44
+ QUEUE_PROCESSOR_NOT_FOUND = "ERR_QUEUE_PROCESSOR_NOT_FOUND",
45
+ WEB_SERVER_START_FAILED = "ERR_WEB_SERVER_START_FAILED",
46
+ WEB_SERVER_REQUEST_FAILED = "ERR_WEB_SERVER_REQUEST_FAILED",
47
+ WEB_CONTROLLER_NOT_FOUND = "ERR_WEB_CONTROLLER_NOT_FOUND",
48
+ WEB_ACTION_NOT_FOUND = "ERR_WEB_ACTION_NOT_FOUND",
49
+ WEBSOCKET_CONNECTION_FAILED = "ERR_WEBSOCKET_CONNECTION_FAILED",
50
+ WEBSOCKET_MESSAGE_FAILED = "ERR_WEBSOCKET_MESSAGE_FAILED",
51
+ VALIDATION_FAILED = "ERR_VALIDATION_FAILED",
52
+ INVALID_INPUT = "ERR_INVALID_INPUT",
53
+ RESOURCE_NOT_FOUND = "ERR_RESOURCE_NOT_FOUND",
54
+ RESOURCE_ALREADY_EXISTS = "ERR_RESOURCE_ALREADY_EXISTS",
55
+ RESOURCE_LOCKED = "ERR_RESOURCE_LOCKED",
56
+ UNKNOWN = "ERR_UNKNOWN",
57
+ INTERNAL = "ERR_INTERNAL",
58
+ NOT_IMPLEMENTED = "ERR_NOT_IMPLEMENTED"
59
+ }
60
+ /**
61
+ * Normalized error envelope for consistent error handling
62
+ */
63
+ export interface ErrorEnvelope {
64
+ /**
65
+ * Error message (human-readable)
66
+ */
67
+ message: string;
68
+ /**
69
+ * Error code (machine-readable)
70
+ */
71
+ code: ErrorCode | string;
72
+ /**
73
+ * Error severity level
74
+ */
75
+ severity: ErrorSeverity;
76
+ /**
77
+ * Original error stack trace
78
+ */
79
+ stack?: string;
80
+ /**
81
+ * Request ID for correlation (if available)
82
+ */
83
+ requestId?: string;
84
+ /**
85
+ * Additional context about the error
86
+ */
87
+ context?: Record<string, unknown>;
88
+ /**
89
+ * Underlying cause (if error was wrapped)
90
+ */
91
+ cause?: unknown;
92
+ /**
93
+ * Timestamp when error occurred
94
+ */
95
+ timestamp: Date;
96
+ /**
97
+ * Error name/type
98
+ */
99
+ name?: string;
100
+ }
101
+ /**
102
+ * Options for error reporting
103
+ */
104
+ export interface ErrorReportOptions {
105
+ /**
106
+ * Additional context to include with the error
107
+ */
108
+ context?: Record<string, unknown>;
109
+ /**
110
+ * Override error severity
111
+ */
112
+ severity?: ErrorSeverity;
113
+ /**
114
+ * Override error code
115
+ */
116
+ code?: ErrorCode | string;
117
+ /**
118
+ * Whether to capture this error in Sentry
119
+ */
120
+ captureInSentry?: boolean;
121
+ /**
122
+ * Whether to log this error
123
+ */
124
+ log?: boolean;
125
+ }
126
+ //# sourceMappingURL=error.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.interface.d.ts","sourceRoot":"","sources":["../../src/error/error.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB;;OAEG;IACH,KAAK,UAAU;IAEf;;OAEG;IACH,QAAQ,aAAa;IAErB;;OAEG;IACH,KAAK,UAAU;IAEf;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,IAAI,SAAS;CACd;AAED;;GAEG;AACH,oBAAY,SAAS;IAEnB,cAAc,uBAAuB;IACrC,cAAc,uBAAuB;IACrC,wBAAwB,iCAAiC;IAGzD,qBAAqB,8BAA8B;IACnD,sBAAsB,+BAA+B;IACrD,yBAAyB,kCAAkC;IAC3D,iBAAiB,0BAA0B;IAG3C,0BAA0B,mCAAmC;IAC7D,qBAAqB,8BAA8B;IACnD,yBAAyB,kCAAkC;IAG3D,uBAAuB,gCAAgC;IACvD,oBAAoB,6BAA6B;IAGjD,gBAAgB,yBAAyB;IACzC,uBAAuB,gCAAgC;IACvD,yBAAyB,kCAAkC;IAG3D,uBAAuB,gCAAgC;IACvD,yBAAyB,kCAAkC;IAC3D,wBAAwB,iCAAiC;IACzD,oBAAoB,6BAA6B;IAGjD,2BAA2B,oCAAoC;IAC/D,wBAAwB,iCAAiC;IAGzD,iBAAiB,0BAA0B;IAC3C,aAAa,sBAAsB;IAGnC,kBAAkB,2BAA2B;IAC7C,uBAAuB,gCAAgC;IACvD,eAAe,wBAAwB;IAGvC,OAAO,gBAAgB;IACvB,QAAQ,iBAAiB;IACzB,eAAe,wBAAwB;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,EAAE,aAAa,CAAC;IAExB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf"}
@@ -0,0 +1,113 @@
1
+ import { ErrorCode, ErrorSeverity } from './error.interface.js';
2
+ /**
3
+ * Base framework error class
4
+ *
5
+ * All framework-specific errors extend this class for consistent error handling
6
+ */
7
+ export declare class FrameworkError extends Error {
8
+ readonly code: ErrorCode | string;
9
+ readonly severity: ErrorSeverity;
10
+ readonly context?: Record<string, unknown>;
11
+ readonly timestamp: Date;
12
+ constructor(message: string, options?: {
13
+ code?: ErrorCode | string;
14
+ severity?: ErrorSeverity;
15
+ context?: Record<string, unknown>;
16
+ cause?: unknown;
17
+ });
18
+ }
19
+ /**
20
+ * Configuration error
21
+ */
22
+ export declare class ConfigurationError extends FrameworkError {
23
+ constructor(message: string, options?: {
24
+ context?: Record<string, unknown>;
25
+ cause?: unknown;
26
+ });
27
+ }
28
+ /**
29
+ * Validation error
30
+ */
31
+ export declare class ValidationError extends FrameworkError {
32
+ constructor(message: string, options?: {
33
+ context?: Record<string, unknown>;
34
+ cause?: unknown;
35
+ });
36
+ }
37
+ /**
38
+ * Database error
39
+ */
40
+ export declare class DatabaseError extends FrameworkError {
41
+ constructor(message: string, options?: {
42
+ code?: ErrorCode;
43
+ context?: Record<string, unknown>;
44
+ cause?: unknown;
45
+ });
46
+ }
47
+ /**
48
+ * Redis error
49
+ */
50
+ export declare class RedisError extends FrameworkError {
51
+ constructor(message: string, options?: {
52
+ code?: ErrorCode;
53
+ context?: Record<string, unknown>;
54
+ cause?: unknown;
55
+ });
56
+ }
57
+ /**
58
+ * Queue error
59
+ */
60
+ export declare class QueueError extends FrameworkError {
61
+ constructor(message: string, options?: {
62
+ code?: ErrorCode;
63
+ context?: Record<string, unknown>;
64
+ cause?: unknown;
65
+ });
66
+ }
67
+ /**
68
+ * Web server error
69
+ */
70
+ export declare class WebServerError extends FrameworkError {
71
+ constructor(message: string, options?: {
72
+ code?: ErrorCode;
73
+ context?: Record<string, unknown>;
74
+ cause?: unknown;
75
+ });
76
+ }
77
+ /**
78
+ * WebSocket error
79
+ */
80
+ export declare class WebSocketError extends FrameworkError {
81
+ constructor(message: string, options?: {
82
+ code?: ErrorCode;
83
+ context?: Record<string, unknown>;
84
+ cause?: unknown;
85
+ });
86
+ }
87
+ /**
88
+ * Lifecycle error
89
+ */
90
+ export declare class LifecycleError extends FrameworkError {
91
+ constructor(message: string, options?: {
92
+ code?: ErrorCode;
93
+ context?: Record<string, unknown>;
94
+ cause?: unknown;
95
+ });
96
+ }
97
+ /**
98
+ * Resource not found error
99
+ */
100
+ export declare class ResourceNotFoundError extends FrameworkError {
101
+ constructor(message: string, options?: {
102
+ context?: Record<string, unknown>;
103
+ });
104
+ }
105
+ /**
106
+ * Not implemented error
107
+ */
108
+ export declare class NotImplementedError extends FrameworkError {
109
+ constructor(message: string, options?: {
110
+ context?: Record<string, unknown>;
111
+ });
112
+ }
113
+ //# sourceMappingURL=framework-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-errors.d.ts","sourceRoot":"","sources":["../../src/error/framework-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { ErrorEnvelope, ErrorReportOptions } from './error.interface.js';
2
+ export { ErrorCode, ErrorSeverity } from './error.interface.js';
3
+ export { ErrorReporter, safeSerializeError } from './error-reporter.js';
4
+ export { FrameworkError, ConfigurationError, ValidationError, DatabaseError, RedisError, QueueError, WebServerError, WebSocketError, LifecycleError, ResourceNotFoundError, NotImplementedError, } from './framework-errors.js';
5
+ export { default as errorReporter } from './error-reporter.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAC"}