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,3 +1,4 @@
1
+ import { getPackageVersion } from "./version";
1
2
  const defaultConfig = {
2
3
  enableCaching: false,
3
4
  maxCacheSize: 100,
@@ -54,6 +55,10 @@ function getOrCreateCache() {
54
55
  }
55
56
  return cache;
56
57
  }
58
+ export function makeInternalCacheKey(domain, key) {
59
+ const INTERNAL_CACHE_PREFIX = '@js-ext' + getPackageVersion();
60
+ return `${INTERNAL_CACHE_PREFIX}:${domain}:${key}`;
61
+ }
57
62
  export function withCache(key, fn) {
58
63
  if (!config.enableCaching) {
59
64
  return fn();
@@ -0,0 +1 @@
1
+ export declare const getPackageVersion: () => string;
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'node:module';
2
+ const requireFn = createRequire("../../package.json");
3
+ export const getPackageVersion = () => {
4
+ return requireFn('../package.json').version;
5
+ };
@@ -21,6 +21,7 @@ export declare function initializeExtensions(options?: ExtensionOptions): void;
21
21
  */
22
22
  export { extendAll };
23
23
  /**
24
+ * Selective prototype extension helpers
24
25
  * Initialize only specific extensions
25
26
  */
26
27
  export declare const extend: {
@@ -28,6 +28,7 @@ export function initializeExtensions(options = {}) {
28
28
  */
29
29
  export { extendAll };
30
30
  /**
31
+ * Selective prototype extension helpers
31
32
  * Initialize only specific extensions
32
33
  */
33
34
  export const extend = {
@@ -1,87 +1,68 @@
1
- // Number prototype extensions
2
- import { withCache } from '../core/performance';
1
+ import { defineExtension } from 'src/utils';
2
+ import { makeInternalCacheKey, withCache } from '../core/performance';
3
+ let numberExtended = false;
3
4
  export function extendNumber() {
4
- Number.prototype.toPercent = function (decimals = 2) {
5
- return `${(this.valueOf() * 100).toFixed(decimals)}%`;
6
- };
7
- Number.prototype.toCurrency = function (currency = 'USD', locale = 'en-US') {
8
- return new Intl.NumberFormat(locale, {
9
- style: 'currency',
10
- currency,
11
- }).format(this.valueOf());
12
- };
13
- Number.prototype.clamp = function (min, max) {
14
- if (min > max) {
5
+ if (numberExtended)
6
+ return;
7
+ numberExtended = true;
8
+ defineExtension(Number.prototype, 'toPercent', function (decimals = 2) {
9
+ return `${(this * 100).toFixed(decimals)}%`;
10
+ });
11
+ defineExtension(Number.prototype, 'toCurrency', function (currency = 'USD', locale = 'en-US') {
12
+ return new Intl.NumberFormat(locale, { style: 'currency', currency }).format(this);
13
+ });
14
+ defineExtension(Number.prototype, 'clamp', function (min, max) {
15
+ if (min > max)
15
16
  throw new RangeError(`clamp: min (${min}) cannot be greater than max (${max})`);
16
- }
17
- return Math.min(Math.max(this.valueOf(), min), max);
18
- };
19
- Number.prototype.isEven = function () {
20
- return this.valueOf() % 2 === 0;
21
- };
22
- Number.prototype.isOdd = function () {
23
- return this.valueOf() % 2 !== 0;
24
- };
25
- Number.prototype.isPrime = function () {
26
- const num = this.valueOf();
27
- return withCache(`prime_${num}`, () => {
17
+ return Math.min(Math.max(this, min), max);
18
+ });
19
+ defineExtension(Number.prototype, 'isEven', function () {
20
+ return this % 2 === 0;
21
+ });
22
+ defineExtension(Number.prototype, 'isOdd', function () {
23
+ return this % 2 !== 0;
24
+ });
25
+ defineExtension(Number.prototype, 'isPrime', function () {
26
+ const num = this;
27
+ return withCache(makeInternalCacheKey('prime', num), () => {
28
28
  if (num < 2)
29
29
  return false;
30
- for (let i = 2; i <= Math.sqrt(num); i++) {
30
+ for (let i = 2; i <= Math.sqrt(num); i++)
31
31
  if (num % i === 0)
32
32
  return false;
33
- }
34
33
  return true;
35
34
  });
36
- };
37
- Number.prototype.factorial = function () {
38
- const num = Math.floor(this.valueOf());
39
- return withCache(`factorial_${num}`, () => {
35
+ });
36
+ defineExtension(Number.prototype, 'factorial', function () {
37
+ const num = Math.floor(this);
38
+ return withCache(makeInternalCacheKey('factorial', num), () => {
40
39
  if (num < 0)
41
- return Number.NaN;
42
- if (num === 0 || num === 1)
40
+ return NaN;
41
+ if (num <= 1)
43
42
  return 1;
44
43
  let result = 1;
45
- for (let i = 2; i <= num; i++) {
44
+ for (let i = 2; i <= num; i++)
46
45
  result *= i;
47
- }
48
46
  return result;
49
47
  });
50
- };
51
- Number.prototype.toOrdinal = function () {
52
- const num = Math.floor(this.valueOf());
48
+ });
49
+ defineExtension(Number.prototype, 'toOrdinal', function () {
50
+ const num = Math.floor(this);
53
51
  const suffix = ['th', 'st', 'nd', 'rd'];
54
52
  const v = num % 100;
55
53
  return num + (suffix[(v - 20) % 10] || suffix[v] || suffix[0]);
56
- };
57
- Number.prototype.toRoman = function () {
58
- const num = Math.floor(this.valueOf());
59
- // Better validation for roman numerals
60
- if (num <= 0) {
54
+ });
55
+ defineExtension(Number.prototype, 'toRoman', function () {
56
+ const num = Math.floor(this);
57
+ if (num <= 0)
61
58
  throw new RangeError('toRoman: number must be positive');
62
- }
63
- if (num >= 4000) {
59
+ if (num >= 4000)
64
60
  throw new RangeError('toRoman: number must be less than 4000');
65
- }
66
- return withCache(`roman_${num}`, () => {
61
+ return withCache(makeInternalCacheKey('roman', num), () => {
67
62
  const values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
68
- const symbols = [
69
- 'M',
70
- 'CM',
71
- 'D',
72
- 'CD',
73
- 'C',
74
- 'XC',
75
- 'L',
76
- 'XL',
77
- 'X',
78
- 'IX',
79
- 'V',
80
- 'IV',
81
- 'I',
82
- ];
83
- let result = '';
63
+ const symbols = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
84
64
  let n = num;
65
+ let result = '';
85
66
  for (let i = 0; i < values.length; i++) {
86
67
  while (n >= values[i]) {
87
68
  result += symbols[i];
@@ -90,45 +71,52 @@ export function extendNumber() {
90
71
  }
91
72
  return result;
92
73
  });
93
- };
94
- Number.prototype.inRange = function (min, max) {
95
- const num = this.valueOf();
96
- return num >= min && num <= max;
97
- };
98
- Number.prototype.round = function (decimals = 0) {
99
- if (!Number.isInteger(decimals) || decimals < 0) {
100
- throw new TypeError(`round: decimals must be a non-negative integer, got ${decimals}`);
101
- }
74
+ });
75
+ defineExtension(Number.prototype, 'inRange', function (min, max) {
76
+ return this >= min && this <= max;
77
+ });
78
+ defineExtension(Number.prototype, 'round', function (decimals = 0) {
79
+ if (!Number.isInteger(decimals) || decimals < 0)
80
+ throw new TypeError('round: decimals must be non-negative integer');
102
81
  const factor = Math.pow(10, decimals);
103
- return Math.round(this.valueOf() * factor) / factor;
104
- };
105
- Number.prototype.ceil = function (decimals = 0) {
106
- if (!Number.isInteger(decimals) || decimals < 0) {
107
- throw new TypeError(`ceil: decimals must be a non-negative integer, got ${decimals}`);
108
- }
82
+ return Math.round(this * factor) / factor;
83
+ });
84
+ defineExtension(Number.prototype, 'ceil', function (decimals = 0) {
85
+ if (!Number.isInteger(decimals) || decimals < 0)
86
+ throw new TypeError('ceil: decimals must be non-negative integer');
87
+ const factor = Math.pow(10, decimals);
88
+ return Math.ceil(this * factor) / factor;
89
+ });
90
+ defineExtension(Number.prototype, 'floor', function (decimals = 0) {
91
+ if (!Number.isInteger(decimals) || decimals < 0)
92
+ throw new TypeError('floor: decimals must be non-negative integer');
109
93
  const factor = Math.pow(10, decimals);
110
- return Math.ceil(this.valueOf() * factor) / factor;
111
- };
112
- Number.prototype.floor = function (decimals = 0) {
94
+ return Math.floor(this * factor) / factor;
95
+ });
96
+ defineExtension(Number.prototype, 'abs', function () {
97
+ return Math.abs(this);
98
+ });
99
+ defineExtension(Number.prototype, 'sign', function () {
100
+ return Math.sign(this);
101
+ });
102
+ defineExtension(Number.prototype, 'times', function (callback) {
103
+ if (typeof callback !== 'function')
104
+ throw new TypeError('times: callback must be a function');
105
+ for (let i = 0; i < Math.floor(this); i++)
106
+ callback(i);
107
+ });
108
+ defineExtension(Number.prototype, 'toFixedNumber', function (decimals = 0) {
113
109
  if (!Number.isInteger(decimals) || decimals < 0) {
114
- throw new TypeError(`floor: decimals must be a non-negative integer, got ${decimals}`);
110
+ throw new TypeError(`toFixedNumber: decimals must be a non-negative integer, got ${decimals}`);
115
111
  }
116
112
  const factor = Math.pow(10, decimals);
117
- return Math.floor(this.valueOf() * factor) / factor;
118
- };
119
- Number.prototype.abs = function () {
120
- return Math.abs(this.valueOf());
121
- };
122
- Number.prototype.sign = function () {
123
- return Math.sign(this.valueOf());
124
- };
125
- Number.prototype.times = function (callback) {
126
- if (typeof callback !== 'function') {
127
- throw new TypeError(`times: callback must be a function, got ${typeof callback}`);
128
- }
129
- const num = Math.floor(this.valueOf());
130
- for (let i = 0; i < num; i++) {
131
- callback(i);
113
+ return Math.round(this.valueOf() * factor) / factor;
114
+ });
115
+ defineExtension(Number.prototype, 'randomUpTo', function () {
116
+ const max = this.valueOf();
117
+ if (!Number.isFinite(max)) {
118
+ throw new TypeError(`randomUpTo: number must be finite, got ${max}`);
132
119
  }
133
- };
120
+ return Math.random() * max;
121
+ });
134
122
  }
@@ -1,69 +1,40 @@
1
- // Object prototype extensions
1
+ import { defineExtension } from "src/utils";
2
+ let objectExtended = false;
2
3
  export function extendObject() {
3
- Object.prototype.isEmpty = function () {
4
+ if (objectExtended)
5
+ return;
6
+ objectExtended = true;
7
+ defineExtension(Object.prototype, 'isEmpty', function () {
4
8
  return Object.keys(this).length === 0;
5
- };
6
- Object.prototype.pick = function (keys) {
7
- if (this === null || this === undefined) {
8
- throw new TypeError('pick: cannot be called on null or undefined');
9
- }
10
- if (!Array.isArray(keys)) {
11
- throw new TypeError(`pick: keys must be an array, got ${typeof keys}`);
12
- }
13
- if (keys.length === 0) {
9
+ });
10
+ defineExtension(Object.prototype, 'pick', function (keys) {
11
+ if (!Array.isArray(keys))
12
+ throw new TypeError('pick: keys must be an array');
13
+ if (!keys.length)
14
14
  throw new TypeError('pick: keys array cannot be empty');
15
- }
16
15
  const result = {};
17
- const obj = this;
18
16
  keys.forEach((key) => {
19
- if (key in obj) {
20
- result[key] = obj[key];
21
- }
17
+ if (key in this)
18
+ result[key] = this[key];
22
19
  });
23
20
  return result;
24
- };
25
- Object.prototype.omit = function (keys) {
26
- if (this === null || this === undefined) {
27
- throw new TypeError('omit: cannot be called on null or undefined');
28
- }
29
- if (!Array.isArray(keys)) {
30
- throw new TypeError(`omit: keys must be an array, got ${typeof keys}`);
31
- }
32
- if (keys.length === 0) {
21
+ });
22
+ defineExtension(Object.prototype, 'omit', function (keys) {
23
+ if (!Array.isArray(keys))
24
+ throw new TypeError('omit: keys must be an array');
25
+ if (!keys.length)
33
26
  throw new TypeError('omit: keys array cannot be empty');
34
- }
35
27
  const result = { ...this };
36
- keys.forEach((key) => {
37
- delete result[key];
38
- });
28
+ keys.forEach((key) => delete result[key]);
39
29
  return result;
40
- };
41
- Object.prototype.deepClone = function () {
42
- // Simple cycle detection without caching key generation
43
- if (this === null || typeof this !== 'object')
44
- return this;
45
- // Handle Date objects
46
- if (this instanceof Date)
47
- return new Date(this.getTime());
48
- // Handle Array objects
49
- if (Array.isArray(this)) {
50
- return this.map((item) => {
51
- if (item &&
52
- typeof item === 'object' &&
53
- typeof item.deepClone === 'function') {
54
- return item.deepClone();
55
- }
56
- return item;
57
- });
58
- }
59
- // Handle regular objects with better cycle detection
30
+ });
31
+ defineExtension(Object.prototype, 'deepClone', function () {
60
32
  const visited = new WeakSet();
61
33
  function deepCloneSafe(obj) {
62
34
  if (obj === null || typeof obj !== 'object')
63
35
  return obj;
64
- if (visited.has(obj)) {
36
+ if (visited.has(obj))
65
37
  throw new Error('Circular reference detected in deepClone');
66
- }
67
38
  visited.add(obj);
68
39
  if (obj instanceof Date)
69
40
  return new Date(obj.getTime());
@@ -76,69 +47,97 @@ export function extendObject() {
76
47
  return cloned;
77
48
  }
78
49
  return deepCloneSafe(this);
79
- };
80
- Object.prototype.merge = function (other) {
50
+ });
51
+ defineExtension(Object.prototype, 'merge', function (other) {
81
52
  return { ...this, ...other };
82
- };
83
- Object.prototype.deepFreeze = function () {
84
- const propNames = Object.getOwnPropertyNames(this);
85
- for (const name of propNames) {
53
+ });
54
+ defineExtension(Object.prototype, 'deepFreeze', function () {
55
+ Object.getOwnPropertyNames(this).forEach((name) => {
86
56
  const value = this[name];
87
- if (value && typeof value === 'object') {
88
- value.deepFreeze();
89
- }
90
- }
57
+ if (value && typeof value === 'object')
58
+ value.deepFreeze?.();
59
+ });
91
60
  return Object.freeze(this);
92
- };
93
- Object.prototype.hasPath = function (path) {
94
- if (typeof path !== 'string') {
95
- throw new TypeError(`hasPath: path must be a string, got ${typeof path}`);
96
- }
97
- if (path.trim() === '') {
98
- throw new TypeError('hasPath: path cannot be empty or whitespace');
99
- }
61
+ });
62
+ defineExtension(Object.prototype, 'hasPath', function (path) {
63
+ if (!path.trim())
64
+ throw new TypeError('hasPath: path cannot be empty');
65
+ return path.split('.').every((key) => {
66
+ if (this == null || !(key in this))
67
+ return false;
68
+ // @ts-ignore
69
+ this = this[key];
70
+ return true;
71
+ });
72
+ });
73
+ defineExtension(Object.prototype, 'getPath', function (path, defaultValue) {
74
+ if (!path.trim())
75
+ throw new TypeError('getPath: path cannot be empty');
76
+ return path.split('.').reduce((acc, key) => (acc && key in acc ? acc[key] : defaultValue), this);
77
+ });
78
+ defineExtension(Object.prototype, 'setPath', function (path, value) {
79
+ if (!path.trim())
80
+ throw new TypeError('setPath: path cannot be empty');
100
81
  const keys = path.split('.');
101
82
  let current = this;
102
- for (const key of keys) {
103
- if (current == null || !(key in current))
104
- return false;
105
- current = current[key];
83
+ for (let i = 0; i < keys.length - 1; i++) {
84
+ if (!(keys[i] in current) || typeof current[keys[i]] !== 'object')
85
+ current[keys[i]] = {};
86
+ current = current[keys[i]];
106
87
  }
107
- return true;
108
- };
109
- Object.prototype.getPath = function (path, defaultValue) {
110
- if (typeof path !== 'string') {
111
- throw new TypeError(`getPath: path must be a string, got ${typeof path}`);
88
+ current[keys[keys.length - 1]] = value;
89
+ return this;
90
+ });
91
+ defineExtension(Object.prototype, 'mapValues', function (fn) {
92
+ if (typeof fn !== 'function') {
93
+ throw new TypeError(`mapValues: fn must be a function, got ${typeof fn}`);
112
94
  }
113
- if (path.trim() === '') {
114
- throw new TypeError('getPath: path cannot be empty or whitespace');
95
+ const result = {};
96
+ for (const key in this) {
97
+ if (Object.prototype.hasOwnProperty.call(this, key)) {
98
+ result[key] = fn(this[key], key);
99
+ }
115
100
  }
116
- const keys = path.split('.');
117
- let current = this;
118
- for (const key of keys) {
119
- if (current == null || !(key in current))
120
- return defaultValue;
121
- current = current[key];
101
+ return result;
102
+ });
103
+ defineExtension(Object.prototype, 'mapKeys', function (fn) {
104
+ if (typeof fn !== 'function') {
105
+ throw new TypeError(`mapKeys: fn must be a function, got ${typeof fn}`);
122
106
  }
123
- return current;
124
- };
125
- Object.prototype.setPath = function (path, value) {
126
- if (typeof path !== 'string') {
127
- throw new TypeError(`setPath: path must be a string, got ${typeof path}`);
107
+ const result = {};
108
+ for (const key in this) {
109
+ if (Object.prototype.hasOwnProperty.call(this, key)) {
110
+ const newKey = fn(key);
111
+ result[newKey] = this[key];
112
+ }
128
113
  }
129
- if (path.trim() === '') {
130
- throw new TypeError('setPath: path cannot be empty or whitespace');
114
+ return result;
115
+ });
116
+ defineExtension(Object.prototype, 'filterKeys', function (keys) {
117
+ if (!Array.isArray(keys)) {
118
+ throw new TypeError(`filterKeys: keys must be an array, got ${typeof keys}`);
131
119
  }
132
- const keys = path.split('.');
133
- let current = this;
134
- for (let i = 0; i < keys.length - 1; i++) {
135
- const key = keys[i];
136
- if (!(key in current) || typeof current[key] !== 'object') {
137
- current[key] = {};
120
+ const result = {};
121
+ for (const key of keys) {
122
+ if (key in this) {
123
+ result[key] = this[key];
138
124
  }
139
- current = current[key];
140
125
  }
141
- current[keys[keys.length - 1]] = value;
142
- return this;
143
- };
126
+ return result;
127
+ });
128
+ defineExtension(Object.prototype, 'filterValues', function (fn) {
129
+ if (typeof fn !== 'function') {
130
+ throw new TypeError(`filterValues: fn must be a function, got ${typeof fn}`);
131
+ }
132
+ const result = {};
133
+ for (const key in this) {
134
+ if (Object.prototype.hasOwnProperty.call(this, key)) {
135
+ const val = this[key];
136
+ if (fn(val, key)) {
137
+ result[key] = val;
138
+ }
139
+ }
140
+ }
141
+ return result;
142
+ });
144
143
  }