@nest-omni/core 4.1.3-1 → 4.1.3-11

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 (249) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +39 -1
  3. package/audit/controllers/audit.controller.d.ts +24 -0
  4. package/audit/controllers/audit.controller.js +24 -0
  5. package/audit/decorators/audit-controller.decorator.d.ts +9 -1
  6. package/audit/decorators/audit-controller.decorator.js +11 -2
  7. package/audit/decorators/audit-operation.decorator.d.ts +45 -0
  8. package/audit/decorators/audit-operation.decorator.js +49 -0
  9. package/audit/decorators/entity-audit.decorator.d.ts +76 -1
  10. package/audit/decorators/entity-audit.decorator.js +135 -3
  11. package/audit/decorators/index.d.ts +1 -0
  12. package/audit/decorators/index.js +1 -0
  13. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  14. package/audit/dto/audit-log-query.dto.js +3 -0
  15. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  16. package/audit/dto/begin-transaction.dto.js +3 -0
  17. package/audit/dto/compare-entities.dto.d.ts +3 -0
  18. package/audit/dto/compare-entities.dto.js +3 -0
  19. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  20. package/audit/dto/pre-check-restore.dto.js +3 -0
  21. package/audit/dto/restore-entity.dto.d.ts +3 -0
  22. package/audit/dto/restore-entity.dto.js +3 -0
  23. package/audit/entities/entity-audit-log.entity.d.ts +8 -0
  24. package/audit/entities/entity-audit-log.entity.js +33 -1
  25. package/audit/entities/entity-transaction.entity.d.ts +10 -0
  26. package/audit/entities/entity-transaction.entity.js +33 -1
  27. package/audit/entities/index.d.ts +2 -0
  28. package/audit/entities/index.js +2 -0
  29. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  30. package/audit/entities/manual-operation-log.entity.js +4 -0
  31. package/audit/entities/operation-template.entity.d.ts +4 -0
  32. package/audit/entities/operation-template.entity.js +4 -0
  33. package/audit/enums/audit.enums.d.ts +45 -5
  34. package/audit/enums/audit.enums.js +47 -4
  35. package/audit/index.d.ts +3 -1
  36. package/audit/index.js +30 -1
  37. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  38. package/audit/interceptors/audit.interceptor.js +23 -1
  39. package/audit/interfaces/audit.interfaces.d.ts +182 -2
  40. package/audit/services/audit-context.service.d.ts +15 -0
  41. package/audit/services/audit-context.service.js +15 -0
  42. package/audit/services/audit-strategy.service.d.ts +6 -0
  43. package/audit/services/audit-strategy.service.js +13 -0
  44. package/audit/services/entity-audit.service.d.ts +129 -3
  45. package/audit/services/entity-audit.service.js +301 -6
  46. package/audit/services/index.d.ts +2 -0
  47. package/audit/services/index.js +2 -0
  48. package/audit/services/manual-audit-log.service.d.ts +124 -0
  49. package/audit/services/manual-audit-log.service.js +138 -0
  50. package/audit/services/multi-database.service.d.ts +12 -0
  51. package/audit/services/multi-database.service.js +12 -0
  52. package/audit/services/operation-description.service.d.ts +59 -0
  53. package/audit/services/operation-description.service.js +76 -2
  54. package/audit/services/transaction-audit.service.d.ts +30 -0
  55. package/audit/services/transaction-audit.service.js +47 -0
  56. package/audit/subscribers/entity-audit.subscriber.d.ts +15 -0
  57. package/audit/subscribers/entity-audit.subscriber.js +29 -1
  58. package/cache/cache-metrics.service.d.ts +67 -0
  59. package/cache/cache-metrics.service.js +68 -4
  60. package/cache/cache-serialization.service.d.ts +31 -0
  61. package/cache/cache-serialization.service.js +25 -0
  62. package/cache/cache.constants.d.ts +9 -0
  63. package/cache/cache.constants.js +9 -0
  64. package/cache/cache.health.d.ts +26 -0
  65. package/cache/cache.health.js +30 -0
  66. package/cache/cache.module.d.ts +86 -0
  67. package/cache/cache.module.js +71 -0
  68. package/cache/cache.service.d.ts +140 -0
  69. package/cache/cache.service.js +157 -0
  70. package/cache/cache.warmup.service.d.ts +39 -0
  71. package/cache/cache.warmup.service.js +32 -0
  72. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  73. package/cache/decorators/cache-evict.decorator.js +56 -0
  74. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  75. package/cache/decorators/cache-put.decorator.js +39 -0
  76. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  77. package/cache/decorators/cacheable.decorator.js +55 -0
  78. package/cache/dependencies/callback.dependency.d.ts +33 -0
  79. package/cache/dependencies/callback.dependency.js +39 -1
  80. package/cache/dependencies/chain.dependency.d.ts +28 -0
  81. package/cache/dependencies/chain.dependency.js +34 -0
  82. package/cache/dependencies/db.dependency.d.ts +45 -0
  83. package/cache/dependencies/db.dependency.js +48 -1
  84. package/cache/dependencies/file.dependency.d.ts +32 -0
  85. package/cache/dependencies/file.dependency.js +34 -0
  86. package/cache/dependencies/tag.dependency.d.ts +36 -0
  87. package/cache/dependencies/tag.dependency.js +36 -0
  88. package/cache/dependencies/time.dependency.d.ts +43 -0
  89. package/cache/dependencies/time.dependency.js +43 -0
  90. package/cache/examples/basic-usage.d.ts +15 -0
  91. package/cache/examples/basic-usage.js +62 -8
  92. package/cache/index.js +9 -0
  93. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  94. package/cache/interfaces/cache-options.interface.d.ts +81 -0
  95. package/cache/interfaces/cache-options.interface.js +6 -0
  96. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  97. package/cache/providers/base-cache.provider.d.ts +14 -0
  98. package/cache/providers/base-cache.provider.js +16 -0
  99. package/cache/providers/cls-cache.provider.d.ts +20 -0
  100. package/cache/providers/cls-cache.provider.js +28 -0
  101. package/cache/providers/memory-cache.provider.d.ts +23 -0
  102. package/cache/providers/memory-cache.provider.js +26 -0
  103. package/cache/providers/redis-cache.provider.d.ts +26 -0
  104. package/cache/providers/redis-cache.provider.js +29 -0
  105. package/cache/utils/dependency-manager.util.d.ts +52 -0
  106. package/cache/utils/dependency-manager.util.js +59 -0
  107. package/cache/utils/key-generator.util.d.ts +42 -0
  108. package/cache/utils/key-generator.util.js +53 -1
  109. package/common/abstract.entity.d.ts +14 -0
  110. package/common/abstract.entity.js +14 -0
  111. package/common/boilerplate.polyfill.d.ts +142 -4
  112. package/common/boilerplate.polyfill.js +24 -100
  113. package/common/dto/dto-container.d.ts +16 -0
  114. package/common/dto/dto-container.js +20 -0
  115. package/common/dto/dto-decorators.d.ts +18 -0
  116. package/common/dto/dto-decorators.js +14 -0
  117. package/common/dto/dto-extensions.d.ts +11 -0
  118. package/common/dto/dto-extensions.js +9 -0
  119. package/common/dto/dto-service-accessor.d.ts +17 -0
  120. package/common/dto/dto-service-accessor.js +18 -0
  121. package/common/dto/dto-transformer.d.ts +12 -0
  122. package/common/dto/dto-transformer.js +9 -0
  123. package/common/dto/index.js +2 -0
  124. package/common/examples/paginate-and-map.example.d.ts +6 -0
  125. package/common/examples/paginate-and-map.example.js +26 -0
  126. package/common/utils.d.ts +15 -0
  127. package/common/utils.js +15 -0
  128. package/constants/language-code.js +1 -0
  129. package/decorators/field.decorators.js +8 -1
  130. package/decorators/property.decorators.js +1 -0
  131. package/decorators/public-route.decorator.js +1 -0
  132. package/decorators/transform.decorators.d.ts +27 -0
  133. package/decorators/transform.decorators.js +29 -0
  134. package/decorators/translate.decorator.js +1 -0
  135. package/decorators/user.decorator.js +1 -0
  136. package/decorators/validator.decorators.d.ts +8 -18
  137. package/decorators/validator.decorators.js +22 -190
  138. package/filters/constraint-errors.js +1 -0
  139. package/helpers/common.helper.d.ts +13 -0
  140. package/helpers/common.helper.js +13 -0
  141. package/http-client/config/http-client.config.d.ts +15 -0
  142. package/http-client/config/http-client.config.js +25 -9
  143. package/http-client/decorators/http-client.decorators.d.ts +63 -0
  144. package/http-client/decorators/http-client.decorators.js +71 -3
  145. package/http-client/entities/http-log.entity.d.ts +229 -0
  146. package/http-client/entities/http-log.entity.js +6 -1
  147. package/http-client/errors/http-client.errors.d.ts +57 -0
  148. package/http-client/errors/http-client.errors.js +58 -0
  149. package/http-client/examples/advanced-usage.example.d.ts +41 -0
  150. package/http-client/examples/advanced-usage.example.js +68 -24
  151. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  152. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  153. package/http-client/examples/basic-usage.example.d.ts +60 -0
  154. package/http-client/examples/basic-usage.example.js +60 -0
  155. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  156. package/http-client/examples/multi-api-configuration.example.js +76 -5
  157. package/http-client/http-client.module.d.ts +13 -0
  158. package/http-client/http-client.module.js +20 -5
  159. package/http-client/index.js +8 -0
  160. package/http-client/interfaces/api-client-config.interface.d.ts +125 -0
  161. package/http-client/interfaces/api-client-config.interface.js +3 -0
  162. package/http-client/interfaces/http-client-config.interface.d.ts +60 -0
  163. package/http-client/services/api-client-registry.service.d.ts +57 -0
  164. package/http-client/services/api-client-registry.service.js +84 -1
  165. package/http-client/services/cache.service.d.ts +52 -0
  166. package/http-client/services/cache.service.js +72 -3
  167. package/http-client/services/circuit-breaker.service.d.ts +46 -0
  168. package/http-client/services/circuit-breaker.service.js +52 -0
  169. package/http-client/services/http-client.service.d.ts +67 -0
  170. package/http-client/services/http-client.service.js +105 -4
  171. package/http-client/services/http-log-query.service.d.ts +83 -0
  172. package/http-client/services/http-log-query.service.js +122 -1
  173. package/http-client/services/http-replay.service.d.ts +101 -0
  174. package/http-client/services/http-replay.service.js +86 -0
  175. package/http-client/services/log-cleanup.service.d.ts +63 -0
  176. package/http-client/services/log-cleanup.service.js +54 -2
  177. package/http-client/services/logging.service.d.ts +40 -0
  178. package/http-client/services/logging.service.js +53 -0
  179. package/http-client/utils/call-stack-extractor.util.d.ts +37 -0
  180. package/http-client/utils/call-stack-extractor.util.js +48 -0
  181. package/http-client/utils/context-extractor.util.d.ts +49 -0
  182. package/http-client/utils/context-extractor.util.js +52 -0
  183. package/http-client/utils/curl-generator.util.d.ts +21 -0
  184. package/http-client/utils/curl-generator.util.js +44 -3
  185. package/http-client/utils/request-id.util.d.ts +18 -0
  186. package/http-client/utils/request-id.util.js +20 -0
  187. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  188. package/http-client/utils/retry-recorder.util.js +44 -0
  189. package/i18n/en_US/validation.json +2 -1
  190. package/i18n/zh_CN/validation.json +2 -1
  191. package/index.js +8 -0
  192. package/interceptors/translation-interceptor.service.js +5 -0
  193. package/package.json +1 -1
  194. package/providers/context.provider.js +2 -0
  195. package/providers/generator.provider.d.ts +4 -0
  196. package/providers/generator.provider.js +4 -0
  197. package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
  198. package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
  199. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  200. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  201. package/redis-lock/index.d.ts +2 -0
  202. package/redis-lock/index.js +8 -1
  203. package/redis-lock/lock-heartbeat.service.d.ts +78 -0
  204. package/redis-lock/lock-heartbeat.service.js +222 -0
  205. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  206. package/redis-lock/redis-lock.decorator.js +120 -0
  207. package/redis-lock/redis-lock.module.d.ts +66 -0
  208. package/redis-lock/redis-lock.module.js +175 -70
  209. package/redis-lock/redis-lock.service.d.ts +278 -0
  210. package/redis-lock/redis-lock.service.js +282 -12
  211. package/setup/bootstrap.setup.js +20 -0
  212. package/setup/mode.setup.d.ts +44 -0
  213. package/setup/mode.setup.js +44 -0
  214. package/setup/schedule.decorator.d.ts +227 -0
  215. package/setup/schedule.decorator.js +235 -12
  216. package/setup/worker.decorator.d.ts +86 -0
  217. package/setup/worker.decorator.js +88 -0
  218. package/shared/serviceRegistryModule.js +27 -14
  219. package/shared/services/api-config.service.d.ts +3 -0
  220. package/shared/services/api-config.service.js +20 -9
  221. package/validator-json/decorators.d.ts +17 -0
  222. package/validator-json/decorators.js +17 -2
  223. package/validator-json/default.d.ts +6 -0
  224. package/validator-json/default.js +30 -2
  225. package/validator-json/defaultConverters.js +1 -0
  226. package/validator-json/options.d.ts +23 -0
  227. package/validators/common-validators.d.ts +143 -0
  228. package/validators/common-validators.js +249 -0
  229. package/validators/custom-validate.examples.d.ts +96 -0
  230. package/validators/custom-validate.examples.js +400 -0
  231. package/validators/custom-validate.validator.d.ts +134 -0
  232. package/validators/custom-validate.validator.js +214 -0
  233. package/validators/index.d.ts +2 -0
  234. package/validators/index.js +2 -0
  235. package/validators/is-exists.validator.d.ts +18 -4
  236. package/validators/is-exists.validator.js +67 -6
  237. package/validators/is-unique.validator.d.ts +32 -5
  238. package/validators/is-unique.validator.js +99 -17
  239. package/validators/skip-empty.validator.d.ts +5 -0
  240. package/validators/skip-empty.validator.js +5 -0
  241. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  242. package/vault/vault-config.loader.d.ts +30 -0
  243. package/vault/vault-config.loader.js +48 -1
  244. package/vault/vault-config.service.d.ts +53 -0
  245. package/vault/vault-config.service.js +57 -0
  246. package/vault/vault.module.d.ts +4 -0
  247. package/vault/vault.module.js +4 -0
  248. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  249. package/decorators/examples/validation-decorators.example.js +0 -331
