@nest-omni/core 3.1.1-9 → 3.1.1

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 (306) hide show
  1. package/.hygen/new/crud/controller.ejs.t +82 -0
  2. package/.hygen/new/crud/create.dto.ejs.t +12 -0
  3. package/.hygen/new/crud/entity.ejs.t +26 -0
  4. package/.hygen/new/crud/get.dto.ejs.t +19 -0
  5. package/.hygen/new/crud/index-dto.ejs.t +29 -0
  6. package/.hygen/new/crud/index-response.dto.ejs.t +18 -0
  7. package/.hygen/new/crud/module.ejs.t +32 -0
  8. package/.hygen/new/crud/prompt.js +89 -0
  9. package/.hygen/new/crud/service.ejs.t +76 -0
  10. package/.hygen/new/crud/update.dto.ejs.t +11 -0
  11. package/.hygen/new/module/controller.ejs.t +93 -0
  12. package/.hygen/new/module/create-command.ejs.t +90 -0
  13. package/.hygen/new/module/create.dto.ejs.t +11 -0
  14. package/.hygen/new/module/dto.ejs.t +24 -0
  15. package/.hygen/new/module/entity.ejs.t +33 -0
  16. package/.hygen/new/module/get-query.ejs.t +57 -0
  17. package/.hygen/new/module/module.ejs.t +44 -0
  18. package/.hygen/new/module/not-found.exception.ejs.t +18 -0
  19. package/.hygen/new/module/page-options.dto.ejs.t +12 -0
  20. package/.hygen/new/module/prompt.js +104 -0
  21. package/.hygen/new/module/repository.ejs.t +16 -0
  22. package/.hygen/new/module/service.ejs.t +139 -0
  23. package/.hygen/new/module/translation-dto.ejs.t +27 -0
  24. package/.hygen/new/module/translation-entity.ejs.t +40 -0
  25. package/.hygen/new/module/translation-repository.ejs.t +16 -0
  26. package/.hygen/new/module/update.dto.ejs.t +10 -0
  27. package/.hygen.js +116 -0
  28. package/cache/cache-metrics.service.d.ts +83 -0
  29. package/cache/cache-metrics.service.js +298 -0
  30. package/cache/cache-serialization.service.d.ts +22 -0
  31. package/cache/cache-serialization.service.js +122 -0
  32. package/cache/cache.constants.d.ts +2 -0
  33. package/cache/cache.constants.js +5 -0
  34. package/cache/cache.health.d.ts +35 -0
  35. package/cache/cache.health.js +193 -0
  36. package/cache/cache.module.d.ts +26 -0
  37. package/cache/cache.module.js +155 -0
  38. package/cache/cache.service.d.ts +37 -0
  39. package/cache/cache.service.js +308 -0
  40. package/cache/cache.warmup.service.d.ts +34 -0
  41. package/cache/cache.warmup.service.js +199 -0
  42. package/cache/decorators/cache-evict.decorator.d.ts +2 -0
  43. package/cache/decorators/cache-evict.decorator.js +72 -0
  44. package/cache/decorators/cache-put.decorator.d.ts +2 -0
  45. package/cache/decorators/cache-put.decorator.js +48 -0
  46. package/cache/decorators/cacheable.decorator.d.ts +4 -0
  47. package/cache/decorators/cacheable.decorator.js +68 -0
  48. package/cache/decorators/index.d.ts +3 -0
  49. package/cache/decorators/index.js +11 -0
  50. package/cache/dependencies/callback.dependency.d.ts +11 -0
  51. package/cache/dependencies/callback.dependency.js +92 -0
  52. package/cache/dependencies/chain.dependency.d.ts +20 -0
  53. package/cache/dependencies/chain.dependency.js +113 -0
  54. package/cache/dependencies/db.dependency.d.ts +15 -0
  55. package/cache/dependencies/db.dependency.js +71 -0
  56. package/cache/dependencies/file.dependency.d.ts +17 -0
  57. package/cache/dependencies/file.dependency.js +63 -0
  58. package/cache/dependencies/index.d.ts +6 -0
  59. package/cache/dependencies/index.js +22 -0
  60. package/cache/dependencies/tag.dependency.d.ts +16 -0
  61. package/cache/dependencies/tag.dependency.js +75 -0
  62. package/cache/dependencies/time.dependency.d.ts +19 -0
  63. package/cache/dependencies/time.dependency.js +71 -0
  64. package/cache/examples/basic-usage.d.ts +58 -0
  65. package/cache/examples/basic-usage.js +379 -0
  66. package/cache/index.d.ts +15 -0
  67. package/cache/index.js +44 -0
  68. package/cache/interfaces/cache-dependency.interface.d.ts +11 -0
  69. package/cache/interfaces/cache-dependency.interface.js +2 -0
  70. package/cache/interfaces/cache-options.interface.d.ts +32 -0
  71. package/cache/interfaces/cache-options.interface.js +9 -0
  72. package/cache/interfaces/cache-provider.interface.d.ts +28 -0
  73. package/cache/interfaces/cache-provider.interface.js +2 -0
  74. package/cache/interfaces/index.d.ts +3 -0
  75. package/cache/interfaces/index.js +19 -0
  76. package/cache/providers/base-cache.provider.d.ts +16 -0
  77. package/cache/providers/base-cache.provider.js +32 -0
  78. package/cache/providers/cls-cache.provider.d.ts +16 -0
  79. package/cache/providers/cls-cache.provider.js +140 -0
  80. package/cache/providers/index.d.ts +4 -0
  81. package/cache/providers/index.js +23 -0
  82. package/cache/providers/memory-cache.provider.d.ts +26 -0
  83. package/cache/providers/memory-cache.provider.js +171 -0
  84. package/cache/providers/redis-cache.provider.d.ts +23 -0
  85. package/cache/providers/redis-cache.provider.js +215 -0
  86. package/cache/utils/dependency-manager.util.d.ts +15 -0
  87. package/cache/utils/dependency-manager.util.js +141 -0
  88. package/cache/utils/index.d.ts +2 -0
  89. package/cache/utils/index.js +18 -0
  90. package/cache/utils/key-generator.util.d.ts +13 -0
  91. package/cache/utils/key-generator.util.js +74 -0
  92. package/common/abstract.entity.d.ts +20 -0
  93. package/common/abstract.entity.js +81 -0
  94. package/common/boilerplate.polyfill.d.ts +50 -0
  95. package/common/boilerplate.polyfill.js +152 -0
  96. package/common/dto/abstract.dto.d.ts +13 -0
  97. package/common/dto/abstract.dto.js +59 -0
  98. package/common/dto/bulk-id.dto.d.ts +3 -0
  99. package/common/dto/bulk-id.dto.js +27 -0
  100. package/common/dto/create-translation.dto.d.ts +5 -0
  101. package/common/dto/create-translation.dto.js +25 -0
  102. package/common/dto/dto-container.d.ts +9 -0
  103. package/common/dto/dto-container.js +59 -0
  104. package/common/dto/dto-decorators.d.ts +18 -0
  105. package/common/dto/dto-decorators.js +59 -0
  106. package/common/dto/dto-extensions.d.ts +12 -0
  107. package/common/dto/dto-extensions.js +63 -0
  108. package/common/dto/dto-service-accessor.d.ts +7 -0
  109. package/common/dto/dto-service-accessor.js +49 -0
  110. package/common/dto/dto-transformer.d.ts +11 -0
  111. package/common/dto/dto-transformer.js +49 -0
  112. package/common/dto/index.d.ts +12 -0
  113. package/common/dto/index.js +28 -0
  114. package/common/dto/page-meta.dto.d.ts +15 -0
  115. package/common/dto/page-meta.dto.js +48 -0
  116. package/common/dto/page-options.dto.d.ts +5 -0
  117. package/common/dto/page-options.dto.js +40 -0
  118. package/common/dto/page.dto.d.ts +11 -0
  119. package/common/dto/page.dto.js +53 -0
  120. package/common/examples/paginate-and-map.example.d.ts +14 -0
  121. package/common/examples/paginate-and-map.example.js +158 -0
  122. package/common/index.d.ts +6 -0
  123. package/common/index.js +22 -0
  124. package/common/snake-naming.strategy.d.ts +11 -0
  125. package/common/snake-naming.strategy.js +37 -0
  126. package/common/types.d.ts +9 -0
  127. package/common/types.js +2 -0
  128. package/common/utils.d.ts +3 -0
  129. package/common/utils.js +24 -0
  130. package/constants/index.d.ts +2 -0
  131. package/constants/index.js +18 -0
  132. package/constants/language-code.d.ts +5 -0
  133. package/constants/language-code.js +9 -0
  134. package/constants/order.d.ts +4 -0
  135. package/constants/order.js +8 -0
  136. package/decorators/api-page-ok-response.decorator.d.ts +5 -0
  137. package/decorators/api-page-ok-response.decorator.js +24 -0
  138. package/decorators/auth-user.decorator.d.ts +1 -0
  139. package/decorators/auth-user.decorator.js +14 -0
  140. package/decorators/controller.decorator.d.ts +1 -0
  141. package/decorators/controller.decorator.js +10 -0
  142. package/decorators/examples/validation-decorators.example.d.ts +69 -0
  143. package/decorators/examples/validation-decorators.example.js +331 -0
  144. package/decorators/field.decorators.d.ts +79 -0
  145. package/decorators/field.decorators.js +499 -0
  146. package/decorators/http.decorators.d.ts +3 -0
  147. package/decorators/http.decorators.js +7 -0
  148. package/decorators/index.d.ts +12 -0
  149. package/decorators/index.js +28 -0
  150. package/decorators/operation.decorator.d.ts +1 -0
  151. package/decorators/operation.decorator.js +6 -0
  152. package/decorators/property.decorators.d.ts +15 -0
  153. package/decorators/property.decorators.js +31 -0
  154. package/decorators/public-route.decorator.d.ts +3 -0
  155. package/decorators/public-route.decorator.js +7 -0
  156. package/decorators/swagger.schema.d.ts +5 -0
  157. package/decorators/swagger.schema.js +78 -0
  158. package/decorators/timestamp-column.decorator.d.ts +1 -0
  159. package/decorators/timestamp-column.decorator.js +27 -0
  160. package/decorators/transform.decorators.d.ts +8 -0
  161. package/decorators/transform.decorators.js +100 -0
  162. package/decorators/translate.decorator.d.ts +5 -0
  163. package/decorators/translate.decorator.js +17 -0
  164. package/decorators/use-dto.decorator.d.ts +4 -0
  165. package/decorators/use-dto.decorator.js +8 -0
  166. package/decorators/user-check.decorator.d.ts +6 -0
  167. package/decorators/user-check.decorator.js +21 -0
  168. package/decorators/user.decorator.d.ts +12 -0
  169. package/decorators/user.decorator.js +44 -0
  170. package/decorators/user_auth.decorator.d.ts +1 -0
  171. package/decorators/user_auth.decorator.js +15 -0
  172. package/decorators/validator.decorators.d.ts +18 -0
  173. package/decorators/validator.decorators.js +193 -0
  174. package/exceptions/file-not-image.exception.d.ts +4 -0
  175. package/exceptions/file-not-image.exception.js +10 -0
  176. package/exceptions/index.d.ts +2 -0
  177. package/exceptions/index.js +18 -0
  178. package/exceptions/page-type.exception.d.ts +4 -0
  179. package/exceptions/page-type.exception.js +10 -0
  180. package/exceptions/user-not-found.exception.d.ts +4 -0
  181. package/exceptions/user-not-found.exception.js +10 -0
  182. package/filters/bad-request.filter.d.ts +5 -0
  183. package/filters/bad-request.filter.js +71 -0
  184. package/filters/constraint-errors.d.ts +1 -0
  185. package/filters/constraint-errors.js +6 -0
  186. package/filters/index.d.ts +3 -0
  187. package/filters/index.js +19 -0
  188. package/filters/query-failed.filter.d.ts +10 -0
  189. package/filters/query-failed.filter.js +42 -0
  190. package/health-checker/health-checker.controller.d.ts +13 -0
  191. package/health-checker/health-checker.controller.js +69 -0
  192. package/health-checker/health-checker.module.d.ts +2 -0
  193. package/health-checker/health-checker.module.js +24 -0
  194. package/health-checker/index.d.ts +2 -0
  195. package/health-checker/index.js +18 -0
  196. package/helpers/common.helper.d.ts +3 -0
  197. package/helpers/common.helper.js +36 -0
  198. package/helpers/date.helper.d.ts +10 -0
  199. package/helpers/date.helper.js +57 -0
  200. package/helpers/index.d.ts +2 -0
  201. package/helpers/index.js +18 -0
  202. package/i18n/en_US/validation.json +44 -0
  203. package/i18n/zh_CN/validation.json +44 -0
  204. package/index.d.ts +18 -0
  205. package/index.js +3 -0
  206. package/interceptors/index.d.ts +2 -0
  207. package/interceptors/index.js +18 -0
  208. package/interceptors/language-interceptor.service.d.ts +6 -0
  209. package/interceptors/language-interceptor.service.js +29 -0
  210. package/interceptors/translation-interceptor.service.d.ts +5 -0
  211. package/interceptors/translation-interceptor.service.js +34 -0
  212. package/interfaces/IApiFile.d.ts +4 -0
  213. package/interfaces/IApiFile.js +2 -0
  214. package/interfaces/IFile.d.ts +8 -0
  215. package/interfaces/IFile.js +2 -0
  216. package/interfaces/ITranslationDecoratorInterface.d.ts +3 -0
  217. package/interfaces/ITranslationDecoratorInterface.js +2 -0
  218. package/interfaces/index.d.ts +3 -0
  219. package/interfaces/index.js +19 -0
  220. package/interfaces/response.d.ts +25 -0
  221. package/interfaces/response.js +2 -0
  222. package/middlewares/index.d.ts +4 -0
  223. package/middlewares/index.js +20 -0
  224. package/middlewares/omni-auth.middleware.d.ts +1 -0
  225. package/middlewares/omni-auth.middleware.js +13 -0
  226. package/middlewares/powerby.middleware.d.ts +1 -0
  227. package/middlewares/powerby.middleware.js +10 -0
  228. package/middlewares/request-id.middleware.d.ts +7 -0
  229. package/middlewares/request-id.middleware.js +22 -0
  230. package/middlewares/xml.middleware.d.ts +4 -0
  231. package/middlewares/xml.middleware.js +24 -0
  232. package/package.json +41 -116
  233. package/providers/context.provider.d.ts +34 -0
  234. package/providers/context.provider.js +80 -0
  235. package/providers/generator.provider.d.ts +9 -0
  236. package/providers/generator.provider.js +50 -0
  237. package/providers/index.d.ts +2 -0
  238. package/providers/index.js +18 -0
  239. package/redis-lock/examples/lock-strategy.examples.d.ts +73 -0
  240. package/redis-lock/examples/lock-strategy.examples.js +387 -0
  241. package/redis-lock/index.d.ts +4 -0
  242. package/redis-lock/index.js +16 -0
  243. package/redis-lock/redis-lock.decorator.d.ts +12 -0
  244. package/redis-lock/redis-lock.decorator.js +125 -0
  245. package/redis-lock/redis-lock.module.d.ts +23 -0
  246. package/redis-lock/redis-lock.module.js +117 -0
  247. package/redis-lock/redis-lock.service.d.ts +66 -0
  248. package/redis-lock/redis-lock.service.js +413 -0
  249. package/setup/bootstrap.setup.d.ts +2 -0
  250. package/setup/bootstrap.setup.js +184 -0
  251. package/setup/index.d.ts +4 -0
  252. package/setup/index.js +20 -0
  253. package/setup/mode.setup.d.ts +12 -0
  254. package/setup/mode.setup.js +60 -0
  255. package/setup/schedule.decorator.d.ts +23 -0
  256. package/setup/schedule.decorator.js +233 -0
  257. package/setup/worker.decorator.d.ts +14 -0
  258. package/setup/worker.decorator.js +130 -0
  259. package/shared/index.d.ts +2 -0
  260. package/shared/index.js +18 -0
  261. package/shared/serviceRegistryModule.d.ts +2 -0
  262. package/shared/serviceRegistryModule.js +170 -0
  263. package/shared/services/api-config.service.d.ts +54 -0
  264. package/shared/services/api-config.service.js +287 -0
  265. package/shared/services/generator.service.d.ts +4 -0
  266. package/shared/services/generator.service.js +23 -0
  267. package/shared/services/index.d.ts +4 -0
  268. package/shared/services/index.js +20 -0
  269. package/shared/services/translation.service.d.ts +9 -0
  270. package/shared/services/translation.service.js +70 -0
  271. package/shared/services/validator.service.d.ts +3 -0
  272. package/shared/services/validator.service.js +20 -0
  273. package/validator-json/decorators.d.ts +6 -0
  274. package/validator-json/decorators.js +22 -0
  275. package/validator-json/default.d.ts +6 -0
  276. package/validator-json/default.js +138 -0
  277. package/validator-json/defaultConverters.d.ts +8 -0
  278. package/validator-json/defaultConverters.js +376 -0
  279. package/validator-json/index.d.ts +4 -0
  280. package/validator-json/index.js +20 -0
  281. package/validator-json/options.d.ts +11 -0
  282. package/validator-json/options.js +10 -0
  283. package/validators/file-mimetype.validator.d.ts +13 -0
  284. package/validators/file-mimetype.validator.js +21 -0
  285. package/validators/index.d.ts +6 -0
  286. package/validators/index.js +22 -0
  287. package/validators/is-exists.validator.d.ts +18 -0
  288. package/validators/is-exists.validator.js +60 -0
  289. package/validators/is-unique.validator.d.ts +17 -0
  290. package/validators/is-unique.validator.js +91 -0
  291. package/validators/phone-country-code.validator.d.ts +2 -0
  292. package/validators/phone-country-code.validator.js +29 -0
  293. package/validators/same-as.validator.d.ts +2 -0
  294. package/validators/same-as.validator.js +24 -0
  295. package/validators/skip-empty.validator.d.ts +1 -0
  296. package/validators/skip-empty.validator.js +17 -0
  297. package/vault/index.d.ts +4 -0
  298. package/vault/index.js +20 -0
  299. package/vault/interfaces/vault-options.interface.d.ts +22 -0
  300. package/vault/interfaces/vault-options.interface.js +2 -0
  301. package/vault/vault-config.loader.d.ts +13 -0
  302. package/vault/vault-config.loader.js +246 -0
  303. package/vault/vault-config.service.d.ts +18 -0
  304. package/vault/vault-config.service.js +174 -0
  305. package/vault/vault.module.d.ts +2 -0
  306. package/vault/vault.module.js +21 -0
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.CacheMonitoringService = exports.PostService = exports.UserService = void 0;
22
+ exports.demonstrateCacheUsage = demonstrateCacheUsage;
23
+ const common_1 = require("@nestjs/common");
24
+ const index_1 = require("../index");
25
+ class UserRepository {
26
+ findOne(id) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ console.log(`[DB] 查询用户 ${id}`);
29
+ return {
30
+ id,
31
+ name: `User ${id}`,
32
+ email: `user${id}@example.com`,
33
+ profile: {
34
+ bio: `这是用户 ${id} 的个人简介`.repeat(10),
35
+ avatar: `avatar_${id}.jpg`,
36
+ },
37
+ };
38
+ });
39
+ }
40
+ findMany(ids) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ console.log(`[DB] 批量查询用户 ${ids.join(', ')}`);
43
+ return Promise.all(ids.map((id) => this.findOne(id)));
44
+ });
45
+ }
46
+ findAll() {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ console.log('[DB] 查询所有用户');
49
+ return Array(100)
50
+ .fill(null)
51
+ .map((_, i) => ({
52
+ id: `user_${i}`,
53
+ name: `User ${i}`,
54
+ email: `user${i}@example.com`,
55
+ profile: {
56
+ bio: `这是用户 ${i} 的个人简介`.repeat(5),
57
+ avatar: `avatar_${i}.jpg`,
58
+ },
59
+ }));
60
+ });
61
+ }
62
+ save(user) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ console.log(`[DB] 保存用户 ${user.id}`);
65
+ return Object.assign({}, user);
66
+ });
67
+ }
68
+ delete(id) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ console.log(`[DB] 删除用户 ${id}`);
71
+ });
72
+ }
73
+ }
74
+ class PostRepository {
75
+ findByAuthor(authorId) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ console.log(`[DB] 查询作者 ${authorId} 的文章`);
78
+ return Array(20)
79
+ .fill(null)
80
+ .map((_, i) => ({
81
+ id: `post_${authorId}_${i}`,
82
+ title: `文章 ${i}`,
83
+ content: `这是文章 ${i} 的内容`.repeat(15),
84
+ authorId,
85
+ createdAt: new Date(),
86
+ }));
87
+ });
88
+ }
89
+ }
90
+ let UserService = class UserService {
91
+ constructor(cacheService, userRepository) {
92
+ this.cacheService = cacheService;
93
+ this.userRepository = userRepository;
94
+ }
95
+ getUser(id) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ return yield this.cacheService.getOrSet(`user:${id}`, () => this.userRepository.findOne(id), { ttl: 300000 });
98
+ });
99
+ }
100
+ getUserProfile(id) {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ return yield this.userRepository.findOne(id);
103
+ });
104
+ }
105
+ getUserData(id) {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ return yield this.userRepository.findOne(id);
108
+ });
109
+ }
110
+ getUsersBatch(ids) {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ const keys = ids.map((id) => `user:${id}`);
113
+ const cachedUsers = yield this.cacheService.mget(keys);
114
+ const uncachedIds = [];
115
+ const result = [];
116
+ cachedUsers.forEach((user, index) => {
117
+ if (user) {
118
+ result.push(user);
119
+ }
120
+ else {
121
+ uncachedIds.push(ids[index]);
122
+ }
123
+ });
124
+ if (uncachedIds.length > 0) {
125
+ const newUsers = yield this.userRepository.findMany(uncachedIds);
126
+ const cacheItems = newUsers.map((user) => ({
127
+ key: `user:${user.id}`,
128
+ value: user,
129
+ }));
130
+ yield this.cacheService.mset(cacheItems, { ttl: 300000 });
131
+ result.push(...newUsers);
132
+ }
133
+ return result;
134
+ });
135
+ }
136
+ updateUser(id, data) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ const updatedUser = yield this.userRepository.save(Object.assign({ id }, data));
139
+ return updatedUser;
140
+ });
141
+ }
142
+ deleteUser(id) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ yield this.userRepository.delete(id);
145
+ });
146
+ }
147
+ invalidateAllProfiles() {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ console.log('清除所有用户资料缓存');
150
+ });
151
+ }
152
+ cacheLargeData(id) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ const largeData = {
155
+ user: yield this.userRepository.findOne(id),
156
+ posts: Array(50)
157
+ .fill(null)
158
+ .map((_, i) => ({
159
+ id: `post_${i}`,
160
+ title: `文章标题 ${i}`,
161
+ content: `这是很长的文章内容 ${i}`.repeat(20),
162
+ metadata: {
163
+ tags: ['tag1', 'tag2', 'tag3'],
164
+ category: 'test',
165
+ views: Math.floor(Math.random() * 10000),
166
+ likes: Math.floor(Math.random() * 1000),
167
+ },
168
+ })),
169
+ statistics: {
170
+ totalPosts: 50,
171
+ totalViews: Math.floor(Math.random() * 100000),
172
+ totalLikes: Math.floor(Math.random() * 10000),
173
+ averageRating: (Math.random() * 5).toFixed(2),
174
+ },
175
+ };
176
+ yield this.cacheService.set(`user:${id}:large-data`, largeData, {
177
+ ttl: 3600000,
178
+ });
179
+ });
180
+ }
181
+ getLargeData(id) {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ return yield this.cacheService.get(`user:${id}:large-data`);
184
+ });
185
+ }
186
+ };
187
+ exports.UserService = UserService;
188
+ __decorate([
189
+ (0, index_1.Cacheable)({
190
+ key: (id) => `user:${id}:profile`,
191
+ ttl: 600000,
192
+ dependencies: [new index_1.TagDependency(['user-profile'])],
193
+ }),
194
+ __metadata("design:type", Function),
195
+ __metadata("design:paramtypes", [String]),
196
+ __metadata("design:returntype", Promise)
197
+ ], UserService.prototype, "getUserProfile", null);
198
+ __decorate([
199
+ (0, index_1.Cacheable)({
200
+ key: (id) => `user:${id}:data`,
201
+ ttl: 300000,
202
+ condition: (id) => id !== 'admin',
203
+ }),
204
+ __metadata("design:type", Function),
205
+ __metadata("design:paramtypes", [String]),
206
+ __metadata("design:returntype", Promise)
207
+ ], UserService.prototype, "getUserData", null);
208
+ __decorate([
209
+ (0, index_1.CachePut)({
210
+ key: (id) => `user:${id}`,
211
+ ttl: 300000,
212
+ }),
213
+ __metadata("design:type", Function),
214
+ __metadata("design:paramtypes", [String, Object]),
215
+ __metadata("design:returntype", Promise)
216
+ ], UserService.prototype, "updateUser", null);
217
+ __decorate([
218
+ (0, index_1.CacheEvict)({
219
+ keys: [(id) => `user:${id}`, (id) => `user:${id}:profile`],
220
+ }),
221
+ __metadata("design:type", Function),
222
+ __metadata("design:paramtypes", [String]),
223
+ __metadata("design:returntype", Promise)
224
+ ], UserService.prototype, "deleteUser", null);
225
+ __decorate([
226
+ (0, index_1.CacheEvict)({
227
+ tags: ['user-profile'],
228
+ }),
229
+ __metadata("design:type", Function),
230
+ __metadata("design:paramtypes", []),
231
+ __metadata("design:returntype", Promise)
232
+ ], UserService.prototype, "invalidateAllProfiles", null);
233
+ exports.UserService = UserService = __decorate([
234
+ (0, common_1.Injectable)(),
235
+ __metadata("design:paramtypes", [index_1.CacheService,
236
+ UserRepository])
237
+ ], UserService);
238
+ let PostService = class PostService {
239
+ constructor(cacheService, postRepository) {
240
+ this.cacheService = cacheService;
241
+ this.postRepository = postRepository;
242
+ }
243
+ getPostsByAuthor(authorId) {
244
+ return __awaiter(this, void 0, void 0, function* () {
245
+ return yield this.postRepository.findByAuthor(authorId);
246
+ });
247
+ }
248
+ getFeaturedPosts() {
249
+ return __awaiter(this, void 0, void 0, function* () {
250
+ console.log('[DB] 获取推荐文章');
251
+ return Array(10)
252
+ .fill(null)
253
+ .map((_, i) => ({
254
+ id: `featured_${i}`,
255
+ title: `推荐文章 ${i}`,
256
+ content: `推荐文章内容 ${i}`.repeat(10),
257
+ authorId: `author_${i}`,
258
+ createdAt: new Date(),
259
+ }));
260
+ });
261
+ }
262
+ getConfigVersion() {
263
+ return __awaiter(this, void 0, void 0, function* () {
264
+ return '1.0.0';
265
+ });
266
+ }
267
+ };
268
+ exports.PostService = PostService;
269
+ __decorate([
270
+ (0, index_1.Cacheable)({
271
+ key: (authorId) => `posts:by-author:${authorId}`,
272
+ ttl: 600000,
273
+ dependencies: [
274
+ new index_1.DbDependency('SELECT updated_at FROM users WHERE id = ?', (authorId) => [authorId]),
275
+ ],
276
+ }),
277
+ __metadata("design:type", Function),
278
+ __metadata("design:paramtypes", [String]),
279
+ __metadata("design:returntype", Promise)
280
+ ], PostService.prototype, "getPostsByAuthor", null);
281
+ __decorate([
282
+ (0, index_1.Cacheable)({
283
+ key: 'posts:featured',
284
+ ttl: 1800000,
285
+ dependencies: [
286
+ new index_1.CallbackDependency(() => __awaiter(void 0, void 0, void 0, function* () {
287
+ return yield 'v1.0.0';
288
+ })),
289
+ ],
290
+ }),
291
+ __metadata("design:type", Function),
292
+ __metadata("design:paramtypes", []),
293
+ __metadata("design:returntype", Promise)
294
+ ], PostService.prototype, "getFeaturedPosts", null);
295
+ exports.PostService = PostService = __decorate([
296
+ (0, common_1.Injectable)(),
297
+ __metadata("design:paramtypes", [index_1.CacheService,
298
+ PostRepository])
299
+ ], PostService);
300
+ let CacheMonitoringService = class CacheMonitoringService {
301
+ constructor(cacheService) {
302
+ this.cacheService = cacheService;
303
+ }
304
+ getCacheStats() {
305
+ const stats = this.cacheService.getStats();
306
+ console.log('=== 缓存统计信息 ===');
307
+ console.log(`总请求数: ${stats.totalGets}`);
308
+ console.log(`命中数: ${stats.hits}`);
309
+ console.log `未命中数: ${stats.misses}`;
310
+ console.log(`命中率: ${(stats.hitRate * 100).toFixed(2)}%`);
311
+ if (stats.byLayer) {
312
+ console.log('\n各层级统计:');
313
+ Object.entries(stats.byLayer).forEach(([layer, layerStats]) => {
314
+ const stats = layerStats;
315
+ console.log(`${layer}: 命中 ${stats.hits}, 未命中 ${stats.misses}`);
316
+ });
317
+ }
318
+ return stats;
319
+ }
320
+ resetStats() {
321
+ this.cacheService.resetStats();
322
+ console.log('缓存统计已重置');
323
+ }
324
+ startMonitoring(intervalMs = 60000) {
325
+ setInterval(() => {
326
+ const stats = this.getCacheStats();
327
+ if (stats.hitRate < 0.7) {
328
+ console.warn(`⚠️ 缓存命中率过低: ${(stats.hitRate * 100).toFixed(2)}%`);
329
+ }
330
+ console.log(`✅ 缓存状态良好,命中率: ${(stats.hitRate * 100).toFixed(2)}%`);
331
+ }, intervalMs);
332
+ }
333
+ };
334
+ exports.CacheMonitoringService = CacheMonitoringService;
335
+ exports.CacheMonitoringService = CacheMonitoringService = __decorate([
336
+ (0, common_1.Injectable)(),
337
+ __metadata("design:paramtypes", [index_1.CacheService])
338
+ ], CacheMonitoringService);
339
+ function demonstrateCacheUsage() {
340
+ return __awaiter(this, void 0, void 0, function* () {
341
+ const userService = new UserService(new index_1.CacheService({}, {}, {}, true, 1024), new UserRepository());
342
+ const postService = new PostService(new index_1.CacheService({}, {}, {}, true, 1024), new PostRepository());
343
+ const monitoringService = new CacheMonitoringService(new index_1.CacheService({}, {}, {}, true, 1024));
344
+ console.log('🚀 开始缓存演示...\n');
345
+ try {
346
+ console.log('1. 基础缓存使用:');
347
+ const user1 = yield userService.getUser('1');
348
+ console.log(`获取用户: ${user1.name}`);
349
+ const user1Cached = yield userService.getUser('1');
350
+ console.log(`从缓存获取用户: ${user1Cached.name}\n`);
351
+ console.log('2. 装饰器缓存:');
352
+ const profile = yield userService.getUserProfile('2');
353
+ console.log(`获取用户资料: ${profile.name}`);
354
+ const profileCached = yield userService.getUserProfile('2');
355
+ console.log(`从缓存获取用户资料: ${profileCached.name}\n`);
356
+ console.log('3. 批量操作:');
357
+ const users = yield userService.getUsersBatch(['1', '2', '3', '4', '5']);
358
+ console.log(`批量获取 ${users.length} 个用户\n`);
359
+ console.log('4. 大数据压缩:');
360
+ yield userService.cacheLargeData('1');
361
+ console.log('缓存大数据完成(应该自动压缩)');
362
+ const largeData = yield userService.getLargeData('1');
363
+ console.log(`获取大数据: 用户 ${largeData.user.name}, 文章数 ${largeData.posts.length}\n`);
364
+ console.log('5. 依赖系统:');
365
+ const posts = yield postService.getPostsByAuthor('1');
366
+ console.log(`获取作者文章: ${posts.length} 篇`);
367
+ const featuredPosts = yield postService.getFeaturedPosts();
368
+ console.log(`获取推荐文章: ${featuredPosts.length} 篇\n`);
369
+ console.log('6. 缓存统计:');
370
+ monitoringService.getCacheStats();
371
+ console.log('\n7. 缓存失效:');
372
+ yield userService.invalidateAllProfiles();
373
+ console.log('已清除所有用户资料缓存');
374
+ }
375
+ catch (error) {
376
+ console.error('演示过程中出现错误:', error);
377
+ }
378
+ });
379
+ }
@@ -0,0 +1,15 @@
1
+ export { CacheModule, type CacheModuleOptions, CACHE_SERVICE, } from './cache.module';
2
+ export { CACHE_COMPRESSION_ENABLED, CACHE_COMPRESSION_THRESHOLD, } from './cache.constants';
3
+ export { CacheService } from './cache.service';
4
+ export { CacheHealthChecker, type CacheHealthResult } from './cache.health';
5
+ export { CacheWarmupService, type CacheWarmupConfig, type CacheWarmupResult, } from './cache.warmup.service';
6
+ export { CacheMetricsService, type CacheMetrics, type CacheOperationRecord, } from './cache-metrics.service';
7
+ export { CacheSerializationService, type CacheSerializationOptions, type SerializationResult, type DeserializationResult, } from './cache-serialization.service';
8
+ export { Cacheable, CacheEvict, CachePut, getCacheService, setCacheService, } from './decorators';
9
+ export { ClsCacheProvider, MemoryCacheProvider, RedisCacheProvider, BaseCacheProvider, } from './providers';
10
+ export { REDIS_CLIENT } from './providers/redis-cache.provider';
11
+ export type { CacheProvider } from './interfaces/cache-provider.interface';
12
+ export { CallbackDependency, ChainDependency, DbDependency, FileDependency, TagDependency, TimeDependency, } from './dependencies';
13
+ export { CacheLayer, type CacheDependency, type CacheEvictOptions, type CacheOptions, type CachePutOptions, type CacheableOptions, type CacheStats, type DependencyData, } from './interfaces';
14
+ export { DependencyManager, KeyGenerator, type CachedValueWithDependencies, } from './utils';
15
+ export type { CacheDependency as ICacheDependency, CacheProvider as ICacheProvider, } from './interfaces';
package/cache/index.js ADDED
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
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
+ var cache_module_1 = require("./cache.module");
5
+ Object.defineProperty(exports, "CacheModule", { enumerable: true, get: function () { return cache_module_1.CacheModule; } });
6
+ Object.defineProperty(exports, "CACHE_SERVICE", { enumerable: true, get: function () { return cache_module_1.CACHE_SERVICE; } });
7
+ var cache_constants_1 = require("./cache.constants");
8
+ Object.defineProperty(exports, "CACHE_COMPRESSION_ENABLED", { enumerable: true, get: function () { return cache_constants_1.CACHE_COMPRESSION_ENABLED; } });
9
+ Object.defineProperty(exports, "CACHE_COMPRESSION_THRESHOLD", { enumerable: true, get: function () { return cache_constants_1.CACHE_COMPRESSION_THRESHOLD; } });
10
+ var cache_service_1 = require("./cache.service");
11
+ Object.defineProperty(exports, "CacheService", { enumerable: true, get: function () { return cache_service_1.CacheService; } });
12
+ var cache_health_1 = require("./cache.health");
13
+ Object.defineProperty(exports, "CacheHealthChecker", { enumerable: true, get: function () { return cache_health_1.CacheHealthChecker; } });
14
+ var cache_warmup_service_1 = require("./cache.warmup.service");
15
+ Object.defineProperty(exports, "CacheWarmupService", { enumerable: true, get: function () { return cache_warmup_service_1.CacheWarmupService; } });
16
+ var cache_metrics_service_1 = require("./cache-metrics.service");
17
+ Object.defineProperty(exports, "CacheMetricsService", { enumerable: true, get: function () { return cache_metrics_service_1.CacheMetricsService; } });
18
+ var cache_serialization_service_1 = require("./cache-serialization.service");
19
+ Object.defineProperty(exports, "CacheSerializationService", { enumerable: true, get: function () { return cache_serialization_service_1.CacheSerializationService; } });
20
+ var decorators_1 = require("./decorators");
21
+ Object.defineProperty(exports, "Cacheable", { enumerable: true, get: function () { return decorators_1.Cacheable; } });
22
+ Object.defineProperty(exports, "CacheEvict", { enumerable: true, get: function () { return decorators_1.CacheEvict; } });
23
+ Object.defineProperty(exports, "CachePut", { enumerable: true, get: function () { return decorators_1.CachePut; } });
24
+ Object.defineProperty(exports, "getCacheService", { enumerable: true, get: function () { return decorators_1.getCacheService; } });
25
+ Object.defineProperty(exports, "setCacheService", { enumerable: true, get: function () { return decorators_1.setCacheService; } });
26
+ var providers_1 = require("./providers");
27
+ Object.defineProperty(exports, "ClsCacheProvider", { enumerable: true, get: function () { return providers_1.ClsCacheProvider; } });
28
+ Object.defineProperty(exports, "MemoryCacheProvider", { enumerable: true, get: function () { return providers_1.MemoryCacheProvider; } });
29
+ Object.defineProperty(exports, "RedisCacheProvider", { enumerable: true, get: function () { return providers_1.RedisCacheProvider; } });
30
+ Object.defineProperty(exports, "BaseCacheProvider", { enumerable: true, get: function () { return providers_1.BaseCacheProvider; } });
31
+ var redis_cache_provider_1 = require("./providers/redis-cache.provider");
32
+ Object.defineProperty(exports, "REDIS_CLIENT", { enumerable: true, get: function () { return redis_cache_provider_1.REDIS_CLIENT; } });
33
+ var dependencies_1 = require("./dependencies");
34
+ Object.defineProperty(exports, "CallbackDependency", { enumerable: true, get: function () { return dependencies_1.CallbackDependency; } });
35
+ Object.defineProperty(exports, "ChainDependency", { enumerable: true, get: function () { return dependencies_1.ChainDependency; } });
36
+ Object.defineProperty(exports, "DbDependency", { enumerable: true, get: function () { return dependencies_1.DbDependency; } });
37
+ Object.defineProperty(exports, "FileDependency", { enumerable: true, get: function () { return dependencies_1.FileDependency; } });
38
+ Object.defineProperty(exports, "TagDependency", { enumerable: true, get: function () { return dependencies_1.TagDependency; } });
39
+ Object.defineProperty(exports, "TimeDependency", { enumerable: true, get: function () { return dependencies_1.TimeDependency; } });
40
+ var interfaces_1 = require("./interfaces");
41
+ Object.defineProperty(exports, "CacheLayer", { enumerable: true, get: function () { return interfaces_1.CacheLayer; } });
42
+ var utils_1 = require("./utils");
43
+ Object.defineProperty(exports, "DependencyManager", { enumerable: true, get: function () { return utils_1.DependencyManager; } });
44
+ Object.defineProperty(exports, "KeyGenerator", { enumerable: true, get: function () { return utils_1.KeyGenerator; } });
@@ -0,0 +1,11 @@
1
+ export interface CacheDependency {
2
+ getKey(): string;
3
+ getData(): Promise<any>;
4
+ isChanged(oldData: any): Promise<boolean>;
5
+ reset?(): Promise<void>;
6
+ }
7
+ export interface DependencyData {
8
+ key: string;
9
+ data: any;
10
+ timestamp: number;
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,32 @@
1
+ import type { CacheDependency } from './cache-dependency.interface';
2
+ export declare enum CacheLayer {
3
+ CLS = "cls",
4
+ MEMORY = "memory",
5
+ REDIS = "redis"
6
+ }
7
+ export interface CacheOptions {
8
+ ttl?: number;
9
+ layers?: CacheLayer[];
10
+ prefix?: string;
11
+ condition?: (...args: any[]) => boolean | Promise<boolean>;
12
+ dependencies?: CacheDependency[];
13
+ backfill?: boolean;
14
+ namespace?: string;
15
+ }
16
+ export interface CacheKeyOptions {
17
+ key?: string | ((...args: any[]) => string);
18
+ prefix?: string;
19
+ includeAllArgs?: boolean;
20
+ }
21
+ export interface CacheableOptions extends CacheOptions, CacheKeyOptions {
22
+ }
23
+ export interface CacheEvictOptions {
24
+ keys?: Array<string | ((...args: any[]) => string)>;
25
+ patterns?: string[];
26
+ tags?: string[];
27
+ layers?: CacheLayer[];
28
+ condition?: (...args: any[]) => boolean | Promise<boolean>;
29
+ timing?: 'before' | 'after';
30
+ }
31
+ export interface CachePutOptions extends CacheOptions, CacheKeyOptions {
32
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CacheLayer = void 0;
4
+ var CacheLayer;
5
+ (function (CacheLayer) {
6
+ CacheLayer["CLS"] = "cls";
7
+ CacheLayer["MEMORY"] = "memory";
8
+ CacheLayer["REDIS"] = "redis";
9
+ })(CacheLayer || (exports.CacheLayer = CacheLayer = {}));
@@ -0,0 +1,28 @@
1
+ export interface CacheProvider {
2
+ get<T>(key: string): Promise<T | null>;
3
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
4
+ delete(key: string | string[]): Promise<void>;
5
+ deletePattern?(pattern: string): Promise<number>;
6
+ clear(): Promise<void>;
7
+ has(key: string): Promise<boolean>;
8
+ mget<T>(keys: string[]): Promise<(T | null)[]>;
9
+ mset(items: Array<{
10
+ key: string;
11
+ value: any;
12
+ }>, ttl?: number): Promise<void>;
13
+ getName(): string;
14
+ }
15
+ export interface CacheStats {
16
+ totalGets: number;
17
+ hits: number;
18
+ misses: number;
19
+ hitRate: number;
20
+ byLayer: Record<string, {
21
+ hits: number;
22
+ misses: number;
23
+ hitRate: number;
24
+ }>;
25
+ totalSets: number;
26
+ totalDeletes: number;
27
+ totalClears: number;
28
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export * from './cache-dependency.interface';
2
+ export * from './cache-options.interface';
3
+ export * from './cache-provider.interface';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cache-dependency.interface"), exports);
18
+ __exportStar(require("./cache-options.interface"), exports);
19
+ __exportStar(require("./cache-provider.interface"), exports);
@@ -0,0 +1,16 @@
1
+ import type { CacheProvider } from '../interfaces/cache-provider.interface';
2
+ export declare abstract class BaseCacheProvider implements CacheProvider {
3
+ abstract get<T>(key: string): Promise<T | null>;
4
+ abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;
5
+ abstract delete(key: string | string[]): Promise<void>;
6
+ abstract deletePattern?(pattern: string): Promise<number>;
7
+ abstract clear(): Promise<void>;
8
+ abstract has(key: string): Promise<boolean>;
9
+ abstract getName(): string;
10
+ mget<T>(keys: string[]): Promise<(T | null)[]>;
11
+ mset(items: Array<{
12
+ key: string;
13
+ value: any;
14
+ }>, ttl?: number): Promise<void>;
15
+ protected patternToRegex(pattern: string): RegExp;
16
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BaseCacheProvider = void 0;
13
+ class BaseCacheProvider {
14
+ mget(keys) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const promises = keys.map((key) => this.get(key));
17
+ return Promise.all(promises);
18
+ });
19
+ }
20
+ mset(items, ttl) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const promises = items.map((item) => this.set(item.key, item.value, ttl));
23
+ yield Promise.all(promises);
24
+ });
25
+ }
26
+ patternToRegex(pattern) {
27
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
28
+ const regexPattern = escaped.replace(/\*/g, '.*');
29
+ return new RegExp(`^${regexPattern}$`);
30
+ }
31
+ }
32
+ exports.BaseCacheProvider = BaseCacheProvider;
@@ -0,0 +1,16 @@
1
+ import { BaseCacheProvider } from './base-cache.provider';
2
+ export declare class ClsCacheProvider extends BaseCacheProvider {
3
+ private static readonly CACHE_PREFIX;
4
+ private static readonly KEYS_SET;
5
+ getName(): string;
6
+ get<T>(key: string): Promise<T | null>;
7
+ set<T>(key: string, value: T, ttl?: number): Promise<void>;
8
+ delete(key: string | string[]): Promise<void>;
9
+ deletePattern(pattern: string): Promise<number>;
10
+ clear(): Promise<void>;
11
+ has(key: string): Promise<boolean>;
12
+ private getFullKey;
13
+ private addKeyToSet;
14
+ private removeKeyFromSet;
15
+ private getAllKeys;
16
+ }