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,138 +1,142 @@
1
- // String prototype extensions
1
+ import { defineExtension } from "src/utils"
2
+
3
+
4
+ let stringExtended = false
5
+
2
6
  export function extendString() {
3
- String.prototype.toCapitalize = function (): string {
7
+ if (stringExtended) return
8
+ stringExtended = true
9
+
10
+ defineExtension(String.prototype, 'toCapitalize', function (this: string): string {
4
11
  return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase()
5
- }
12
+ })
6
13
 
7
- String.prototype.toCamelCase = function (): string {
8
- return this.replace(/[-_\s]+(.)?/g, (_, char) =>
9
- char ? char.toUpperCase() : '',
10
- )
11
- }
14
+ defineExtension(String.prototype, 'toCamelCase', function (this: string): string {
15
+ return this.replace(/[-_\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))
16
+ })
12
17
 
13
- String.prototype.toKebabCase = function (): string {
18
+ defineExtension(String.prototype, 'toKebabCase', function (this: string): string {
14
19
  return this.replace(/([a-z])([A-Z])/g, '$1-$2')
15
20
  .replace(/[\s_]+/g, '-')
16
21
  .toLowerCase()
17
- }
22
+ })
18
23
 
19
- String.prototype.toSnakeCase = function (): string {
24
+ defineExtension(String.prototype, 'toSnakeCase', function (this: string): string {
20
25
  return this.replace(/([a-z])([A-Z])/g, '$1_$2')
21
26
  .replace(/[\s-]+/g, '_')
22
27
  .toLowerCase()
23
- }
28
+ })
24
29
 
25
- String.prototype.truncate = function (
26
- length: number,
27
- suffix = '...',
28
- ): string {
30
+ defineExtension(String.prototype, 'truncate', function (this: string, length: number, suffix = '...'): string {
29
31
  if (!Number.isInteger(length) || length < 0) {
30
- throw new TypeError(
31
- `truncate: length must be a non-negative integer, got ${length}`,
32
- )
32
+ throw new TypeError(`truncate: length must be a non-negative integer, got ${length}`)
33
33
  }
34
- return this.length > length
35
- ? this.substring(0, length) + suffix
36
- : this.toString()
37
- }
34
+ return this.length > length ? this.substring(0, length) + suffix : this.toString()
35
+ })
38
36
 
39
- String.prototype.isEmail = function (): boolean {
37
+ defineExtension(String.prototype, 'isEmail', function (this: string): boolean {
40
38
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
41
39
  return emailRegex.test(this.toString())
42
- }
40
+ })
43
41
 
44
- String.prototype.isUrl = function (): boolean {
42
+ defineExtension(String.prototype, 'isUrl', function (this: string): boolean {
45
43
  try {
46
44
  new URL(this.toString())
47
45
  return true
48
46
  } catch {
49
47
  return false
50
48
  }
51
- }
49
+ })
52
50
 
53
- String.prototype.removeWhitespace = function (): string {
51
+ defineExtension(String.prototype, 'removeWhitespace', function (this: string): string {
54
52
  return this.replace(/\s+/g, '')
55
- }
53
+ })
56
54
 
57
- String.prototype.reverse = function (): string {
55
+ defineExtension(String.prototype, 'reverse', function (this: string): string {
58
56
  return this.split('').reverse().join('')
59
- }
57
+ })
60
58
 
61
- String.prototype.isPalindrome = function (): boolean {
59
+ defineExtension(String.prototype, 'isPalindrome', function (this: string): boolean {
62
60
  const cleaned = this.toLowerCase().replace(/[^a-z0-9]/g, '')
63
61
  return cleaned === cleaned.split('').reverse().join('')
64
- }
62
+ })
65
63
 
66
- String.prototype.toTitleCase = function (): string {
67
- return this.replace(
68
- /\w\S*/g,
69
- (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(),
70
- )
71
- }
64
+ defineExtension(String.prototype, 'toTitleCase', function (this: string): string {
65
+ return this.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase())
66
+ })
72
67
 
73
- String.prototype.stripHtml = function (): string {
68
+ defineExtension(String.prototype, 'stripHtml', function (this: string): string {
74
69
  return this.replace(/<[^>]*>/g, '')
75
- }
70
+ })
76
71
 
77
- String.prototype.padStart = function (
78
- targetLength: number,
79
- padString = ' ',
80
- ): string {
72
+ defineExtension(String.prototype, 'padStart', function (this: string, targetLength: number, padString = ' '): string {
81
73
  if (!Number.isInteger(targetLength) || targetLength < 0) {
82
- throw new TypeError(
83
- `padStart: targetLength must be a non-negative integer, got ${targetLength}`,
84
- )
74
+ throw new TypeError(`padStart: targetLength must be a non-negative integer, got ${targetLength}`)
85
75
  }
86
76
  if (typeof padString !== 'string') {
87
- throw new TypeError(
88
- `padStart: padString must be a string, got ${typeof padString}`,
89
- )
77
+ throw new TypeError(`padStart: padString must be a string, got ${typeof padString}`)
90
78
  }
91
79
  if (padString.length === 0) {
92
80
  throw new TypeError('padStart: padString cannot be empty')
93
81
  }
94
82
  return this.toString().padStart(targetLength, padString)
95
- }
83
+ })
96
84
 
97
- String.prototype.padEnd = function (
98
- targetLength: number,
99
- padString = ' ',
100
- ): string {
85
+ defineExtension(String.prototype, 'padEnd', function (this: string, targetLength: number, padString = ' '): string {
101
86
  if (!Number.isInteger(targetLength) || targetLength < 0) {
102
- throw new TypeError(
103
- `padEnd: targetLength must be a non-negative integer, got ${targetLength}`,
104
- )
87
+ throw new TypeError(`padEnd: targetLength must be a non-negative integer, got ${targetLength}`)
105
88
  }
106
89
  if (typeof padString !== 'string') {
107
- throw new TypeError(
108
- `padEnd: padString must be a string, got ${typeof padString}`,
109
- )
90
+ throw new TypeError(`padEnd: padString must be a string, got ${typeof padString}`)
110
91
  }
111
92
  if (padString.length === 0) {
112
93
  throw new TypeError('padEnd: padString cannot be empty')
113
94
  }
114
95
  return this.toString().padEnd(targetLength, padString)
115
- }
96
+ })
116
97
 
117
- String.prototype.count = function (substring: string): number {
98
+ defineExtension(String.prototype, 'count', function (this: string, substring: string): number {
118
99
  if (typeof substring !== 'string') {
119
- throw new TypeError(
120
- `count: substring must be a string, got ${typeof substring}`,
121
- )
100
+ throw new TypeError(`count: substring must be a string, got ${typeof substring}`)
122
101
  }
123
102
  if (substring === '') {
124
103
  throw new TypeError('count: substring cannot be empty')
125
104
  }
126
- return (this.match(new RegExp(substring, 'g')) || []).length
127
- }
105
+ const escaped = substring.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
106
+ return (this.match(new RegExp(escaped, 'g')) || []).length
107
+ })
128
108
 
129
- String.prototype.words = function (): string[] {
130
- return this.trim()
131
- .split(/\s+/)
132
- .filter((word) => word.length > 0)
133
- }
109
+ defineExtension(String.prototype, 'words', function (this: string): string[] {
110
+ return this.trim().split(/\s+/).filter((word) => word.length > 0)
111
+ })
134
112
 
135
- String.prototype.lines = function (): string[] {
113
+ defineExtension(String.prototype, 'lines', function (this: string): string[] {
136
114
  return this.split(/\r?\n/)
137
- }
115
+ })
116
+
117
+ defineExtension(String.prototype, 'capitalizeWords', function (this: string): string {
118
+ return this.toString().replace(/\b\w/g, (char) => char.toUpperCase());
119
+ });
120
+
121
+ defineExtension(String.prototype, 'reverseWords', function (this: string): string {
122
+ return this.toString().split(/\s+/).reverse().join(' ');
123
+ });
124
+
125
+ defineExtension(String.prototype, 'truncateWords', function (this: string, count: number, suffix = '...'): string {
126
+ if (!Number.isInteger(count) || count < 0) {
127
+ throw new TypeError(`truncateWords: count must be a non-negative integer, got ${count}`);
128
+ }
129
+ const words = this.toString().split(/\s+/);
130
+ if (words.length <= count) return this.toString();
131
+ return words.slice(0, count).join(' ') + suffix;
132
+ });
133
+
134
+ defineExtension(String.prototype, 'slugify', function (this: string): string {
135
+ return this.toString()
136
+ .toLowerCase()
137
+ .replace(/[^\w\s-]/g, '')
138
+ .trim()
139
+ .replace(/[\s_-]+/g, '-');
140
+ });
141
+
138
142
  }
