@nest-omni/core 4.1.3-2 → 4.1.3-4

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 (235) hide show
  1. package/audit/audit.module.d.ts +10 -0
  2. package/audit/audit.module.js +15 -0
  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 +8 -0
  6. package/audit/decorators/audit-controller.decorator.js +9 -0
  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 +8 -0
  10. package/audit/decorators/entity-audit.decorator.js +9 -0
  11. package/audit/dto/audit-log-query.dto.d.ts +3 -0
  12. package/audit/dto/audit-log-query.dto.js +3 -0
  13. package/audit/dto/begin-transaction.dto.d.ts +3 -0
  14. package/audit/dto/begin-transaction.dto.js +3 -0
  15. package/audit/dto/compare-entities.dto.d.ts +3 -0
  16. package/audit/dto/compare-entities.dto.js +3 -0
  17. package/audit/dto/pre-check-restore.dto.d.ts +3 -0
  18. package/audit/dto/pre-check-restore.dto.js +3 -0
  19. package/audit/dto/restore-entity.dto.d.ts +3 -0
  20. package/audit/dto/restore-entity.dto.js +3 -0
  21. package/audit/entities/entity-audit-log.entity.d.ts +3 -0
  22. package/audit/entities/entity-audit-log.entity.js +3 -0
  23. package/audit/entities/entity-transaction.entity.d.ts +3 -0
  24. package/audit/entities/entity-transaction.entity.js +3 -0
  25. package/audit/entities/manual-operation-log.entity.d.ts +4 -0
  26. package/audit/entities/manual-operation-log.entity.js +4 -0
  27. package/audit/entities/operation-template.entity.d.ts +4 -0
  28. package/audit/entities/operation-template.entity.js +4 -0
  29. package/audit/enums/audit.enums.d.ts +17 -2
  30. package/audit/enums/audit.enums.js +15 -0
  31. package/audit/index.js +10 -0
  32. package/audit/interceptors/audit.interceptor.d.ts +15 -0
  33. package/audit/interceptors/audit.interceptor.js +23 -1
  34. package/audit/interfaces/audit.interfaces.d.ts +42 -0
  35. package/audit/services/audit-context.service.d.ts +15 -0
  36. package/audit/services/audit-context.service.js +15 -0
  37. package/audit/services/audit-strategy.service.d.ts +6 -0
  38. package/audit/services/audit-strategy.service.js +13 -0
  39. package/audit/services/entity-audit.service.d.ts +57 -0
  40. package/audit/services/entity-audit.service.js +91 -0
  41. package/audit/services/manual-audit-log.service.d.ts +124 -0
  42. package/audit/services/manual-audit-log.service.js +138 -0
  43. package/audit/services/multi-database.service.d.ts +12 -0
  44. package/audit/services/multi-database.service.js +12 -0
  45. package/audit/services/operation-description.service.d.ts +59 -0
  46. package/audit/services/operation-description.service.js +76 -2
  47. package/audit/services/transaction-audit.service.d.ts +30 -0
  48. package/audit/services/transaction-audit.service.js +47 -0
  49. package/audit/subscribers/entity-audit.subscriber.d.ts +15 -0
  50. package/audit/subscribers/entity-audit.subscriber.js +29 -1
  51. package/cache/cache-metrics.service.d.ts +67 -0
  52. package/cache/cache-metrics.service.js +68 -4
  53. package/cache/cache-serialization.service.d.ts +31 -0
  54. package/cache/cache-serialization.service.js +25 -0
  55. package/cache/cache.constants.d.ts +9 -0
  56. package/cache/cache.constants.js +9 -0
  57. package/cache/cache.health.d.ts +26 -0
  58. package/cache/cache.health.js +30 -0
  59. package/cache/cache.module.d.ts +86 -0
  60. package/cache/cache.module.js +71 -0
  61. package/cache/cache.service.d.ts +140 -0
  62. package/cache/cache.service.js +157 -0
  63. package/cache/cache.warmup.service.d.ts +39 -0
  64. package/cache/cache.warmup.service.js +32 -0
  65. package/cache/decorators/cache-evict.decorator.d.ts +47 -0
  66. package/cache/decorators/cache-evict.decorator.js +56 -0
  67. package/cache/decorators/cache-put.decorator.d.ts +34 -0
  68. package/cache/decorators/cache-put.decorator.js +39 -0
  69. package/cache/decorators/cacheable.decorator.d.ts +40 -0
  70. package/cache/decorators/cacheable.decorator.js +55 -0
  71. package/cache/dependencies/callback.dependency.d.ts +33 -0
  72. package/cache/dependencies/callback.dependency.js +39 -1
  73. package/cache/dependencies/chain.dependency.d.ts +28 -0
  74. package/cache/dependencies/chain.dependency.js +34 -0
  75. package/cache/dependencies/db.dependency.d.ts +45 -0
  76. package/cache/dependencies/db.dependency.js +48 -1
  77. package/cache/dependencies/file.dependency.d.ts +32 -0
  78. package/cache/dependencies/file.dependency.js +34 -0
  79. package/cache/dependencies/tag.dependency.d.ts +36 -0
  80. package/cache/dependencies/tag.dependency.js +36 -0
  81. package/cache/dependencies/time.dependency.d.ts +43 -0
  82. package/cache/dependencies/time.dependency.js +43 -0
  83. package/cache/examples/basic-usage.d.ts +15 -0
  84. package/cache/examples/basic-usage.js +62 -8
  85. package/cache/index.js +9 -0
  86. package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
  87. package/cache/interfaces/cache-options.interface.d.ts +81 -0
  88. package/cache/interfaces/cache-options.interface.js +6 -0
  89. package/cache/interfaces/cache-provider.interface.d.ts +78 -0
  90. package/cache/providers/base-cache.provider.d.ts +14 -0
  91. package/cache/providers/base-cache.provider.js +16 -0
  92. package/cache/providers/cls-cache.provider.d.ts +20 -0
  93. package/cache/providers/cls-cache.provider.js +28 -0
  94. package/cache/providers/memory-cache.provider.d.ts +23 -0
  95. package/cache/providers/memory-cache.provider.js +26 -0
  96. package/cache/providers/redis-cache.provider.d.ts +26 -0
  97. package/cache/providers/redis-cache.provider.js +29 -0
  98. package/cache/utils/dependency-manager.util.d.ts +52 -0
  99. package/cache/utils/dependency-manager.util.js +59 -0
  100. package/cache/utils/key-generator.util.d.ts +42 -0
  101. package/cache/utils/key-generator.util.js +53 -1
  102. package/common/abstract.entity.d.ts +14 -0
  103. package/common/abstract.entity.js +14 -0
  104. package/common/boilerplate.polyfill.d.ts +142 -0
  105. package/common/boilerplate.polyfill.js +17 -0
  106. package/common/dto/dto-container.d.ts +16 -0
  107. package/common/dto/dto-container.js +20 -0
  108. package/common/dto/dto-decorators.d.ts +18 -0
  109. package/common/dto/dto-decorators.js +14 -0
  110. package/common/dto/dto-extensions.d.ts +11 -0
  111. package/common/dto/dto-extensions.js +9 -0
  112. package/common/dto/dto-service-accessor.d.ts +17 -0
  113. package/common/dto/dto-service-accessor.js +18 -0
  114. package/common/dto/dto-transformer.d.ts +12 -0
  115. package/common/dto/dto-transformer.js +9 -0
  116. package/common/dto/index.js +2 -0
  117. package/common/examples/paginate-and-map.example.d.ts +6 -0
  118. package/common/examples/paginate-and-map.example.js +26 -0
  119. package/common/utils.d.ts +15 -0
  120. package/common/utils.js +15 -0
  121. package/constants/language-code.js +1 -0
  122. package/decorators/field.decorators.js +8 -1
  123. package/decorators/property.decorators.js +1 -0
  124. package/decorators/public-route.decorator.js +1 -0
  125. package/decorators/transform.decorators.d.ts +27 -0
  126. package/decorators/transform.decorators.js +29 -0
  127. package/decorators/translate.decorator.js +1 -0
  128. package/decorators/user.decorator.js +1 -0
  129. package/decorators/validator.decorators.d.ts +8 -18
  130. package/decorators/validator.decorators.js +22 -190
  131. package/filters/constraint-errors.js +1 -0
  132. package/helpers/common.helper.d.ts +13 -0
  133. package/helpers/common.helper.js +13 -0
  134. package/http-client/config/http-client.config.d.ts +15 -0
  135. package/http-client/config/http-client.config.js +25 -9
  136. package/http-client/decorators/http-client.decorators.d.ts +63 -0
  137. package/http-client/decorators/http-client.decorators.js +71 -3
  138. package/http-client/entities/http-log.entity.d.ts +229 -0
  139. package/http-client/entities/http-log.entity.js +6 -1
  140. package/http-client/errors/http-client.errors.d.ts +57 -0
  141. package/http-client/errors/http-client.errors.js +58 -0
  142. package/http-client/examples/advanced-usage.example.d.ts +41 -0
  143. package/http-client/examples/advanced-usage.example.js +68 -24
  144. package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
  145. package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
  146. package/http-client/examples/basic-usage.example.d.ts +60 -0
  147. package/http-client/examples/basic-usage.example.js +60 -0
  148. package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
  149. package/http-client/examples/multi-api-configuration.example.js +76 -5
  150. package/http-client/http-client.module.d.ts +13 -0
  151. package/http-client/http-client.module.js +19 -0
  152. package/http-client/index.js +8 -0
  153. package/http-client/interfaces/api-client-config.interface.d.ts +125 -0
  154. package/http-client/interfaces/api-client-config.interface.js +3 -0
  155. package/http-client/interfaces/http-client-config.interface.d.ts +60 -0
  156. package/http-client/services/api-client-registry.service.d.ts +57 -0
  157. package/http-client/services/api-client-registry.service.js +84 -1
  158. package/http-client/services/cache.service.d.ts +52 -0
  159. package/http-client/services/cache.service.js +72 -3
  160. package/http-client/services/circuit-breaker.service.d.ts +46 -0
  161. package/http-client/services/circuit-breaker.service.js +52 -0
  162. package/http-client/services/http-client.service.d.ts +67 -0
  163. package/http-client/services/http-client.service.js +105 -4
  164. package/http-client/services/http-log-query.service.d.ts +83 -0
  165. package/http-client/services/http-log-query.service.js +122 -1
  166. package/http-client/services/http-replay.service.d.ts +101 -0
  167. package/http-client/services/http-replay.service.js +86 -0
  168. package/http-client/services/log-cleanup.service.d.ts +63 -0
  169. package/http-client/services/log-cleanup.service.js +54 -2
  170. package/http-client/services/logging.service.d.ts +40 -0
  171. package/http-client/services/logging.service.js +53 -0
  172. package/http-client/utils/call-stack-extractor.util.d.ts +37 -0
  173. package/http-client/utils/call-stack-extractor.util.js +48 -0
  174. package/http-client/utils/context-extractor.util.d.ts +49 -0
  175. package/http-client/utils/context-extractor.util.js +52 -0
  176. package/http-client/utils/curl-generator.util.d.ts +21 -0
  177. package/http-client/utils/curl-generator.util.js +44 -3
  178. package/http-client/utils/request-id.util.d.ts +18 -0
  179. package/http-client/utils/request-id.util.js +20 -0
  180. package/http-client/utils/retry-recorder.util.d.ts +42 -0
  181. package/http-client/utils/retry-recorder.util.js +44 -0
  182. package/index.js +8 -0
  183. package/interceptors/translation-interceptor.service.js +5 -0
  184. package/package.json +1 -1
  185. package/providers/context.provider.js +2 -0
  186. package/providers/generator.provider.d.ts +4 -0
  187. package/providers/generator.provider.js +4 -0
  188. package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
  189. package/redis-lock/examples/lock-strategy.examples.js +130 -15
  190. package/redis-lock/index.js +3 -0
  191. package/redis-lock/redis-lock.decorator.d.ts +101 -0
  192. package/redis-lock/redis-lock.decorator.js +120 -0
  193. package/redis-lock/redis-lock.module.d.ts +60 -0
  194. package/redis-lock/redis-lock.module.js +46 -0
  195. package/redis-lock/redis-lock.service.d.ts +251 -0
  196. package/redis-lock/redis-lock.service.js +219 -3
  197. package/setup/bootstrap.setup.js +20 -0
  198. package/setup/mode.setup.d.ts +44 -0
  199. package/setup/mode.setup.js +44 -0
  200. package/setup/schedule.decorator.d.ts +226 -0
  201. package/setup/schedule.decorator.js +214 -1
  202. package/setup/worker.decorator.d.ts +86 -0
  203. package/setup/worker.decorator.js +88 -0
  204. package/shared/serviceRegistryModule.js +5 -1
  205. package/shared/services/api-config.service.d.ts +3 -0
  206. package/shared/services/api-config.service.js +20 -9
  207. package/validator-json/decorators.d.ts +17 -0
  208. package/validator-json/decorators.js +17 -2
  209. package/validator-json/default.d.ts +6 -0
  210. package/validator-json/default.js +30 -2
  211. package/validator-json/defaultConverters.js +1 -0
  212. package/validator-json/options.d.ts +23 -0
  213. package/validators/common-validators.d.ts +143 -0
  214. package/validators/common-validators.js +249 -0
  215. package/validators/custom-validate.examples.d.ts +23 -0
  216. package/validators/custom-validate.examples.js +78 -6
  217. package/validators/custom-validate.validator.d.ts +107 -0
  218. package/validators/custom-validate.validator.js +84 -0
  219. package/validators/index.d.ts +1 -0
  220. package/validators/index.js +1 -0
  221. package/validators/is-exists.validator.d.ts +11 -0
  222. package/validators/is-exists.validator.js +22 -0
  223. package/validators/is-unique.validator.d.ts +11 -0
  224. package/validators/is-unique.validator.js +31 -3
  225. package/validators/skip-empty.validator.d.ts +5 -0
  226. package/validators/skip-empty.validator.js +5 -0
  227. package/vault/interfaces/vault-options.interface.d.ts +9 -0
  228. package/vault/vault-config.loader.d.ts +30 -0
  229. package/vault/vault-config.loader.js +48 -1
  230. package/vault/vault-config.service.d.ts +53 -0
  231. package/vault/vault-config.service.js +57 -0
  232. package/vault/vault.module.d.ts +4 -0
  233. package/vault/vault.module.js +4 -0
  234. package/decorators/examples/validation-decorators.example.d.ts +0 -69
  235. package/decorators/examples/validation-decorators.example.js +0 -331
