@nest-omni/core 3.1.1-9 → 3.1.2-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) 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/api-paginated-response.decorator.d.ts +2 -0
  139. package/decorators/api-paginated-response.decorator.js +9 -0
  140. package/decorators/auth-user.decorator.d.ts +1 -0
  141. package/decorators/auth-user.decorator.js +14 -0
  142. package/decorators/controller.decorator.d.ts +1 -0
  143. package/decorators/controller.decorator.js +10 -0
  144. package/decorators/examples/validation-decorators.example.d.ts +69 -0
  145. package/decorators/examples/validation-decorators.example.js +331 -0
  146. package/decorators/field.decorators.d.ts +79 -0
  147. package/decorators/field.decorators.js +499 -0
  148. package/decorators/http.decorators.d.ts +3 -0
  149. package/decorators/http.decorators.js +7 -0
  150. package/decorators/index.d.ts +14 -0
  151. package/decorators/index.js +30 -0
  152. package/decorators/operation.decorator.d.ts +1 -0
  153. package/decorators/operation.decorator.js +6 -0
  154. package/decorators/paginated-response.decorator.d.ts +11 -0
  155. package/decorators/paginated-response.decorator.js +60 -0
  156. package/decorators/property.decorators.d.ts +15 -0
  157. package/decorators/property.decorators.js +31 -0
  158. package/decorators/public-route.decorator.d.ts +3 -0
  159. package/decorators/public-route.decorator.js +7 -0
  160. package/decorators/swagger.schema.d.ts +5 -0
  161. package/decorators/swagger.schema.js +78 -0
  162. package/decorators/timestamp-column.decorator.d.ts +1 -0
  163. package/decorators/timestamp-column.decorator.js +27 -0
  164. package/decorators/transform.decorators.d.ts +8 -0
  165. package/decorators/transform.decorators.js +100 -0
  166. package/decorators/translate.decorator.d.ts +5 -0
  167. package/decorators/translate.decorator.js +17 -0
  168. package/decorators/use-dto.decorator.d.ts +4 -0
  169. package/decorators/use-dto.decorator.js +8 -0
  170. package/decorators/user-check.decorator.d.ts +6 -0
  171. package/decorators/user-check.decorator.js +21 -0
  172. package/decorators/user.decorator.d.ts +12 -0
  173. package/decorators/user.decorator.js +44 -0
  174. package/decorators/user_auth.decorator.d.ts +1 -0
  175. package/decorators/user_auth.decorator.js +15 -0
  176. package/decorators/validator.decorators.d.ts +18 -0
  177. package/decorators/validator.decorators.js +193 -0
  178. package/exceptions/file-not-image.exception.d.ts +4 -0
  179. package/exceptions/file-not-image.exception.js +10 -0
  180. package/exceptions/index.d.ts +2 -0
  181. package/exceptions/index.js +18 -0
  182. package/exceptions/page-type.exception.d.ts +4 -0
  183. package/exceptions/page-type.exception.js +10 -0
  184. package/exceptions/user-not-found.exception.d.ts +4 -0
  185. package/exceptions/user-not-found.exception.js +10 -0
  186. package/filters/bad-request.filter.d.ts +5 -0
  187. package/filters/bad-request.filter.js +71 -0
  188. package/filters/constraint-errors.d.ts +1 -0
  189. package/filters/constraint-errors.js +6 -0
  190. package/filters/index.d.ts +3 -0
  191. package/filters/index.js +19 -0
  192. package/filters/query-failed.filter.d.ts +10 -0
  193. package/filters/query-failed.filter.js +42 -0
  194. package/health-checker/health-checker.controller.d.ts +13 -0
  195. package/health-checker/health-checker.controller.js +69 -0
  196. package/health-checker/health-checker.module.d.ts +2 -0
  197. package/health-checker/health-checker.module.js +24 -0
  198. package/health-checker/index.d.ts +2 -0
  199. package/health-checker/index.js +18 -0
  200. package/helpers/common.helper.d.ts +3 -0
  201. package/helpers/common.helper.js +36 -0
  202. package/helpers/date.helper.d.ts +10 -0
  203. package/helpers/date.helper.js +57 -0
  204. package/helpers/index.d.ts +2 -0
  205. package/helpers/index.js +18 -0
  206. package/i18n/en_US/validation.json +44 -0
  207. package/i18n/zh_CN/validation.json +44 -0
  208. package/index.d.ts +18 -0
  209. package/index.js +3 -0
  210. package/interceptors/index.d.ts +2 -0
  211. package/interceptors/index.js +18 -0
  212. package/interceptors/language-interceptor.service.d.ts +6 -0
  213. package/interceptors/language-interceptor.service.js +29 -0
  214. package/interceptors/translation-interceptor.service.d.ts +5 -0
  215. package/interceptors/translation-interceptor.service.js +34 -0
  216. package/interfaces/IApiFile.d.ts +4 -0
  217. package/interfaces/IApiFile.js +2 -0
  218. package/interfaces/IFile.d.ts +8 -0
  219. package/interfaces/IFile.js +2 -0
  220. package/interfaces/ITranslationDecoratorInterface.d.ts +3 -0
  221. package/interfaces/ITranslationDecoratorInterface.js +2 -0
  222. package/interfaces/index.d.ts +3 -0
  223. package/interfaces/index.js +19 -0
  224. package/interfaces/response.d.ts +25 -0
  225. package/interfaces/response.js +2 -0
  226. package/middlewares/index.d.ts +4 -0
  227. package/middlewares/index.js +20 -0
  228. package/middlewares/omni-auth.middleware.d.ts +1 -0
  229. package/middlewares/omni-auth.middleware.js +13 -0
  230. package/middlewares/powerby.middleware.d.ts +1 -0
  231. package/middlewares/powerby.middleware.js +10 -0
  232. package/middlewares/request-id.middleware.d.ts +7 -0
  233. package/middlewares/request-id.middleware.js +22 -0
  234. package/middlewares/xml.middleware.d.ts +4 -0
  235. package/middlewares/xml.middleware.js +24 -0
  236. package/package.json +41 -116
  237. package/providers/context.provider.d.ts +34 -0
  238. package/providers/context.provider.js +80 -0
  239. package/providers/generator.provider.d.ts +9 -0
  240. package/providers/generator.provider.js +50 -0
  241. package/providers/index.d.ts +2 -0
  242. package/providers/index.js +18 -0
  243. package/redis-lock/examples/lock-strategy.examples.d.ts +73 -0
  244. package/redis-lock/examples/lock-strategy.examples.js +387 -0
  245. package/redis-lock/index.d.ts +4 -0
  246. package/redis-lock/index.js +16 -0
  247. package/redis-lock/redis-lock.decorator.d.ts +12 -0
  248. package/redis-lock/redis-lock.decorator.js +125 -0
  249. package/redis-lock/redis-lock.module.d.ts +23 -0
  250. package/redis-lock/redis-lock.module.js +117 -0
  251. package/redis-lock/redis-lock.service.d.ts +66 -0
  252. package/redis-lock/redis-lock.service.js +413 -0
  253. package/setup/bootstrap.setup.d.ts +2 -0
  254. package/setup/bootstrap.setup.js +184 -0
  255. package/setup/index.d.ts +4 -0
  256. package/setup/index.js +20 -0
  257. package/setup/mode.setup.d.ts +12 -0
  258. package/setup/mode.setup.js +60 -0
  259. package/setup/schedule.decorator.d.ts +23 -0
  260. package/setup/schedule.decorator.js +233 -0
  261. package/setup/worker.decorator.d.ts +14 -0
  262. package/setup/worker.decorator.js +130 -0
  263. package/shared/index.d.ts +2 -0
  264. package/shared/index.js +18 -0
  265. package/shared/serviceRegistryModule.d.ts +2 -0
  266. package/shared/serviceRegistryModule.js +170 -0
  267. package/shared/services/api-config.service.d.ts +54 -0
  268. package/shared/services/api-config.service.js +287 -0
  269. package/shared/services/generator.service.d.ts +4 -0
  270. package/shared/services/generator.service.js +23 -0
  271. package/shared/services/index.d.ts +4 -0
  272. package/shared/services/index.js +20 -0
  273. package/shared/services/translation.service.d.ts +9 -0
  274. package/shared/services/translation.service.js +70 -0
  275. package/shared/services/validator.service.d.ts +3 -0
  276. package/shared/services/validator.service.js +20 -0
  277. package/validator-json/decorators.d.ts +6 -0
  278. package/validator-json/decorators.js +22 -0
  279. package/validator-json/default.d.ts +6 -0
  280. package/validator-json/default.js +138 -0
  281. package/validator-json/defaultConverters.d.ts +8 -0
  282. package/validator-json/defaultConverters.js +376 -0
  283. package/validator-json/index.d.ts +4 -0
  284. package/validator-json/index.js +20 -0
  285. package/validator-json/options.d.ts +11 -0
  286. package/validator-json/options.js +10 -0
  287. package/validators/file-mimetype.validator.d.ts +13 -0
  288. package/validators/file-mimetype.validator.js +21 -0
  289. package/validators/index.d.ts +6 -0
  290. package/validators/index.js +22 -0
  291. package/validators/is-exists.validator.d.ts +18 -0
  292. package/validators/is-exists.validator.js +60 -0
  293. package/validators/is-unique.validator.d.ts +17 -0
  294. package/validators/is-unique.validator.js +91 -0
  295. package/validators/phone-country-code.validator.d.ts +2 -0
  296. package/validators/phone-country-code.validator.js +29 -0
  297. package/validators/same-as.validator.d.ts +2 -0
  298. package/validators/same-as.validator.js +24 -0
  299. package/validators/skip-empty.validator.d.ts +1 -0
  300. package/validators/skip-empty.validator.js +17 -0
  301. package/vault/index.d.ts +4 -0
  302. package/vault/index.js +20 -0
  303. package/vault/interfaces/vault-options.interface.d.ts +22 -0
  304. package/vault/interfaces/vault-options.interface.js +2 -0
  305. package/vault/vault-config.loader.d.ts +13 -0
  306. package/vault/vault-config.loader.js +246 -0
  307. package/vault/vault-config.service.d.ts +18 -0
  308. package/vault/vault-config.service.js +174 -0
  309. package/vault/vault.module.d.ts +2 -0
  310. package/vault/vault.module.js +21 -0