@@ -28,6 +28,7 @@ declare global {
28
28
  sum(): number
29
29
  average(): number
30
30
  compact(): T[]
31
+ compactTruthy(): T[]
31
32
  pluck<K extends keyof T>(key: K): T[K][]
32
33
  findLast(predicate: (item: T) => boolean): T | undefined
33
34
  partition(predicate: (item: T) => boolean): [T[], T[]]
@@ -77,4 +78,4 @@ declare global {
77
78
  }
78
79
  }
79
80
 
80
- export {}
81
+ export { }
@@ -0,0 +1,14 @@
1
+ export function defineExtension<T extends object>(
2
+ prototype: T,
3
+ name: string,
4
+ fn: Function,
5
+ ) {
6
+ if (!Object.prototype.hasOwnProperty.call(prototype, name)) {
7
+ Object.defineProperty(prototype, name, {
8
+ value: fn,
9
+ writable: false,
10
+ configurable: false,
11
+ enumerable: false,
12
+ })
13
+ }
14
+ }
@@ -1,3 +1,4 @@
1
1
  // Re-export all utilities
2
2
  export * from './config'
3
3
  export * from './helpers'
4
+ export * from './defineExtension'
@@ -1,24 +1,25 @@
1
1
  # @naman_deep_singh/response-utils
