ts-packages 2.0.0 → 3.0.0

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 (286) hide show
  1. package/package.json +1 -1
  2. package/packages/cache/README.md +105 -9
  3. package/packages/cache/dist/cjs/adapters/memcache/MemcacheCache.d.ts +1 -54
  4. package/packages/cache/dist/cjs/adapters/memcache/MemcacheCache.js +75 -281
  5. package/packages/cache/dist/cjs/adapters/memory/MemoryCache.js +76 -22
  6. package/packages/cache/dist/cjs/adapters/redis/RedisCache.js +84 -26
  7. package/packages/cache/dist/cjs/core/BaseCache.js +13 -4
  8. package/packages/cache/dist/cjs/core/factory.js +26 -4
  9. package/packages/cache/dist/cjs/errors/CacheError.d.ts +10 -7
  10. package/packages/cache/dist/cjs/errors/CacheError.js +6 -11
  11. package/packages/cache/dist/cjs/errors/cacheErrorCodes.d.ts +22 -0
  12. package/packages/cache/dist/cjs/errors/cacheErrorCodes.js +24 -0
  13. package/packages/cache/dist/cjs/errors/index.js +3 -0
  14. package/packages/cache/dist/cjs/middleware/express/cacheMiddleware.js +8 -8
  15. package/packages/cache/dist/cjs/session/SessionStore.js +84 -28
  16. package/packages/cache/dist/esm/adapters/memcache/MemcacheCache.d.ts +1 -54
  17. package/packages/cache/dist/esm/adapters/memcache/MemcacheCache.js +75 -281
  18. package/packages/cache/dist/esm/adapters/memory/MemoryCache.js +76 -22
  19. package/packages/cache/dist/esm/adapters/redis/RedisCache.js +84 -26
  20. package/packages/cache/dist/esm/core/BaseCache.js +13 -4
  21. package/packages/cache/dist/esm/core/factory.js +26 -4
  22. package/packages/cache/dist/esm/errors/CacheError.d.ts +10 -7
  23. package/packages/cache/dist/esm/errors/CacheError.js +6 -11
  24. package/packages/cache/dist/esm/errors/cacheErrorCodes.d.ts +22 -0
  25. package/packages/cache/dist/esm/errors/cacheErrorCodes.js +21 -0
  26. package/packages/cache/dist/esm/errors/index.js +3 -0
  27. package/packages/cache/dist/esm/middleware/express/cacheMiddleware.js +8 -8
  28. package/packages/cache/dist/esm/session/SessionStore.js +84 -28
  29. package/packages/cache/dist/types/adapters/memcache/MemcacheCache.d.ts +1 -54
  30. package/packages/cache/dist/types/errors/CacheError.d.ts +10 -7
  31. package/packages/cache/dist/types/errors/cacheErrorCodes.d.ts +22 -0
  32. package/packages/cache/package.json +8 -6
  33. package/packages/cache/src/adapters/memcache/MemcacheCache.ts +79 -352
  34. package/packages/cache/src/adapters/memory/MemoryCache.ts +76 -77
  35. package/packages/cache/src/adapters/redis/RedisCache.ts +84 -86
  36. package/packages/cache/src/core/BaseCache.ts +13 -14
  37. package/packages/cache/src/core/factory.ts +27 -16
  38. package/packages/cache/src/errors/CacheError.ts +16 -17
  39. package/packages/cache/src/errors/cacheErrorCodes.ts +24 -0
  40. package/packages/cache/src/errors/index.ts +5 -0
  41. package/packages/cache/src/middleware/express/cacheMiddleware.ts +8 -8
  42. package/packages/cache/src/session/SessionStore.ts +84 -84
  43. package/packages/errors-utils/README.md +54 -57
  44. package/packages/errors-utils/dist/cjs/constants/errorCodes.d.ts +28 -23
  45. package/packages/errors-utils/dist/cjs/constants/errorCodes.js +57 -22
  46. package/packages/errors-utils/dist/cjs/constants/errorMessages.d.ts +8 -1
  47. package/packages/errors-utils/dist/cjs/constants/errorMessages.js +72 -29
  48. package/packages/errors-utils/dist/cjs/error/AppError.d.ts +2 -2
  49. package/packages/errors-utils/dist/cjs/error/AppError.js +2 -2
  50. package/packages/errors-utils/dist/cjs/error/ServiceUnavailableError.d.ts +4 -0
  51. package/packages/errors-utils/dist/cjs/error/ServiceUnavailableError.js +11 -0
  52. package/packages/errors-utils/dist/cjs/error/TokenExpiredError.d.ts +2 -2
  53. package/packages/errors-utils/dist/cjs/error/TokenExpiredError.js +2 -2
  54. package/packages/errors-utils/dist/cjs/error/TokenMalformedError.d.ts +2 -2
  55. package/packages/errors-utils/dist/cjs/error/TokenMalformedError.js +2 -2
  56. package/packages/errors-utils/dist/cjs/error/UnauthorizedError.d.ts +1 -2
  57. package/packages/errors-utils/dist/cjs/error/UnauthorizedError.js +2 -2
  58. package/packages/errors-utils/dist/cjs/error/index.d.ts +14 -0
  59. package/packages/errors-utils/dist/cjs/error/index.js +39 -0
  60. package/packages/errors-utils/dist/cjs/errorRegistry/errorRegistry.d.ts +19 -0
  61. package/packages/errors-utils/dist/cjs/errorRegistry/errorRegistry.js +63 -0
  62. package/packages/errors-utils/dist/cjs/errorRegistry/index.d.ts +3 -0
  63. package/packages/errors-utils/dist/cjs/errorRegistry/index.js +6 -0
  64. package/packages/errors-utils/dist/cjs/index.d.ts +3 -9
  65. package/packages/errors-utils/dist/cjs/index.js +12 -9
  66. package/packages/errors-utils/dist/cjs/middleware/express/{errorHandler.js → errorHandler.middleware.js} +4 -4
  67. package/packages/errors-utils/dist/cjs/middleware/express/index.d.ts +2 -2
  68. package/packages/errors-utils/dist/cjs/middleware/express/index.js +2 -2
  69. package/packages/errors-utils/dist/esm/constants/errorCodes.d.ts +28 -23
  70. package/packages/errors-utils/dist/esm/constants/errorCodes.js +57 -22
  71. package/packages/errors-utils/dist/esm/constants/errorMessages.d.ts +8 -1
  72. package/packages/errors-utils/dist/esm/constants/errorMessages.js +72 -29
  73. package/packages/errors-utils/dist/esm/error/AppError.d.ts +2 -2
  74. package/packages/errors-utils/dist/esm/error/AppError.js +2 -2
  75. package/packages/errors-utils/dist/esm/error/ServiceUnavailableError.d.ts +4 -0
  76. package/packages/errors-utils/dist/esm/error/ServiceUnavailableError.js +7 -0
  77. package/packages/errors-utils/dist/esm/error/TokenExpiredError.d.ts +2 -2
  78. package/packages/errors-utils/dist/esm/error/TokenExpiredError.js +2 -2
  79. package/packages/errors-utils/dist/esm/error/TokenMalformedError.d.ts +2 -2
  80. package/packages/errors-utils/dist/esm/error/TokenMalformedError.js +2 -2
  81. package/packages/errors-utils/dist/esm/error/UnauthorizedError.d.ts +1 -2
  82. package/packages/errors-utils/dist/esm/error/UnauthorizedError.js +2 -2
  83. package/packages/errors-utils/dist/esm/error/index.d.ts +14 -0
  84. package/packages/errors-utils/dist/esm/error/index.js +23 -0
  85. package/packages/errors-utils/dist/esm/errorRegistry/errorRegistry.d.ts +19 -0
  86. package/packages/errors-utils/dist/esm/errorRegistry/errorRegistry.js +59 -0
  87. package/packages/errors-utils/dist/esm/errorRegistry/index.d.ts +3 -0
  88. package/packages/errors-utils/dist/esm/errorRegistry/index.js +3 -0
  89. package/packages/errors-utils/dist/esm/index.d.ts +3 -9
  90. package/packages/errors-utils/dist/esm/index.js +12 -9
  91. package/packages/errors-utils/dist/esm/middleware/express/{errorHandler.js → errorHandler.middleware.js} +5 -5
  92. package/packages/errors-utils/dist/esm/middleware/express/index.d.ts +2 -2
  93. package/packages/errors-utils/dist/esm/middleware/express/index.js +2 -2
  94. package/packages/errors-utils/dist/types/constants/errorCodes.d.ts +28 -23
  95. package/packages/errors-utils/dist/types/constants/errorMessages.d.ts +8 -1
  96. package/packages/errors-utils/dist/types/error/AppError.d.ts +2 -2
  97. package/packages/errors-utils/dist/types/error/ServiceUnavailableError.d.ts +4 -0
  98. package/packages/errors-utils/dist/types/error/TokenExpiredError.d.ts +2 -2
  99. package/packages/errors-utils/dist/types/error/TokenMalformedError.d.ts +2 -2
  100. package/packages/errors-utils/dist/types/error/UnauthorizedError.d.ts +1 -2
  101. package/packages/errors-utils/dist/types/error/index.d.ts +14 -0
  102. package/packages/errors-utils/dist/types/errorRegistry/errorRegistry.d.ts +19 -0
  103. package/packages/errors-utils/dist/types/errorRegistry/index.d.ts +3 -0
  104. package/packages/errors-utils/dist/types/index.d.ts +3 -9
  105. package/packages/errors-utils/dist/types/middleware/express/index.d.ts +2 -2
  106. package/packages/errors-utils/package.json +4 -4
  107. package/packages/errors-utils/src/constants/errorCodes.ts +64 -23
  108. package/packages/errors-utils/src/constants/errorMessages.ts +91 -34
  109. package/packages/errors-utils/src/error/AppError.ts +3 -2
  110. package/packages/errors-utils/src/error/ServiceUnavailableError.ts +8 -0
  111. package/packages/errors-utils/src/error/TokenExpiredError.ts +2 -2
  112. package/packages/errors-utils/src/error/TokenMalformedError.ts +2 -2
  113. package/packages/errors-utils/src/error/UnauthorizedError.ts +8 -8
  114. package/packages/errors-utils/src/error/index.ts +26 -0
  115. package/packages/errors-utils/src/errorRegistry/errorRegistry.ts +74 -0
  116. package/packages/errors-utils/src/errorRegistry/index.ts +4 -0
  117. package/packages/errors-utils/src/index.ts +12 -10
  118. package/packages/errors-utils/src/middleware/express/{errorHandler.ts → errorHandler.middleware.ts} +5 -5
  119. package/packages/errors-utils/src/middleware/express/index.ts +2 -2
  120. package/packages/js-extensions/README.md +174 -425
  121. package/packages/js-extensions/dist/cjs/array/array-extensions.js +84 -50
  122. package/packages/js-extensions/dist/cjs/core/performance.d.ts +1 -0
  123. package/packages/js-extensions/dist/cjs/core/performance.js +6 -0
  124. package/packages/js-extensions/dist/cjs/core/version.d.ts +1 -0
  125. package/packages/js-extensions/dist/cjs/core/version.js +9 -0
  126. package/packages/js-extensions/dist/cjs/index.d.ts +1 -0
  127. package/packages/js-extensions/dist/cjs/index.js +1 -0
  128. package/packages/js-extensions/dist/cjs/number/number-extensions.js +85 -97
  129. package/packages/js-extensions/dist/cjs/object/object-extensions.js +102 -103
  130. package/packages/js-extensions/dist/cjs/string/string-extensions.js +66 -43
  131. package/packages/js-extensions/dist/cjs/types/global-augmentations.d.ts +1 -0
  132. package/packages/js-extensions/dist/cjs/utils/defineExtension.d.ts +1 -0
  133. package/packages/js-extensions/dist/cjs/utils/defineExtension.js +13 -0
  134. package/packages/js-extensions/dist/cjs/utils/index.d.ts +1 -0
  135. package/packages/js-extensions/dist/cjs/utils/index.js +1 -0
  136. package/packages/js-extensions/dist/esm/array/array-extensions.js +84 -50
  137. package/packages/js-extensions/dist/esm/core/performance.d.ts +1 -0
  138. package/packages/js-extensions/dist/esm/core/performance.js +5 -0
  139. package/packages/js-extensions/dist/esm/core/version.d.ts +1 -0
  140. package/packages/js-extensions/dist/esm/core/version.js +5 -0
  141. package/packages/js-extensions/dist/esm/index.d.ts +1 -0
  142. package/packages/js-extensions/dist/esm/index.js +1 -0
  143. package/packages/js-extensions/dist/esm/number/number-extensions.js +86 -98
  144. package/packages/js-extensions/dist/esm/object/object-extensions.js +102 -103
  145. package/packages/js-extensions/dist/esm/string/string-extensions.js +66 -43
  146. package/packages/js-extensions/dist/esm/types/global-augmentations.d.ts +1 -0
  147. package/packages/js-extensions/dist/esm/utils/defineExtension.d.ts +1 -0
  148. package/packages/js-extensions/dist/esm/utils/defineExtension.js +10 -0
  149. package/packages/js-extensions/dist/esm/utils/index.d.ts +1 -0
  150. package/packages/js-extensions/dist/esm/utils/index.js +1 -0
  151. package/packages/js-extensions/dist/types/core/performance.d.ts +1 -0
  152. package/packages/js-extensions/dist/types/core/version.d.ts +1 -0
  153. package/packages/js-extensions/dist/types/index.d.ts +1 -0
  154. package/packages/js-extensions/dist/types/types/global-augmentations.d.ts +1 -0
  155. package/packages/js-extensions/dist/types/utils/defineExtension.d.ts +1 -0
  156. package/packages/js-extensions/dist/types/utils/index.d.ts +1 -0
  157. package/packages/js-extensions/package.json +8 -4
  158. package/packages/js-extensions/src/array/array-extensions.ts +268 -150
  159. package/packages/js-extensions/src/core/performance.ts +11 -0
  160. package/packages/js-extensions/src/core/version.ts +7 -0
  161. package/packages/js-extensions/src/index.ts +2 -0
  162. package/packages/js-extensions/src/number/number-extensions.ts +90 -123
  163. package/packages/js-extensions/src/object/object-extensions.ts +102 -130
  164. package/packages/js-extensions/src/string/string-extensions.ts +80 -76
  165. package/packages/js-extensions/src/types/global-augmentations.ts +2 -1
  166. package/packages/js-extensions/src/utils/defineExtension.ts +14 -0
  167. package/packages/js-extensions/src/utils/index.ts +1 -0
  168. package/packages/response-utils/README.md +156 -198
  169. package/packages/response-utils/dist/cjs/core/BaseResponder.js +20 -4
  170. package/packages/response-utils/dist/cjs/index.d.ts +0 -1
  171. package/packages/response-utils/dist/cjs/index.js +1 -25
  172. package/packages/response-utils/dist/esm/core/BaseResponder.js +20 -4
  173. package/packages/response-utils/dist/esm/index.d.ts +0 -1
  174. package/packages/response-utils/dist/esm/index.js +0 -2
  175. package/packages/response-utils/dist/types/index.d.ts +0 -1
  176. package/packages/response-utils/package.json +1 -1
  177. package/packages/response-utils/src/core/BaseResponder.ts +25 -4
  178. package/packages/response-utils/src/index.ts +0 -3
  179. package/packages/response-utils/src/middleware/express/expressMiddleware.ts +1 -1
  180. package/packages/security/README.md +153 -355
  181. package/packages/security/dist/cjs/core/crypto/cryptoManager.js +34 -17
  182. package/packages/security/dist/cjs/core/jwt/decode.js +4 -1
  183. package/packages/security/dist/cjs/core/jwt/generateTokens.js +4 -1
  184. package/packages/security/dist/cjs/core/jwt/jwtManager.d.ts +19 -43
  185. package/packages/security/dist/cjs/core/jwt/jwtManager.js +84 -199
  186. package/packages/security/dist/cjs/core/jwt/parseDuration.js +3 -2
  187. package/packages/security/dist/cjs/core/jwt/signToken.js +2 -1
  188. package/packages/security/dist/cjs/core/jwt/validateToken.d.ts +10 -7
  189. package/packages/security/dist/cjs/core/jwt/validateToken.js +19 -10
  190. package/packages/security/dist/cjs/core/jwt/verify.d.ts +8 -9
  191. package/packages/security/dist/cjs/core/jwt/verify.js +59 -14
  192. package/packages/security/dist/cjs/core/password/hash.js +4 -4
  193. package/packages/security/dist/cjs/core/password/passwordManager.d.ts +1 -1
  194. package/packages/security/dist/cjs/core/password/passwordManager.js +36 -80
  195. package/packages/security/dist/cjs/core/password/strength.js +12 -6
  196. package/packages/security/dist/cjs/core/password/utils.d.ts +12 -0
  197. package/packages/security/dist/cjs/core/password/utils.js +16 -1
  198. package/packages/security/dist/cjs/core/password/verify.js +4 -4
  199. package/packages/security/dist/cjs/index.d.ts +2 -7
  200. package/packages/security/dist/esm/core/crypto/cryptoManager.js +34 -17
  201. package/packages/security/dist/esm/core/jwt/decode.js +4 -1
  202. package/packages/security/dist/esm/core/jwt/generateTokens.js +4 -1
  203. package/packages/security/dist/esm/core/jwt/jwtManager.d.ts +19 -43
  204. package/packages/security/dist/esm/core/jwt/jwtManager.js +85 -200
  205. package/packages/security/dist/esm/core/jwt/parseDuration.js +3 -2
  206. package/packages/security/dist/esm/core/jwt/signToken.js +2 -1
  207. package/packages/security/dist/esm/core/jwt/validateToken.d.ts +10 -7
  208. package/packages/security/dist/esm/core/jwt/validateToken.js +19 -10
  209. package/packages/security/dist/esm/core/jwt/verify.d.ts +8 -9
  210. package/packages/security/dist/esm/core/jwt/verify.js +58 -13
  211. package/packages/security/dist/esm/core/password/hash.js +4 -4
  212. package/packages/security/dist/esm/core/password/passwordManager.d.ts +1 -1
  213. package/packages/security/dist/esm/core/password/passwordManager.js +36 -80
  214. package/packages/security/dist/esm/core/password/strength.js +12 -6
  215. package/packages/security/dist/esm/core/password/utils.d.ts +12 -0
  216. package/packages/security/dist/esm/core/password/utils.js +16 -1
  217. package/packages/security/dist/esm/core/password/verify.js +4 -4
  218. package/packages/security/dist/esm/index.d.ts +2 -7
  219. package/packages/security/dist/types/core/jwt/jwtManager.d.ts +19 -43
  220. package/packages/security/dist/types/core/jwt/validateToken.d.ts +10 -7
  221. package/packages/security/dist/types/core/jwt/verify.d.ts +8 -9
  222. package/packages/security/dist/types/core/password/passwordManager.d.ts +1 -1
  223. package/packages/security/dist/types/core/password/utils.d.ts +12 -0
  224. package/packages/security/dist/types/index.d.ts +2 -7
  225. package/packages/security/package.json +3 -3
  226. package/packages/security/src/core/crypto/cryptoManager.ts +53 -21
  227. package/packages/security/src/core/jwt/decode.ts +4 -1
  228. package/packages/security/src/core/jwt/generateTokens.ts +4 -1
  229. package/packages/security/src/core/jwt/jwtManager.ts +105 -257
  230. package/packages/security/src/core/jwt/parseDuration.ts +4 -2
  231. package/packages/security/src/core/jwt/signToken.ts +2 -1
  232. package/packages/security/src/core/jwt/validateToken.ts +21 -13
  233. package/packages/security/src/core/jwt/verify.ts +82 -20
  234. package/packages/security/src/core/password/hash.ts +10 -4
  235. package/packages/security/src/core/password/passwordManager.ts +38 -108
  236. package/packages/security/src/core/password/strength.ts +13 -8
  237. package/packages/security/src/core/password/utils.ts +19 -3
  238. package/packages/security/src/core/password/verify.ts +6 -4
  239. package/packages/server-utils/README.md +1 -1
  240. package/packages/server-utils/dist/cjs/core/server.js +6 -6
  241. package/packages/server-utils/dist/cjs/middleware/auth.middleware.d.ts +1 -2
  242. package/packages/server-utils/dist/cjs/middleware/auth.middleware.js +17 -14
  243. package/packages/server-utils/dist/cjs/middleware/cache.middleware.js +2 -2
  244. package/packages/server-utils/dist/cjs/middleware/errorHandler.middleware.d.ts +1 -1
  245. package/packages/server-utils/dist/cjs/middleware/errorHandler.middleware.js +34 -17
  246. package/packages/server-utils/dist/cjs/middleware/session.middleware.js +8 -8
  247. package/packages/server-utils/dist/cjs/middleware/validation.middleware.js +2 -2
  248. package/packages/server-utils/dist/esm/core/server.js +6 -6
  249. package/packages/server-utils/dist/esm/middleware/auth.middleware.d.ts +1 -2
  250. package/packages/server-utils/dist/esm/middleware/auth.middleware.js +18 -15
  251. package/packages/server-utils/dist/esm/middleware/cache.middleware.js +2 -2
  252. package/packages/server-utils/dist/esm/middleware/errorHandler.middleware.d.ts +1 -1
  253. package/packages/server-utils/dist/esm/middleware/errorHandler.middleware.js +34 -17
  254. package/packages/server-utils/dist/esm/middleware/session.middleware.js +8 -8
  255. package/packages/server-utils/dist/esm/middleware/validation.middleware.js +2 -2
  256. package/packages/server-utils/dist/types/middleware/auth.middleware.d.ts +1 -2
  257. package/packages/server-utils/dist/types/middleware/errorHandler.middleware.d.ts +1 -1
  258. package/packages/server-utils/package.json +4 -4
  259. package/packages/server-utils/src/core/server.ts +6 -6
  260. package/packages/server-utils/src/middleware/auth.middleware.ts +40 -27
  261. package/packages/server-utils/src/middleware/cache.middleware.ts +2 -2
  262. package/packages/server-utils/src/middleware/errorHandler.middleware.ts +39 -24
  263. package/packages/server-utils/src/middleware/session.middleware.ts +11 -8
  264. package/packages/server-utils/src/middleware/validation.middleware.ts +2 -3
  265. package/packages/errors-utils/dist/cjs/error/RateLimitError.d.ts +0 -4
  266. package/packages/errors-utils/dist/cjs/error/RateLimitError.js +0 -11
  267. package/packages/errors-utils/dist/cjs/utils/mapAppErrorToResponder.d.ts +0 -3
  268. package/packages/errors-utils/dist/cjs/utils/mapAppErrorToResponder.js +0 -27
  269. package/packages/errors-utils/dist/esm/error/RateLimitError.d.ts +0 -4
  270. package/packages/errors-utils/dist/esm/error/RateLimitError.js +0 -7
  271. package/packages/errors-utils/dist/esm/utils/mapAppErrorToResponder.d.ts +0 -3
  272. package/packages/errors-utils/dist/esm/utils/mapAppErrorToResponder.js +0 -24
  273. package/packages/errors-utils/dist/types/error/RateLimitError.d.ts +0 -4
  274. package/packages/errors-utils/dist/types/utils/mapAppErrorToResponder.d.ts +0 -3
  275. package/packages/errors-utils/src/error/RateLimitError.ts +0 -8
  276. package/packages/errors-utils/src/utils/mapAppErrorToResponder.ts +0 -38
  277. package/packages/response-utils/src/legacy.ts +0 -30
  278. /package/packages/errors-utils/dist/cjs/middleware/express/{errorConverter.d.ts → errorConverter.middleware.d.ts} +0 -0
  279. /package/packages/errors-utils/dist/cjs/middleware/express/{errorConverter.js → errorConverter.middleware.js} +0 -0
  280. /package/packages/errors-utils/dist/cjs/middleware/express/{errorHandler.d.ts → errorHandler.middleware.d.ts} +0 -0
  281. /package/packages/errors-utils/dist/esm/middleware/express/{errorConverter.d.ts → errorConverter.middleware.d.ts} +0 -0
  282. /package/packages/errors-utils/dist/esm/middleware/express/{errorConverter.js → errorConverter.middleware.js} +0 -0
  283. /package/packages/errors-utils/dist/esm/middleware/express/{errorHandler.d.ts → errorHandler.middleware.d.ts} +0 -0
  284. /package/packages/errors-utils/dist/types/middleware/express/{errorConverter.d.ts → errorConverter.middleware.d.ts} +0 -0
  285. /package/packages/errors-utils/dist/types/middleware/express/{errorHandler.d.ts → errorHandler.middleware.d.ts} +0 -0
  286. /package/packages/errors-utils/src/middleware/express/{errorConverter.ts → errorConverter.middleware.ts} +0 -0
