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,71 +1,18 @@
1
1
  import { BaseCache } from '../../core/BaseCache';
2
2
  import type { HealthCheckResponse, MemcacheCacheConfig } from '../../types';
3
- /**
4
- * Memcache adapter
5
- */
6
3
  export declare class MemcacheCache<T = unknown> extends BaseCache<T> {
7
4
  private memcacheConfig;
8
5
  private client;
9
6
  private isConnected;
10
7
  constructor(memcacheConfig: MemcacheCacheConfig);
11
- /**
12
- * Connect to Memcache
13
- */
14
8
  connect(): Promise<void>;
15
- /**
16
- * Ensure client is connected
17
- */
18
9
  private ensureConnected;
19
- /**
20
- * Ping memcache
21
- */
22
10
  private ping;
23
- /**
24
- * Get a value from Memcache
25
- */
11
+ exists(key: string): Promise<boolean>;
26
12
  get(key: string): Promise<T | null>;
27
- /**
28
- * Set a value in Memcache
29
- */
30
13
  set(key: string, value: T, ttl?: number): Promise<void>;
31
- /**
32
- * Delete a key from Memcache
33
- */
34
14
  delete(key: string): Promise<boolean>;
35
- /**
36
- * Check if key exists
37
- */
38
- exists(key: string): Promise<boolean>;
39
- /**
40
- * Clear all keys (Memcache limitation: flushes entire cache)
41
- */
42
15
  clear(): Promise<void>;
43
- /**
44
- * Get multiple values at once
45
- */
46
- getMultiple(keys: string[]): Promise<Record<string, T | null>>;
47
- /**
48
- * Set multiple values at once
49
- */
50
- setMultiple(data: Record<string, T>, ttl?: number): Promise<void>;
51
- /**
52
- * Delete multiple keys at once
53
- */
54
- deleteMultiple(keys: string[]): Promise<number>;
55
- /**
56
- * Increment a numeric value (not natively supported by Memcache in this library)
57
- */
58
- increment(key: string, amount?: number): Promise<number>;
59
- /**
60
- * Decrement a numeric value
61
- */
62
- decrement(key: string, amount?: number): Promise<number>;
63
- /**
64
- * Check if Memcache is alive
65
- */
66
16
  isAlive(): Promise<HealthCheckResponse>;
67
- /**
68
- * Close Memcache connection
69
- */
70
17
  close(): Promise<void>;
71
18
  }
@@ -1,9 +1,12 @@
1
- /**
2
- * Custom error class for cache operations
3
- */
4
- export declare class CacheError extends Error {
5
- readonly code: string;
1
+ import { AppError } from '@naman_deep_singh/errors-utils';
2
+ import type { CacheErrorCode } from './cacheErrorCodes';
3
+ export declare class CacheError extends AppError {
6
4
  readonly adapter?: string;
7
- readonly originalError?: Error;
8
- constructor(message: string, code?: string, adapter?: string, originalError?: Error);
5
+ readonly operation?: string;
6
+ constructor(code: CacheErrorCode, options?: {
7
+ adapter?: string;
8
+ operation?: string;
9
+ details?: unknown;
10
+ cause?: Error;
11
+ });
9
12
  }
@@ -0,0 +1,22 @@
1
+ export declare const CACHE_ERROR_CODES: {
2
+ readonly CACHE_ERROR: "Temporary caching issue, please retry";
3
+ readonly CACHE_CONNECTION_FAILED: "Failed to connect to the cache server";
4
+ readonly CACHE_UNSUPPORTED_ADAPTER: "The specified cache adapter is not supported";
5
+ readonly CACHE_INVALID_CONFIG: "The provided cache configuration is invalid";
6
+ readonly CACHE_KEY_NOT_FOUND: "The requested cache key was not found";
7
+ readonly CACHE_OPERATION_TIMEOUT: "The cache operation timed out";
8
+ readonly CACHE_SERIALIZE_ERROR: "Failed to serialize cached data";
9
+ readonly CACHE_DESERIALIZE_ERROR: "Failed to deserialize cached data";
10
+ readonly SESSION_CREATE_ERROR: "Failed to create a new session";
11
+ readonly SESSION_GET_ERROR: "Failed to get session data";
12
+ readonly SESSION_UPDATE_ERROR: "Failed to update session data";
13
+ readonly SESSION_DELETE_ERROR: "Failed to delete session data";
14
+ readonly SESSION_EXISTS_ERROR: "Failed to check session existence";
15
+ readonly SESSION_CLEAR_ERROR: "Failed to clear sessions";
16
+ readonly SESSION_GET_MULTIPLE_ERROR: "Failed to get multiple sessions";
17
+ readonly SESSION_DELETE_MULTIPLE_ERROR: "Failed to delete multiple sessions";
18
+ readonly SESSION_EXTEND_ERROR: "Failed to extend session expiry";
19
+ readonly SESSION_GET_EXTEND_ERROR: "Failed to get and extend session data";
20
+ readonly SESSION_NOT_FOUND: "Session not found";
21
+ };
22
+ export type CacheErrorCode = (typeof CACHE_ERROR_CODES)[keyof typeof CACHE_ERROR_CODES];
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naman_deep_singh/cache",
3
- "version": "1.3.2",
3
+ "version": "1.4.0",
4
4
  "description": "Extensible caching layer supporting Redis, Memcache, and in-memory caches with automatic fallback, namespacing, session management, and Express middleware.",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -36,15 +36,17 @@
36
36
  "license": "ISC",
37
37
  "packageManager": "pnpm@10.20.0",
38
38
  "devDependencies": {
39
- "@types/memcached": "^2.2.7",
40
39
  "@types/express": "^5.0.5",
40
+ "@types/memcached": "^2.2.7",
41
41
  "@types/node": "^25.0.1",
42
42
  "express": "^5.1.0",
43
- "typescript": "^5.9.3",
44
- "rimraf": "^5.0.5"
43
+ "rimraf": "^5.0.5",
44
+ "typescript": "^5.9.3"
45
45
  },
46
46
  "dependencies": {
47
- "redis": "^4.6.10",
48
- "memcached": "^2.2.2"
47
+ "@naman_deep_singh/errors-utils": "^1.4.2",
48
+ "@naman_deep_singh/response-utils": "^2.1.4",
49
+ "memcached": "^2.2.2",
50
+ "redis": "^4.6.10"
49
51
  }
50
52
  }
