murlock 4.3.0 → 4.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -6
- package/dist/decorators/murlock.decorator.d.ts +2 -0
- package/dist/decorators/murlock.decorator.js +72 -8
- package/dist/decorators/murlock.decorator.js.map +1 -1
- package/dist/murlock.service.js +2 -5
- package/dist/murlock.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -69,7 +69,15 @@ import { MurLock } from 'murlock';
|
|
|
69
69
|
@Injectable()
|
|
70
70
|
export class AppService {
|
|
71
71
|
@MurLock(5000, 'userId')
|
|
72
|
-
async someFunction({
|
|
72
|
+
async someFunction({
|
|
73
|
+
userId,
|
|
74
|
+
firstName,
|
|
75
|
+
lastName,
|
|
76
|
+
}: {
|
|
77
|
+
userId: string;
|
|
78
|
+
firstName: string;
|
|
79
|
+
lastName: string;
|
|
80
|
+
}): Promise<void> {
|
|
73
81
|
// Some critical section that only one request should be able to execute at a time
|
|
74
82
|
}
|
|
75
83
|
}
|
|
@@ -83,7 +91,10 @@ import { MurLock } from 'murlock';
|
|
|
83
91
|
@Injectable()
|
|
84
92
|
export class AppService {
|
|
85
93
|
@MurLock(5000, '0.userId', '1.transactionId')
|
|
86
|
-
async someFunction(
|
|
94
|
+
async someFunction(
|
|
95
|
+
{ userId, firstName, lastName }: UserDTO,
|
|
96
|
+
{ balance, transactionId }: TransactionDTO
|
|
97
|
+
): Promise<void> {
|
|
87
98
|
// Some critical section that only one request should be able to execute at a time
|
|
88
99
|
}
|
|
89
100
|
}
|
|
@@ -130,7 +141,7 @@ You can override the global wait parameter per decorator, allowing fine-grained
|
|
|
130
141
|
|
|
131
142
|
```typescript
|
|
132
143
|
@MurLock(
|
|
133
|
-
5000,
|
|
144
|
+
5000,
|
|
134
145
|
(retries) => (Math.floor(Math.random() * 50) + 50) * retries,
|
|
135
146
|
'user.id',
|
|
136
147
|
)
|
|
@@ -151,6 +162,66 @@ async anotherFunction(user: User): Promise<void> {
|
|
|
151
162
|
- If no wait is provided in decorator, MurLock will fallback to global wait from forRoot().
|
|
152
163
|
- Allows dynamic retry logic per critical section.
|
|
153
164
|
|
|
165
|
+
## Decorator Composition
|
|
166
|
+
|
|
167
|
+
When using `@MurLock` with other decorators (such as `@Transactional` from typeorm-transactional), you may encounter issues with parameter name extraction if the other decorator wraps the method before `@MurLock` is applied.
|
|
168
|
+
|
|
169
|
+
### Problem
|
|
170
|
+
|
|
171
|
+
TypeScript decorators execute in bottom-up order. If another decorator wraps the method before `@MurLock`, the parameter names cannot be extracted from the wrapped function:
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
// This may fail if @Transactional wraps the method before @MurLock executes
|
|
175
|
+
@MurLock(5000, 'userData.id')
|
|
176
|
+
@Transactional()
|
|
177
|
+
async process(userData: { id: string }, options: string[] = []): Promise<any> {
|
|
178
|
+
// Error: Parameter userData not found in method arguments
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Solution: Using SetParamNames
|
|
183
|
+
|
|
184
|
+
Use the `SetParamNames` decorator to explicitly specify parameter names. **Important**: `SetParamNames` must be placed **below** `@MurLock` in the code (it will execute before `@MurLock` due to TypeScript's bottom-up decorator execution order):
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
import { MurLock, SetParamNames } from 'murlock';
|
|
188
|
+
|
|
189
|
+
class MyService {
|
|
190
|
+
@MurLock(5000, 'userData.id')
|
|
191
|
+
@SetParamNames('userData', 'options') // Must be below @MurLock
|
|
192
|
+
@Transactional()
|
|
193
|
+
async process(userData: { id: string }, options: string[] = []): Promise<any> {
|
|
194
|
+
// This will work correctly
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Decorator Execution Order** (bottom-up):
|
|
200
|
+
|
|
201
|
+
1. `@Transactional()` executes first and wraps the method
|
|
202
|
+
2. `@SetParamNames` executes second and stores parameter names in metadata
|
|
203
|
+
3. `@MurLock` executes last and reads parameter names from metadata
|
|
204
|
+
|
|
205
|
+
If you place `@SetParamNames` above `@MurLock`, it will execute after `@MurLock`, and the metadata won't be available when `@MurLock` needs it.
|
|
206
|
+
|
|
207
|
+
### Alternative: Using Parameter Indices
|
|
208
|
+
|
|
209
|
+
As a workaround, you can use parameter indices instead of names:
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
@MurLock(5000, '0.id') // Uses index 0 for userData
|
|
213
|
+
@Transactional()
|
|
214
|
+
async process(userData: { id: string }, options: string[] = []): Promise<any> {
|
|
215
|
+
// This works, but name-based keys are more readable
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### How It Works
|
|
220
|
+
|
|
221
|
+
- `SetParamNames` stores parameter names in metadata before the method is wrapped
|
|
222
|
+
- `@MurLock` reads the parameter names from metadata when the function is already wrapped
|
|
223
|
+
- This allows decorator composition to work correctly regardless of execution order
|
|
224
|
+
|
|
154
225
|
## Blocking Mode
|
|
155
226
|
|
|
156
227
|
MurLock supports a blocking mode where it will continuously retry to acquire the lock until successful. This is useful for critical operations that must eventually succeed.
|
|
@@ -189,7 +260,7 @@ MurLock includes robust Redis connection handling:
|
|
|
189
260
|
@Module({
|
|
190
261
|
imports: [
|
|
191
262
|
MurLockModule.forRoot({
|
|
192
|
-
redisOptions: {
|
|
263
|
+
redisOptions: {
|
|
193
264
|
url: 'redis://localhost:6379',
|
|
194
265
|
socket: {
|
|
195
266
|
keepAlive: false,
|
|
@@ -222,7 +293,7 @@ import { MurLockModule } from 'murlock';
|
|
|
222
293
|
wait: configService.get('MURLOCK_WAIT'),
|
|
223
294
|
maxAttempts: configService.get('MURLOCK_MAX_ATTEMPTS'),
|
|
224
295
|
logLevel: configService.get('LOG_LEVEL'),
|
|
225
|
-
lockKeyPrefix: 'custom'
|
|
296
|
+
lockKeyPrefix: 'custom',
|
|
226
297
|
}),
|
|
227
298
|
inject: [ConfigService],
|
|
228
299
|
}),
|
|
@@ -277,7 +348,7 @@ import { MurLockService } from 'murlock';
|
|
|
277
348
|
@Injectable()
|
|
278
349
|
export class YourService {
|
|
279
350
|
constructor(private murLockService: MurLockService) {}
|
|
280
|
-
|
|
351
|
+
|
|
281
352
|
// Your methods where you want to use the lock
|
|
282
353
|
}
|
|
283
354
|
```
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
+
export declare const PARAM_NAMES_KEY: unique symbol;
|
|
3
|
+
export declare function SetParamNames(...paramNames: string[]): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
2
4
|
export declare function MurLock(releaseTime: number, wait: number | ((retries: number) => number), ...keyParams: string[]): any;
|
|
3
5
|
export declare function MurLock(releaseTime: number, ...keyParams: string[]): any;
|
|
@@ -9,19 +9,76 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.MurLock = void 0;
|
|
13
|
-
require("reflect-metadata");
|
|
12
|
+
exports.MurLock = exports.SetParamNames = exports.PARAM_NAMES_KEY = void 0;
|
|
14
13
|
const common_1 = require("@nestjs/common");
|
|
14
|
+
require("reflect-metadata");
|
|
15
15
|
const exceptions_1 = require("../exceptions");
|
|
16
16
|
const murlock_service_1 = require("../murlock.service");
|
|
17
|
+
exports.PARAM_NAMES_KEY = Symbol('murlock:param-names');
|
|
18
|
+
function SetParamNames(...paramNames) {
|
|
19
|
+
return function (target, propertyKey, descriptor) {
|
|
20
|
+
Reflect.defineMetadata(exports.PARAM_NAMES_KEY, paramNames, target, propertyKey);
|
|
21
|
+
return descriptor;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
exports.SetParamNames = SetParamNames;
|
|
17
25
|
function getParameterNames(func) {
|
|
18
26
|
const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;
|
|
19
|
-
const ARGUMENT_NAMES = /([^\s,]+)/g;
|
|
20
27
|
const fnStr = func.toString().replace(STRIP_COMMENTS, '');
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
const paramsStr = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')'));
|
|
29
|
+
if (!paramsStr.trim()) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const params = [];
|
|
33
|
+
let current = '';
|
|
34
|
+
let depth = 0;
|
|
35
|
+
let inString = false;
|
|
36
|
+
let stringChar = '';
|
|
37
|
+
for (let i = 0; i < paramsStr.length; i++) {
|
|
38
|
+
const char = paramsStr[i];
|
|
39
|
+
if (!inString && (char === '"' || char === "'" || char === '`')) {
|
|
40
|
+
inString = true;
|
|
41
|
+
stringChar = char;
|
|
42
|
+
}
|
|
43
|
+
else if (inString && char === stringChar && paramsStr[i - 1] !== '\\') {
|
|
44
|
+
inString = false;
|
|
45
|
+
}
|
|
46
|
+
else if (!inString) {
|
|
47
|
+
if (char === '(' || char === '[' || char === '{') {
|
|
48
|
+
depth++;
|
|
49
|
+
}
|
|
50
|
+
else if (char === ')' || char === ']' || char === '}') {
|
|
51
|
+
depth--;
|
|
52
|
+
}
|
|
53
|
+
else if (char === ',' && depth === 0) {
|
|
54
|
+
const paramName = current.split('=')[0].trim().split(':')[0].trim();
|
|
55
|
+
if (paramName) {
|
|
56
|
+
params.push(paramName);
|
|
57
|
+
}
|
|
58
|
+
current = '';
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
current += char;
|
|
63
|
+
}
|
|
64
|
+
if (current.trim()) {
|
|
65
|
+
const paramName = current.split('=')[0].trim().split(':')[0].trim();
|
|
66
|
+
if (paramName) {
|
|
67
|
+
params.push(paramName);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return params;
|
|
71
|
+
}
|
|
72
|
+
function getParameterNamesWithFallback(func, target, propertyKey) {
|
|
73
|
+
const paramNames = getParameterNames(func);
|
|
74
|
+
if (paramNames.length > 0 && !paramNames.includes('...args')) {
|
|
75
|
+
return paramNames;
|
|
76
|
+
}
|
|
77
|
+
const metadataParamNames = Reflect.getMetadata(exports.PARAM_NAMES_KEY, target, propertyKey);
|
|
78
|
+
if (metadataParamNames && metadataParamNames.length > 0) {
|
|
79
|
+
return metadataParamNames;
|
|
80
|
+
}
|
|
81
|
+
return paramNames;
|
|
25
82
|
}
|
|
26
83
|
function MurLock(releaseTime, waitOrKeyParam, ...keyParams) {
|
|
27
84
|
let wait;
|
|
@@ -39,7 +96,14 @@ function MurLock(releaseTime, waitOrKeyParam, ...keyParams) {
|
|
|
39
96
|
return (target, propertyKey, descriptor) => {
|
|
40
97
|
injectMurlockService(target, 'murlockServiceDecorator');
|
|
41
98
|
const originalMethod = descriptor.value;
|
|
42
|
-
const methodParameterNames =
|
|
99
|
+
const methodParameterNames = getParameterNamesWithFallback(originalMethod, target, propertyKey);
|
|
100
|
+
if (methodParameterNames.length > 0 &&
|
|
101
|
+
!methodParameterNames.includes('...args')) {
|
|
102
|
+
const existingMetadata = Reflect.getMetadata(exports.PARAM_NAMES_KEY, target, propertyKey);
|
|
103
|
+
if (!existingMetadata) {
|
|
104
|
+
Reflect.defineMetadata(exports.PARAM_NAMES_KEY, methodParameterNames, target, propertyKey);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
43
107
|
function constructLockKey(args, lockKeyPrefix = 'default') {
|
|
44
108
|
let lockKeyElements = [];
|
|
45
109
|
if (lockKeyPrefix != 'custom') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"murlock.decorator.js","sourceRoot":"","sources":["../../lib/decorators/murlock.decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4BAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"murlock.decorator.js","sourceRoot":"","sources":["../../lib/decorators/murlock.decorator.ts"],"names":[],"mappings":"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"}
|
package/dist/murlock.service.js
CHANGED
|
@@ -45,14 +45,11 @@ let MurLockService = MurLockService_1 = class MurLockService {
|
|
|
45
45
|
catch (error) {
|
|
46
46
|
throw new exceptions_1.MurLockException(`Failed to load Lua scripts: ${error.message}`);
|
|
47
47
|
}
|
|
48
|
-
this.redisClient = (0, redis_1.createClient)(Object.assign(Object.assign({}, this.options.redisOptions), { socket: {
|
|
49
|
-
keepAlive: false,
|
|
50
|
-
reconnectStrategy: (retries) => {
|
|
48
|
+
this.redisClient = (0, redis_1.createClient)(Object.assign(Object.assign({}, this.options.redisOptions), { socket: Object.assign(Object.assign({}, this.options.redisOptions.socket), { keepAlive: false, reconnectStrategy: (retries) => {
|
|
51
49
|
const delay = Math.min(retries * 500, 5000);
|
|
52
50
|
this.log('warn', `MurLock Redis reconnect attempt ${retries}, waiting ${delay} ms...`);
|
|
53
51
|
return delay;
|
|
54
|
-
}
|
|
55
|
-
} }));
|
|
52
|
+
} }) }));
|
|
56
53
|
this.registerRedisErrorHandlers();
|
|
57
54
|
try {
|
|
58
55
|
yield this.redisClient.connect();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"murlock.service.js","sourceRoot":"","sources":["../lib/murlock.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAMwB;AACxB,0CAAuC;AACvC,+BAA4B;AAC5B,iCAAsD;AACtD,mDAAwD;AACxD,6CAAgD;AAEhD,mCAAuC;AAMhC,IAAM,cAAc,sBAApB,MAAM,cAAc;IAMzB,YAC6B,OAAsC,EAChD,mBAAwC;QADrB,YAAO,GAAP,OAAO,CAAsB;QAChD,wBAAmB,GAAnB,mBAAmB,CAAqB;QAP1C,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;IAQvD,CAAC;IAEE,YAAY;;YAChB,IAAI;gBACF,IAAI,CAAC,UAAU,GAAG,MAAM,IAAA,mBAAQ,EAC9B,IAAA,WAAI,EAAC,SAAS,EAAE,gBAAgB,CAAC,EACjC,MAAM,CACP,CAAC;gBACF,IAAI,CAAC,YAAY,GAAG,MAAM,IAAA,mBAAQ,EAChC,IAAA,WAAI,EAAC,SAAS,EAAE,kBAAkB,CAAC,EACnC,MAAM,CACP,CAAC;aACH;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,IAAI,6BAAgB,CACxB,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAC/C,CAAC;aACH;YAED,IAAI,CAAC,WAAW,GAAG,IAAA,oBAAY,kCAC1B,IAAI,CAAC,OAAO,CAAC,YAAY,KAC5B,MAAM,
|
|
1
|
+
{"version":3,"file":"murlock.service.js","sourceRoot":"","sources":["../lib/murlock.service.ts"],"names":[],"mappings":"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"}
|