@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,107 @@
1
+ import type RedisManager from '../redis/manager.js';
2
+ /**
3
+ * CacheManager
4
+ *
5
+ * Thin abstraction over Redis for basic JSON value caching. Unifies all Redis
6
+ * access through the framework RedisManager / RedisInstance (ioredis) so we
7
+ * avoid maintaining a second client implementation (node-redis).
8
+ *
9
+ * Lazy acquisition: the first call to any cache method will either reuse an
10
+ * existing connected RedisInstance (if already established by application
11
+ * startup) or trigger a connection via RedisManager.
12
+ *
13
+ * **Important:** All values are stored as JSON strings. Only JSON-serializable
14
+ * values are supported. Complex types like Date, Map, Set, RegExp, etc. will
15
+ * lose their type information during serialization:
16
+ * - `Date` objects → ISO strings
17
+ * - `Map` / `Set` → empty objects `{}`
18
+ * - `undefined` → omitted from objects, `null` in arrays
19
+ * - Functions → omitted
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Supported types
24
+ * await cache.setItem({ key: 'user', value: { id: 1, name: 'John' } }); // ✓
25
+ * await cache.setItem({ key: 'count', value: 42 }); // ✓
26
+ * await cache.setItem({ key: 'tags', value: ['a', 'b', 'c'] }); // ✓
27
+ *
28
+ * // Unsupported types (will lose type information)
29
+ * await cache.setItem({ key: 'date', value: new Date() }); // → ISO string
30
+ * await cache.setItem({ key: 'map', value: new Map() }); // → {}
31
+ * ```
32
+ */
33
+ export interface CacheManagerProps {
34
+ /** Redis manager (shared across the application) */
35
+ redisManager: RedisManager;
36
+ }
37
+ export default class CacheManager {
38
+ private redisManager;
39
+ private redisInstance?;
40
+ constructor({ redisManager }: CacheManagerProps);
41
+ /**
42
+ * Ensure we have a connected RedisInstance. Reuses the first existing
43
+ * instance if already connected by the application bootstrap.
44
+ */
45
+ private getRedisInstance;
46
+ /**
47
+ * Get a cached JSON value (deserialized) or null if not present.
48
+ *
49
+ * @param key - Cache key
50
+ * @returns Deserialized value or null if not found
51
+ * @throws {Error} If the cached value is not valid JSON
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const user = await cache.getItem<{ id: number; name: string }>({ key: 'user:123' });
56
+ * if (user) {
57
+ * console.log(user.name);
58
+ * }
59
+ * ```
60
+ */
61
+ getItem<T>({ key }: {
62
+ key: string;
63
+ }): Promise<T | null>;
64
+ /**
65
+ * Set a JSON-serializable value. Optionally specify lifetime (seconds).
66
+ *
67
+ * @param key - Cache key
68
+ * @param value - Value to cache (must be JSON-serializable)
69
+ * @param lifetime - Optional expiration in seconds
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // Cache with no expiration
74
+ * await cache.setItem({ key: 'config', value: { theme: 'dark' } });
75
+ *
76
+ * // Cache with 1 hour expiration
77
+ * await cache.setItem({
78
+ * key: 'session:abc',
79
+ * value: { userId: 123 },
80
+ * lifetime: 3600
81
+ * });
82
+ * ```
83
+ */
84
+ setItem<T>({ key, value, lifetime }: {
85
+ key: string;
86
+ value: T;
87
+ lifetime?: number;
88
+ }): Promise<void>;
89
+ /**
90
+ * Delete a cached value.
91
+ *
92
+ * @param key - Cache key to delete
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * await cache.clearItem({ key: 'session:abc' });
97
+ * ```
98
+ */
99
+ clearItem({ key }: {
100
+ key: string;
101
+ }): Promise<void>;
102
+ /**
103
+ * No-op: lifecycle handles Redis disconnection globally.
104
+ */
105
+ close(): Promise<void>;
106
+ }
107
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAIpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAE1B,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAI/C;;;OAGG;YACW,gBAAgB;IAa9B;;;;;;;;;;;;;;OAcG;IACU,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBpE;;;;;;;;;;;;;;;;;;;OAmBG;IACU,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9G;;;;;;;;;OASG;IACU,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
@@ -1,5 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { safeSerializeError } from "../error/error-reporter.js";
3
4
  class CacheManager {
4
5
  static {
5
6
  __name(this, "CacheManager");
@@ -47,7 +48,7 @@ class CacheManager {
47
48
  try {
48
49
  return JSON.parse(raw);
49
50
  } catch (error) {
50
- const errorMessage = error instanceof Error ? error.message : String(error);
51
+ const errorMessage = error instanceof Error ? error.message : safeSerializeError(error);
51
52
  throw new Error(`Failed to parse cached value for key "${key}": ${errorMessage}`);
52
53
  }
53
54
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cache/manager.ts"],
4
- "sourcesContent": ["import type RedisManager from '../redis/manager.js';\nimport type RedisInstance from '../redis/instance.js';\n\n/**\n * CacheManager\n *\n * Thin abstraction over Redis for basic JSON value caching. Unifies all Redis\n * access through the framework RedisManager / RedisInstance (ioredis) so we\n * avoid maintaining a second client implementation (node-redis).\n *\n * Lazy acquisition: the first call to any cache method will either reuse an\n * existing connected RedisInstance (if already established by application\n * startup) or trigger a connection via RedisManager.\n *\n * **Important:** All values are stored as JSON strings. Only JSON-serializable\n * values are supported. Complex types like Date, Map, Set, RegExp, etc. will\n * lose their type information during serialization:\n * - `Date` objects \u2192 ISO strings\n * - `Map` / `Set` \u2192 empty objects `{}`\n * - `undefined` \u2192 omitted from objects, `null` in arrays\n * - Functions \u2192 omitted\n *\n * @example\n * ```typescript\n * // Supported types\n * await cache.setItem({ key: 'user', value: { id: 1, name: 'John' } }); // \u2713\n * await cache.setItem({ key: 'count', value: 42 }); // \u2713\n * await cache.setItem({ key: 'tags', value: ['a', 'b', 'c'] }); // \u2713\n *\n * // Unsupported types (will lose type information)\n * await cache.setItem({ key: 'date', value: new Date() }); // \u2192 ISO string\n * await cache.setItem({ key: 'map', value: new Map() }); // \u2192 {}\n * ```\n */\n\nexport interface CacheManagerProps {\n /** Redis manager (shared across the application) */\n redisManager: RedisManager;\n}\n\nexport default class CacheManager {\n private redisManager: RedisManager;\n private redisInstance?: RedisInstance;\n\n constructor({ redisManager }: CacheManagerProps) {\n this.redisManager = redisManager;\n }\n\n /**\n * Ensure we have a connected RedisInstance. Reuses the first existing\n * instance if already connected by the application bootstrap.\n */\n private async getRedisInstance(): Promise<RedisInstance> {\n if (this.redisInstance) return this.redisInstance;\n\n if (this.redisManager.instances.length > 0) {\n this.redisInstance = this.redisManager.instances[0];\n return this.redisInstance;\n }\n\n // Lazily connect if no instances yet (e.g., used before app onBeforeStart)\n this.redisInstance = await this.redisManager.connect();\n return this.redisInstance;\n }\n\n /**\n * Get a cached JSON value (deserialized) or null if not present.\n *\n * @param key - Cache key\n * @returns Deserialized value or null if not found\n * @throws {Error} If the cached value is not valid JSON\n *\n * @example\n * ```typescript\n * const user = await cache.getItem<{ id: number; name: string }>({ key: 'user:123' });\n * if (user) {\n * console.log(user.name);\n * }\n * ```\n */\n public async getItem<T>({ key }: { key: string }): Promise<T | null> {\n const instance = await this.getRedisInstance();\n const raw = await instance.getCache({ key });\n if (raw === null) return null;\n\n // Validate that we received a string (Redis should always return string or null)\n if (typeof raw !== 'string') {\n throw new Error(`Cache value for key \"${key}\" must be a string, got ${typeof raw}`);\n }\n\n try {\n return JSON.parse(raw) as T;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to parse cached value for key \"${key}\": ${errorMessage}`);\n }\n }\n\n /**\n * Set a JSON-serializable value. Optionally specify lifetime (seconds).\n *\n * @param key - Cache key\n * @param value - Value to cache (must be JSON-serializable)\n * @param lifetime - Optional expiration in seconds\n *\n * @example\n * ```typescript\n * // Cache with no expiration\n * await cache.setItem({ key: 'config', value: { theme: 'dark' } });\n *\n * // Cache with 1 hour expiration\n * await cache.setItem({\n * key: 'session:abc',\n * value: { userId: 123 },\n * lifetime: 3600\n * });\n * ```\n */\n public async setItem<T>({ key, value, lifetime }: { key: string; value: T; lifetime?: number }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.setCache({ key, value, expiration: lifetime });\n }\n\n /**\n * Delete a cached value.\n *\n * @param key - Cache key to delete\n *\n * @example\n * ```typescript\n * await cache.clearItem({ key: 'session:abc' });\n * ```\n */\n public async clearItem({ key }: { key: string }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.deleteCache({ key });\n }\n\n /**\n * No-op: lifecycle handles Redis disconnection globally.\n */\n public async close(): Promise<void> {\n // Intentionally empty; RedisManager handles disconnect.\n }\n}\n"],
5
- "mappings": ";;AAwCA,MAAO,aAA2B;AAAA,EAxClC,OAwCkC;AAAA;AAAA;AAAA,EACxB;AAAA,EACA;AAAA,EAER,YAAY,EAAE,aAAa,GAAsB;AAC/C,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,mBAA2C;AACvD,QAAI,KAAK,cAAe,QAAO,KAAK;AAEpC,QAAI,KAAK,aAAa,UAAU,SAAS,GAAG;AAC1C,WAAK,gBAAgB,KAAK,aAAa,UAAU,CAAC;AAClD,aAAO,KAAK;AAAA,IACd;AAGA,SAAK,gBAAgB,MAAM,KAAK,aAAa,QAAQ;AACrD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAa,QAAW,EAAE,IAAI,GAAuC;AACnE,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,MAAM,MAAM,SAAS,SAAS,EAAE,IAAI,CAAC;AAC3C,QAAI,QAAQ,KAAM,QAAO;AAGzB,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,IAAI,MAAM,wBAAwB,GAAG,2BAA2B,OAAO,GAAG,EAAE;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,SAAS,OAAO;AACd,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,YAAM,IAAI,MAAM,yCAAyC,GAAG,MAAM,YAAY,EAAE;AAAA,IAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,QAAW,EAAE,KAAK,OAAO,SAAS,GAAgE;AAC7G,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,SAAS,EAAE,KAAK,OAAO,YAAY,SAAS,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,UAAU,EAAE,IAAI,GAAmC;AAC9D,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,YAAY,EAAE,IAAI,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAuB;AAAA,EAEpC;AACF;",
4
+ "sourcesContent": ["import type RedisManager from '../redis/manager.js';\nimport type RedisInstance from '../redis/instance.js';\nimport { safeSerializeError } from '../error/error-reporter.js';\n\n/**\n * CacheManager\n *\n * Thin abstraction over Redis for basic JSON value caching. Unifies all Redis\n * access through the framework RedisManager / RedisInstance (ioredis) so we\n * avoid maintaining a second client implementation (node-redis).\n *\n * Lazy acquisition: the first call to any cache method will either reuse an\n * existing connected RedisInstance (if already established by application\n * startup) or trigger a connection via RedisManager.\n *\n * **Important:** All values are stored as JSON strings. Only JSON-serializable\n * values are supported. Complex types like Date, Map, Set, RegExp, etc. will\n * lose their type information during serialization:\n * - `Date` objects \u2192 ISO strings\n * - `Map` / `Set` \u2192 empty objects `{}`\n * - `undefined` \u2192 omitted from objects, `null` in arrays\n * - Functions \u2192 omitted\n *\n * @example\n * ```typescript\n * // Supported types\n * await cache.setItem({ key: 'user', value: { id: 1, name: 'John' } }); // \u2713\n * await cache.setItem({ key: 'count', value: 42 }); // \u2713\n * await cache.setItem({ key: 'tags', value: ['a', 'b', 'c'] }); // \u2713\n *\n * // Unsupported types (will lose type information)\n * await cache.setItem({ key: 'date', value: new Date() }); // \u2192 ISO string\n * await cache.setItem({ key: 'map', value: new Map() }); // \u2192 {}\n * ```\n */\n\nexport interface CacheManagerProps {\n /** Redis manager (shared across the application) */\n redisManager: RedisManager;\n}\n\nexport default class CacheManager {\n private redisManager: RedisManager;\n private redisInstance?: RedisInstance;\n\n constructor({ redisManager }: CacheManagerProps) {\n this.redisManager = redisManager;\n }\n\n /**\n * Ensure we have a connected RedisInstance. Reuses the first existing\n * instance if already connected by the application bootstrap.\n */\n private async getRedisInstance(): Promise<RedisInstance> {\n if (this.redisInstance) return this.redisInstance;\n\n if (this.redisManager.instances.length > 0) {\n this.redisInstance = this.redisManager.instances[0];\n return this.redisInstance;\n }\n\n // Lazily connect if no instances yet (e.g., used before app onBeforeStart)\n this.redisInstance = await this.redisManager.connect();\n return this.redisInstance;\n }\n\n /**\n * Get a cached JSON value (deserialized) or null if not present.\n *\n * @param key - Cache key\n * @returns Deserialized value or null if not found\n * @throws {Error} If the cached value is not valid JSON\n *\n * @example\n * ```typescript\n * const user = await cache.getItem<{ id: number; name: string }>({ key: 'user:123' });\n * if (user) {\n * console.log(user.name);\n * }\n * ```\n */\n public async getItem<T>({ key }: { key: string }): Promise<T | null> {\n const instance = await this.getRedisInstance();\n const raw = await instance.getCache({ key });\n if (raw === null) return null;\n\n // Validate that we received a string (Redis should always return string or null)\n if (typeof raw !== 'string') {\n throw new Error(`Cache value for key \"${key}\" must be a string, got ${typeof raw}`);\n }\n\n try {\n return JSON.parse(raw) as T;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : safeSerializeError(error);\n throw new Error(`Failed to parse cached value for key \"${key}\": ${errorMessage}`);\n }\n }\n\n /**\n * Set a JSON-serializable value. Optionally specify lifetime (seconds).\n *\n * @param key - Cache key\n * @param value - Value to cache (must be JSON-serializable)\n * @param lifetime - Optional expiration in seconds\n *\n * @example\n * ```typescript\n * // Cache with no expiration\n * await cache.setItem({ key: 'config', value: { theme: 'dark' } });\n *\n * // Cache with 1 hour expiration\n * await cache.setItem({\n * key: 'session:abc',\n * value: { userId: 123 },\n * lifetime: 3600\n * });\n * ```\n */\n public async setItem<T>({ key, value, lifetime }: { key: string; value: T; lifetime?: number }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.setCache({ key, value, expiration: lifetime });\n }\n\n /**\n * Delete a cached value.\n *\n * @param key - Cache key to delete\n *\n * @example\n * ```typescript\n * await cache.clearItem({ key: 'session:abc' });\n * ```\n */\n public async clearItem({ key }: { key: string }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.deleteCache({ key });\n }\n\n /**\n * No-op: lifecycle handles Redis disconnection globally.\n */\n public async close(): Promise<void> {\n // Intentionally empty; RedisManager handles disconnect.\n }\n}\n"],
5
+ "mappings": ";;AAEA,SAAS,0BAA0B;AAuCnC,MAAO,aAA2B;AAAA,EAzClC,OAyCkC;AAAA;AAAA;AAAA,EACxB;AAAA,EACA;AAAA,EAER,YAAY,EAAE,aAAa,GAAsB;AAC/C,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,mBAA2C;AACvD,QAAI,KAAK,cAAe,QAAO,KAAK;AAEpC,QAAI,KAAK,aAAa,UAAU,SAAS,GAAG;AAC1C,WAAK,gBAAgB,KAAK,aAAa,UAAU,CAAC;AAClD,aAAO,KAAK;AAAA,IACd;AAGA,SAAK,gBAAgB,MAAM,KAAK,aAAa,QAAQ;AACrD,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAa,QAAW,EAAE,IAAI,GAAuC;AACnE,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,MAAM,MAAM,SAAS,SAAS,EAAE,IAAI,CAAC;AAC3C,QAAI,QAAQ,KAAM,QAAO;AAGzB,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,IAAI,MAAM,wBAAwB,GAAG,2BAA2B,OAAO,GAAG,EAAE;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,SAAS,OAAO;AACd,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,mBAAmB,KAAK;AACtF,YAAM,IAAI,MAAM,yCAAyC,GAAG,MAAM,YAAY,EAAE;AAAA,IAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,QAAW,EAAE,KAAK,OAAO,SAAS,GAAgE;AAC7G,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,SAAS,EAAE,KAAK,OAAO,YAAY,SAAS,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,UAAU,EAAE,IAAI,GAAmC;AAC9D,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,YAAY,EAAE,IAAI,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAuB;AAAA,EAEpC;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}