@@ -1,22 +1,53 @@
1
+ /**
2
+ * Cache serialization options
3
+ */
1
4
  export interface CacheSerializationOptions {
5
+ /** Whether to compress large values */
2
6
  compress?: boolean;
7
+ /** Compression threshold (bytes) */
3
8
  compressThreshold?: number;
4
9
  }
10
+ /**
11
+ * Serialization result
12
+ */
5
13
  export interface SerializationResult {
6
14
  data: Buffer;
7
15
  compressed: boolean;
8
16
  originalSize: number;
9
17
  serializedSize: number;
10
18
  }
19
+ /**
20
+ * Deserialization result
21
+ */
11
22
  export interface DeserializationResult<T> {
12
23
  data: T;
13
24
  wasCompressed: boolean;
14
25
  }
26
+ /**
27
+ * Simple cache serialization service
28
+ *
29
+ * Handles basic data compression for cache values
30
+ */
15
31
  export declare class CacheSerializationService {
16
32
  private readonly logger;
33
+ /**
34
+ * Serialize and optionally compress cache value
35
+ */
17
36
  serialize<T>(value: T, options?: CacheSerializationOptions): Promise<SerializationResult>;
37
+ /**
38
+ * Deserialize and decompress cache value
39
+ */
18
40
  deserialize<T>(buffer: Buffer): Promise<DeserializationResult<T>>;
41
+ /**
42
+ * Serialize value with proper Date handling
43
+ */
19
44
  private serializeWithDates;
45
+ /**
46
+ * Pre-process object to convert Date objects to serializable format
47
+ */
20
48
  private preProcessDates;
49
+ /**
50
+ * Deserialize value with proper Date restoration
51
+ */
21
52
  private deserializeWithDates;
22
53
  }