2
2
 
3
- **Version:** 2.1.2
3
+ **Version:** 2.1.4
4
4
 
5
- A flexible, framework-agnostic **TypeScript** response utility library for building consistent and configurable API responses.
6
- Supports **Express.js**, pagination, typed payloads, and expandable response adapters.
5
+ A flexible, framework-agnostic **TypeScript response utility library** for building consistent, typed, and configurable API responses.
6
+
7
+ Designed with a clean **core + adapter** architecture.
8
+ First-class support for **Express.js**, pagination, and standardized HTTP status handling.
7
9
 
8
10
  ---
9
11
 
10
12
  ## 🚀 Features
11
13
 
12
- | Feature | Status |
13
- | ---------------------------------------------- | :----: |
14
- | Fully Typesafe Response Envelopes | ✅ |
15
- | Framework-Agnostic Core | ✅ |
16
- | Express.js Adapter + Middleware | ✅ |
17
- | Automatic HTTP Status Handling | ✅ |
18
- | Pagination Responses | ✅ |
19
- | Centralized Response Config | ✅ |
20
- | Status Code Constants | ✅ |
21
- | Legacy API (`success`, `error`, etc.) | ⚠️ Deprecated |
14
+ | Feature | Status |
15
+ |---------------------------------------------|:------:|
16
+ | Fully typesafe response envelopes | ✅ |
17
+ | Framework-agnostic core | ✅ |
18
+ | Express.js responder adapter | ✅ |
19
+ | Express middleware injection | ✅ |
20
+ | Pagination helpers | ✅ |
21
+ | Centralized responder configuration | ✅ |
22
+ | HTTP status constants | ✅ |
22
23
 
23
24
  ---
24
25
 
@@ -26,221 +27,178 @@ Supports **Express.js**, pagination, typed payloads, and expandable response ada
26
27
 
