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.
- package/package.json +1 -1
- package/packages/cache/README.md +105 -9
- package/packages/cache/dist/cjs/adapters/memcache/MemcacheCache.d.ts +1 -54
- package/packages/cache/dist/cjs/adapters/memcache/MemcacheCache.js +75 -281
- package/packages/cache/dist/cjs/adapters/memory/MemoryCache.js +76 -22
- package/packages/cache/dist/cjs/adapters/redis/RedisCache.js +84 -26
- package/packages/cache/dist/cjs/core/BaseCache.js +13 -4
- package/packages/cache/dist/cjs/core/factory.js +26 -4
- package/packages/cache/dist/cjs/errors/CacheError.d.ts +10 -7
- package/packages/cache/dist/cjs/errors/CacheError.js +6 -11
- package/packages/cache/dist/cjs/errors/cacheErrorCodes.d.ts +22 -0
- package/packages/cache/dist/cjs/errors/cacheErrorCodes.js +24 -0
- package/packages/cache/dist/cjs/errors/index.js +3 -0
- package/packages/cache/dist/cjs/middleware/express/cacheMiddleware.js +8 -8
- package/packages/cache/dist/cjs/session/SessionStore.js +84 -28
- package/packages/cache/dist/esm/adapters/memcache/MemcacheCache.d.ts +1 -54
- package/packages/cache/dist/esm/adapters/memcache/MemcacheCache.js +75 -281
- package/packages/cache/dist/esm/adapters/memory/MemoryCache.js +76 -22
- package/packages/cache/dist/esm/adapters/redis/RedisCache.js +84 -26
- package/packages/cache/dist/esm/core/BaseCache.js +13 -4
- package/packages/cache/dist/esm/core/factory.js +26 -4
- package/packages/cache/dist/esm/errors/CacheError.d.ts +10 -7
- package/packages/cache/dist/esm/errors/CacheError.js +6 -11
- package/packages/cache/dist/esm/errors/cacheErrorCodes.d.ts +22 -0
- package/packages/cache/dist/esm/errors/cacheErrorCodes.js +21 -0
- package/packages/cache/dist/esm/errors/index.js +3 -0
- package/packages/cache/dist/esm/middleware/express/cacheMiddleware.js +8 -8
- package/packages/cache/dist/esm/session/SessionStore.js +84 -28
- package/packages/cache/dist/types/adapters/memcache/MemcacheCache.d.ts +1 -54
- package/packages/cache/dist/types/errors/CacheError.d.ts +10 -7
- package/packages/cache/dist/types/errors/cacheErrorCodes.d.ts +22 -0
- package/packages/cache/package.json +8 -6
- package/packages/cache/src/adapters/memcache/MemcacheCache.ts +79 -352
- package/packages/cache/src/adapters/memory/MemoryCache.ts +76 -77
- package/packages/cache/src/adapters/redis/RedisCache.ts +84 -86
- package/packages/cache/src/core/BaseCache.ts +13 -14
- package/packages/cache/src/core/factory.ts +27 -16
- package/packages/cache/src/errors/CacheError.ts +16 -17
- package/packages/cache/src/errors/cacheErrorCodes.ts +24 -0
- package/packages/cache/src/errors/index.ts +5 -0
- package/packages/cache/src/middleware/express/cacheMiddleware.ts +8 -8
- package/packages/cache/src/session/SessionStore.ts +84 -84
- package/packages/errors-utils/README.md +54 -57
- package/packages/errors-utils/dist/cjs/constants/errorCodes.d.ts +28 -23
- package/packages/errors-utils/dist/cjs/constants/errorCodes.js +57 -22
- package/packages/errors-utils/dist/cjs/constants/errorMessages.d.ts +8 -1
- package/packages/errors-utils/dist/cjs/constants/errorMessages.js +72 -29
- package/packages/errors-utils/dist/cjs/error/AppError.d.ts +2 -2
- package/packages/errors-utils/dist/cjs/error/AppError.js +2 -2
- package/packages/errors-utils/dist/cjs/error/ServiceUnavailableError.d.ts +4 -0
- package/packages/errors-utils/dist/cjs/error/ServiceUnavailableError.js +11 -0
- package/packages/errors-utils/dist/cjs/error/TokenExpiredError.d.ts +2 -2
- package/packages/errors-utils/dist/cjs/error/TokenExpiredError.js +2 -2
- package/packages/errors-utils/dist/cjs/error/TokenMalformedError.d.ts +2 -2
- package/packages/errors-utils/dist/cjs/error/TokenMalformedError.js +2 -2
- package/packages/errors-utils/dist/cjs/error/UnauthorizedError.d.ts +1 -2
- package/packages/errors-utils/dist/cjs/error/UnauthorizedError.js +2 -2
- package/packages/errors-utils/dist/cjs/error/index.d.ts +14 -0
- package/packages/errors-utils/dist/cjs/error/index.js +39 -0
- package/packages/errors-utils/dist/cjs/errorRegistry/errorRegistry.d.ts +19 -0
- package/packages/errors-utils/dist/cjs/errorRegistry/errorRegistry.js +63 -0
- package/packages/errors-utils/dist/cjs/errorRegistry/index.d.ts +3 -0
- package/packages/errors-utils/dist/cjs/errorRegistry/index.js +6 -0
- package/packages/errors-utils/dist/cjs/index.d.ts +3 -9
- package/packages/errors-utils/dist/cjs/index.js +12 -9
- package/packages/errors-utils/dist/cjs/middleware/express/{errorHandler.js → errorHandler.middleware.js} +4 -4
- package/packages/errors-utils/dist/cjs/middleware/express/index.d.ts +2 -2
- package/packages/errors-utils/dist/cjs/middleware/express/index.js +2 -2
- package/packages/errors-utils/dist/esm/constants/errorCodes.d.ts +28 -23
- package/packages/errors-utils/dist/esm/constants/errorCodes.js +57 -22
- package/packages/errors-utils/dist/esm/constants/errorMessages.d.ts +8 -1
- package/packages/errors-utils/dist/esm/constants/errorMessages.js +72 -29
- package/packages/errors-utils/dist/esm/error/AppError.d.ts +2 -2
- package/packages/errors-utils/dist/esm/error/AppError.js +2 -2
- package/packages/errors-utils/dist/esm/error/ServiceUnavailableError.d.ts +4 -0
- package/packages/errors-utils/dist/esm/error/ServiceUnavailableError.js +7 -0
- package/packages/errors-utils/dist/esm/error/TokenExpiredError.d.ts +2 -2
- package/packages/errors-utils/dist/esm/error/TokenExpiredError.js +2 -2
- package/packages/errors-utils/dist/esm/error/TokenMalformedError.d.ts +2 -2
- package/packages/errors-utils/dist/esm/error/TokenMalformedError.js +2 -2
- package/packages/errors-utils/dist/esm/error/UnauthorizedError.d.ts +1 -2
- package/packages/errors-utils/dist/esm/error/UnauthorizedError.js +2 -2
- package/packages/errors-utils/dist/esm/error/index.d.ts +14 -0
- package/packages/errors-utils/dist/esm/error/index.js +23 -0
- package/packages/errors-utils/dist/esm/errorRegistry/errorRegistry.d.ts +19 -0
- package/packages/errors-utils/dist/esm/errorRegistry/errorRegistry.js +59 -0
- package/packages/errors-utils/dist/esm/errorRegistry/index.d.ts +3 -0
- package/packages/errors-utils/dist/esm/errorRegistry/index.js +3 -0
- package/packages/errors-utils/dist/esm/index.d.ts +3 -9
- package/packages/errors-utils/dist/esm/index.js +12 -9
- package/packages/errors-utils/dist/esm/middleware/express/{errorHandler.js → errorHandler.middleware.js} +5 -5
- package/packages/errors-utils/dist/esm/middleware/express/index.d.ts +2 -2
- package/packages/errors-utils/dist/esm/middleware/express/index.js +2 -2
- package/packages/errors-utils/dist/types/constants/errorCodes.d.ts +28 -23
- package/packages/errors-utils/dist/types/constants/errorMessages.d.ts +8 -1
- package/packages/errors-utils/dist/types/error/AppError.d.ts +2 -2
- package/packages/errors-utils/dist/types/error/ServiceUnavailableError.d.ts +4 -0
- package/packages/errors-utils/dist/types/error/TokenExpiredError.d.ts +2 -2
- package/packages/errors-utils/dist/types/error/TokenMalformedError.d.ts +2 -2
- package/packages/errors-utils/dist/types/error/UnauthorizedError.d.ts +1 -2
- package/packages/errors-utils/dist/types/error/index.d.ts +14 -0
- package/packages/errors-utils/dist/types/errorRegistry/errorRegistry.d.ts +19 -0
- package/packages/errors-utils/dist/types/errorRegistry/index.d.ts +3 -0
- package/packages/errors-utils/dist/types/index.d.ts +3 -9
- package/packages/errors-utils/dist/types/middleware/express/index.d.ts +2 -2
- package/packages/errors-utils/package.json +4 -4
- package/packages/errors-utils/src/constants/errorCodes.ts +64 -23
- package/packages/errors-utils/src/constants/errorMessages.ts +91 -34
- package/packages/errors-utils/src/error/AppError.ts +3 -2
- package/packages/errors-utils/src/error/ServiceUnavailableError.ts +8 -0
- package/packages/errors-utils/src/error/TokenExpiredError.ts +2 -2
- package/packages/errors-utils/src/error/TokenMalformedError.ts +2 -2
- package/packages/errors-utils/src/error/UnauthorizedError.ts +8 -8
- package/packages/errors-utils/src/error/index.ts +26 -0
- package/packages/errors-utils/src/errorRegistry/errorRegistry.ts +74 -0
- package/packages/errors-utils/src/errorRegistry/index.ts +4 -0
- package/packages/errors-utils/src/index.ts +12 -10
- package/packages/errors-utils/src/middleware/express/{errorHandler.ts → errorHandler.middleware.ts} +5 -5
- package/packages/errors-utils/src/middleware/express/index.ts +2 -2
- package/packages/js-extensions/README.md +174 -425
- package/packages/js-extensions/dist/cjs/array/array-extensions.js +84 -50
- package/packages/js-extensions/dist/cjs/core/performance.d.ts +1 -0
- package/packages/js-extensions/dist/cjs/core/performance.js +6 -0
- package/packages/js-extensions/dist/cjs/core/version.d.ts +1 -0
- package/packages/js-extensions/dist/cjs/core/version.js +9 -0
- package/packages/js-extensions/dist/cjs/index.d.ts +1 -0
- package/packages/js-extensions/dist/cjs/index.js +1 -0
- package/packages/js-extensions/dist/cjs/number/number-extensions.js +85 -97
- package/packages/js-extensions/dist/cjs/object/object-extensions.js +102 -103
- package/packages/js-extensions/dist/cjs/string/string-extensions.js +66 -43
- package/packages/js-extensions/dist/cjs/types/global-augmentations.d.ts +1 -0
- package/packages/js-extensions/dist/cjs/utils/defineExtension.d.ts +1 -0
- package/packages/js-extensions/dist/cjs/utils/defineExtension.js +13 -0
- package/packages/js-extensions/dist/cjs/utils/index.d.ts +1 -0
- package/packages/js-extensions/dist/cjs/utils/index.js +1 -0
- package/packages/js-extensions/dist/esm/array/array-extensions.js +84 -50
- package/packages/js-extensions/dist/esm/core/performance.d.ts +1 -0
- package/packages/js-extensions/dist/esm/core/performance.js +5 -0
- package/packages/js-extensions/dist/esm/core/version.d.ts +1 -0
- package/packages/js-extensions/dist/esm/core/version.js +5 -0
- package/packages/js-extensions/dist/esm/index.d.ts +1 -0
- package/packages/js-extensions/dist/esm/index.js +1 -0
- package/packages/js-extensions/dist/esm/number/number-extensions.js +86 -98
- package/packages/js-extensions/dist/esm/object/object-extensions.js +102 -103
- package/packages/js-extensions/dist/esm/string/string-extensions.js +66 -43
- package/packages/js-extensions/dist/esm/types/global-augmentations.d.ts +1 -0
- package/packages/js-extensions/dist/esm/utils/defineExtension.d.ts +1 -0
- package/packages/js-extensions/dist/esm/utils/defineExtension.js +10 -0
- package/packages/js-extensions/dist/esm/utils/index.d.ts +1 -0
- package/packages/js-extensions/dist/esm/utils/index.js +1 -0
- package/packages/js-extensions/dist/types/core/performance.d.ts +1 -0
- package/packages/js-extensions/dist/types/core/version.d.ts +1 -0
- package/packages/js-extensions/dist/types/index.d.ts +1 -0
- package/packages/js-extensions/dist/types/types/global-augmentations.d.ts +1 -0
- package/packages/js-extensions/dist/types/utils/defineExtension.d.ts +1 -0
- package/packages/js-extensions/dist/types/utils/index.d.ts +1 -0
- package/packages/js-extensions/package.json +8 -4
- package/packages/js-extensions/src/array/array-extensions.ts +268 -150
- package/packages/js-extensions/src/core/performance.ts +11 -0
- package/packages/js-extensions/src/core/version.ts +7 -0
- package/packages/js-extensions/src/index.ts +2 -0
- package/packages/js-extensions/src/number/number-extensions.ts +90 -123
- package/packages/js-extensions/src/object/object-extensions.ts +102 -130
- package/packages/js-extensions/src/string/string-extensions.ts +80 -76
- package/packages/js-extensions/src/types/global-augmentations.ts +2 -1
- package/packages/js-extensions/src/utils/defineExtension.ts +14 -0
- package/packages/js-extensions/src/utils/index.ts +1 -0
- package/packages/response-utils/README.md +156 -198
- package/packages/response-utils/dist/cjs/core/BaseResponder.js +20 -4
- package/packages/response-utils/dist/cjs/index.d.ts +0 -1
- package/packages/response-utils/dist/cjs/index.js +1 -25
- package/packages/response-utils/dist/esm/core/BaseResponder.js +20 -4
- package/packages/response-utils/dist/esm/index.d.ts +0 -1
- package/packages/response-utils/dist/esm/index.js +0 -2
- package/packages/response-utils/dist/types/index.d.ts +0 -1
- package/packages/response-utils/package.json +1 -1
- package/packages/response-utils/src/core/BaseResponder.ts +25 -4
- package/packages/response-utils/src/index.ts +0 -3
- package/packages/response-utils/src/middleware/express/expressMiddleware.ts +1 -1
- package/packages/security/README.md +153 -355
- package/packages/security/dist/cjs/core/crypto/cryptoManager.js +34 -17
- package/packages/security/dist/cjs/core/jwt/decode.js +4 -1
- package/packages/security/dist/cjs/core/jwt/generateTokens.js +4 -1
- package/packages/security/dist/cjs/core/jwt/jwtManager.d.ts +19 -43
- package/packages/security/dist/cjs/core/jwt/jwtManager.js +84 -199
- package/packages/security/dist/cjs/core/jwt/parseDuration.js +3 -2
- package/packages/security/dist/cjs/core/jwt/signToken.js +2 -1
- package/packages/security/dist/cjs/core/jwt/validateToken.d.ts +10 -7
- package/packages/security/dist/cjs/core/jwt/validateToken.js +19 -10
- package/packages/security/dist/cjs/core/jwt/verify.d.ts +8 -9
- package/packages/security/dist/cjs/core/jwt/verify.js +59 -14
- package/packages/security/dist/cjs/core/password/hash.js +4 -4
- package/packages/security/dist/cjs/core/password/passwordManager.d.ts +1 -1
- package/packages/security/dist/cjs/core/password/passwordManager.js +36 -80
- package/packages/security/dist/cjs/core/password/strength.js +12 -6
- package/packages/security/dist/cjs/core/password/utils.d.ts +12 -0
- package/packages/security/dist/cjs/core/password/utils.js +16 -1
- package/packages/security/dist/cjs/core/password/verify.js +4 -4
- package/packages/security/dist/cjs/index.d.ts +2 -7
- package/packages/security/dist/esm/core/crypto/cryptoManager.js +34 -17
- package/packages/security/dist/esm/core/jwt/decode.js +4 -1
- package/packages/security/dist/esm/core/jwt/generateTokens.js +4 -1
- package/packages/security/dist/esm/core/jwt/jwtManager.d.ts +19 -43
- package/packages/security/dist/esm/core/jwt/jwtManager.js +85 -200
- package/packages/security/dist/esm/core/jwt/parseDuration.js +3 -2
- package/packages/security/dist/esm/core/jwt/signToken.js +2 -1
- package/packages/security/dist/esm/core/jwt/validateToken.d.ts +10 -7
- package/packages/security/dist/esm/core/jwt/validateToken.js +19 -10
- package/packages/security/dist/esm/core/jwt/verify.d.ts +8 -9
- package/packages/security/dist/esm/core/jwt/verify.js +58 -13
- package/packages/security/dist/esm/core/password/hash.js +4 -4
- package/packages/security/dist/esm/core/password/passwordManager.d.ts +1 -1
- package/packages/security/dist/esm/core/password/passwordManager.js +36 -80
- package/packages/security/dist/esm/core/password/strength.js +12 -6
- package/packages/security/dist/esm/core/password/utils.d.ts +12 -0
- package/packages/security/dist/esm/core/password/utils.js +16 -1
- package/packages/security/dist/esm/core/password/verify.js +4 -4
- package/packages/security/dist/esm/index.d.ts +2 -7
- package/packages/security/dist/types/core/jwt/jwtManager.d.ts +19 -43
- package/packages/security/dist/types/core/jwt/validateToken.d.ts +10 -7
- package/packages/security/dist/types/core/jwt/verify.d.ts +8 -9
- package/packages/security/dist/types/core/password/passwordManager.d.ts +1 -1
- package/packages/security/dist/types/core/password/utils.d.ts +12 -0
- package/packages/security/dist/types/index.d.ts +2 -7
- package/packages/security/package.json +3 -3
- package/packages/security/src/core/crypto/cryptoManager.ts +53 -21
- package/packages/security/src/core/jwt/decode.ts +4 -1
- package/packages/security/src/core/jwt/generateTokens.ts +4 -1
- package/packages/security/src/core/jwt/jwtManager.ts +105 -257
- package/packages/security/src/core/jwt/parseDuration.ts +4 -2
- package/packages/security/src/core/jwt/signToken.ts +2 -1
- package/packages/security/src/core/jwt/validateToken.ts +21 -13
- package/packages/security/src/core/jwt/verify.ts +82 -20
- package/packages/security/src/core/password/hash.ts +10 -4
- package/packages/security/src/core/password/passwordManager.ts +38 -108
- package/packages/security/src/core/password/strength.ts +13 -8
- package/packages/security/src/core/password/utils.ts +19 -3
- package/packages/security/src/core/password/verify.ts +6 -4
- package/packages/server-utils/README.md +1 -1
- package/packages/server-utils/dist/cjs/core/server.js +6 -6
- package/packages/server-utils/dist/cjs/middleware/auth.middleware.d.ts +1 -2
- package/packages/server-utils/dist/cjs/middleware/auth.middleware.js +17 -14
- package/packages/server-utils/dist/cjs/middleware/cache.middleware.js +2 -2
- package/packages/server-utils/dist/cjs/middleware/errorHandler.middleware.d.ts +1 -1
- package/packages/server-utils/dist/cjs/middleware/errorHandler.middleware.js +34 -17
- package/packages/server-utils/dist/cjs/middleware/session.middleware.js +8 -8
- package/packages/server-utils/dist/cjs/middleware/validation.middleware.js +2 -2
- package/packages/server-utils/dist/esm/core/server.js +6 -6
- package/packages/server-utils/dist/esm/middleware/auth.middleware.d.ts +1 -2
- package/packages/server-utils/dist/esm/middleware/auth.middleware.js +18 -15
- package/packages/server-utils/dist/esm/middleware/cache.middleware.js +2 -2
- package/packages/server-utils/dist/esm/middleware/errorHandler.middleware.d.ts +1 -1
- package/packages/server-utils/dist/esm/middleware/errorHandler.middleware.js +34 -17
- package/packages/server-utils/dist/esm/middleware/session.middleware.js +8 -8
- package/packages/server-utils/dist/esm/middleware/validation.middleware.js +2 -2
- package/packages/server-utils/dist/types/middleware/auth.middleware.d.ts +1 -2
- package/packages/server-utils/dist/types/middleware/errorHandler.middleware.d.ts +1 -1
- package/packages/server-utils/package.json +4 -4
- package/packages/server-utils/src/core/server.ts +6 -6
- package/packages/server-utils/src/middleware/auth.middleware.ts +40 -27
- package/packages/server-utils/src/middleware/cache.middleware.ts +2 -2
- package/packages/server-utils/src/middleware/errorHandler.middleware.ts +39 -24
- package/packages/server-utils/src/middleware/session.middleware.ts +11 -8
- package/packages/server-utils/src/middleware/validation.middleware.ts +2 -3
- package/packages/errors-utils/dist/cjs/error/RateLimitError.d.ts +0 -4
- package/packages/errors-utils/dist/cjs/error/RateLimitError.js +0 -11
- package/packages/errors-utils/dist/cjs/utils/mapAppErrorToResponder.d.ts +0 -3
- package/packages/errors-utils/dist/cjs/utils/mapAppErrorToResponder.js +0 -27
- package/packages/errors-utils/dist/esm/error/RateLimitError.d.ts +0 -4
- package/packages/errors-utils/dist/esm/error/RateLimitError.js +0 -7
- package/packages/errors-utils/dist/esm/utils/mapAppErrorToResponder.d.ts +0 -3
- package/packages/errors-utils/dist/esm/utils/mapAppErrorToResponder.js +0 -24
- package/packages/errors-utils/dist/types/error/RateLimitError.d.ts +0 -4
- package/packages/errors-utils/dist/types/utils/mapAppErrorToResponder.d.ts +0 -3
- package/packages/errors-utils/src/error/RateLimitError.ts +0 -8
- package/packages/errors-utils/src/utils/mapAppErrorToResponder.ts +0 -38
- package/packages/response-utils/src/legacy.ts +0 -30
- /package/packages/errors-utils/dist/cjs/middleware/express/{errorConverter.d.ts → errorConverter.middleware.d.ts} +0 -0
- /package/packages/errors-utils/dist/cjs/middleware/express/{errorConverter.js → errorConverter.middleware.js} +0 -0
- /package/packages/errors-utils/dist/cjs/middleware/express/{errorHandler.d.ts → errorHandler.middleware.d.ts} +0 -0
- /package/packages/errors-utils/dist/esm/middleware/express/{errorConverter.d.ts → errorConverter.middleware.d.ts} +0 -0
- /package/packages/errors-utils/dist/esm/middleware/express/{errorConverter.js → errorConverter.middleware.js} +0 -0
- /package/packages/errors-utils/dist/esm/middleware/express/{errorHandler.d.ts → errorHandler.middleware.d.ts} +0 -0
- /package/packages/errors-utils/dist/types/middleware/express/{errorConverter.d.ts → errorConverter.middleware.d.ts} +0 -0
- /package/packages/errors-utils/dist/types/middleware/express/{errorHandler.d.ts → errorHandler.middleware.d.ts} +0 -0
- /package/packages/errors-utils/src/middleware/express/{errorConverter.ts → errorConverter.middleware.ts} +0 -0
package/package.json
CHANGED
package/packages/cache/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @naman_deep_singh/cache
|
|
2
2
|
|
|
3
|
-
**Version:** 1.
|
|
3
|
+
**Version:** 1.4.0 (with Redis Clustering support)
|
|
4
4
|
|
|
5
5
|
A flexible, extensible caching layer with support for Redis, Memcache, and in-memory caches. Includes session management, health checks, and Express middleware.
|
|
6
6
|
|
|
@@ -27,13 +27,109 @@ npm install @naman_deep_singh/cache redis memcached
|
|
|
27
27
|
- `redis` (for Redis adapter)
|
|
28
28
|
- `memcached` (for Memcache adapter)
|
|
29
29
|
|
|
30
|
-
Both are optional if you're only using the memory adapter.
|
|
31
|
-
|
|
32
30
|
## Quick Start
|
|
33
31
|
|
|
34
32
|
### Using the Factory
|
|
35
33
|
|
|
36
34
|
```typescript
|
|
35
|
+
|
|
36
|
+
Both are optional if you're only using the memory adapter.
|
|
37
|
+
|
|
38
|
+
All cache-related failures throw a CacheError, which:
|
|
39
|
+
|
|
40
|
+
Extends AppError
|
|
41
|
+
|
|
42
|
+
Uses cache-specific error codes
|
|
43
|
+
|
|
44
|
+
Supports adapter & operation metadata
|
|
45
|
+
|
|
46
|
+
Integrates with centralized error message resolution via errorMessageRegistry
|
|
47
|
+
|
|
48
|
+
Integrates with centralized error message resolution via errorMessageRegistry
|
|
49
|
+
|
|
50
|
+
import { CacheError } from '@naman_deep_singh/cache'
|
|
51
|
+
import { CACHE_ERROR_CODES } from '@naman_deep_singh/cache/errors'
|
|
52
|
+
|
|
53
|
+
Cache Error Codes
|
|
54
|
+
|
|
55
|
+
Cache-specific error codes are scoped to this package and are not mixed with global application error codes.
|
|
56
|
+
|
|
57
|
+
Examples:
|
|
58
|
+
|
|
59
|
+
CACHE_ERROR
|
|
60
|
+
|
|
61
|
+
CACHE_CONNECTION_FAILED
|
|
62
|
+
|
|
63
|
+
CACHE_UNSUPPORTED_ADAPTER
|
|
64
|
+
|
|
65
|
+
CACHE_INVALID_CONFIG
|
|
66
|
+
|
|
67
|
+
CACHE_KEY_NOT_FOUND
|
|
68
|
+
|
|
69
|
+
CACHE_OPERATION_TIMEOUT
|
|
70
|
+
|
|
71
|
+
CACHE_SERIALIZE_ERROR
|
|
72
|
+
|
|
73
|
+
CACHE_DESERIALIZE_ERROR
|
|
74
|
+
|
|
75
|
+
SESSION_CREATE_ERROR
|
|
76
|
+
|
|
77
|
+
SESSION_GET_ERROR
|
|
78
|
+
|
|
79
|
+
SESSION_UPDATE_ERROR
|
|
80
|
+
|
|
81
|
+
SESSION_DELETE_ERROR
|
|
82
|
+
|
|
83
|
+
SESSION_EXISTS_ERROR
|
|
84
|
+
|
|
85
|
+
SESSION_CLEAR_ERROR
|
|
86
|
+
|
|
87
|
+
SESSION_GET_MULTIPLE_ERROR
|
|
88
|
+
|
|
89
|
+
SESSION_DELETE_MULTIPLE_ERROR
|
|
90
|
+
|
|
91
|
+
SESSION_EXTEND_ERROR
|
|
92
|
+
|
|
93
|
+
SESSION_GET_EXTEND_ERROR
|
|
94
|
+
|
|
95
|
+
SESSION_NOT_FOUND
|
|
96
|
+
|
|
97
|
+
These codes are registered internally using errorMessageRegistry, ensuring consistent messaging across services.
|
|
98
|
+
|
|
99
|
+
Example: Handling Cache Errors
|
|
100
|
+
try {
|
|
101
|
+
await cache.get('user:123')
|
|
102
|
+
} catch (error) {
|
|
103
|
+
if (error instanceof CacheError) {
|
|
104
|
+
console.error('Cache error occurred', {
|
|
105
|
+
code: error.code,
|
|
106
|
+
adapter: error.adapter,
|
|
107
|
+
operation: error.operation,
|
|
108
|
+
details: error.details,
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
Example: Adapter-Level Error Throwing
|
|
114
|
+
|
|
115
|
+
throw new CacheError(CACHE_ERROR_CODES.CACHE_CONNECTION_FAILED, {
|
|
116
|
+
adapter: 'memcache',
|
|
117
|
+
operation: 'connect',
|
|
118
|
+
cause: error,
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
Design Notes
|
|
122
|
+
|
|
123
|
+
❌ Cache errors do not extend HTTP error classes
|
|
124
|
+
|
|
125
|
+
❌ Cache errors do not pollute global ErrorCode
|
|
126
|
+
|
|
127
|
+
✅ Cache errors are package-scoped
|
|
128
|
+
|
|
129
|
+
✅ Error messages remain centralized and overridable
|
|
130
|
+
|
|
131
|
+
✅ Metadata (adapter, operation) is preserved for observability
|
|
132
|
+
|
|
37
133
|
import { CacheFactory, SessionStore } from '@naman_deep_singh/cache';
|
|
38
134
|
|
|
39
135
|
// Create a Redis cache
|
|
@@ -432,12 +528,12 @@ import { CacheError } from '@naman_deep_singh/cache';
|
|
|
432
528
|
|
|
433
529
|
try {
|
|
434
530
|
await cache.get('key');
|
|
435
|
-
} catch (
|
|
436
|
-
if (
|
|
437
|
-
console.log(`Error: ${
|
|
438
|
-
console.log(`Code: ${
|
|
439
|
-
console.log(`Adapter: ${
|
|
440
|
-
console.log(`Original error:`,
|
|
531
|
+
} catch (error) {
|
|
532
|
+
if (error instanceof CacheError) {
|
|
533
|
+
console.log(`Error: ${error.message}`);
|
|
534
|
+
console.log(`Code: ${error.code}`);
|
|
535
|
+
console.log(`Adapter: ${error.adapter}`);
|
|
536
|
+
console.log(`Original error:`, error.originalError);
|
|
441
537
|
}
|
|
442
538
|
}
|
|
443
539
|
|
|
@@ -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
|
}
|
|
@@ -5,11 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MemcacheCache = void 0;
|
|
7
7
|
const memcached_1 = __importDefault(require("memcached"));
|
|
8
|
+
const cacheErrorCodes_1 = require("src/errors/cacheErrorCodes");
|
|
8
9
|
const BaseCache_1 = require("../../core/BaseCache");
|
|
9
10
|
const errors_1 = require("../../errors");
|
|
10
|
-
/**
|
|
11
|
-
* Memcache adapter
|
|
12
|
-
*/
|
|
13
11
|
class MemcacheCache extends BaseCache_1.BaseCache {
|
|
14
12
|
constructor(memcacheConfig) {
|
|
15
13
|
super(memcacheConfig);
|
|
@@ -17,362 +15,158 @@ class MemcacheCache extends BaseCache_1.BaseCache {
|
|
|
17
15
|
this.client = null;
|
|
18
16
|
this.isConnected = false;
|
|
19
17
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Connect to Memcache
|
|
22
|
-
*/
|
|
23
18
|
async connect() {
|
|
24
19
|
try {
|
|
25
20
|
const servers = Array.isArray(this.memcacheConfig.servers)
|
|
26
21
|
? this.memcacheConfig.servers
|
|
27
22
|
: [this.memcacheConfig.servers];
|
|
28
|
-
|
|
23
|
+
this.client = new memcached_1.default(servers, {
|
|
29
24
|
retries: 2,
|
|
30
25
|
retry: 30000,
|
|
31
26
|
remove: true,
|
|
32
|
-
|
|
33
|
-
maxValue: 1048576, // 1MB default
|
|
27
|
+
maxValue: 1048576,
|
|
34
28
|
idle: 30000,
|
|
35
|
-
};
|
|
36
|
-
if (this.memcacheConfig.username) {
|
|
37
|
-
;
|
|
38
|
-
options.username = this.memcacheConfig.username;
|
|
39
|
-
}
|
|
40
|
-
if (this.memcacheConfig.password) {
|
|
41
|
-
;
|
|
42
|
-
options.password = this.memcacheConfig.password;
|
|
43
|
-
}
|
|
44
|
-
this.client = new memcached_1.default(servers, options);
|
|
29
|
+
});
|
|
45
30
|
this.isConnected = true;
|
|
46
|
-
// Test connection
|
|
47
31
|
await this.ping();
|
|
48
32
|
}
|
|
49
|
-
catch (
|
|
50
|
-
throw new errors_1.CacheError(
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_CONNECTION_FAILED, {
|
|
35
|
+
adapter: 'memcache',
|
|
36
|
+
operation: 'connect',
|
|
37
|
+
cause: error instanceof Error ? error : undefined,
|
|
38
|
+
});
|
|
51
39
|
}
|
|
52
40
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Ensure client is connected
|
|
55
|
-
*/
|
|
56
41
|
async ensureConnected() {
|
|
57
42
|
if (!this.client) {
|
|
58
43
|
await this.connect();
|
|
59
44
|
}
|
|
60
45
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Ping memcache
|
|
63
|
-
*/
|
|
64
46
|
async ping() {
|
|
65
47
|
return new Promise((resolve, reject) => {
|
|
66
|
-
if (!this.client)
|
|
67
|
-
reject(new Error('
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
this.client.touch('__ping', 1, (err) => {
|
|
71
|
-
if (err)
|
|
72
|
-
reject(err);
|
|
73
|
-
else
|
|
74
|
-
resolve();
|
|
75
|
-
});
|
|
48
|
+
if (!this.client)
|
|
49
|
+
return reject(new Error('Client not initialized'));
|
|
50
|
+
this.client.touch('__ping', 1, (err) => (err ? reject(err) : resolve()));
|
|
76
51
|
});
|
|
77
52
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
53
|
+
async exists(key) {
|
|
54
|
+
try {
|
|
55
|
+
const value = await this.get(key);
|
|
56
|
+
return value !== null;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_ERROR, {
|
|
60
|
+
adapter: 'memcache',
|
|
61
|
+
operation: 'exists',
|
|
62
|
+
details: { key },
|
|
63
|
+
cause: error instanceof Error ? error : undefined,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
81
67
|
async get(key) {
|
|
82
68
|
try {
|
|
83
69
|
await this.ensureConnected();
|
|
84
70
|
const fullKey = this.buildKey(key);
|
|
85
71
|
return new Promise((resolve, reject) => {
|
|
86
72
|
this.client.get(fullKey, (err, data) => {
|
|
87
|
-
if (err)
|
|
88
|
-
reject(err);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (data === undefined || data === null) {
|
|
92
|
-
this.recordMiss();
|
|
93
|
-
resolve(null);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
this.recordHit();
|
|
73
|
+
if (err)
|
|
74
|
+
return reject(err);
|
|
75
|
+
if (data == null)
|
|
76
|
+
return resolve(null);
|
|
97
77
|
try {
|
|
98
|
-
|
|
99
|
-
resolve(this.deserialize(data));
|
|
100
|
-
}
|
|
101
|
-
else if (Buffer.isBuffer(data)) {
|
|
102
|
-
resolve(this.deserialize(data.toString()));
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// Unknown shape from memcached client - treat as miss
|
|
106
|
-
this.recordMiss();
|
|
107
|
-
resolve(null);
|
|
108
|
-
}
|
|
78
|
+
resolve(this.deserialize(Buffer.isBuffer(data) ? data.toString() : data));
|
|
109
79
|
}
|
|
110
|
-
catch (
|
|
111
|
-
reject(
|
|
80
|
+
catch (e) {
|
|
81
|
+
reject(e);
|
|
112
82
|
}
|
|
113
83
|
});
|
|
114
84
|
});
|
|
115
85
|
}
|
|
116
|
-
catch (
|
|
117
|
-
throw new errors_1.CacheError(
|
|
86
|
+
catch (error) {
|
|
87
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_KEY_NOT_FOUND, {
|
|
88
|
+
adapter: 'memcache',
|
|
89
|
+
operation: 'get',
|
|
90
|
+
details: { key },
|
|
91
|
+
cause: error instanceof Error ? error : undefined,
|
|
92
|
+
});
|
|
118
93
|
}
|
|
119
94
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Set a value in Memcache
|
|
122
|
-
*/
|
|
123
95
|
async set(key, value, ttl) {
|
|
124
96
|
try {
|
|
125
97
|
await this.ensureConnected();
|
|
126
98
|
const fullKey = this.buildKey(key);
|
|
127
|
-
const serialized = this.serialize(value);
|
|
128
|
-
const expiry = ttl ?? this.ttl;
|
|
129
99
|
return new Promise((resolve, reject) => {
|
|
130
|
-
this.client.set(fullKey,
|
|
131
|
-
if (err) {
|
|
132
|
-
reject(err);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
this.recordSet();
|
|
136
|
-
resolve();
|
|
137
|
-
}
|
|
138
|
-
});
|
|
100
|
+
this.client.set(fullKey, this.serialize(value), ttl ?? this.ttl, (err) => (err ? reject(err) : resolve()));
|
|
139
101
|
});
|
|
140
102
|
}
|
|
141
|
-
catch (
|
|
142
|
-
throw new errors_1.CacheError(
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_ERROR, {
|
|
105
|
+
adapter: 'memcache',
|
|
106
|
+
operation: 'set',
|
|
107
|
+
details: { key },
|
|
108
|
+
cause: error instanceof Error ? error : undefined,
|
|
109
|
+
});
|
|
143
110
|
}
|
|
144
111
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Delete a key from Memcache
|
|
147
|
-
*/
|
|
148
112
|
async delete(key) {
|
|
149
113
|
try {
|
|
150
114
|
await this.ensureConnected();
|
|
151
115
|
const fullKey = this.buildKey(key);
|
|
152
116
|
return new Promise((resolve, reject) => {
|
|
153
|
-
this.client.del(fullKey, (err) =>
|
|
154
|
-
if (err) {
|
|
155
|
-
reject(err);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
this.recordDelete();
|
|
159
|
-
resolve(true);
|
|
160
|
-
}
|
|
161
|
-
});
|
|
117
|
+
this.client.del(fullKey, (err) => (err ? reject(err) : resolve(true)));
|
|
162
118
|
});
|
|
163
119
|
}
|
|
164
|
-
catch (
|
|
165
|
-
throw new errors_1.CacheError(
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
*/
|
|
171
|
-
async exists(key) {
|
|
172
|
-
try {
|
|
173
|
-
const value = await this.get(key);
|
|
174
|
-
return value !== null;
|
|
175
|
-
}
|
|
176
|
-
catch (err) {
|
|
177
|
-
throw new errors_1.CacheError(`Failed to check existence of key "${key}" in Memcache`, 'MEMCACHE_EXISTS_ERROR', 'memcache', err);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Clear all keys (Memcache limitation: flushes entire cache)
|
|
182
|
-
*/
|
|
183
|
-
async clear() {
|
|
184
|
-
try {
|
|
185
|
-
await this.ensureConnected();
|
|
186
|
-
return new Promise((resolve, reject) => {
|
|
187
|
-
this.client.flush((err) => {
|
|
188
|
-
if (err) {
|
|
189
|
-
reject(err);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
resolve();
|
|
193
|
-
}
|
|
194
|
-
});
|
|
120
|
+
catch (error) {
|
|
121
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_ERROR, {
|
|
122
|
+
adapter: 'memcache',
|
|
123
|
+
operation: 'delete',
|
|
124
|
+
details: { key },
|
|
125
|
+
cause: error instanceof Error ? error : undefined,
|
|
195
126
|
});
|
|
196
127
|
}
|
|
197
|
-
catch (err) {
|
|
198
|
-
throw new errors_1.CacheError('Failed to clear Memcache', 'MEMCACHE_CLEAR_ERROR', 'memcache', err);
|
|
199
|
-
}
|
|
200
128
|
}
|
|
201
|
-
|
|
202
|
-
* Get multiple values at once
|
|
203
|
-
*/
|
|
204
|
-
async getMultiple(keys) {
|
|
129
|
+
async clear() {
|
|
205
130
|
try {
|
|
206
131
|
await this.ensureConnected();
|
|
207
|
-
const fullKeys = keys.map((k) => this.buildKey(k));
|
|
208
132
|
return new Promise((resolve, reject) => {
|
|
209
|
-
this.client.
|
|
210
|
-
if (err) {
|
|
211
|
-
reject(err);
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const result = {};
|
|
215
|
-
if (!data || typeof data !== 'object') {
|
|
216
|
-
// Treat as all misses
|
|
217
|
-
for (const key of keys) {
|
|
218
|
-
this.recordMiss();
|
|
219
|
-
result[key] = null;
|
|
220
|
-
}
|
|
221
|
-
resolve(result);
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
const map = data;
|
|
225
|
-
keys.forEach((key) => {
|
|
226
|
-
const fullKey = this.buildKey(key);
|
|
227
|
-
const value = map[fullKey];
|
|
228
|
-
if (value === undefined || value === null) {
|
|
229
|
-
this.recordMiss();
|
|
230
|
-
result[key] = null;
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
this.recordHit();
|
|
234
|
-
try {
|
|
235
|
-
if (typeof value === 'string') {
|
|
236
|
-
result[key] = this.deserialize(value);
|
|
237
|
-
}
|
|
238
|
-
else if (Buffer.isBuffer(value)) {
|
|
239
|
-
result[key] = this.deserialize(value.toString());
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
// Unknown, treat as miss
|
|
243
|
-
this.recordMiss();
|
|
244
|
-
result[key] = null;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
catch (parseErr) {
|
|
248
|
-
reject(parseErr);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
resolve(result);
|
|
253
|
-
});
|
|
133
|
+
this.client.flush((err) => (err ? reject(err) : resolve()));
|
|
254
134
|
});
|
|
255
135
|
}
|
|
256
|
-
catch (
|
|
257
|
-
throw new errors_1.CacheError(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
* Set multiple values at once
|
|
262
|
-
*/
|
|
263
|
-
async setMultiple(data, ttl) {
|
|
264
|
-
try {
|
|
265
|
-
await this.ensureConnected();
|
|
266
|
-
const expiry = ttl ?? this.ttl;
|
|
267
|
-
const promises = [];
|
|
268
|
-
for (const [key, value] of Object.entries(data)) {
|
|
269
|
-
const fullKey = this.buildKey(key);
|
|
270
|
-
const serialized = this.serialize(value);
|
|
271
|
-
promises.push(new Promise((resolve, reject) => {
|
|
272
|
-
this.client.set(fullKey, serialized, expiry, (err) => {
|
|
273
|
-
if (err)
|
|
274
|
-
reject(err);
|
|
275
|
-
else
|
|
276
|
-
resolve();
|
|
277
|
-
});
|
|
278
|
-
}));
|
|
279
|
-
}
|
|
280
|
-
return Promise.all(promises).then(() => {
|
|
281
|
-
this.stats.sets += Object.keys(data).length;
|
|
136
|
+
catch (error) {
|
|
137
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_OPERATION_TIMEOUT, {
|
|
138
|
+
adapter: 'memcache',
|
|
139
|
+
operation: 'clear',
|
|
140
|
+
cause: error instanceof Error ? error : undefined,
|
|
282
141
|
});
|
|
283
142
|
}
|
|
284
|
-
catch (err) {
|
|
285
|
-
throw new errors_1.CacheError('Failed to set multiple keys in Memcache', 'MEMCACHE_SET_MULTIPLE_ERROR', 'memcache', err);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Delete multiple keys at once
|
|
290
|
-
*/
|
|
291
|
-
async deleteMultiple(keys) {
|
|
292
|
-
try {
|
|
293
|
-
await this.ensureConnected();
|
|
294
|
-
const fullKeys = keys.map((k) => this.buildKey(k));
|
|
295
|
-
let deletedCount = 0;
|
|
296
|
-
await Promise.all(fullKeys.map((key) => new Promise((resolve, reject) => {
|
|
297
|
-
this.client.del(key, (err) => {
|
|
298
|
-
if (err) {
|
|
299
|
-
reject(err);
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
deletedCount++;
|
|
303
|
-
resolve();
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
})));
|
|
307
|
-
this.stats.deletes += deletedCount;
|
|
308
|
-
return deletedCount;
|
|
309
|
-
}
|
|
310
|
-
catch (err) {
|
|
311
|
-
throw new errors_1.CacheError('Failed to delete multiple keys from Memcache', 'MEMCACHE_DELETE_MULTIPLE_ERROR', 'memcache', err);
|
|
312
|
-
}
|
|
313
143
|
}
|
|
314
|
-
/**
|
|
315
|
-
* Increment a numeric value (not natively supported by Memcache in this library)
|
|
316
|
-
*/
|
|
317
|
-
async increment(key, amount = 1) {
|
|
318
|
-
try {
|
|
319
|
-
const current = await this.get(key);
|
|
320
|
-
const value = (typeof current === 'number' ? current : 0) + amount;
|
|
321
|
-
await this.set(key, value);
|
|
322
|
-
return value;
|
|
323
|
-
}
|
|
324
|
-
catch (err) {
|
|
325
|
-
throw new errors_1.CacheError(`Failed to increment key "${key}" in Memcache`, 'MEMCACHE_INCREMENT_ERROR', 'memcache', err);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Decrement a numeric value
|
|
330
|
-
*/
|
|
331
|
-
async decrement(key, amount = 1) {
|
|
332
|
-
try {
|
|
333
|
-
const current = await this.get(key);
|
|
334
|
-
const value = (typeof current === 'number' ? current : 0) - amount;
|
|
335
|
-
await this.set(key, value);
|
|
336
|
-
return value;
|
|
337
|
-
}
|
|
338
|
-
catch (err) {
|
|
339
|
-
throw new errors_1.CacheError(`Failed to decrement key "${key}" in Memcache`, 'MEMCACHE_DECREMENT_ERROR', 'memcache', err);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Check if Memcache is alive
|
|
344
|
-
*/
|
|
345
144
|
async isAlive() {
|
|
346
145
|
try {
|
|
347
146
|
await this.ping();
|
|
348
|
-
return {
|
|
349
|
-
isAlive: true,
|
|
350
|
-
adapter: 'memcache',
|
|
351
|
-
timestamp: new Date(),
|
|
352
|
-
};
|
|
147
|
+
return { isAlive: true, adapter: 'memcache', timestamp: new Date() };
|
|
353
148
|
}
|
|
354
|
-
catch (
|
|
149
|
+
catch (error) {
|
|
355
150
|
return {
|
|
356
151
|
isAlive: false,
|
|
357
152
|
adapter: 'memcache',
|
|
358
153
|
timestamp: new Date(),
|
|
359
|
-
error:
|
|
154
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
360
155
|
};
|
|
361
156
|
}
|
|
362
157
|
}
|
|
363
|
-
/**
|
|
364
|
-
* Close Memcache connection
|
|
365
|
-
*/
|
|
366
158
|
async close() {
|
|
367
159
|
try {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
this.client = null;
|
|
372
|
-
}
|
|
160
|
+
this.client?.end();
|
|
161
|
+
this.client = null;
|
|
162
|
+
this.isConnected = false;
|
|
373
163
|
}
|
|
374
|
-
catch (
|
|
375
|
-
throw new errors_1.CacheError(
|
|
164
|
+
catch (error) {
|
|
165
|
+
throw new errors_1.CacheError(cacheErrorCodes_1.CACHE_ERROR_CODES.CACHE_ERROR, {
|
|
166
|
+
adapter: 'memcache',
|
|
167
|
+
operation: 'close',
|
|
168
|
+
cause: error instanceof Error ? error : undefined,
|
|
169
|
+
});
|
|
376
170
|
}
|
|
377
171
|
}
|
|
378
172
|
}
|