@@ -22,18 +22,28 @@ const zlib_1 = require("zlib");
22
22
  const util_1 = require("util");
23
23
  const gzipAsync = (0, util_1.promisify)(zlib_1.gzip);
24
24
  const gunzipAsync = (0, util_1.promisify)(zlib_1.gunzip);
25
+ /**
26
+ * Simple cache serialization service
27
+ *
28
+ * Handles basic data compression for cache values
29
+ */
25
30
  let CacheSerializationService = CacheSerializationService_1 = class CacheSerializationService {
26
31
  constructor() {
27
32
  this.logger = new common_1.Logger(CacheSerializationService_1.name);
28
33
  }
34
+ /**
35
+ * Serialize and optionally compress cache value
36
+ */
29
37
  serialize(value_1) {
30
38
  return __awaiter(this, arguments, void 0, function* (value, options = {}) {
31
39
  const { compress = false, compressThreshold = 1024 } = options;
32
40
  try {
41
+ // Serialize the value with date handling
33
42
  const serialized = this.serializeWithDates(value);
34
43
  const originalSize = Buffer.byteLength(serialized, 'utf8');
35
44
  let data;
36
45
  let wasCompressed = false;
46
+ // Compress if enabled and data is large enough
37
47
  if (compress && originalSize >= compressThreshold) {
38
48
  try {
39
49
  data = yield gzipAsync(Buffer.from(serialized, 'utf8'));
@@ -60,12 +70,17 @@ let CacheSerializationService = CacheSerializationService_1 = class CacheSeriali
60
70
  }
61
71
  });
62
72
  }
73
+ /**
74
+ * Deserialize and decompress cache value
75
+ */
63
76
  deserialize(buffer) {
64
77
  return __awaiter(this, void 0, void 0, function* () {
65
78
  try {
66
79
  let dataString;
67
80
  let wasCompressed = false;
81
+ // Try to detect if data is compressed
68
82
  if (buffer.length >= 2 && buffer[0] === 0x1f && buffer[1] === 0x8b) {
83
+ // Gzip magic numbers
69
84
  dataString = (yield gunzipAsync(buffer)).toString('utf8');
70
85
  wasCompressed = true;
71
86
  }
@@ -84,10 +99,17 @@ let CacheSerializationService = CacheSerializationService_1 = class CacheSeriali
84
99
  }
85
100
  });
86
101
  }
102
+ /**
103
+ * Serialize value with proper Date handling
104
+ */
87
105
  serializeWithDates(value) {
106
+ // Pre-process the value to handle Date objects
88
107
  const processed = this.preProcessDates(value);
89
108
  return JSON.stringify(processed);
90
109
  }
110
+ /**
111
+ * Pre-process object to convert Date objects to serializable format
112
+ */
91
113
  preProcessDates(obj) {
92
114
  if (obj === null || obj === undefined) {
93
115
  return obj;
@@ -107,6 +129,9 @@ let CacheSerializationService = CacheSerializationService_1 = class CacheSeriali
107
129
  }
108
130
  return obj;
109
131
  }
132
+ /**
133
+ * Deserialize value with proper Date restoration
134
+ */
110
135
  deserializeWithDates(dataString) {
111
136
  return JSON.parse(dataString, (key, val) => {
112
137
  if (val && typeof val === 'object' && val.__type === 'Date') {
@@ -1,2 +1,11 @@
1
+ /**
2
+ * Cache constants and injection tokens
3
+ */
4
+ /**
5
+ * Injection token for cache compression enabled flag
6
+ */
1
7
  export declare const CACHE_COMPRESSION_ENABLED: unique symbol;
8
+ /**
9
+ * Injection token for cache compression threshold
10
+ */
2
11
  export declare const CACHE_COMPRESSION_THRESHOLD: unique symbol;
@@ -1,5 +1,14 @@
1
1
  "use strict";
2
+ /**
3
+ * Cache constants and injection tokens
4
+ */
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.CACHE_COMPRESSION_THRESHOLD = exports.CACHE_COMPRESSION_ENABLED = void 0;
7
+ /**
8
+ * Injection token for cache compression enabled flag
9
+ */
4
10
  exports.CACHE_COMPRESSION_ENABLED = Symbol('CACHE_COMPRESSION_ENABLED');
11
+ /**
12
+ * Injection token for cache compression threshold
13
+ */
5
14
  exports.CACHE_COMPRESSION_THRESHOLD = Symbol('CACHE_COMPRESSION_THRESHOLD');
@@ -1,4 +1,7 @@
1
1
  import { CacheService } from './cache.service';
2
+ /**
3
+ * Cache health check result
4
+ */
2
5
  export interface CacheHealthResult {
3
6
  status: 'healthy' | 'degraded' | 'unhealthy';
4
7
  layers: {
@@ -22,14 +25,37 @@ export interface CacheHealthResult {
22
25
  timestamp: Date;
23
26
  overallLatency: number;
24
27
  }
28
+ /**
29
+ * Cache health checker
30
+ *
31
+ * Provides health monitoring for all cache layers
32
+ */
25
33
  export declare class CacheHealthChecker {
26
34
  private readonly cacheService;
27
35
  private readonly logger;
28
36
  constructor(cacheService: CacheService);
37
+ /**
38
+ * Check health of all cache layers
39
+ */
29
40
  checkHealth(): Promise<CacheHealthResult>;
41
+ /**
42
+ * Get detailed cache statistics
43
+ */
30
44
  getDetailedStats(): Promise<any>;
45
+ /**
46
+ * Check CLS cache health
47
+ */
31
48
  private checkClsHealth;
49
+ /**
50
+ * Check Memory cache health
51
+ */
32
52
  private checkMemoryHealth;
53
+ /**
54
+ * Check Redis cache health
55
+ */
33
56
  private checkRedisHealth;
57
+ /**
58
+ * Generate recommendations based on health and stats
59
+ */
34
60
  private generateRecommendations;
35
61
  }
@@ -23,11 +23,19 @@ exports.CacheHealthChecker = void 0;
23
23
  const common_1 = require("@nestjs/common");
24
24
  const cache_service_1 = require("./cache.service");
25
25
  const cache_options_interface_1 = require("./interfaces/cache-options.interface");
26
+ /**
27
+ * Cache health checker
28
+ *
29
+ * Provides health monitoring for all cache layers
30
+ */
26
31
  let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
27
32
  constructor(cacheService) {
28
33
  this.cacheService = cacheService;
29
34
  this.logger = new common_1.Logger(CacheHealthChecker_1.name);
30
35
  }
36
+ /**
37
+ * Check health of all cache layers
38
+ */
31
39
  checkHealth() {
32
40
  return __awaiter(this, void 0, void 0, function* () {
33
41
  const startTime = Date.now();
@@ -37,6 +45,7 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
37
45
  redis: yield this.checkRedisHealth(),
38
46
  };
39
47
  const overallLatency = Date.now() - startTime;
48
+ // Determine overall status
40
49
  const layerStatuses = Object.values(results);
41
50
  const healthyCount = layerStatuses.filter((layer) => layer.available).length;
42
51
  const totalCount = layerStatuses.length;
@@ -58,6 +67,9 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
58
67
  };
59
68
  });
60
69
  }
70
+ /**
71
+ * Get detailed cache statistics
72
+ */
61
73
  getDetailedStats() {
62
74
  return __awaiter(this, void 0, void 0, function* () {
63
75
  const stats = this.cacheService.getStats();
@@ -69,10 +81,14 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
69
81
  };
70
82
  });
71
83
  }
84
+ /**
85
+ * Check CLS cache health
86
+ */
72
87
  checkClsHealth() {
73
88
  return __awaiter(this, void 0, void 0, function* () {
74
89
  const startTime = Date.now();
75
90
  try {
91
+ // Try to write and read a test value
76
92
  yield this.cacheService.set('health:cls:test', 'test-value', {
77
93
  layers: [cache_options_interface_1.CacheLayer.CLS],
78
94
  });
@@ -101,10 +117,14 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
101
117
  }
102
118
  });
103
119
  }
120
+ /**
121
+ * Check Memory cache health
122
+ */
104
123
  checkMemoryHealth() {
105
124
  return __awaiter(this, void 0, void 0, function* () {
106
125
  const startTime = Date.now();
107
126
  try {
127
+ // Try to write and read a test value
108
128
  yield this.cacheService.set('health:memory:test', 'test-value', {
109
129
  layers: [cache_options_interface_1.CacheLayer.MEMORY],
110
130
  });
@@ -113,6 +133,7 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
113
133
  });
114
134
  const latency = Date.now() - startTime;
115
135
  if (result === 'test-value') {
136
+ // Get memory cache size (if available)
116
137
  const stats = this.cacheService.getStats();
117
138
  return { available: true, latency, size: stats.totalSets };
118
139
  }
@@ -134,10 +155,14 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
134
155
  }
135
156
  });
136
157
  }
158
+ /**
159
+ * Check Redis cache health
160
+ */
137
161
  checkRedisHealth() {
138
162
  return __awaiter(this, void 0, void 0, function* () {
139
163
  const startTime = Date.now();
140
164
  try {
165
+ // Try to write and read a test value
141
166
  yield this.cacheService.set('health:redis:test', 'test-value', {
142
167
  layers: [cache_options_interface_1.CacheLayer.REDIS],
143
168
  });
@@ -166,8 +191,12 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
166
191
  }
167
192
  });
168
193
  }
194
+ /**
195
+ * Generate recommendations based on health and stats
196
+ */
169
197
  generateRecommendations(health, stats) {
170
198
  const recommendations = [];
199
+ // Health-based recommendations
171
200
  if (!health.layers.redis.available) {
172
201
  recommendations.push('Redis is unavailable. Check Redis connection and configuration.');
173
202
  }
@@ -177,6 +206,7 @@ let CacheHealthChecker = CacheHealthChecker_1 = class CacheHealthChecker {
177
206
  if (health.overallLatency > 100) {
178
207
  recommendations.push('Cache latency is high. Consider optimizing cache operations or increasing resources.');
179
208
  }
209
+ // Statistics-based recommendations
180
210
  if (stats.hitRate < 0.5) {
181
211
  recommendations.push('Cache hit rate is low. Review cache TTL and key patterns.');
182
212
  }
@@ -2,20 +2,106 @@ import { DynamicModule, OnModuleInit } from '@nestjs/common';
2
2
  import type { DataSource } from 'typeorm';
3
3
  import type { Redis } from 'ioredis';
4
4
  import { CacheService } from './cache.service';
5
+ /**
6
+ * Injection token for CacheService
7
+ */
5
8
  export declare const CACHE_SERVICE: unique symbol;
9
+ /**
10
+ * Cache module configuration options
11
+ */
6
12
  export interface CacheModuleOptions {
13
+ /**
14
+ * Whether to make the module global
15
+ * @default true
16
+ */
7
17
  isGlobal?: boolean;
18
+ /**
19
+ * Redis client instance (optional)
20
+ * If not provided, Redis caching will be disabled
21
+ */
8
22
  redisClient?: Redis;
23
+ /**
24
+ * TypeORM DataSource for DbDependency
25
+ * If not provided, DbDependency will throw error when used
26
+ */
9
27
  dataSource?: DataSource;
28
+ /**
29
+ * Default TTL for memory cache in milliseconds
30
+ */
10
31
  memoryTtl?: number;
32
+ /**
33
+ * Namespace for memory cache
34
+ */
11
35
  memoryNamespace?: string;
36
+ /**
37
+ * Enable compression for cache values
38
+ * @default false
39
+ */
12
40
  enableCompression?: boolean;
41
+ /**
42
+ * Compression threshold in bytes
43
+ * @default 1024
44
+ */
13
45
  compressionThreshold?: number;
14
46
  }
47
+ /**
48
+ * Unified cache module with three-tier architecture
49
+ *
50
+ * Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * // Basic usage (without Redis)
55
+ * @Module({
56
+ * imports: [
57
+ * CacheModule.forRoot()
58
+ * ]
59
+ * })
60
+ * export class AppModule {}
61
+ *
62
+ * // With Redis
63
+ * import { RedisModule } from '@songkeys/nestjs-redis';
64
+ *
65
+ * @Module({
66
+ * imports: [
67
+ * RedisModule.forRoot({ ... }),
68
+ * CacheModule.forRootAsync({
69
+ * imports: [RedisModule],
70
+ * inject: [RedisService],
71
+ * useFactory: (redisService: RedisService) => ({
72
+ * redisClient: redisService.getClient()
73
+ * })
74
+ * })
75
+ * ]
76
+ * })
77
+ * export class AppModule {}
78
+ *
79
+ * // With TypeORM DataSource for DbDependency
80
+ * @Module({
81
+ * imports: [
82
+ * TypeOrmModule.forRoot({ ... }),
83
+ * CacheModule.forRootAsync({
84
+ * imports: [TypeOrmModule],
85
+ * inject: [DataSource],
86
+ * useFactory: (dataSource: DataSource) => ({
87
+ * dataSource
88
+ * })
89
+ * })
90
+ * ]
91
+ * })
92
+ * export class AppModule {}
93
+ * ```
94
+ */
15
95
  export declare class CacheModule implements OnModuleInit {
16
96
  private readonly cacheService;
17
97
  constructor(cacheService: CacheService);
98
+ /**
99
+ * Register cache module with options
100
+ */
18
101
  static forRoot(options?: CacheModuleOptions): DynamicModule;
102
+ /**
103
+ * Register cache module asynchronously
104
+ */
19
105
  static forRootAsync(options: {
20
106
  imports?: any[];
21
107
  inject?: any[];
@@ -20,13 +20,68 @@ const dependencies_1 = require("./dependencies");
20
20
  const decorators_1 = require("./decorators");
21
21
  const providers_1 = require("./providers");
22
22
  const cache_constants_1 = require("./cache.constants");
23
+ /**
24
+ * Injection token for CacheService
25
+ */
23
26
  exports.CACHE_SERVICE = Symbol('CACHE_SERVICE');
27
+ /**
28
+ * Unified cache module with three-tier architecture
29
+ *
30
+ * Provides CacheService and cache decorators (@Cacheable, @CacheEvict, @CachePut)
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Basic usage (without Redis)
35
+ * @Module({
36
+ * imports: [
37
+ * CacheModule.forRoot()
38
+ * ]
39
+ * })
40
+ * export class AppModule {}
41
+ *
42
+ * // With Redis
43
+ * import { RedisModule } from '@songkeys/nestjs-redis';
44
+ *
45
+ * @Module({
46
+ * imports: [
47
+ * RedisModule.forRoot({ ... }),
48
+ * CacheModule.forRootAsync({
49
+ * imports: [RedisModule],
50
+ * inject: [RedisService],
51
+ * useFactory: (redisService: RedisService) => ({
52
+ * redisClient: redisService.getClient()
53
+ * })
54
+ * })
55
+ * ]
56
+ * })
57
+ * export class AppModule {}
58
+ *
59
+ * // With TypeORM DataSource for DbDependency
60
+ * @Module({
61
+ * imports: [
62
+ * TypeOrmModule.forRoot({ ... }),
63
+ * CacheModule.forRootAsync({
64
+ * imports: [TypeOrmModule],
65
+ * inject: [DataSource],
66
+ * useFactory: (dataSource: DataSource) => ({
67
+ * dataSource
68
+ * })
69
+ * })
70
+ * ]
71
+ * })
72
+ * export class AppModule {}
73
+ * ```
74
+ */
24
75
  let CacheModule = CacheModule_1 = class CacheModule {
25
76
  constructor(cacheService) {
26
77
  this.cacheService = cacheService;
27
78
  }
79
+ /**
80
+ * Register cache module with options
81
+ */
28
82
  static forRoot(options = {}) {
29
83
  const { isGlobal = true, redisClient, dataSource, memoryTtl, memoryNamespace, enableCompression = false, compressionThreshold = 1024, } = options;
84
+ // Set DataSource for DbDependency if provided
30
85
  if (dataSource) {
31
86
  dependencies_1.DbDependency.setDataSource(dataSource);
32
87
  }
@@ -34,6 +89,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
34
89
  module: CacheModule_1,
35
90
  global: isGlobal,
36
91
  providers: [
92
+ // Providers
37
93
  providers_1.ClsCacheProvider,
38
94
  {
39
95
  provide: providers_1.MemoryCacheProvider,
@@ -42,6 +98,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
42
98
  namespace: memoryNamespace,
43
99
  }),
44
100
  },
101
+ // Redis client provider (optional)
45
102
  ...(redisClient
46
103
  ? [
47
104
  {
@@ -51,6 +108,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
51
108
  ]
52
109
  : []),
53
110
  providers_1.RedisCacheProvider,
111
+ // Compression configuration providers
54
112
  {
55
113
  provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
56
114
  useValue: enableCompression,
@@ -59,12 +117,14 @@ let CacheModule = CacheModule_1 = class CacheModule {
59
117
  provide: cache_constants_1.CACHE_COMPRESSION_THRESHOLD,
60
118
  useValue: compressionThreshold,
61
119
  },
120
+ // Additional services
62
121
  cache_warmup_service_1.CacheWarmupService,
63
122
  cache_metrics_service_1.CacheMetricsService,
64
123
  {
65
124
  provide: cache_serialization_service_1.CacheSerializationService,
66
125
  useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
67
126
  },
127
+ // CacheService
68
128
  {
69
129
  provide: exports.CACHE_SERVICE,
70
130
  useClass: cache_service_1.CacheService,
@@ -80,6 +140,9 @@ let CacheModule = CacheModule_1 = class CacheModule {
80
140
  ],
81
141
  };
82
142
  }
143
+ /**
144
+ * Register cache module asynchronously
145
+ */
83
146
  static forRootAsync(options) {
84
147
  var _a;
85
148
  return {
@@ -87,15 +150,18 @@ let CacheModule = CacheModule_1 = class CacheModule {
87
150
  global: (_a = options.isGlobal) !== null && _a !== void 0 ? _a : true,
88
151
  imports: options.imports || [],
89
152
  providers: [
153
+ // Async options provider
90
154
  {
91
155
  provide: 'CACHE_MODULE_OPTIONS',
92
156
  useFactory: options.useFactory,
93
157
  inject: options.inject || [],
94
158
  },
159
+ // Providers
95
160
  providers_1.ClsCacheProvider,
96
161
  {
97
162
  provide: providers_1.MemoryCacheProvider,
98
163
  useFactory: (moduleOptions) => {
164
+ // Set DataSource for DbDependency if provided
99
165
  if (moduleOptions.dataSource) {
100
166
  dependencies_1.DbDependency.setDataSource(moduleOptions.dataSource);
101
167
  }
@@ -106,18 +172,21 @@ let CacheModule = CacheModule_1 = class CacheModule {
106
172
  },
107
173
  inject: ['CACHE_MODULE_OPTIONS'],
108
174
  },
175
+ // Redis client provider (optional)
109
176
  {
110
177
  provide: providers_1.REDIS_CLIENT,
111
178
  useFactory: (moduleOptions) => moduleOptions.redisClient,
112
179
  inject: ['CACHE_MODULE_OPTIONS'],
113
180
  },
114
181
  providers_1.RedisCacheProvider,
182
+ // Additional services
115
183
  cache_warmup_service_1.CacheWarmupService,
116
184
  cache_metrics_service_1.CacheMetricsService,
117
185
  {
118
186
  provide: cache_serialization_service_1.CacheSerializationService,
119
187
  useFactory: () => new cache_serialization_service_1.CacheSerializationService(),
120
188
  },
189
+ // Compression configuration providers
121
190
  {
122
191
  provide: cache_constants_1.CACHE_COMPRESSION_ENABLED,
123
192
  useFactory: (moduleOptions) => moduleOptions.enableCompression || false,
@@ -128,6 +197,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
128
197
  useFactory: (moduleOptions) => moduleOptions.compressionThreshold || 1024,
129
198
  inject: ['CACHE_MODULE_OPTIONS'],
130
199
  },
200
+ // CacheService
131
201
  {
132
202
  provide: exports.CACHE_SERVICE,
133
203
  useClass: cache_service_1.CacheService,
@@ -144,6 +214,7 @@ let CacheModule = CacheModule_1 = class CacheModule {
144
214
  };
145
215
  }
146
216
  onModuleInit() {
217
+ // Set global cache service for decorators
147
218
  (0, decorators_1.setCacheService)(this.cacheService);
148
219
  }
149
220
  };