27
28
  ```sh
28
29
  npm install @naman_deep_singh/response-utils
29
- ```
30
-
31
- ## 🧠 Architecture Overview
32
-
33
- ```
30
+ 🧠 Architecture Overview
34
31
  response-utils
35
- ├─ core/ BaseResponder + config + factory (framework-independent)
32
+ ├─ core/ Framework-agnostic responders
33
+ │ ├─ BaseResponder
34
+ │ ├─ config
35
+ │ ├─ factory
36
+ │ └─ types
37
+
36
38
  ├─ adapters/
37
- └─ express/ → ExpressResponder + middleware
38
- ├─ constants/ → HTTP status constants
39
- └─ legacy/ → success(), error(), etc. (optional migration layer)
40
- ```
41
-
42
- ## 📄 Response Format (Default Envelope)
43
-
44
- ```typescript
39
+ └─ express/ → ExpressResponder
40
+
41
+ ├─ middleware/
42
+ │ └─ express/ → responderMiddleware
43
+
44
+ ├─ constants/ → HTTP status constants
45
+
46
+ 📄 Response Envelope (Default Shape)
45
47
  interface ResponseEnvelope<P = unknown, M = Record<string, unknown>> {
46
- success: boolean;
47
- message?: string;
48
- data?: P;
49
- error: { message: string; code?: string; details?: unknown } | null;
50
- meta: M | null;
48
+ success: boolean
49
+ message?: string
50
+ data?: P
51
+ error: {
52
+ message: string
53
+ code?: string
54
+ details?: unknown
55
+ } | null
56
+ meta: M | null
51
57
  }
52
- ```
53
-
54
- ## 🛠️ Usage Examples
58
+ 🛠️ Usage
59
+ ✔ Framework-Agnostic (No Express)
60
+ import { BaseResponder } from '@naman_deep_singh/response-utils'
55
61
 
56
- ### Framework-Agnostic (no Express)
57
- ```typescript
58
- import { BaseResponder } from '@naman_deep_singh/response-utils';
62
+ const responder = new BaseResponder()
59
63
 
60
- const r = new BaseResponder();
61
- const result = r.ok({ user: "John" }, "Loaded");
62
- console.log(result);
63
- ```
64
+ const result = responder.ok({ user: 'John' }, 'Loaded')
64
65
 
65
- ### 🌐 Express Integration
66
+ // When no sender is attached, returns:
67
+ // { status: 200, body: ResponseEnvelope }
68
+ console.log(result)
69
+ 🌐 Express Integration
70
+ 1️⃣ Register Middleware
71
+ import express from 'express'
72
+ import { responderMiddleware } from '@naman_deep_singh/response-utils'
66
73
 
67
- #### 1️⃣ Add Middleware
74
+ const app = express()
68
75
 
69
- ```typescript
70
- import express from 'express';
71
- import { responderMiddleware } from '@naman_deep_singh/response-utils';
76
+ app.use(responderMiddleware())
77
+ This injects a res.responder() factory into every request.
72
78
 
73
- const app = express();
74
- app.use(responderMiddleware());
75
- ```
76
-
77
- #### 2️⃣ Controller Usage
78
-
79
- ```typescript
79
+ 2️⃣ Controller Usage
80
80
  app.get('/user', (req, res) => {
81
- const responder = (res as any).responder();
82
- return responder.okAndSend({ id: 1, name: "John Doe" }, "User found");
83
- });
84
- ```
81
+ const responder = res.responder<{ id: number; name: string }>()
82
+
83
+ responder.okAndSend(
84
+ { id: 1, name: 'John Doe' },
85
+ 'User found'
86
+ )
87
+ })
88
+ ✅ okAndSend() automatically:
85
89
 
86
- `okAndSend()` automatically applies HTTP status + JSON response.
90
+ sets HTTP status
87
91
 
88
- #### ⚙️ Config Options
92
+ sends JSON response
89
93
 
90
- ```typescript
91
- app.use(responderMiddleware({
92
- timestamp: true,
93
- extra: { service: "user-service" }
94
- }));
95
- ```
94
+ returns void for clean controller ergonomics
96
95
 
97
- Example output:
96
+ ⚙️ Middleware Configuration
97
+ app.use(
98
+ responderMiddleware({
99
+ timestamp: true,
100
+ extra: { service: 'user-service' },
101
+ })
102
+ )
103
+ Example response:
98
104
 