@@ -1,11 +1,9 @@
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
  import type { HealthCheckResponse, MemcacheCacheConfig } from '../../types'
5
6
 
6
- /**
7
- * Memcache adapter
8
- */
9
7
  export class MemcacheCache<T = unknown> extends BaseCache<T> {
10
8
  private client: Memcached | null = null
11
9
  private isConnected = false
@@ -14,439 +12,168 @@ export class MemcacheCache<T = unknown> extends BaseCache<T> {
14
12
  super(memcacheConfig)
15
13
  }
16
14
 
17
- /**
18
- * Connect to Memcache
19
- */
20
15
  async connect(): Promise<void> {
21
16
  try {
22
17
  const servers = Array.isArray(this.memcacheConfig.servers)
23
18
  ? this.memcacheConfig.servers
24
19
  : [this.memcacheConfig.servers]
25
20
 
26
- const options: Memcached.options = {
21
+ this.client = new Memcached(servers, {
27
22
  retries: 2,
28
23
  retry: 30000,
29
24
  remove: true,
30
- failOverServers: [],
31
- maxValue: 1048576, // 1MB default
25
+ maxValue: 1048576,
32
26
  idle: 30000,
33
- }
34
-
35
- if (this.memcacheConfig.username) {
36
- ;(options as any).username = this.memcacheConfig.username
37
- }
38
-
39
- if (this.memcacheConfig.password) {
40
- ;(options as any).password = this.memcacheConfig.password
41
- }
27
+ })
42
28
 
43
- this.client = new Memcached(servers, options)
44
29
  this.isConnected = true
45
-
46
- // Test connection
47
30
  await this.ping()
48
- } catch (err) {
49
- throw new CacheError(
50
- 'Failed to connect to Memcache',
51
- 'MEMCACHE_CONNECTION_ERROR',
52
- 'memcache',
53
- err as Error,
54
- )
31
+ } catch (error) {
32
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_CONNECTION_FAILED, {
33
+ adapter: 'memcache',
34
+ operation: 'connect',
35
+ cause: error instanceof Error ? error : undefined,
36
+ })
55
37
  }
56
38
  }
57
39
 
58
- /**
59
- * Ensure client is connected
60
- */
61
40
  private async ensureConnected(): Promise<void> {
62
41
  if (!this.client) {
63
42
  await this.connect()
64
43
  }
65
44
  }
66
45
 
67
- /**
68
- * Ping memcache
69
- */
70
46
  private async ping(): Promise<void> {
71
47
  return new Promise((resolve, reject) => {
72
- if (!this.client) {
73
- reject(new Error('Memcache client not initialized'))
74
- return
75
- }
48
+ if (!this.client) return reject(new Error('Client not initialized'))
49
+ this.client.touch('__ping', 1, (err) => (err ? reject(err) : resolve()))
50
+ })
51
+ }
76
52
 