package/cache/index.js CHANGED
@@ -1,14 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.KeyGenerator = exports.DependencyManager = exports.CacheLayer = exports.TimeDependency = exports.TagDependency = exports.FileDependency = exports.DbDependency = exports.ChainDependency = exports.CallbackDependency = exports.REDIS_CLIENT = exports.BaseCacheProvider = exports.RedisCacheProvider = exports.MemoryCacheProvider = exports.ClsCacheProvider = exports.setCacheService = exports.getCacheService = exports.CachePut = exports.CacheEvict = exports.Cacheable = exports.CacheSerializationService = exports.CacheMetricsService = exports.CacheWarmupService = exports.CacheHealthChecker = exports.CacheService = exports.CACHE_COMPRESSION_THRESHOLD = exports.CACHE_COMPRESSION_ENABLED = exports.CACHE_SERVICE = exports.CacheModule = void 0;
4
+ // Module
4
5
  var cache_module_1 = require("./cache.module");
5
6
  Object.defineProperty(exports, "CacheModule", { enumerable: true, get: function () { return cache_module_1.CacheModule; } });
6
7
  Object.defineProperty(exports, "CACHE_SERVICE", { enumerable: true, get: function () { return cache_module_1.CACHE_SERVICE; } });
8
+ // Constants
7
9
  var cache_constants_1 = require("./cache.constants");