99
- ```json
100
105
  {
101
106
  "success": true,
102
107
  "data": { ... },
103
108
  "error": null,
104
109
  "meta": {
105
- "timestamp": "2025-11-22T12:00:00Z",
106
- "service": "user-service"
107
- }
110
+ "timestamp": "2025-11-22T12:00:00Z"
111
+ },
112
+ "service": "user-service"
108
113
  }
109
- ```
110
-
111
- ### 🔢 Pagination Support
112
-
113
- ```typescript
114
+ 🔢 Pagination Support
114
115
  responder.paginateAndSend(
115
116
  [{ id: 1 }],
116
- 1, // page
117
- 10, // limit
118
- 42, // total
119
- "Loaded"
120
- );
121
- ```
122
-
123
- ## 📚 Supported Methods
124
-
125
- ### Success Methods
126
- | Method | Status |
127
- |--------|--------|
128
- | `ok()` | 200 |
129
- | `created()` | 201 |
130
- | `noContent()` | 204 |
131
- | `paginated()` | 200 |
132
-
133
- ### Error Methods
134
- | Method | Status |
135
- |--------|--------|
136
- | `badRequest()` | 400 |
137
- | `unauthorized()` | 401 |
138
- | `forbidden()` | 403 |
139
- | `notFound()` | 404 |
140
- | `conflict()` | 409 |
141
- | `unprocessableEntity()` | 422 |
142
- | `tooManyRequests()` | 429 |
143
- | `serverError()` | 500 |
144
-
145
- **Each has an Express `*AndSend()` variant**
146
- Example → `notFoundAndSend()`, `createdAndSend()`
147
-
148
- ### 🧩 Status Constants
149
-
150
- ```typescript
151
- import { HTTP_STATUS } from '@naman_deep_singh/response-utils';
152
-
153
- console.log(HTTP_STATUS.CLIENT_ERROR.NOT_FOUND); // 404
154
- console.log(HTTP_STATUS.SUCCESS.CREATED); // 201
155
- ```
156
-
157
- **Categories:**
158
- - `SUCCESS`
159
- - `REDIRECTION`
160
- - `CLIENT_ERROR`
161
- - `SERVER_ERROR`
162
-
163
- **All fully readonly + literal typed** ✔
164
-
165
-
166
- ### 🧩 Status Constants
167
-
168
- ```typescript
169
- import { HTTP_STATUS } from '@naman_deep_singh/response-utils';
170
-
171
- console.log(HTTP_STATUS.CLIENT_ERROR.NOT_FOUND); // 404
172
- console.log(HTTP_STATUS.SUCCESS.CREATED); // 201
173
- ```
174
-
175
- **Categories available:**
176
-
177
- - `SUCCESS`
178
- - `REDIRECTION`
179
- - `CLIENT_ERROR`
180
- - `SERVER_ERROR`
181
-
182
- All values are:
183
-
184
- ✔ Object.freeze() protected
185
- ✔ Strongly typed using as const
186
- ✔ Auto-complete supported in IDEs
187
- ✔ Works with any HTTP framework
188
-
189
- ### 🕘 Legacy API (Migration-friendly)
190
-
191
- ```typescript
192
- import { success, error } from '@naman_deep_singh/response-utils/legacy';
193
-
194
- // Success response
195
- const result = success({ id: 1, name: 'John' }, 'User found', 200);
196
- // Returns: { success: true, message: 'User found', data: {...}, statusCode: 200 }
197
-
198
- // Error response
199
- const errorResult = error('User not found', 404, 'NOT_FOUND');
200
- // Returns: { success: false, message: 'User not found', error: 'NOT_FOUND', statusCode: 404 }
201
-
202
- // With Express response object
203
- success({ users: [] }, 'Success', 200, res); // Automatically sends response
204
- error('Server error', 500, undefined, res); // Automatically sends error
205
- ```
206
-
207
- **Legacy Functions:**
208
- - `success(data, message?, status?, res?)` - Create success response
209
- - `error(message, status?, error?, res?)` - Create error response
210
-
211
- ⚠ **Recommended only for old codebases.** Use BaseResponder/ExpressResponder for new projects.
212
-
213
- ## 🔜 Roadmap
214
-
215
- | Feature | Status |
216
- |---------|--------|
217
- | Fastify Adapter | Planned |
218
- | Hono Adapter | Planned |
219
- | Custom Error Classes | Planned |
220
-
221
- ## Integration with Other Packages
222
-
223
- ### With @naman_deep_singh/server-utils
117
+ 1, // page
118
+ 10, // limit
119
+ 42, // total
120
+ 'Loaded'
121
+ )
122
+ Pagination metadata is automatically calculated.
123
+
124
+ 📚 Available Methods
125
+ ✅ Success Responses
126
+ Method HTTP
127
+ ok() 200
128
+ created() 201
129
+ noContent() 204
130
+ paginate() 200
131
+ Each method has an Express variant:
132
+
133
+ okAndSend()
134
+
135
+ createdAndSend()
136
+
137
+ paginateAndSend()
138
+
139
+ Error Responses
140
+ Method HTTP
141
+ badRequest() 400
142
+ unauthorized() 401
143
+ forbidden() 403
144
+ notFound() 404
145
+ conflict() 409
146
+ unprocessableEntity() 422
147
+ tooManyRequests() 429
148
+ serverError() 500
149
+ Each also has a *AndSend() variant.
150
+
151
+ 🧩 HTTP Status Constants
152
+ import { HTTP_STATUS } from '@naman_deep_singh/response-utils'
153
+
154
+ HTTP_STATUS.SUCCESS.OK // 200
155
+ HTTP_STATUS.CLIENT_ERROR.NOT_FOUND // 404
156
+ HTTP_STATUS.SERVER_ERROR.INTERNAL_SERVER_ERROR // 500
157
+ Categories
158
+ SUCCESS
159
+
160
+ REDIRECTION
161
+
162
+ CLIENT_ERROR
163
+
164
+ SERVER_ERROR
165
+
166
+ ✔ Object.freeze() protected
167
+ Fully literal-typed (as const)
168
+ ✔ IDE autocomplete friendly
169
+
170
+ 🧩 TypeScript: Express Response Augmentation (Recommended)
171
+ For full type safety, add this once in your project:
172
+
173
+ import type { ExpressResponder } from '@naman_deep_singh/response-utils'
174
+
175
+ declare global {
176
+ namespace Express {
177
+ interface Response {
178
+ responder: <P = unknown>() => ExpressResponder<P>
179
+ }
180
+ }
181
+ }
224
182
 