77
- this.client.touch('__ping', 1, (err: Error | null) => {
78
- if (err) reject(err)
79
- else resolve()
53
+ async exists(key: string): Promise<boolean> {
54
+ try {
55
+ const value = await this.get(key)
56
+ return value !== null
57
+ } catch (error) {
58
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
59
+ adapter: 'memcache',
60
+ operation: 'exists',
61
+ details: { key },
62
+ cause: error instanceof Error ? error : undefined,
80
63
  })
81
- })
64
+ }
82
65
  }
83
66
 
84
- /**
85
- * Get a value from Memcache
86
- */
87
67
  async get(key: string): Promise<T | null> {
88
68
  try {
89
69
  await this.ensureConnected()
90
70
  const fullKey = this.buildKey(key)
91
71
 
92
72
  return new Promise((resolve, reject) => {
93
- this.client!.get(fullKey, (err: Error | null, data: unknown) => {
94
- if (err) {
95
- reject(err)
96
- return
97
- }
73
+ this.client!.get(fullKey, (err, data) => {
74
+ if (err) return reject(err)
75
+ if (data == null) return resolve(null)
98
76
 
99
- if (data === undefined || data === null) {
100
- this.recordMiss()
101
- resolve(null)
102
- return
103
- }
104
-
105
- this.recordHit()
106
77
  try {
107
- if (typeof data === 'string') {
108
- resolve(this.deserialize(data))
109
- } else if (Buffer.isBuffer(data)) {
110
- resolve(this.deserialize(data.toString()))
111
- } else {
112
- // Unknown shape from memcached client - treat as miss
113
- this.recordMiss()
114
- resolve(null)
115
- }
116
- } catch (parseErr) {
117
- reject(parseErr)
78
+ resolve(
79
+ this.deserialize(Buffer.isBuffer(data) ? data.toString() : data),
80
+ )
81
+ } catch (e) {
82
+ reject(e)
118
83
  }
119
84
  })
120
85
  })
121
- } catch (err) {
122
- throw new CacheError(
123
- `Failed to get key "${key}" from Memcache`,
124
- 'MEMCACHE_GET_ERROR',
125
- 'memcache',
126
- err as Error,
127
- )
86
+ } catch (error) {
87
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_KEY_NOT_FOUND, {
88
+ adapter: 'memcache',
89
+ operation: 'get',
90
+ details: { key },
91
+ cause: error instanceof Error ? error : undefined,
92
+ })
128
93
  }
129
94
  }
130
95
 
131
- /**
132
- * Set a value in Memcache
133
- */
134
96
  async set(key: string, value: T, ttl?: number): Promise<void> {
135
97
  try {
136
98
  await this.ensureConnected()
137
99
  const fullKey = this.buildKey(key)
138
- const serialized = this.serialize(value)
139
- const expiry = ttl ?? this.ttl
140
100
 
141
101
  return new Promise((resolve, reject) => {
142
- this.client!.set(fullKey, serialized, expiry, (err: Error | null) => {
143
- if (err) {
144
- reject(err)
145
- } else {
146
- this.recordSet()
147
- resolve()
148
- }
149
- })
102
+ this.client!.set(
103
+ fullKey,
104
+ this.serialize(value),
105
+ ttl ?? this.ttl,
106
+ (err) => (err ? reject(err) : resolve()),
107
+ )
108
+ })
109
+ } catch (error) {
110
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
111
+ adapter: 'memcache',
112
+ operation: 'set',
113
+ details: { key },
114
+ cause: error instanceof Error ? error : undefined,
150
115
  })
151
- } catch (err) {
152
- throw new CacheError(
153
- `Failed to set key "${key}" in Memcache`,
154
- 'MEMCACHE_SET_ERROR',
155
- 'memcache',
156
- err as Error,
157
- )
158
116
  }
159
117
  }
160
118
 