8
10
  Object.defineProperty(exports, "CACHE_COMPRESSION_ENABLED", { enumerable: true, get: function () { return cache_constants_1.CACHE_COMPRESSION_ENABLED; } });
9
11
  Object.defineProperty(exports, "CACHE_COMPRESSION_THRESHOLD", { enumerable: true, get: function () { return cache_constants_1.CACHE_COMPRESSION_THRESHOLD; } });
12
+ // Service
10
13
  var cache_service_1 = require("./cache.service");
11
14
  Object.defineProperty(exports, "CacheService", { enumerable: true, get: function () { return cache_service_1.CacheService; } });
15
+ // Additional Services
12
16
  var cache_health_1 = require("./cache.health");
13
17
  Object.defineProperty(exports, "CacheHealthChecker", { enumerable: true, get: function () { return cache_health_1.CacheHealthChecker; } });
14
18
  var cache_warmup_service_1 = require("./cache.warmup.service");
@@ -17,12 +21,14 @@ var cache_metrics_service_1 = require("./cache-metrics.service");
17
21
  Object.defineProperty(exports, "CacheMetricsService", { enumerable: true, get: function () { return cache_metrics_service_1.CacheMetricsService; } });
18
22
  var cache_serialization_service_1 = require("./cache-serialization.service");