@@ -0,0 +1,2 @@
1
+ export * from './context.provider';
2
+ export * from './generator.provider';
@@ -0,0 +1,18 @@
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("./context.provider"), exports);
18
+ __exportStar(require("./generator.provider"), exports);
@@ -0,0 +1,73 @@
1
+ import { RedisLockService } from '../index';
2
+ export declare class SkipStrategyExample {
3
+ private readonly lockService;
4
+ private readonly logger;
5
+ constructor(lockService: RedisLockService);
6
+ scheduledTask(): Promise<void>;
7
+ processWithSkip(): Promise<{
8
+ skipped: boolean;
9
+ success?: undefined;
10
+ } | {
11
+ success: boolean;
12
+ skipped?: undefined;
13
+ }>;
14
+ processWithRetries(): Promise<{
15
+ skipped: boolean;
16
+ success?: undefined;
17
+ } | {
18
+ success: boolean;
19
+ skipped?: undefined;
20
+ }>;
21
+ private simulateLongRunning;
22
+ }
23
+ export declare class ThrowStrategyExample {
24
+ private readonly lockService;
25
+ private readonly logger;
26
+ constructor(lockService: RedisLockService);
27
+ criticalOperation(): Promise<void>;
28
+ processWithThrow(): Promise<{
29
+ success: boolean;
30
+ }>;
31
+ processPayment(orderId: string, amount: number): Promise<{
32
+ success: boolean;
33
+ }>;
34
+ private processData;
35
+ private chargePayment;
36
+ private updateOrderStatus;
37
+ }
38
+ export declare class WaitStrategyExample {
39
+ private readonly lockService;
40
+ private readonly logger;
41
+ constructor(lockService: RedisLockService);
42
+ sequentialTask(): Promise<void>;
43
+ processWithWaitTimeout(): Promise<{
44
+ timeout: boolean;
45
+ success?: undefined;
46
+ } | {
47
+ success: boolean;
48
+ timeout?: undefined;
49
+ }>;
50
+ processDataSequentially(userId: string, data: any): Promise<{
51
+ success: boolean;
52
+ }>;
53
+ processQueue(queueName: string, item: any): Promise<{
54
+ success: boolean;
55
+ }>;
56
+ runMigration(migrationName: string): Promise<{
57
+ success: boolean;
58
+ }>;
59
+ private processInOrder;
60
+ private validateData;
61
+ private saveData;
62
+ private notifyUser;
63
+ private processQueueItem;
64
+ private executeMigration;
65
+ }
66
+ export declare class CombinedStrategiesExample {
67
+ private readonly lockService;
68
+ private readonly logger;
69
+ constructor(lockService: RedisLockService);
70
+ cleanupOldData(): Promise<void>;
71
+ processPayment(orderId: string): Promise<void>;
72
+ generateReport(reportId: string): Promise<void>;
73
+ }
@@ -0,0 +1,387 @@
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
+ var SkipStrategyExample_1, ThrowStrategyExample_1, WaitStrategyExample_1, CombinedStrategiesExample_1;
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.CombinedStrategiesExample = exports.WaitStrategyExample = exports.ThrowStrategyExample = exports.SkipStrategyExample = void 0;
23
+ const common_1 = require("@nestjs/common");
24
+ const schedule_1 = require("@nestjs/schedule");
25
+ const index_1 = require("../index");
26
+ let SkipStrategyExample = SkipStrategyExample_1 = class SkipStrategyExample {
27
+ constructor(lockService) {
28
+ this.lockService = lockService;
29
+ this.logger = new common_1.Logger(SkipStrategyExample_1.name);
30
+ }
31
+ scheduledTask() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ this.logger.log('Executing scheduled task...');
34
+ yield this.simulateLongRunning();
35
+ this.logger.log('Scheduled task completed');
36
+ });
37
+ }
38
+ processWithSkip() {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ const lockResult = yield this.lockService.acquireLock('process-task', {
41
+ strategy: index_1.LockStrategy.SKIP,
42
+ ttl: 30000,
43
+ });
44
+ if (!lockResult.acquired) {
45
+ this.logger.log('Task is already running, skipping...');
46
+ return { skipped: true };
47
+ }
48
+ try {
49
+ this.logger.log('Processing task...');
50
+ yield this.simulateLongRunning();
51
+ return { success: true };
52
+ }
53
+ finally {
54
+ yield this.lockService.releaseLock('process-task', lockResult.lockValue);
55
+ }
56
+ });
57
+ }
58
+ processWithRetries() {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ const lockResult = yield this.lockService.acquireLock('retry-task', {
61
+ strategy: index_1.LockStrategy.SKIP,
62
+ ttl: 30000,
63
+ retryCount: 3,
64
+ retryDelay: 500,
65
+ });
66
+ if (!lockResult.acquired) {
67
+ this.logger.warn('Failed to acquire lock after 3 retries');
68
+ return { skipped: true };
69
+ }
70
+ try {
71
+ yield this.simulateLongRunning();
72
+ return { success: true };
73
+ }
74
+ finally {
75
+ yield this.lockService.releaseLock('retry-task', lockResult.lockValue);
76
+ }
77
+ });
78
+ }
79
+ simulateLongRunning() {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ yield new Promise((resolve) => setTimeout(resolve, 5000));
82
+ });
83
+ }
84
+ };
85
+ exports.SkipStrategyExample = SkipStrategyExample;
86
+ __decorate([
87
+ (0, schedule_1.Cron)('* * * * *'),
88
+ (0, index_1.UseRedisLock)('scheduled-task', {
89
+ ttl: 60000,
90
+ strategy: index_1.LockStrategy.SKIP,
91
+ }),
92
+ __metadata("design:type", Function),
93
+ __metadata("design:paramtypes", []),
94
+ __metadata("design:returntype", Promise)
95
+ ], SkipStrategyExample.prototype, "scheduledTask", null);
96
+ exports.SkipStrategyExample = SkipStrategyExample = SkipStrategyExample_1 = __decorate([
97
+ (0, common_1.Injectable)(),
98
+ __metadata("design:paramtypes", [index_1.RedisLockService])
99
+ ], SkipStrategyExample);
100
+ let ThrowStrategyExample = ThrowStrategyExample_1 = class ThrowStrategyExample {
101
+ constructor(lockService) {
102
+ this.lockService = lockService;
103
+ this.logger = new common_1.Logger(ThrowStrategyExample_1.name);
104
+ }
105
+ criticalOperation() {
106
+ return __awaiter(this, void 0, void 0, function* () {
107
+ this.logger.log('Executing critical operation...');
108
+ yield this.processData();
109
+ this.logger.log('Critical operation completed');
110
+ });
111
+ }
112
+ processWithThrow() {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ try {
115
+ const lockResult = yield this.lockService.acquireLock('exclusive-task', {
116
+ strategy: index_1.LockStrategy.THROW,
117
+ ttl: 30000,
118
+ });
119
+ try {
120
+ this.logger.log('Processing exclusive task...');
121
+ yield this.processData();
122
+ return { success: true };
123
+ }
124
+ finally {
125
+ yield this.lockService.releaseLock('exclusive-task', lockResult.lockValue);
126
+ }
127
+ }
128
+ catch (error) {
129
+ this.logger.error(`Failed to acquire lock: ${error.message}`);
130
+ throw new Error('Operation cannot proceed without exclusive access');
131
+ }
132
+ });
133
+ }
134
+ processPayment(orderId, amount) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ const lockKey = `payment:${orderId}`;
137
+ try {
138
+ const lockResult = yield this.lockService.acquireLock(lockKey, {
139
+ strategy: index_1.LockStrategy.THROW,
140
+ ttl: 60000,
141
+ });
142
+ try {
143
+ this.logger.log(`Processing payment for order ${orderId}...`);
144
+ yield this.chargePayment(orderId, amount);
145
+ yield this.updateOrderStatus(orderId, 'paid');
146
+ return { success: true };
147
+ }
148
+ finally {
149
+ yield this.lockService.releaseLock(lockKey, lockResult.lockValue);
150
+ }
151
+ }
152
+ catch (error) {
153
+ this.logger.error(`Payment processing failed for ${orderId}: ${error.message}`);
154
+ throw error;
155
+ }
156
+ });
157
+ }
158
+ processData() {
159
+ return __awaiter(this, void 0, void 0, function* () {
160
+ yield new Promise((resolve) => setTimeout(resolve, 2000));
161
+ });
162
+ }
163
+ chargePayment(orderId, amount) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ yield new Promise((resolve) => setTimeout(resolve, 1000));
166
+ });
167
+ }
168
+ updateOrderStatus(orderId, status) {
169
+ return __awaiter(this, void 0, void 0, function* () {
170
+ yield new Promise((resolve) => setTimeout(resolve, 500));
171
+ });
172
+ }
173
+ };
174
+ exports.ThrowStrategyExample = ThrowStrategyExample;
175
+ __decorate([
176
+ (0, index_1.UseRedisLock)('critical-operation', {
177
+ ttl: 60000,
178
+ strategy: index_1.LockStrategy.THROW,
179
+ }),
180
+ __metadata("design:type", Function),
181
+ __metadata("design:paramtypes", []),
182
+ __metadata("design:returntype", Promise)
183
+ ], ThrowStrategyExample.prototype, "criticalOperation", null);
184
+ exports.ThrowStrategyExample = ThrowStrategyExample = ThrowStrategyExample_1 = __decorate([
185
+ (0, common_1.Injectable)(),
186
+ __metadata("design:paramtypes", [index_1.RedisLockService])
187
+ ], ThrowStrategyExample);
188
+ let WaitStrategyExample = WaitStrategyExample_1 = class WaitStrategyExample {
189
+ constructor(lockService) {
190
+ this.lockService = lockService;
191
+ this.logger = new common_1.Logger(WaitStrategyExample_1.name);
192
+ }
193
+ sequentialTask() {
194
+ return __awaiter(this, void 0, void 0, function* () {
195
+ this.logger.log('Executing sequential task...');
196
+ yield this.processInOrder();
197
+ this.logger.log('Sequential task completed');
198
+ });
199
+ }
200
+ processWithWaitTimeout() {
201
+ return __awaiter(this, void 0, void 0, function* () {
202
+ const lockResult = yield this.lockService.acquireLock('wait-task', {
203
+ strategy: index_1.LockStrategy.WAIT,
204
+ waitTimeout: 30000,
205
+ retryDelay: 200,
206
+ ttl: 60000,
207
+ });
208
+ if (!lockResult.acquired) {
209
+ this.logger.warn('Timed out waiting for lock after 30 seconds');
210
+ return { timeout: true };
211
+ }
212
+ try {
213
+ this.logger.log('Lock acquired after waiting, processing...');
214
+ yield this.processInOrder();
215
+ return { success: true };
216
+ }
217
+ finally {
218
+ yield this.lockService.releaseLock('wait-task', lockResult.lockValue);
219
+ }
220
+ });
221
+ }
222
+ processDataSequentially(userId, data) {
223
+ return __awaiter(this, void 0, void 0, function* () {
224
+ const lockKey = `user-data:${userId}`;
225
+ const lockResult = yield this.lockService.acquireLock(lockKey, {
226
+ strategy: index_1.LockStrategy.WAIT,
227
+ retryDelay: 50,
228
+ ttl: 120000,
229
+ });
230
+ try {
231
+ this.logger.log(`Processing data for user ${userId}...`);
232
+ yield this.validateData(data);
233
+ yield this.saveData(userId, data);
234
+ yield this.notifyUser(userId);
235
+ return { success: true };
236
+ }
237
+ finally {
238
+ yield this.lockService.releaseLock(lockKey, lockResult.lockValue);
239
+ }
240
+ });
241
+ }
242
+ processQueue(queueName, item) {
243
+ return __awaiter(this, void 0, void 0, function* () {
244
+ const lockKey = `queue:${queueName}`;
245
+ this.logger.log(`Waiting for lock to process item in queue ${queueName}...`);
246
+ const lockResult = yield this.lockService.acquireLock(lockKey, {
247
+ strategy: index_1.LockStrategy.WAIT,
248
+ retryDelay: 100,
249
+ ttl: 60000,
250
+ });
251
+ try {
252
+ this.logger.log(`Lock acquired, processing item in queue ${queueName}...`);
253
+ yield this.processQueueItem(item);
254
+ return { success: true };
255
+ }
256
+ finally {
257
+ yield this.lockService.releaseLock(lockKey, lockResult.lockValue);
258
+ }
259
+ });
260
+ }
261
+ runMigration(migrationName) {
262
+ return __awaiter(this, void 0, void 0, function* () {
263
+ const lockKey = `migration:${migrationName}`;
264
+ this.logger.log(`Waiting to run migration ${migrationName}...`);
265
+ const lockResult = yield this.lockService.acquireLock(lockKey, {
266
+ strategy: index_1.LockStrategy.WAIT,
267
+ waitTimeout: 300000,
268
+ retryDelay: 1000,
269
+ ttl: 600000,
270
+ });
271
+ if (!lockResult.acquired) {
272
+ throw new Error(`Migration ${migrationName} timed out waiting for lock`);
273
+ }
274
+ try {
275
+ this.logger.log(`Running migration ${migrationName}...`);
276
+ yield this.executeMigration(migrationName);
277
+ this.logger.log(`Migration ${migrationName} completed successfully`);
278
+ return { success: true };
279
+ }
280
+ finally {
281
+ yield this.lockService.releaseLock(lockKey, lockResult.lockValue);
282
+ }
283
+ });
284
+ }
285
+ processInOrder() {
286
+ return __awaiter(this, void 0, void 0, function* () {
287
+ yield new Promise((resolve) => setTimeout(resolve, 2000));
288
+ });
289
+ }
290
+ validateData(data) {
291
+ return __awaiter(this, void 0, void 0, function* () {
292
+ yield new Promise((resolve) => setTimeout(resolve, 500));
293
+ });
294
+ }
295
+ saveData(userId, data) {
296
+ return __awaiter(this, void 0, void 0, function* () {
297
+ yield new Promise((resolve) => setTimeout(resolve, 1000));
298
+ });
299
+ }
300
+ notifyUser(userId) {
301
+ return __awaiter(this, void 0, void 0, function* () {
302
+ yield new Promise((resolve) => setTimeout(resolve, 500));
303
+ });
304
+ }
305
+ processQueueItem(item) {
306
+ return __awaiter(this, void 0, void 0, function* () {
307
+ yield new Promise((resolve) => setTimeout(resolve, 1500));
308
+ });
309
+ }
310
+ executeMigration(name) {
311
+ return __awaiter(this, void 0, void 0, function* () {
312
+ yield new Promise((resolve) => setTimeout(resolve, 5000));
313
+ });
314
+ }
315
+ };
316
+ exports.WaitStrategyExample = WaitStrategyExample;
317
+ __decorate([
318
+ (0, index_1.UseRedisLock)('sequential-task', {
319
+ ttl: 30000,
320
+ strategy: index_1.LockStrategy.WAIT,
321
+ retryDelay: 100,
322
+ }),
323
+ __metadata("design:type", Function),
324
+ __metadata("design:paramtypes", []),
325
+ __metadata("design:returntype", Promise)
326
+ ], WaitStrategyExample.prototype, "sequentialTask", null);
327
+ exports.WaitStrategyExample = WaitStrategyExample = WaitStrategyExample_1 = __decorate([
328
+ (0, common_1.Injectable)(),
329
+ __metadata("design:paramtypes", [index_1.RedisLockService])
330
+ ], WaitStrategyExample);
331
+ let CombinedStrategiesExample = CombinedStrategiesExample_1 = class CombinedStrategiesExample {
332
+ constructor(lockService) {
333
+ this.lockService = lockService;
334
+ this.logger = new common_1.Logger(CombinedStrategiesExample_1.name);
335
+ }
336
+ cleanupOldData() {
337
+ return __awaiter(this, void 0, void 0, function* () {
338
+ this.logger.log('Running cleanup...');
339
+ });
340
+ }
341
+ processPayment(orderId) {
342
+ return __awaiter(this, void 0, void 0, function* () {
343
+ const lockResult = yield this.lockService.acquireLock(`payment:${orderId}`, {
344
+ strategy: index_1.LockStrategy.THROW,
345
+ ttl: 60000,
346
+ });
347
+ try {
348
+ }
349
+ finally {
350
+ yield this.lockService.releaseLock(`payment:${orderId}`, lockResult.lockValue);
351
+ }
352
+ });
353
+ }
354
+ generateReport(reportId) {
355
+ return __awaiter(this, void 0, void 0, function* () {
356
+ const lockResult = yield this.lockService.acquireLock(`report:${reportId}`, {
357
+ strategy: index_1.LockStrategy.WAIT,
358
+ waitTimeout: 180000,
359
+ retryDelay: 500,
360
+ ttl: 300000,
361
+ });
362
+ if (!lockResult.acquired) {
363
+ throw new Error('Report generation timed out');
364
+ }
365
+ try {
366
+ }
367
+ finally {
368
+ yield this.lockService.releaseLock(`report:${reportId}`, lockResult.lockValue);
369
+ }
370
+ });
371
+ }
372
+ };
373
+ exports.CombinedStrategiesExample = CombinedStrategiesExample;
374
+ __decorate([
375
+ (0, schedule_1.Cron)('0 */6 * * *'),
376
+ (0, index_1.UseRedisLock)('cleanup-task', {
377
+ strategy: index_1.LockStrategy.SKIP,
378
+ ttl: 3600000,
379
+ }),
380
+ __metadata("design:type", Function),
381
+ __metadata("design:paramtypes", []),
382
+ __metadata("design:returntype", Promise)
383
+ ], CombinedStrategiesExample.prototype, "cleanupOldData", null);
384
+ exports.CombinedStrategiesExample = CombinedStrategiesExample = CombinedStrategiesExample_1 = __decorate([
385
+ (0, common_1.Injectable)(),
386
+ __metadata("design:paramtypes", [index_1.RedisLockService])
387
+ ], CombinedStrategiesExample);
@@ -0,0 +1,4 @@
1
+ export { RedisLockModule, type RedisLockModuleOptions, REDIS_LOCK_SERVICE, } from './redis-lock.module';
2
+ export { RedisLockService, LockStrategy } from './redis-lock.service';
3
+ export { UseRedisLock, UseRedisLockOrSkip, UseRedisLockSmart, UseRedisLockOrSkipSmart, setLockService, getLockService, } from './redis-lock.decorator';
4
+ export type { LockOptions, LockResult } from './redis-lock.service';
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLockService = exports.setLockService = exports.UseRedisLockOrSkipSmart = exports.UseRedisLockSmart = exports.UseRedisLockOrSkip = exports.UseRedisLock = exports.LockStrategy = exports.RedisLockService = exports.REDIS_LOCK_SERVICE = exports.RedisLockModule = void 0;
4
+ var redis_lock_module_1 = require("./redis-lock.module");
5
+ Object.defineProperty(exports, "RedisLockModule", { enumerable: true, get: function () { return redis_lock_module_1.RedisLockModule; } });
6
+ Object.defineProperty(exports, "REDIS_LOCK_SERVICE", { enumerable: true, get: function () { return redis_lock_module_1.REDIS_LOCK_SERVICE; } });
7
+ var redis_lock_service_1 = require("./redis-lock.service");
8
+ Object.defineProperty(exports, "RedisLockService", { enumerable: true, get: function () { return redis_lock_service_1.RedisLockService; } });
9
+ Object.defineProperty(exports, "LockStrategy", { enumerable: true, get: function () { return redis_lock_service_1.LockStrategy; } });
10
+ var redis_lock_decorator_1 = require("./redis-lock.decorator");
11
+ Object.defineProperty(exports, "UseRedisLock", { enumerable: true, get: function () { return redis_lock_decorator_1.UseRedisLock; } });
12
+ Object.defineProperty(exports, "UseRedisLockOrSkip", { enumerable: true, get: function () { return redis_lock_decorator_1.UseRedisLockOrSkip; } });
13
+ Object.defineProperty(exports, "UseRedisLockSmart", { enumerable: true, get: function () { return redis_lock_decorator_1.UseRedisLockSmart; } });
14
+ Object.defineProperty(exports, "UseRedisLockOrSkipSmart", { enumerable: true, get: function () { return redis_lock_decorator_1.UseRedisLockOrSkipSmart; } });
15
+ Object.defineProperty(exports, "setLockService", { enumerable: true, get: function () { return redis_lock_decorator_1.setLockService; } });
16
+ Object.defineProperty(exports, "getLockService", { enumerable: true, get: function () { return redis_lock_decorator_1.getLockService; } });
@@ -0,0 +1,12 @@
1
+ import type { LockOptions } from './redis-lock.service';
2
+ import { RedisLockService } from './redis-lock.service';
3
+ export declare function setLockService(lockService: RedisLockService): void;
4
+ export declare function getLockService(): RedisLockService | null;
5
+ export declare function UseRedisLock(lockKey: string, options?: LockOptions & {
6
+ skipReturnValue?: any;
7
+ }): MethodDecorator;
8
+ export declare function UseRedisLockOrSkip(lockKey: string, ttl?: number): MethodDecorator;
9
+ export declare function UseRedisLockSmart(options?: LockOptions & {
10
+ skipReturnValue?: any;
11
+ }): MethodDecorator;
12
+ export declare function UseRedisLockOrSkipSmart(ttl?: number): MethodDecorator;
@@ -0,0 +1,125 @@
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.setLockService = setLockService;
13
+ exports.getLockService = getLockService;
14
+ exports.UseRedisLock = UseRedisLock;
15
+ exports.UseRedisLockOrSkip = UseRedisLockOrSkip;
16
+ exports.UseRedisLockSmart = UseRedisLockSmart;
17
+ exports.UseRedisLockOrSkipSmart = UseRedisLockOrSkipSmart;
18
+ const common_1 = require("@nestjs/common");
19
+ const redis_lock_service_1 = require("./redis-lock.service");
20
+ let globalLockService = null;
21
+ function setLockService(lockService) {
22
+ globalLockService = lockService;
23
+ redis_lock_service_1.RedisLockService.setGlobalInstance(lockService);
24
+ }
25
+ function getLockService() {
26
+ return globalLockService;
27
+ }
28
+ function UseRedisLock(lockKey, options = {}) {
29
+ return function (target, propertyKey, descriptor) {
30
+ const originalMethod = descriptor.value;
31
+ const logger = new common_1.Logger(`RedisLock:${lockKey}`);
32
+ descriptor.value = function (...args) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
35
+ let lockService = getLockService();
36
+ if (!lockService) {
37
+ const { RedisLockService } = yield Promise.resolve().then(() => require('./redis-lock.service'));
38
+ lockService = RedisLockService.getGlobalInstance();
39
+ if (!lockService) {
40
+ logger.error(`RedisLockService not found. Please ensure RedisLockModule is properly configured with a Redis client.`);
41
+ return (_a = options.skipReturnValue) !== null && _a !== void 0 ? _a : null;
42
+ }
43
+ }
44
+ const skipReturnValue = (_b = options.skipReturnValue) !== null && _b !== void 0 ? _b : null;
45
+ try {
46
+ const lockResult = yield lockService.acquireLock(lockKey, options);
47
+ if (!lockResult.acquired) {
48
+ logger.log(`Lock '${lockKey}' is already held, skipping execution of ${String(propertyKey)}`);
49
+ return skipReturnValue;
50
+ }
51
+ logger.debug(`Lock '${lockKey}' acquired, executing ${String(propertyKey)}`);
52
+ try {
53
+ return yield originalMethod.apply(this, args);
54
+ }
55
+ catch (error) {
56
+ logger.error(`Error executing ${String(propertyKey)} with lock '${lockKey}':`, error);
57
+ throw error;
58
+ }
59
+ finally {
60
+ if (lockResult.autoExtendTimer) {
61
+ clearInterval(lockResult.autoExtendTimer);
62
+ }
63
+ yield lockService.releaseLock(lockKey, lockResult.lockValue, options.keyPrefix);
64
+ logger.debug(`Lock '${lockKey}' released`);
65
+ }
66
+ }
67
+ catch (error) {
68
+ if ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('requires a Redis client to be set')) {
69
+ logger.error(`Redis client not configured for RedisLock in ${lockKey}: ${error.message}. ` +
70
+ `Skipping execution to prevent issues.`);
71
+ return skipReturnValue;
72
+ }
73
+ if (((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('ECONNREFUSED')) ||
74
+ ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('ECONNRESET')) ||
75
+ ((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('ETIMEDOUT')) ||
76
+ ((_g = error.message) === null || _g === void 0 ? void 0 : _g.includes('Redis connection')) ||
77
+ ((_h = error.message) === null || _h === void 0 ? void 0 : _h.includes('Connection is closed')) ||
78
+ error.code === 'ECONNREFUSED' ||
79
+ error.code === 'ECONNRESET' ||
80
+ error.code === 'ETIMEDOUT') {
81
+ logger.error(`Redis connection error in ${lockKey}: ${error.message}. ` +
82
+ `Skipping execution to prevent issues.`);
83
+ return skipReturnValue;
84
+ }
85
+ if (((_j = error.message) === null || _j === void 0 ? void 0 : _j.includes('READONLY')) ||
86
+ ((_k = error.message) === null || _k === void 0 ? void 0 : _k.includes('LOADING')) ||
87
+ ((_l = error.message) === null || _l === void 0 ? void 0 : _l.includes('MASTERDOWN')) ||
88
+ ((_m = error.message) === null || _m === void 0 ? void 0 : _m.includes('NOREPLICAS'))) {
89
+ logger.error(`Redis server error in ${lockKey}: ${error.message}. ` +
90
+ `Skipping execution to prevent issues.`);
91
+ return skipReturnValue;
92
+ }
93
+ if (((_o = error.message) === null || _o === void 0 ? void 0 : _o.includes('getaddrinfo')) || error.code === 'EAI_AGAIN') {
94
+ logger.error(`Network error connecting to Redis in ${lockKey}: ${error.message}. ` +
95
+ `Skipping execution to prevent issues.`);
96
+ return skipReturnValue;
97
+ }
98
+ logger.error(`Unexpected error in RedisLock for ${lockKey}: ${error.message}`, error.stack);
99
+ throw error;
100
+ }
101
+ });
102
+ };
103
+ return descriptor;
104
+ };
105
+ }
106
+ function UseRedisLockOrSkip(lockKey, ttl = 300000) {
107
+ return UseRedisLock(lockKey, {
108
+ ttl,
109
+ skipReturnValue: false,
110
+ });
111
+ }
112
+ function UseRedisLockSmart(options = {}) {
113
+ return function (target, propertyKey, descriptor) {
114
+ const className = target.constructor.name;
115
+ const methodName = String(propertyKey);
116
+ const lockKey = `${className}:${methodName}`;
117
+ return UseRedisLock(lockKey, options)(target, propertyKey, descriptor);
118
+ };
119
+ }
120
+ function UseRedisLockOrSkipSmart(ttl = 300000) {
121
+ return UseRedisLockSmart({
122
+ ttl,
123
+ skipReturnValue: false,
124
+ });
125
+ }
@@ -0,0 +1,23 @@
1
+ import { DynamicModule, OnModuleInit } from '@nestjs/common';
2
+ import type { Redis } from 'ioredis';
3
+ export declare const REDIS_LOCK_SERVICE: unique symbol;
4
+ export interface RedisLockModuleOptions {
5
+ isGlobal?: boolean;
6
+ redisClient: Redis;
7
+ defaultTtl?: number;
8
+ defaultKeyPrefix?: string;
9
+ defaultRetryCount?: number;
10
+ defaultRetryDelay?: number;
11
+ }
12
+ export declare class RedisLockModule implements OnModuleInit {
13
+ private redisLockService;
14
+ constructor();
15
+ static forRoot(options: RedisLockModuleOptions): DynamicModule;
16
+ static forRootAsync(options: {
17
+ imports?: any[];
18
+ inject?: any[];
19
+ useFactory: (...args: any[]) => Promise<RedisLockModuleOptions> | RedisLockModuleOptions;
20
+ isGlobal?: boolean;
21
+ }): DynamicModule;
22
+ onModuleInit(): void;
23
+ }