161
- /**
162
- * Delete a key from Memcache
163
- */
164
119
  async delete(key: string): Promise<boolean> {
165
120
  try {
166
121
  await this.ensureConnected()
167
122
  const fullKey = this.buildKey(key)
168
123
 
169
124
  return new Promise((resolve, reject) => {
170
- this.client!.del(fullKey, (err: Error | null) => {
171
- if (err) {
172
- reject(err)
173
- } else {
174
- this.recordDelete()
175
- resolve(true)
176
- }
177
- })
125
+ this.client!.del(fullKey, (err) => (err ? reject(err) : resolve(true)))
178
126
  })
179
- } catch (err) {
180
- throw new CacheError(
181
- `Failed to delete key "${key}" from Memcache`,
182
- 'MEMCACHE_DELETE_ERROR',
183
- 'memcache',
184
- err as Error,
185
- )
186
- }
187
- }
188
-
189
- /**
190
- * Check if key exists
191
- */
192
- async exists(key: string): Promise<boolean> {
193
- try {
194
- const value = await this.get(key)
195
- return value !== null
196
- } catch (err) {
197
- throw new CacheError(
198
- `Failed to check existence of key "${key}" in Memcache`,
199
- 'MEMCACHE_EXISTS_ERROR',
200
- 'memcache',
201
- err as Error,
202
- )
203
- }
204
- }
205
-
206
- /**
207
- * Clear all keys (Memcache limitation: flushes entire cache)
208
- */
209
- async clear(): Promise<void> {
210
- try {
211
- await this.ensureConnected()
212
-
213
- return new Promise((resolve, reject) => {
214
- this.client!.flush((err: Error | null) => {
215
- if (err) {
216
- reject(err)
217
- } else {
218
- resolve()
219
- }
220
- })
127
+ } catch (error) {
128
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
129
+ adapter: 'memcache',
130
+ operation: 'delete',
131
+ details: { key },
132
+ cause: error instanceof Error ? error : undefined,
221
133
  })
222
- } catch (err) {
223
- throw new CacheError(
224
- 'Failed to clear Memcache',
225
- 'MEMCACHE_CLEAR_ERROR',
226
- 'memcache',
227
- err as Error,
228
- )
229
134
  }
230
135
  }
231
136
 