225
- ```typescript
226
- import { createServer } from '@naman_deep_singh/server-utils';
227
- import { responderMiddleware } from '@naman_deep_singh/response-utils';
183
+ ⚠️ Do not use for new projects.
228
184
 
229
- const server = createServer('My API', '1.0.0');
230
- server.app.use(responderMiddleware());
185
+ 🔗 Integration with Other Packages
186
+ With @naman_deep_singh/server-utils
187
+ import { responderMiddleware } from '@naman_deep_singh/response-utils'
231
188
 
232
- // All server-utils middleware now uses consistent response format
233
- ```
189
+ server.app.use(responderMiddleware())
190
+ With @naman_deep_singh/errors-utils
191
+ import { expressErrorHandler } from '@naman_deep_singh/errors-utils'
234
192
 
235
- ### With @naman_deep_singh/errors-utils
193
+ server.app.use(expressErrorHandler)
194
+ Provides consistent error responses across services.
236
195
 
237
- ```typescript
238
- import { expressErrorHandler } from '@naman_deep_singh/errors-utils';
196
+ 🔜 Roadmap
197
+ Fastify adapter
239
198
 
240
- // Advanced error handling with consistent responses
241
- server.app.use(expressErrorHandler);
242
- ```
199
+ Hono adapter
243
200
 
244
- ## 📄 License
201
+ Configurable envelope key mapping
245
202
 
203
+ 📄 License
246
204
  MIT © Naman Deep Singh