19
23
  Object.defineProperty(exports, "CacheSerializationService", { enumerable: true, get: function () { return cache_serialization_service_1.CacheSerializationService; } });
24
+ // Decorators
20
25
  var decorators_1 = require("./decorators");
21
26
  Object.defineProperty(exports, "Cacheable", { enumerable: true, get: function () { return decorators_1.Cacheable; } });
22
27
  Object.defineProperty(exports, "CacheEvict", { enumerable: true, get: function () { return decorators_1.CacheEvict; } });
23
28
  Object.defineProperty(exports, "CachePut", { enumerable: true, get: function () { return decorators_1.CachePut; } });
24
29
  Object.defineProperty(exports, "getCacheService", { enumerable: true, get: function () { return decorators_1.getCacheService; } });
25
30
  Object.defineProperty(exports, "setCacheService", { enumerable: true, get: function () { return decorators_1.setCacheService; } });
31
+ // Providers
26
32
  var providers_1 = require("./providers");
27
33
  Object.defineProperty(exports, "ClsCacheProvider", { enumerable: true, get: function () { return providers_1.ClsCacheProvider; } });
28
34
  Object.defineProperty(exports, "MemoryCacheProvider", { enumerable: true, get: function () { return providers_1.MemoryCacheProvider; } });
@@ -30,6 +36,7 @@ Object.defineProperty(exports, "RedisCacheProvider", { enumerable: true, get: fu
30
36
  Object.defineProperty(exports, "BaseCacheProvider", { enumerable: true, get: function () { return providers_1.BaseCacheProvider; } });
31
37
  var redis_cache_provider_1 = require("./providers/redis-cache.provider");
32
38
  Object.defineProperty(exports, "REDIS_CLIENT", { enumerable: true, get: function () { return redis_cache_provider_1.REDIS_CLIENT; } });
39
+ // Dependencies
33
40
  var dependencies_1 = require("./dependencies");
34
41
  Object.defineProperty(exports, "CallbackDependency", { enumerable: true, get: function () { return dependencies_1.CallbackDependency; } });
35
42
  Object.defineProperty(exports, "ChainDependency", { enumerable: true, get: function () { return dependencies_1.ChainDependency; } });
@@ -37,8 +44,10 @@ Object.defineProperty(exports, "DbDependency", { enumerable: true, get: function
37
44
  Object.defineProperty(exports, "FileDependency", { enumerable: true, get: function () { return dependencies_1.FileDependency; } });
38
45
  Object.defineProperty(exports, "TagDependency", { enumerable: true, get: function () { return dependencies_1.TagDependency; } });
39
46
  Object.defineProperty(exports, "TimeDependency", { enumerable: true, get: function () { return dependencies_1.TimeDependency; } });
47
+ // Interfaces
40
48
  var interfaces_1 = require("./interfaces");
41
49
  Object.defineProperty(exports, "CacheLayer", { enumerable: true, get: function () { return interfaces_1.CacheLayer; } });
50
+ // Utils (advanced usage)
42
51
  var utils_1 = require("./utils");
43
52
  Object.defineProperty(exports, "DependencyManager", { enumerable: true, get: function () { return utils_1.DependencyManager; } });
44
53
  Object.defineProperty(exports, "KeyGenerator", { enumerable: true, get: function () { return utils_1.KeyGenerator; } });
@@ -1,11 +1,64 @@
1
+ /**
2
+ * Cache dependency interface - similar to Yii2 cache dependency system
3
+ *
4
+ * A cache dependency represents a dependency relationship between cached data
5
+ * and some external state. When the external state changes, the cached data
6
+ * becomes invalid.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Tag-based dependency
11
+ * new TagDependency(['user-list'])
12
+ *
13
+ * // Database-based dependency
14
+ * new DbDependency('SELECT MAX(updated_at) FROM users WHERE id = ?', [userId])
15
+ *
16
+ * // Callback-based dependency
17
+ * new CallbackDependency(() => ConfigService.get('app.version'))
18
+ * ```
19
+ */
1
20
  export interface CacheDependency {
21
+ /**
22
+ * Get a unique key that identifies this dependency
23
+ * This key is used to store the dependency state
24
+ *
25
+ * @returns Unique dependency key
26
+ */
2
27
  getKey(): string;
28
+ /**
29
+ * Get the current state/value of this dependency
30
+ * This value will be compared with stored state to detect changes
31
+ *
32
+ * @returns Current dependency data/state
33
+ */
3
34
  getData(): Promise<any>;
35
+ /**
36
+ * Check if the dependency has changed by comparing old data with current data
37
+ *
38
+ * @param oldData - Previously stored dependency data
39
+ * @returns true if dependency has changed, false otherwise
40
+ */
4
41
  isChanged(oldData: any): Promise<boolean>;
42
+ /**
43
+ * Reset/clear the dependency state
44
+ * Used when manually invalidating dependencies
45
+ */
5
46
  reset?(): Promise<void>;
6
47
  }
48
+ /**
49
+ * Serialized dependency data stored alongside cached values
50
+ */
7
51
  export interface DependencyData {
52
+ /**
53
+ * Dependency key
54
+ */
8
55
  key: string;
56
+ /**
57
+ * Dependency state snapshot at cache time
58
+ */
9
59
  data: any;
60
+ /**
61
+ * Timestamp when dependency was captured
62
+ */
10
63
  timestamp: number;
11
64
  }
@@ -1,32 +1,113 @@
1
1
  import type { CacheDependency } from './cache-dependency.interface';
2
+ /**
3
+ * Cache layer enum - defines the three-tier cache architecture
4
+ */
2
5
  export declare enum CacheLayer {
6
+ /** L1: Request-level cache (nestjs-cls) - fastest, scoped to request */
3
7
  CLS = "cls",
8
+ /** L2: Process-level cache (native Map) - fast, scoped to process */
4
9
  MEMORY = "memory",
10
+ /** L3: Distributed cache (Redis) - persistent, shared across processes */
5
11
  REDIS = "redis"
6
12
  }
13
+ /**
14
+ * Cache configuration options
15
+ */
7
16
  export interface CacheOptions {
17
+ /**
18
+ * Time to live in milliseconds
19
+ * @example 300_000 // 5 minutes
20
+ */
8
21
  ttl?: number;
22
+ /**
23
+ * Cache layers to use
24
+ * @default [CacheLayer.MEMORY, CacheLayer.REDIS]
25
+ */
9
26
  layers?: CacheLayer[];
27
+ /**
28
+ * Key prefix for namespacing
29
+ * @example 'user:' will result in keys like 'user:123'
30
+ */
10
31
  prefix?: string;
32
+ /**
33
+ * Condition function to determine if value should be cached
34
+ * @param args - Method arguments
35
+ * @returns true to cache, false to skip
36
+ */
11
37
  condition?: (...args: any[]) => boolean | Promise<boolean>;
38
+ /**
39
+ * Cache dependencies - cache will be invalidated when dependencies change
40
+ * Similar to Yii2 cache dependency system
41
+ */
12
42
  dependencies?: CacheDependency[];
43
+ /**
44
+ * Whether to backfill upper cache layers when value is found in lower layer
45
+ * @default true
46
+ */
13
47
  backfill?: boolean;
48
+ /**
49
+ * Namespace for grouping related cache keys
50
+ */
14
51
  namespace?: string;
15
52
  }
53
+ /**
54
+ * Options for cache decorator key generation
55
+ */
16
56
  export interface CacheKeyOptions {
57
+ /**
58
+ * Static key or key generator function
59
+ */
17
60
  key?: string | ((...args: any[]) => string);
61
+ /**
62
+ * Key prefix
63
+ */
18
64
  prefix?: string;
65
+ /**
66
+ * Whether to include all method arguments in key generation
67
+ * @default false
68
+ */
19
69
  includeAllArgs?: boolean;
20
70
  }
71
+ /**
72
+ * Options for @Cacheable decorator
73
+ */
21
74
  export interface CacheableOptions extends CacheOptions, CacheKeyOptions {
22
75
  }
76
+ /**
77
+ * Options for @CacheEvict decorator
78
+ */
23
79
  export interface CacheEvictOptions {
80
+ /**
81
+ * Keys to evict (can be static strings or generator functions)
82
+ */
24
83
  keys?: Array<string | ((...args: any[]) => string)>;
84
+ /**
85
+ * Patterns to match for eviction (supports wildcards)
86
+ * @example ['user:*', 'posts:list:*']
87
+ */
25
88
  patterns?: string[];
89
+ /**
90
+ * Tags to invalidate
91
+ */
26
92
  tags?: string[];
93
+ /**
94
+ * Cache layers to evict from
95
+ */
27
96
  layers?: CacheLayer[];
97
+ /**
98
+ * Condition to determine if eviction should occur
99
+ * @param args - Method arguments
100
+ * @param result - Method return value
101
+ */
28
102
  condition?: (...args: any[]) => boolean | Promise<boolean>;
103
+ /**
104
+ * Whether to evict before or after method execution
105
+ * @default 'after'
106
+ */
29
107
  timing?: 'before' | 'after';
30
108
  }
109
+ /**
110
+ * Options for @CachePut decorator
111
+ */
31
112
  export interface CachePutOptions extends CacheOptions, CacheKeyOptions {
32
113
  }
@@ -1,9 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CacheLayer = void 0;
4
+ /**
5
+ * Cache layer enum - defines the three-tier cache architecture
6
+ */
4
7
  var CacheLayer;
5
8
  (function (CacheLayer) {
9
+ /** L1: Request-level cache (nestjs-cls) - fastest, scoped to request */
6
10
  CacheLayer["CLS"] = "cls";
11
+ /** L2: Process-level cache (native Map) - fast, scoped to process */
7
12
  CacheLayer["MEMORY"] = "memory";
13
+ /** L3: Distributed cache (Redis) - persistent, shared across processes */
8
14
  CacheLayer["REDIS"] = "redis";
9
15
  })(CacheLayer || (exports.CacheLayer = CacheLayer = {}));
@@ -1,28 +1,106 @@
1
+ /**
2
+ * Base cache provider interface
3
+ * All cache providers (CLS, Memory, Redis) implement this interface
4
+ */
1
5
  export interface CacheProvider {
6
+ /**
7
+ * Get value from cache
8
+ *
9
+ * @param key - Cache key
10
+ * @returns Cached value or null if not found
11
+ */
2
12
  get<T>(key: string): Promise<T | null>;
13
+ /**
14
+ * Set value in cache
15
+ *
16
+ * @param key - Cache key
17
+ * @param value - Value to cache
18
+ * @param ttl - Time to live in milliseconds
19
+ */
3
20
  set<T>(key: string, value: T, ttl?: number): Promise<void>;
21
+ /**
22
+ * Delete value from cache
23
+ *
24
+ * @param key - Cache key or array of keys
25
+ */
4
26
  delete(key: string | string[]): Promise<void>;
27
+ /**
28
+ * Delete keys matching a pattern (supports wildcards)
29
+ *
30
+ * @param pattern - Pattern to match (e.g., 'user:*')
31
+ * @returns Number of keys deleted
32
+ */
5
33
  deletePattern?(pattern: string): Promise<number>;
34
+ /**
35
+ * Clear all cache entries
36
+ */
6
37
  clear(): Promise<void>;
38
+ /**
39
+ * Check if a key exists in cache
40
+ *
41
+ * @param key - Cache key
42
+ */
7
43
  has(key: string): Promise<boolean>;
44
+ /**
45
+ * Get multiple values at once
46
+ *
47
+ * @param keys - Array of cache keys
48
+ * @returns Array of values (null for missing keys)
49
+ */
8
50
  mget<T>(keys: string[]): Promise<(T | null)[]>;
51
+ /**
52
+ * Set multiple values at once
53
+ *
54
+ * @param items - Array of key-value pairs
55
+ * @param ttl - Time to live in milliseconds
56
+ */
9
57
  mset(items: Array<{
10
58
  key: string;
11
59
  value: any;
12
60
  }>, ttl?: number): Promise<void>;
61
+ /**
62
+ * Get provider name
63
+ */
13
64
  getName(): string;
14
65
  }
66
+ /**
67
+ * Cache statistics
68
+ */
15
69
  export interface CacheStats {
70
+ /**
71
+ * Total number of get operations
72
+ */
16
73
  totalGets: number;
74
+ /**
75
+ * Number of cache hits
76
+ */
17
77
  hits: number;
78
+ /**
79
+ * Number of cache misses
80
+ */
18
81
  misses: number;
82
+ /**
83
+ * Hit rate (hits / totalGets)
84
+ */
19
85
  hitRate: number;
86
+ /**
87
+ * Stats per layer
88
+ */
20
89
  byLayer: Record<string, {
21
90
  hits: number;
22
91
  misses: number;
23
92
  hitRate: number;
24
93
  }>;
94
+ /**
95
+ * Total number of set operations
96
+ */
25
97
  totalSets: number;
98
+ /**
99
+ * Total number of delete operations
100
+ */
26
101
  totalDeletes: number;
102
+ /**
103
+ * Total number of clear operations
104
+ */
27
105
  totalClears: number;
28
106
  }
@@ -1,4 +1,7 @@
1
1
  import type { CacheProvider } from '../interfaces/cache-provider.interface';
2
+ /**
3
+ * Base cache provider with common utility methods
4
+ */
2
5
  export declare abstract class BaseCacheProvider implements CacheProvider {
3
6
  abstract get<T>(key: string): Promise<T | null>;
4
7
  abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;
@@ -7,10 +10,21 @@ export declare abstract class BaseCacheProvider implements CacheProvider {
7
10
  abstract clear(): Promise<void>;
8
11
  abstract has(key: string): Promise<boolean>;
9
12
  abstract getName(): string;
13
+ /**
14
+ * Get multiple values at once
15
+ * Default implementation - can be overridden for better performance
16
+ */
10
17
  mget<T>(keys: string[]): Promise<(T | null)[]>;
18
+ /**
19
+ * Set multiple values at once
20
+ * Default implementation - can be overridden for better performance
21
+ */
11
22
  mset(items: Array<{
12
23
  key: string;
13
24
  value: any;
14
25
  }>, ttl?: number): Promise<void>;
26
+ /**
27
+ * Convert wildcard pattern to RegExp
28
+ */
15
29
  protected patternToRegex(pattern: string): RegExp;
16
30
  }
@@ -10,21 +10,37 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BaseCacheProvider = void 0;
13
+ /**
14
+ * Base cache provider with common utility methods
15
+ */
13
16
  class BaseCacheProvider {
17
+ /**
18
+ * Get multiple values at once
19
+ * Default implementation - can be overridden for better performance
20
+ */
14
21
  mget(keys) {
15
22
  return __awaiter(this, void 0, void 0, function* () {
16
23
  const promises = keys.map((key) => this.get(key));
17
24
  return Promise.all(promises);
18
25
  });
19
26
  }
27
+ /**
28
+ * Set multiple values at once
29
+ * Default implementation - can be overridden for better performance
30
+ */
20
31
  mset(items, ttl) {
21
32
  return __awaiter(this, void 0, void 0, function* () {
22
33
  const promises = items.map((item) => this.set(item.key, item.value, ttl));
23
34
  yield Promise.all(promises);
24
35
  });
25
36
  }
37
+ /**
38
+ * Convert wildcard pattern to RegExp
39
+ */
26
40
  patternToRegex(pattern) {
41
+ // Escape special regex characters except *
27
42
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
43
+ // Convert * to .*
28
44
  const regexPattern = escaped.replace(/\*/g, '.*');
29
45
  return new RegExp(`^${regexPattern}$`);
30
46
  }
@@ -1,4 +1,12 @@
1
1
  import { BaseCacheProvider } from './base-cache.provider';
2
+ /**
3
+ * CLS (Continuation Local Storage) cache provider
4
+ *
5
+ * This is the L1 cache layer - request-scoped caching using nestjs-cls.
6
+ * Data stored here is only available within the same request context.
7
+ *
8
+ * Fastest cache layer but limited to single request lifecycle.
9
+ */
2
10
  export declare class ClsCacheProvider extends BaseCacheProvider {
3
11
  private static readonly CACHE_PREFIX;
4
12
  private static readonly KEYS_SET;
@@ -9,8 +17,20 @@ export declare class ClsCacheProvider extends BaseCacheProvider {
9
17
  deletePattern(pattern: string): Promise<number>;
10
18
  clear(): Promise<void>;
11
19
  has(key: string): Promise<boolean>;
20
+ /**
21
+ * Get full key with prefix
22
+ */
12
23
  private getFullKey;
24
+ /**
25
+ * Add key to tracked keys set
26
+ */
13
27
  private addKeyToSet;
28
+ /**
29
+ * Remove key from tracked keys set
30
+ */
14
31
  private removeKeyFromSet;
32
+ /**
33
+ * Get all tracked keys
34
+ */
15
35
  private getAllKeys;
16
36
  }
@@ -12,6 +12,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ClsCacheProvider = void 0;
13
13
  const nestjs_cls_1 = require("nestjs-cls");
14
14
  const base_cache_provider_1 = require("./base-cache.provider");
15
+ /**
16
+ * CLS (Continuation Local Storage) cache provider
17
+ *
18
+ * This is the L1 cache layer - request-scoped caching using nestjs-cls.
19
+ * Data stored here is only available within the same request context.
20
+ *
21
+ * Fastest cache layer but limited to single request lifecycle.
22
+ */
15
23
  class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
16
24
  getName() {
17
25
  return 'CLS';
@@ -25,6 +33,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
25
33
  if (!cached) {
26
34
  return null;
27
35
  }
36
+ // Check TTL
28
37
  if (cached.expiresAt && Date.now() > cached.expiresAt) {
29
38
  yield this.delete(key);
30
39
  return null;
@@ -32,6 +41,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
32
41
  return cached.value;
33
42
  }
34
43
  catch (_a) {
44
+ // CLS might not be available (e.g., outside request context)
35
45
  return null;
36
46
  }
37
47
  });
@@ -46,9 +56,11 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
46
56
  cached.expiresAt = Date.now() + ttl;
47
57
  }
48
58
  store.set(fullKey, cached);
59
+ // Track this key for cleanup
49
60
  this.addKeyToSet(key);
50
61
  }
51
62
  catch (_a) {
63
+ // CLS might not be available, silently fail
52
64
  }
53
65
  });
54
66
  }
@@ -64,6 +76,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
64
76
  }
