murlock 3.3.0 → 3.4.0-beta.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 +41 -0
- package/dist/decorators/murlock.decorator.js +24 -20
- package/dist/decorators/murlock.decorator.js.map +1 -1
- package/dist/interfaces/murlock-options.interface.d.ts +1 -0
- package/dist/murlock.service.d.ts +1 -1
- package/dist/murlock.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -117,6 +117,32 @@ In the example above, the `ConfigModule` and `ConfigService` are used to provide
|
|
|
117
117
|
|
|
118
118
|
For more details on usage and configuration, please refer to the API documentation below.
|
|
119
119
|
|
|
120
|
+
|
|
121
|
+
## Using Custom Lock Key
|
|
122
|
+
|
|
123
|
+
By default, murlock use class and method name prefix for example Userservice:createUser:{userId}. By setting lockKeyPrefix as 'custom' you can define by yourself manually.
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { MurLockModule } from 'murlock';
|
|
127
|
+
|
|
128
|
+
@Module({
|
|
129
|
+
imports: [
|
|
130
|
+
MurLockModule.forRootAsync({
|
|
131
|
+
imports: [ConfigModule],
|
|
132
|
+
useFactory: async (configService: ConfigService) => ({
|
|
133
|
+
redisOptions: configService.get('REDIS_OPTIONS'),
|
|
134
|
+
wait: configService.get('MURLOCK_WAIT'),
|
|
135
|
+
maxAttempts: configService.get('MURLOCK_MAX_ATTEMPTS'),
|
|
136
|
+
logLevel: configService.get('LOG_LEVEL'),
|
|
137
|
+
lockKeyPrefix: 'custom'
|
|
138
|
+
}),
|
|
139
|
+
inject: [ConfigService],
|
|
140
|
+
}),
|
|
141
|
+
],
|
|
142
|
+
})
|
|
143
|
+
export class AppModule {}
|
|
144
|
+
```
|
|
145
|
+
|
|
120
146
|
### Ignoring Unlock Failures
|
|
121
147
|
|
|
122
148
|
In some scenarios, throwing an exception when a lock cannot be released can be undesirable. For example, you might prefer to log the failure and continue without interrupting the flow of your application. To enable this behavior, set the `ignoreUnlockFail` option to `true` in your configuration:
|
|
@@ -130,9 +156,24 @@ MurLockModule.forRoot({
|
|
|
130
156
|
maxAttempts: 3,
|
|
131
157
|
logLevel: 'log',
|
|
132
158
|
ignoreUnlockFail: true, // Unlock failures will be logged instead of throwing exceptions.
|
|
159
|
+
lockKeyPrefix: 'default' // optional, use 'default' if you would like to lock keys as servicename:methodname:customdata, otherwise use 'custom' to manually write each lock key
|
|
133
160
|
}),
|
|
134
161
|
```
|
|
135
162
|
|
|
163
|
+
```typescript
|
|
164
|
+
import { MurLock } from 'murlock';
|
|
165
|
+
|
|
166
|
+
@Injectable()
|
|
167
|
+
export class AppService {
|
|
168
|
+
@MurLock(5000, 'someCustomKey', 'userId')
|
|
169
|
+
async someFunction(userId): Promise<void> {
|
|
170
|
+
// Some critical section that only one request should be able to execute at a time
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
If we assume userId as 65782628 Lockey here will be someCustomKey:65782628
|
|
176
|
+
|
|
136
177
|
## Using `MurLockService` Directly
|
|
137
178
|
|
|
138
179
|
While the `@MurLock()` decorator provides a convenient and declarative way to handle locking within your NestJS application, there may be cases where you need more control over the lock lifecycle. For such cases, `MurLockService` offers a programmatic way to manage locks.
|
|
@@ -30,33 +30,37 @@ function MurLock(releaseTime, ...keyParams) {
|
|
|
30
30
|
injectAsyncStorageService(target, 'asyncStorageService');
|
|
31
31
|
const originalMethod = descriptor.value;
|
|
32
32
|
const methodParameterNames = getParameterNames(originalMethod);
|
|
33
|
-
function constructLockKey(args) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return parameterValue[path];
|
|
47
|
-
}
|
|
48
|
-
return parameterValue instanceof Object ? parameterValue.toString() : parameterValue;
|
|
33
|
+
function constructLockKey(args, lockKeyPrefix = 'default') {
|
|
34
|
+
let lockKeyElements = [];
|
|
35
|
+
if (lockKeyPrefix != 'custom') {
|
|
36
|
+
lockKeyElements.push(target.constructor.name);
|
|
37
|
+
lockKeyElements.push(propertyKey);
|
|
38
|
+
}
|
|
39
|
+
lockKeyElements.push(...keyParams.map((keyParam) => {
|
|
40
|
+
const [source, path] = keyParam.split('.');
|
|
41
|
+
const parameterIndex = isNumber(source) ? Number(source) : methodParameterNames.indexOf(source);
|
|
42
|
+
if (parameterIndex >= 0) {
|
|
43
|
+
const parameterValue = findParameterValue({ args, source, parameterIndex, path });
|
|
44
|
+
if (typeof parameterValue === 'undefined' || parameterValue === null) {
|
|
45
|
+
throw new exceptions_1.MurLockException(`Parameter ${source} is undefined or null.`);
|
|
49
46
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
if (path && typeof parameterValue === 'object' && parameterValue !== null && path in parameterValue) {
|
|
48
|
+
return parameterValue[path];
|
|
49
|
+
}
|
|
50
|
+
return parameterValue instanceof Object ? parameterValue.toString() : parameterValue;
|
|
51
|
+
}
|
|
52
|
+
if (lockKeyPrefix == 'custom') {
|
|
53
|
+
return source;
|
|
54
|
+
}
|
|
55
|
+
throw new exceptions_1.MurLockException(`Parameter ${source} not found in method arguments.`);
|
|
56
|
+
}));
|
|
53
57
|
return lockKeyElements.join(':');
|
|
54
58
|
}
|
|
55
59
|
descriptor.value = function (...args) {
|
|
56
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
-
const lockKey = constructLockKey(args);
|
|
58
61
|
const murLockService = this.murlockServiceDecorator;
|
|
59
62
|
const asyncStorageService = this.asyncStorageService;
|
|
63
|
+
const lockKey = constructLockKey(args, murLockService.options.lockKeyPrefix);
|
|
60
64
|
if (!murLockService) {
|
|
61
65
|
throw new exceptions_1.MurLockException('MurLockService is not available.');
|
|
62
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"murlock.decorator.js","sourceRoot":"","sources":["../../lib/decorators/murlock.decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwC;AACxC,8CAAiD;AACjD,wDAAoD;AACpD,oCAAwC;AACxC,oDAAyD;AAOzD,SAAS,iBAAiB,CAAC,IAAc;IACvC,MAAM,cAAc,GAAG,kCAAkC,CAAC;IAC1D,MAAM,cAAc,GAAG,YAAY,CAAC;IAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7F,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC;AAQD,SAAgB,OAAO,CAAC,WAAmB,EAAE,GAAG,SAAmB;IACjE,MAAM,oBAAoB,GAAG,IAAA,eAAM,EAAC,gCAAc,CAAC,CAAC;IACpD,MAAM,yBAAyB,GAAG,IAAA,eAAM,EAAC,iCAAmB,CAAC,CAAC;IAE9D,OAAO,CACL,MAAW,EACX,WAAmB,EACnB,UAA8B,EAC9B,EAAE;QACF,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QACxD,yBAAyB,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAEzD,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QACxC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAE/D,SAAS,gBAAgB,CAAC,IAAW;
|
|
1
|
+
{"version":3,"file":"murlock.decorator.js","sourceRoot":"","sources":["../../lib/decorators/murlock.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { OnApplicationShutdown, OnModuleInit } from '@nestjs/common';
|
|
|
2
2
|
import { MurLockModuleOptions } from './interfaces';
|
|
3
3
|
import { AsyncStorageService } from './als/als.service';
|
|
4
4
|
export declare class MurLockService implements OnModuleInit, OnApplicationShutdown {
|
|
5
|
-
|
|
5
|
+
readonly options: MurLockModuleOptions;
|
|
6
6
|
private readonly asyncStorageService;
|
|
7
7
|
private readonly logger;
|
|
8
8
|
private redisClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"murlock.service.js","sourceRoot":"","sources":["../lib/murlock.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAiG;AACjG,iCAAsD;AACtD,2BAAkC;AAClC,+BAA4B;AAE5B,6CAAuE;AACvE,mDAAwD;AAMjD,IAAM,cAAc,sBAApB,MAAM,cAAc;IAMzB,YAC6B,
|
|
1
|
+
{"version":3,"file":"murlock.service.js","sourceRoot":"","sources":["../lib/murlock.service.ts"],"names":[],"mappings":"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"}
|