@@ -1,9 +1,7 @@
1
1
  import Memcached from 'memcached';
2
+ import { CACHE_ERROR_CODES } from 'src/errors/cacheErrorCodes';
2
3
  import { BaseCache } from '../../core/BaseCache';
3
4
  import { CacheError } from '../../errors';
4
- /**
5
- * Memcache adapter
6
- */
7
5
  export class MemcacheCache extends BaseCache {
8
6
  constructor(memcacheConfig) {
9
7
  super(memcacheConfig);
@@ -11,362 +9,158 @@ export class MemcacheCache extends BaseCache {
11
9
  this.client = null;
12
10
  this.isConnected = false;
13
11
  }
14
- /**
15
- * Connect to Memcache
16
- */
17
12
  async connect() {
18
13
  try {
19
14
  const servers = Array.isArray(this.memcacheConfig.servers)
20
15
  ? this.memcacheConfig.servers
21
16
  : [this.memcacheConfig.servers];
22
- const options = {
17
+ this.client = new Memcached(servers, {
23
18
  retries: 2,
24
19
  retry: 30000,
25
20
  remove: true,
26
- failOverServers: [],
27
- maxValue: 1048576, // 1MB default
21
+ maxValue: 1048576,
28
22
  idle: 30000,
29
- };
30
- if (this.memcacheConfig.username) {
31
- ;
32
- options.username = this.memcacheConfig.username;
33
- }
34
- if (this.memcacheConfig.password) {
35
- ;
36
- options.password = this.memcacheConfig.password;
37
- }
38
- this.client = new Memcached(servers, options);
23
+ });
39
24
  this.isConnected = true;
40
- // Test connection
41
25
  await this.ping();
42
26
  }
43
- catch (err) {
44
- throw new CacheError('Failed to connect to Memcache', 'MEMCACHE_CONNECTION_ERROR', 'memcache', err);
27
+ catch (error) {
28
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_CONNECTION_FAILED, {
29
+ adapter: 'memcache',
30
+ operation: 'connect',
31
+ cause: error instanceof Error ? error : undefined,
32
+ });
45
33
  }
46
34
  }
47
- /**
48
- * Ensure client is connected
49
- */
50
35
  async ensureConnected() {
51
36
  if (!this.client) {
52
37
  await this.connect();
53
38
  }
54
39
  }
55
- /**
56
- * Ping memcache
57
- */
58
40
  async ping() {
59
41
  return new Promise((resolve, reject) => {
60
- if (!this.client) {
61
- reject(new Error('Memcache client not initialized'));
62
- return;
63
- }
64
- this.client.touch('__ping', 1, (err) => {
65
- if (err)
66
- reject(err);
67
- else
68
- resolve();
69
- });
42
+ if (!this.client)
43
+ return reject(new Error('Client not initialized'));
44
+ this.client.touch('__ping', 1, (err) => (err ? reject(err) : resolve()));
70
45
  });
71
46
  }
72
- /**
73
- * Get a value from Memcache
74
- */
47
+ async exists(key) {
48
+ try {
49
+ const value = await this.get(key);
50
+ return value !== null;
51
+ }
52
+ catch (error) {
53
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
54
+ adapter: 'memcache',
55
+ operation: 'exists',
56
+ details: { key },
57
+ cause: error instanceof Error ? error : undefined,
58
+ });
59
+ }
60
+ }
75
61
  async get(key) {
76
62
  try {
77
63
  await this.ensureConnected();
78
64
  const fullKey = this.buildKey(key);
79
65
  return new Promise((resolve, reject) => {
80
66
  this.client.get(fullKey, (err, data) => {
81
- if (err) {
82
- reject(err);
83
- return;
84
- }
85
- if (data === undefined || data === null) {
86
- this.recordMiss();
87
- resolve(null);
88
- return;
89
- }
90
- this.recordHit();
67
+ if (err)
68
+ return reject(err);
69
+ if (data == null)
70
+ return resolve(null);
91
71
  try {
92
- if (typeof data === 'string') {
93
- resolve(this.deserialize(data));
94
- }
95
- else if (Buffer.isBuffer(data)) {
96
- resolve(this.deserialize(data.toString()));
97
- }
98
- else {
99
- // Unknown shape from memcached client - treat as miss
100
- this.recordMiss();
101
- resolve(null);
102
- }
72
+ resolve(this.deserialize(Buffer.isBuffer(data) ? data.toString() : data));
103
73
  }
104
- catch (parseErr) {
105
- reject(parseErr);
74
+ catch (e) {
75
+ reject(e);
106
76
  }
107
77
  });
108
78
  });
109
79
  }
110
- catch (err) {
111
- throw new CacheError(`Failed to get key "${key}" from Memcache`, 'MEMCACHE_GET_ERROR', 'memcache', err);
80
+ catch (error) {
81
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_KEY_NOT_FOUND, {
82
+ adapter: 'memcache',
83
+ operation: 'get',
84
+ details: { key },
85
+ cause: error instanceof Error ? error : undefined,
86
+ });
112
87
  }
113
88
  }
114
- /**
115
- * Set a value in Memcache
116
- */
117
89
  async set(key, value, ttl) {
118
90
  try {
119
91
  await this.ensureConnected();
120
92
  const fullKey = this.buildKey(key);
121
- const serialized = this.serialize(value);
122
- const expiry = ttl ?? this.ttl;
123
93
  return new Promise((resolve, reject) => {
124
- this.client.set(fullKey, serialized, expiry, (err) => {
125
- if (err) {
126
- reject(err);
127
- }
128
- else {
129
- this.recordSet();
130
- resolve();
131
- }
132
- });
94
+ this.client.set(fullKey, this.serialize(value), ttl ?? this.ttl, (err) => (err ? reject(err) : resolve()));
133
95
  });
134
96
  }
135
- catch (err) {
136
- throw new CacheError(`Failed to set key "${key}" in Memcache`, 'MEMCACHE_SET_ERROR', 'memcache', err);
97
+ catch (error) {
98
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
99
+ adapter: 'memcache',
100
+ operation: 'set',
101
+ details: { key },
102
+ cause: error instanceof Error ? error : undefined,
103
+ });
137
104
  }
138
105
  }