65
77
  }
66
78
  catch (_a) {
79
+ // CLS might not be available, silently fail
67
80
  }
68
81
  });
69
82
  }
@@ -90,6 +103,7 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
90
103
  yield this.delete(allKeys);
91
104
  }
92
105
  catch (_a) {
106
+ // CLS might not be available, silently fail
93
107
  }
94
108
  });
95
109
  }
@@ -99,9 +113,15 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
99
113
  return value !== null;
100
114
  });
101
115
  }
116
+ /**
117
+ * Get full key with prefix
118
+ */
102
119
  getFullKey(key) {
103
120
  return `${ClsCacheProvider.CACHE_PREFIX}${key}`;
104
121
  }
122
+ /**
123
+ * Add key to tracked keys set
124
+ */
105
125
  addKeyToSet(key) {
106
126
  try {
107
127
  const store = nestjs_cls_1.ClsServiceManager.getClsService();
@@ -110,8 +130,12 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
110
130
  store.set(ClsCacheProvider.KEYS_SET, keys);
111
131
  }
112
132
  catch (_a) {
133
+ // Ignore
113
134
  }
114
135
  }
136
+ /**
137
+ * Remove key from tracked keys set
138
+ */
115
139
  removeKeyFromSet(key) {
116
140
  try {
117
141
  const store = nestjs_cls_1.ClsServiceManager.getClsService();
@@ -122,8 +146,12 @@ class ClsCacheProvider extends base_cache_provider_1.BaseCacheProvider {
122
146
  }
123
147
  }
124
148
  catch (_a) {
149
+ // Ignore
125
150
  }
126
151
  }