232
- /**
233
- * Get multiple values at once
234
- */
235
- async getMultiple(keys: string[]): Promise<Record<string, T | null>> {
137
+ async clear(): Promise<void> {
236
138
  try {
237
139
  await this.ensureConnected()
238
- const fullKeys = keys.map((k) => this.buildKey(k))
239
-
240
140
  return new Promise((resolve, reject) => {
241
- this.client!.getMulti(fullKeys, (err: Error | null, data: unknown) => {
242
- if (err) {
243
- reject(err)
244
- return
245
- }
246
-
247
- const result: Record<string, T | null> = {}
248
-
249
- if (!data || typeof data !== 'object') {
250
- // Treat as all misses
251
- for (const key of keys) {
252
- this.recordMiss()
253
- result[key] = null
254
- }
255
- resolve(result)
256
- return
257
- }
258
-
259
- const map = data as Record<string, unknown>
260
- keys.forEach((key) => {
261
- const fullKey = this.buildKey(key)
262
- const value = map[fullKey]
263
- if (value === undefined || value === null) {
264
- this.recordMiss()
265
- result[key] = null
266
- } else {
267
- this.recordHit()
268
- try {
269
- if (typeof value === 'string') {
270
- result[key] = this.deserialize(value)
271
- } else if (Buffer.isBuffer(value)) {
272
- result[key] = this.deserialize(value.toString())
273
- } else {
274
- // Unknown, treat as miss
275
- this.recordMiss()
276
- result[key] = null
277
- }
278
- } catch (parseErr) {
279
- reject(parseErr)
280
- }
281
- }
282
- })
283
-
284
- resolve(result)
285
- })
141
+ this.client!.flush((err) => (err ? reject(err) : resolve()))
286
142
  })
287
- } catch (err) {
288
- throw new CacheError(
289
- 'Failed to get multiple keys from Memcache',
290
- 'MEMCACHE_GET_MULTIPLE_ERROR',
291
- 'memcache',
292
- err as Error,
293
- )
294
- }
295
- }
296
-
297
- /**
298
- * Set multiple values at once
299
- */
300
- async setMultiple(data: Record<string, T>, ttl?: number): Promise<void> {
301
- try {
302
- await this.ensureConnected()
303
- const expiry = ttl ?? this.ttl
304
-
305
- const promises: Promise<void>[] = []
306
- for (const [key, value] of Object.entries(data)) {
307
- const fullKey = this.buildKey(key)
308
- const serialized = this.serialize(value)
309
- promises.push(
310
- new Promise((resolve, reject) => {
311
- this.client!.set(
312
- fullKey,
313
- serialized,
314
- expiry,
315
- (err: Error | null) => {
316
- if (err) reject(err)
317
- else resolve()
318
- },
319
- )
320
- }),
321
- )
322
- }
323
-
324
- return Promise.all(promises).then(() => {
325
- this.stats.sets += Object.keys(data).length
143
+ } catch (error) {
144
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_OPERATION_TIMEOUT, {
145
+ adapter: 'memcache',
146
+ operation: 'clear',
147
+ cause: error instanceof Error ? error : undefined,
326
148
  })
327
- } catch (err) {
328
- throw new CacheError(
329
- 'Failed to set multiple keys in Memcache',
330
- 'MEMCACHE_SET_MULTIPLE_ERROR',
331
- 'memcache',
332
- err as Error,
333
- )
334
- }
335
- }
336
-
337
- /**
338
- * Delete multiple keys at once
339
- */
340
- async deleteMultiple(keys: string[]): Promise<number> {
341
- try {
342
- await this.ensureConnected()
343
- const fullKeys = keys.map((k) => this.buildKey(k))
344
-
345
- let deletedCount = 0
346
- await Promise.all(
347
- fullKeys.map(
348
- (key) =>
349
- new Promise<void>((resolve, reject) => {
350
- this.client!.del(key, (err: Error | null) => {
351
- if (err) {
352
- reject(err)
353
- } else {
354
- deletedCount++
355
- resolve()
356
- }
357
- })
358
- }),
359
- ),
360
- )
361
-
362
- this.stats.deletes += deletedCount
363
- return deletedCount
364
- } catch (err) {
365
- throw new CacheError(
366
- 'Failed to delete multiple keys from Memcache',
367
- 'MEMCACHE_DELETE_MULTIPLE_ERROR',
368
- 'memcache',
369
- err as Error,
370
- )
371
- }
372
- }
373
-
374
- /**
375
- * Increment a numeric value (not natively supported by Memcache in this library)
376
- */
377
- async increment(key: string, amount = 1): Promise<number> {
378
- try {
379
- const current = await this.get(key)
380
- const value = (typeof current === 'number' ? current : 0) + amount
381
- await this.set(key, value as T)
382
- return value
383
- } catch (err) {
384
- throw new CacheError(
385
- `Failed to increment key "${key}" in Memcache`,
386
- 'MEMCACHE_INCREMENT_ERROR',
387
- 'memcache',
388
- err as Error,
389
- )
390
149
  }
391
150
  }
392
151
 
393
- /**
394
- * Decrement a numeric value
395
- */
396
- async decrement(key: string, amount = 1): Promise<number> {
397
- try {
398
- const current = await this.get(key)
399
- const value = (typeof current === 'number' ? current : 0) - amount
400
- await this.set(key, value as T)
401
- return value
402
- } catch (err) {
403
- throw new CacheError(
404
- `Failed to decrement key "${key}" in Memcache`,
405
- 'MEMCACHE_DECREMENT_ERROR',
406
- 'memcache',
407
- err as Error,
408
- )
409
- }
410
- }
411
-
412
- /**
413
- * Check if Memcache is alive
414
- */
415
152
  async isAlive(): Promise<HealthCheckResponse> {
416
153
  try {
417
154
  await this.ping()
418
- return {
419
- isAlive: true,
420
- adapter: 'memcache',
421
- timestamp: new Date(),
422
- }
423
- } catch (err) {
155
+ return { isAlive: true, adapter: 'memcache', timestamp: new Date() }
156
+ } catch (error) {
424
157
  return {
425
158
  isAlive: false,
426
159
  adapter: 'memcache',
427
160
  timestamp: new Date(),
428
- error: (err as Error).message,
161
+ error: error instanceof Error ? error.message : 'Unknown error',
429
162
  }
430
163
  }
431
164
  }
432
165
 
433
- /**
434
- * Close Memcache connection
435
- */
436
166
  async close(): Promise<void> {
437
167
  try {
438
- if (this.client && this.isConnected) {
439
- this.client.end()
440
- this.isConnected = false
441
- this.client = null
442
- }
443
- } catch (err) {
444
- throw new CacheError(
445
- 'Failed to close Memcache connection',
446
- 'MEMCACHE_CLOSE_ERROR',
447
- 'memcache',
448
- err as Error,
449
- )
168
+ this.client?.end()
169
+ this.client = null
170
+ this.isConnected = false
171
+ } catch (error) {
172
+ throw new CacheError(CACHE_ERROR_CODES.CACHE_ERROR, {
173
+ adapter: 'memcache',
174
+ operation: 'close',
175
+ cause: error instanceof Error ? error : undefined,
176
+ })
450
177
  }
451
178
  }
452
179
  }