139
- /**
140
- * Delete a key from Memcache
141
- */
142
106
  async delete(key) {
143
107
  try {
144
108
  await this.ensureConnected();
145
109
  const fullKey = this.buildKey(key);
146
110
  return new Promise((resolve, reject) => {
147
- this.client.del(fullKey, (err) => {
148
- if (err) {
149
- reject(err);
150
- }
151
- else {
152
- this.recordDelete();
153
- resolve(true);
154
- }
155
- });
111
+ this.client.del(fullKey, (err) => (err ? reject(err) : resolve(true)));
156
112
  });
157
113
  }
158
- catch (err) {
159
- throw new CacheError(`Failed to delete key "${key}" from Memcache`, 'MEMCACHE_DELETE_ERROR', 'memcache', err);
160
- }
161
- }
162
- /**
163
- * Check if key exists
164
- */
165
- async exists(key) {
166
- try {
167
- const value = await this.get(key);
168
- return value !== null;
169
- }
170
- catch (err) {
171
- throw new CacheError(`Failed to check existence of key "${key}" in Memcache`, 'MEMCACHE_EXISTS_ERROR', 'memcache', err);
172
- }
173
- }
174
- /**
175
- * Clear all keys (Memcache limitation: flushes entire cache)
176
- */
177
- async clear() {
178
- try {
179
- await this.ensureConnected();
180
- return new Promise((resolve, reject) => {
181
- this.client.flush((err) => {
182
- if (err) {
183
- reject(err);
184
- }
185
- else {
186
- resolve();
187
- }
188
- });
114
+ catch (error) {
115
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
116
+ adapter: 'memcache',
117
+ operation: 'delete',
118
+ details: { key },
119
+ cause: error instanceof Error ? error : undefined,
189
120
  });
190
121
  }
191
- catch (err) {
192
- throw new CacheError('Failed to clear Memcache', 'MEMCACHE_CLEAR_ERROR', 'memcache', err);
193
- }
194
122
  }
195
- /**
196
- * Get multiple values at once
197
- */
198
- async getMultiple(keys) {
123
+ async clear() {
199
124
  try {
200
125
  await this.ensureConnected();
201
- const fullKeys = keys.map((k) => this.buildKey(k));
202
126
  return new Promise((resolve, reject) => {
203
- this.client.getMulti(fullKeys, (err, data) => {
204
- if (err) {
205
- reject(err);
206
- return;
207
- }
208
- const result = {};
209
- if (!data || typeof data !== 'object') {
210
- // Treat as all misses
211
- for (const key of keys) {
212
- this.recordMiss();
213
- result[key] = null;
214
- }
215
- resolve(result);
216
- return;
217
- }
218
- const map = data;
219
- keys.forEach((key) => {
220
- const fullKey = this.buildKey(key);
221
- const value = map[fullKey];
222
- if (value === undefined || value === null) {
223
- this.recordMiss();
224
- result[key] = null;
225
- }
226
- else {
227
- this.recordHit();
228
- try {
229
- if (typeof value === 'string') {
230
- result[key] = this.deserialize(value);
231
- }
232
- else if (Buffer.isBuffer(value)) {
233
- result[key] = this.deserialize(value.toString());
234
- }
235
- else {
236
- // Unknown, treat as miss
237
- this.recordMiss();
238
- result[key] = null;
239
- }
240
- }
241
- catch (parseErr) {
242
- reject(parseErr);
243
- }
244
- }
245
- });
246
- resolve(result);
247
- });
127
+ this.client.flush((err) => (err ? reject(err) : resolve()));
248
128
  });
249
129
  }
250
- catch (err) {
251
- throw new CacheError('Failed to get multiple keys from Memcache', 'MEMCACHE_GET_MULTIPLE_ERROR', 'memcache', err);
252
- }
253
- }
254
- /**
255
- * Set multiple values at once
256
- */
257
- async setMultiple(data, ttl) {
258
- try {
259
- await this.ensureConnected();
260
- const expiry = ttl ?? this.ttl;
261
- const promises = [];
262
- for (const [key, value] of Object.entries(data)) {
263
- const fullKey = this.buildKey(key);
264
- const serialized = this.serialize(value);
265
- promises.push(new Promise((resolve, reject) => {
266
- this.client.set(fullKey, serialized, expiry, (err) => {
267
- if (err)
268
- reject(err);
269
- else
270
- resolve();
271
- });
272
- }));
273
- }
274
- return Promise.all(promises).then(() => {
275
- this.stats.sets += Object.keys(data).length;
130
+ catch (error) {
131
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_OPERATION_TIMEOUT, {
132
+ adapter: 'memcache',
133
+ operation: 'clear',
134
+ cause: error instanceof Error ? error : undefined,
276
135
  });
277
136
  }
278
- catch (err) {
279
- throw new CacheError('Failed to set multiple keys in Memcache', 'MEMCACHE_SET_MULTIPLE_ERROR', 'memcache', err);
280
- }
281
- }
282
- /**
283
- * Delete multiple keys at once
284
- */
285
- async deleteMultiple(keys) {
286
- try {
287
- await this.ensureConnected();
288
- const fullKeys = keys.map((k) => this.buildKey(k));
289
- let deletedCount = 0;
290
- await Promise.all(fullKeys.map((key) => new Promise((resolve, reject) => {
291
- this.client.del(key, (err) => {
292
- if (err) {
293
- reject(err);
294
- }
295
- else {
296
- deletedCount++;
297
- resolve();
298
- }
299
- });
300
- })));
301
- this.stats.deletes += deletedCount;
302
- return deletedCount;
303
- }
304
- catch (err) {
305
- throw new CacheError('Failed to delete multiple keys from Memcache', 'MEMCACHE_DELETE_MULTIPLE_ERROR', 'memcache', err);
306
- }
307
137
  }
308
- /**
309
- * Increment a numeric value (not natively supported by Memcache in this library)
310
- */
311
- async increment(key, amount = 1) {
312
- try {
313
- const current = await this.get(key);
314
- const value = (typeof current === 'number' ? current : 0) + amount;
315
- await this.set(key, value);
316
- return value;
317
- }
318
- catch (err) {
319
- throw new CacheError(`Failed to increment key "${key}" in Memcache`, 'MEMCACHE_INCREMENT_ERROR', 'memcache', err);
320
- }
321
- }
322
- /**
323
- * Decrement a numeric value
324
- */
325
- async decrement(key, amount = 1) {
326
- try {
327
- const current = await this.get(key);
328
- const value = (typeof current === 'number' ? current : 0) - amount;
329
- await this.set(key, value);
330
- return value;
331
- }
332
- catch (err) {
333
- throw new CacheError(`Failed to decrement key "${key}" in Memcache`, 'MEMCACHE_DECREMENT_ERROR', 'memcache', err);
334
- }
335
- }
336
- /**
337
- * Check if Memcache is alive
338
- */
339
138
  async isAlive() {
340
139
  try {
341
140
  await this.ping();
342
- return {
343
- isAlive: true,
344
- adapter: 'memcache',
345
- timestamp: new Date(),
346
- };
141
+ return { isAlive: true, adapter: 'memcache', timestamp: new Date() };
347
142
  }
348
- catch (err) {
143
+ catch (error) {
349
144
  return {
350
145
  isAlive: false,
351
146
  adapter: 'memcache',
352
147
  timestamp: new Date(),
353
- error: err.message,
148
+ error: error instanceof Error ? error.message : 'Unknown error',
354
149
  };
355
150
  }
356
151
  }
357
- /**
358
- * Close Memcache connection
359
- */
360
152
  async close() {
361
153
  try {
362
- if (this.client && this.isConnected) {
363
- this.client.end();
364
- this.isConnected = false;
365
- this.client = null;
366
- }
154
+ this.client?.end();
155
+ this.client = null;
156
+ this.isConnected = false;
367
157
  }
368
- catch (err) {
369
- throw new CacheError('Failed to close Memcache connection', 'MEMCACHE_CLOSE_ERROR', 'memcache', err);
158
+ catch (error) {
159
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
160
+ adapter: 'memcache',
161
+ operation: 'close',
162
+ cause: error instanceof Error ? error : undefined,
163
+ });
370
164
  }
371
165
  }
372
166
  }
@@ -1,3 +1,4 @@
1
+ import { CACHE_ERROR_CODES } from 'src/errors/cacheErrorCodes';
1
2
  import { BaseCache } from '../../core/BaseCache';
2
3
  import { CacheError } from '../../errors';
3
4
  /**
@@ -46,8 +47,13 @@ export class MemoryCache extends BaseCache {
46
47
  this.recordHit();
47
48
  return entry.value;
48
49
  }
49
- catch (err) {
50
- throw new CacheError(`Failed to get key "${key}" from memory cache`, 'MEMORY_GET_ERROR', 'memory', err);
50
+ catch (error) {
51
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_KEY_NOT_FOUND, {
52
+ adapter: 'memory',
53
+ operation: 'get',
54
+ details: { key },
55
+ cause: error instanceof Error ? error : undefined,
56
+ });
51
57
  }
52
58
  }
53
59
  /**
@@ -70,8 +76,13 @@ export class MemoryCache extends BaseCache {
70
76
  this.store.set(fullKey, { value, expiresAt });
71
77
  this.recordSet();
72
78
  }
73
- catch (err) {
74
- throw new CacheError(`Failed to set key "${key}" in memory cache`, 'MEMORY_SET_ERROR', 'memory', err);
79
+ catch (error) {
80
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
81
+ adapter: 'memory',
82
+ operation: 'set',
83
+ details: { key },
84
+ cause: error instanceof Error ? error : undefined,
85
+ });
75
86
  }
76
87
  }
77
88
  /**
@@ -86,8 +97,13 @@ export class MemoryCache extends BaseCache {
86
97
  }
87
98
  return deleted;
88
99
  }
89
- catch (err) {
90
- throw new CacheError(`Failed to delete key "${key}" from memory cache`, 'MEMORY_DELETE_ERROR', 'memory', err);
100
+ catch (error) {
101
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
102
+ adapter: 'memory',
103
+ operation: 'delete',
104
+ details: { key },
105
+ cause: error instanceof Error ? error : undefined,
106
+ });
91
107
  }
92
108
  }
93
109
  /**
@@ -107,8 +123,13 @@ export class MemoryCache extends BaseCache {
107
123
  }
108
124
  return true;
109
125
  }
110
- catch (err) {
111
- throw new CacheError(`Failed to check existence of key "${key}" in memory cache`, 'MEMORY_EXISTS_ERROR', 'memory', err);
126
+ catch (error) {
127
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
128
+ adapter: 'memory',
129
+ operation: 'exists',
130
+ details: { key },
131
+ cause: error instanceof Error ? error : undefined,
132
+ });
112
133
  }
113
134
  }
114
135
  /**
@@ -129,8 +150,12 @@ export class MemoryCache extends BaseCache {
129
150
  this.store.clear();
130
151
  }
131
152
  }
132
- catch (err) {
133
- throw new CacheError('Failed to clear memory cache', 'MEMORY_CLEAR_ERROR', 'memory', err);
153
+ catch (error) {
154
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_OPERATION_TIMEOUT, {
155
+ adapter: 'memory',
156
+ operation: 'clear',
157
+ cause: error instanceof Error ? error : undefined,
158
+ });
134
159
  }
135
160
  }
136
161
  /**
@@ -161,8 +186,13 @@ export class MemoryCache extends BaseCache {
161
186
  }
162
187
  return result;
163
188
  }
164
- catch (err) {
165
- throw new CacheError('Failed to get multiple keys from memory cache', 'MEMORY_GET_MULTIPLE_ERROR', 'memory', err);
189
+ catch (error) {
190
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
191
+ adapter: 'memory',
192
+ operation: 'getMultiple',
193
+ details: { keys },
194
+ cause: error instanceof Error ? error : undefined,
195
+ });
166
196
  }
167
197
  }
168
198
  /**
@@ -178,8 +208,13 @@ export class MemoryCache extends BaseCache {
178
208
  }
179
209
  this.stats.sets += Object.keys(data).length;
180
210
  }
181
- catch (err) {
182
- throw new CacheError('Failed to set multiple keys in memory cache', 'MEMORY_SET_MULTIPLE_ERROR', 'memory', err);
211
+ catch (error) {
212
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
213
+ adapter: 'memory',
214
+ operation: 'setMultiple',
215
+ details: { keys: Object.keys(data) },
216
+ cause: error instanceof Error ? error : undefined,
217
+ });
183
218
  }
184
219
  }
185
220
  /**
@@ -197,8 +232,13 @@ export class MemoryCache extends BaseCache {
197
232
  this.stats.deletes += count;
198
233
  return count;
199
234
  }
200
- catch (err) {
201
- throw new CacheError('Failed to delete multiple keys from memory cache', 'MEMORY_DELETE_MULTIPLE_ERROR', 'memory', err);
235
+ catch (error) {
236
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
237
+ adapter: 'memory',
238
+ operation: 'deleteMultiple',
239
+ details: { keys },
240
+ cause: error instanceof Error ? error : undefined,
241
+ });
202
242
  }
203
243
  }
204
244
  /**
@@ -219,8 +259,13 @@ export class MemoryCache extends BaseCache {
219
259
  this.store.set(fullKey, { value: value, expiresAt });
220
260
  return value;
221
261
  }
222
- catch (err) {
223
- throw new CacheError(`Failed to increment key "${key}" in memory cache`, 'MEMORY_INCREMENT_ERROR', 'memory', err);
262
+ catch (error) {
263
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
264
+ adapter: 'memory',
265
+ operation: 'increment',
266
+ details: { key },
267
+ cause: error instanceof Error ? error : undefined,
268
+ });
224
269
  }
225
270
  }
226
271
  /**
@@ -241,8 +286,13 @@ export class MemoryCache extends BaseCache {
241
286
  this.store.set(fullKey, { value: value, expiresAt });
242
287
  return value;
243
288
  }
244
- catch (err) {
245
- throw new CacheError(`Failed to decrement key "${key}" in memory cache`, 'MEMORY_DECREMENT_ERROR', 'memory', err);
289
+ catch (error) {
290
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
291
+ adapter: 'memory',
292
+ operation: 'decrement',
293
+ details: { key },
294
+ cause: error instanceof Error ? error : undefined,
295
+ });
246
296
  }
247
297
  }
248
298
  /**
@@ -266,8 +316,12 @@ export class MemoryCache extends BaseCache {
266
316
  }
267
317
  this.store.clear();
268
318
  }
269
- catch (err) {
270
- throw new CacheError('Failed to close memory cache', 'MEMORY_CLOSE_ERROR', 'memory', err);
319
+ catch (error) {
320
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
321
+ adapter: 'memory',
322
+ operation: 'close',
323
+ cause: error instanceof Error ? error : undefined,
324
+ });
271
325
  }
272
326
  }
273
327
  }