152
+ /**
153
+ * Get all tracked keys
154
+ */
127
155
  getAllKeys() {
128
156
  try {
129
157
  const store = nestjs_cls_1.ClsServiceManager.getClsService();
@@ -1,4 +1,12 @@
1
1
  import { BaseCacheProvider } from './base-cache.provider';
2
+ /**
3
+ * Memory cache provider using native Map with TTL support
4
+ *
5
+ * This is the L2 cache layer - process-level caching.
6
+ * Data is stored in memory and shared across all requests in the same process.
7
+ *
8
+ * Faster than Redis but not shared across multiple processes/servers.
9
+ */
2
10
  export declare class MemoryCacheProvider extends BaseCacheProvider {
3
11
  private cache;
4
12
  private keys;
@@ -15,10 +23,25 @@ export declare class MemoryCacheProvider extends BaseCacheProvider {
15
23
  deletePattern(pattern: string): Promise<number>;
16
24
  clear(): Promise<void>;
17
25
  has(key: string): Promise<boolean>;
26
+ /**
27
+ * Get all keys (for debugging/testing)
28
+ */
18
29
  getAllKeys(): string[];
30
+ /**
31
+ * Get cache size
32
+ */
19
33
  getSize(): number;
34
+ /**
35
+ * Clean up expired items (optional maintenance method)
36
+ */
20
37
  cleanup(): number;
38
+ /**
39
+ * Optimized mget with batch cleanup
40
+ */
21
41
  mget<T>(keys: string[]): Promise<(T | null)[]>;
42
+ /**
43
+ * Optimized mset
44
+ */
22
45
  mset(items: Array<{
23
46
  key: string;
24
47
  value: any;
@@ -11,6 +11,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.MemoryCacheProvider = void 0;
13
13
  const base_cache_provider_1 = require("./base-cache.provider");
14
+ /**
15
+ * Memory cache provider using native Map with TTL support
16
+ *
17
+ * This is the L2 cache layer - process-level caching.
18
+ * Data is stored in memory and shared across all requests in the same process.
19
+ *
20
+ * Faster than Redis but not shared across multiple processes/servers.
21
+ */
14
22
  class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
15
23
  constructor(options) {
16
24
  super();
@@ -29,6 +37,7 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
29
37
  if (!item) {
30
38
  return null;
31
39
  }
40
+ // Check if item has expired
32
41
  if (item.expiresAt && Date.now() > item.expiresAt) {
33
42
  this.cache.delete(key);
34
43
  this.keys.delete(key);
@@ -110,6 +119,7 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
110
119
  if (!item) {
111
120
  return false;
112
121
  }
122
+ // Check if item has expired
113
123
  if (item.expiresAt && Date.now() > item.expiresAt) {
114
124
  this.cache.delete(key);
115
125
  this.keys.delete(key);
@@ -122,12 +132,21 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
122
132
  }
123
133
  });
124
134
  }
135
+ /**
136
+ * Get all keys (for debugging/testing)
137
+ */
125
138
  getAllKeys() {
126
139
  return Array.from(this.keys);
127
140
  }
141
+ /**
142
+ * Get cache size
143
+ */
128
144
  getSize() {
129
145
  return this.keys.size;
130
146
  }
147
+ /**
148
+ * Clean up expired items (optional maintenance method)
149
+ */
131
150
  cleanup() {
132
151
  let cleaned = 0;
133
152
  const now = Date.now();
@@ -140,6 +159,9 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
140
159
  }
141
160
  return cleaned;
142
161
  }
162
+ /**
163
+ * Optimized mget with batch cleanup
164
+ */
143
165
  mget(keys) {
144
166
  return __awaiter(this, void 0, void 0, function* () {
145
167
  const results = [];
@@ -150,6 +172,7 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
150
172
  results.push(null);
151
173
  continue;
152
174
  }
175
+ // Check if item has expired
153
176
  if (item.expiresAt && now > item.expiresAt) {
154
177
  this.cache.delete(key);
155
178
  this.keys.delete(key);
@@ -161,6 +184,9 @@ class MemoryCacheProvider extends base_cache_provider_1.BaseCacheProvider {
161
184
  return results;
162
185
  });
163
186
  }
187
+ /**
188
+ * Optimized mset
189
+ */
164
190
  mset(items, ttl) {
165
191
  return __awaiter(this, void 0, void 0, function* () {
166
192
  const promises = items.map((item) => this.set(item.key, item.value, ttl));