vona-module-a-redlock 5.0.30 → 5.1.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/LICENSE +0 -0
- package/dist/.metadata/index.d.ts +1 -0
- package/dist/.metadata/index.d.ts.map +1 -0
- package/dist/.metadata/this.d.ts +1 -0
- package/dist/.metadata/this.d.ts.map +1 -0
- package/dist/config/config.d.ts +1 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -0
- package/dist/lib/beanRedlockBase.d.ts +2 -1
- package/dist/lib/beanRedlockBase.d.ts.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/service/redlock.d.ts +2 -1
- package/dist/service/redlock.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/redlock.d.ts +1 -0
- package/dist/types/redlock.d.ts.map +1 -0
- package/package.json +32 -27
- package/src/.metadata/index.ts +78 -0
- package/src/.metadata/this.ts +2 -0
- package/src/config/config.ts +21 -0
- package/src/index.ts +3 -0
- package/src/lib/beanRedlockBase.ts +23 -0
- package/src/lib/index.ts +1 -0
- package/src/service/redlock.ts +86 -0
- package/src/types/index.ts +1 -0
- package/src/types/redlock.ts +28 -0
package/LICENSE
CHANGED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/.metadata/index.ts"],"names":[],"mappings":"AACA,qBAAqB;AACrB,cAAc,uBAAuB,CAAC;AAEtC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,QAAQ,oBAAoB,CAAC;IAEhC,UAAiB,cAAc;QAC7B,mBAAmB,EAAE,KAAK,CAAC;KAC5B;CAGJ;AACD,OAAO,QAAQ,uBAAuB,CAAC;IAE/B,UAAiB,cAAc;KAG9B;IAEC,UAAiB,cAAc;QAC7B,IAAI,aAAa,IAAI,2BAA2B,CAAC;QACjD,IAAI,UAAU,IAAI,mBAAmB,CAAC;KAEvC;CACV;AACD,mBAAmB;AACnB,qBAAqB;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,cAAc,CAAC;CAC3B;AACD,mBAAmB;AACnB,qBAAqB;AAErB,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,kBAAkB;QACjC,2BAA2B,EAAE,cAAc,CAAC;KAC7C;CACF;AACD,mBAAmB;AACnB,oBAAoB;AACpB,cAAc,qBAAqB,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,kBAAkB;AAClB,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAGhF,qBACa,mBAAoB,SAAQ,aAAa;CAAG;AAEzD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC,OAAO,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,cAAc,CAAC;CACvB;AAED,OAAO,MAAM,CAAC;AACd,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAiB,gBAAgB;QAC/B,WAAW,EAAE,mBAAmB,CAAC;KAClC;IAED,UAAiB,mBAAmB;QAClC,OAAO,EAAE,mBAAmB,CAAC;KAC9B;IAED,UAAiB,gBAAgB;QAC/B,WAAW,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;KACxC;CAKF;AACD,iBAAiB"}
|
package/dist/.metadata/this.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"this.d.ts","sourceRoot":"","sources":["../../src/.metadata/this.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/config/config.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,wBAAgB,MAAM,CAAC,GAAG,EAAE,eAAe,iBAgB1C"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { BeanInfo, BeanBase, instanceDesp, deepExtend, BeanScopeBase, SymbolModuleBelong } from 'vona';
|
|
2
|
+
import { __decorate } from 'tslib';
|
|
2
3
|
import { Redlock } from '@sesamecare-oss/redlock';
|
|
3
4
|
import { Service, Scope } from 'vona-module-a-bean';
|
|
4
5
|
import { getRedisClientKeyPrefix } from 'vona-module-a-redis';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
let ServiceRedlock = (_dec$1 = Service(), _dec2$1 = BeanInfo({
|
|
8
|
-
module: "a-redlock"
|
|
9
|
-
}), _dec$1(_class$1 = _dec2$1(_class$1 = class ServiceRedlock extends BeanBase {
|
|
7
|
+
let ServiceRedlock = class ServiceRedlock extends BeanBase {
|
|
10
8
|
constructor(...args) {
|
|
11
9
|
super(...args);
|
|
12
10
|
this._redlockDefault = void 0;
|
|
@@ -72,7 +70,10 @@ let ServiceRedlock = (_dec$1 = Service(), _dec2$1 = BeanInfo({
|
|
|
72
70
|
// create
|
|
73
71
|
return new Redlock(clients, options.options);
|
|
74
72
|
}
|
|
75
|
-
}
|
|
73
|
+
};
|
|
74
|
+
ServiceRedlock = __decorate([Service(), BeanInfo({
|
|
75
|
+
module: "a-redlock"
|
|
76
|
+
})], ServiceRedlock);
|
|
76
77
|
|
|
77
78
|
function config(app) {
|
|
78
79
|
const lockTTL = app.meta.isDev ? 8 : app.meta.isTest ? 60 : 30;
|
|
@@ -92,11 +93,10 @@ function config(app) {
|
|
|
92
93
|
return redlock;
|
|
93
94
|
}
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
let ScopeModuleARedlock = class ScopeModuleARedlock extends BeanScopeBase {};
|
|
97
|
+
ScopeModuleARedlock = __decorate([Scope(), BeanInfo({
|
|
97
98
|
module: "a-redlock"
|
|
98
|
-
}),
|
|
99
|
-
|
|
99
|
+
})], ScopeModuleARedlock);
|
|
100
100
|
/** scope: end */
|
|
101
101
|
|
|
102
102
|
class BeanRedlockBase extends BeanBase {
|
|
@@ -112,3 +112,4 @@ class BeanRedlockBase extends BeanBase {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
export { BeanRedlockBase, ScopeModuleARedlock, ServiceRedlock, config };
|
|
115
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/service/redlock.ts","../src/config/config.ts","../src/.metadata/index.ts","../src/lib/beanRedlockBase.ts"],"sourcesContent":[null,null,null,null],"names":["ServiceRedlock","BeanBase","constructor","args","_redlockDefault","lock","resource","fn","options","instanceName","undefined","ctx","redlock","redlockDefault","lockTTL","scope","config","_lockResource","getRedisClientKeyPrefix","app","instanceDesp","_lock","acquire","_lockTimer","_lockDone","clearInterval","setInterval","extend","then","catch","_err","release","lockIsolate","bean","database","current","switchDbIsolate","_create","base","create","options2","deepExtend","clients","clientName","client","redis","get","push","Redlock","__decorate","Service","__z_BeanInfo","module","meta","isDev","isTest","driftFactor","retryCount","retryDelay","retryJitter","ScopeModuleARedlock","BeanScopeBase","Scope","BeanRedlockBase","$scope","service","_prepareResource","SymbolModuleBelong"],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { FunctionAsync } from 'vona';
|
|
2
|
-
import type { IRedlockLockIsolateOptions, IRedlockLockOptions } from '../types/redlock.ts';
|
|
3
2
|
import { BeanBase } from 'vona';
|
|
3
|
+
import type { IRedlockLockIsolateOptions, IRedlockLockOptions } from '../types/redlock.ts';
|
|
4
4
|
export declare class BeanRedlockBase<TypeRedlockLockResource, TypeRedlockLockIsolateResource> extends BeanBase {
|
|
5
5
|
lock<RESULT>(resource: TypeRedlockLockResource, fn: FunctionAsync<RESULT>, options?: IRedlockLockOptions): Promise<RESULT>;
|
|
6
6
|
lockIsolate<RESULT>(resource: TypeRedlockLockIsolateResource, fn: FunctionAsync<RESULT>, options?: IRedlockLockIsolateOptions): Promise<RESULT>;
|
|
7
7
|
private _prepareResource;
|
|
8
8
|
}
|
|
9
|
+
//# sourceMappingURL=beanRedlockBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beanRedlockBase.d.ts","sourceRoot":"","sources":["../../src/lib/beanRedlockBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAsB,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE3F,qBAAa,eAAe,CAAC,uBAAuB,EAAE,8BAA8B,CAAE,SAAQ,QAAQ;IAC9F,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1H,WAAW,CAAC,MAAM,EACtB,QAAQ,EAAE,8BAA8B,EACxC,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EACzB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,MAAM,CAAC;IAIlB,OAAO,CAAC,gBAAgB;CAGzB"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FunctionAsync, PowerPartial } from 'vona';
|
|
2
|
-
import type { IRedlockClientOptions, IRedlockLockIsolateOptions, IRedlockLockOptions } from '../types/redlock.ts';
|
|
3
2
|
import { Redlock } from '@sesamecare-oss/redlock';
|
|
4
3
|
import { BeanBase } from 'vona';
|
|
4
|
+
import type { IRedlockClientOptions, IRedlockLockIsolateOptions, IRedlockLockOptions } from '../types/redlock.ts';
|
|
5
5
|
export declare class ServiceRedlock extends BeanBase {
|
|
6
6
|
private _redlockDefault;
|
|
7
7
|
lock<RESULT>(resource: string, fn: FunctionAsync<RESULT>, options?: IRedlockLockOptions): Promise<RESULT>;
|
|
@@ -10,3 +10,4 @@ export declare class ServiceRedlock extends BeanBase {
|
|
|
10
10
|
create(options?: PowerPartial<IRedlockClientOptions>): Redlock;
|
|
11
11
|
private _create;
|
|
12
12
|
}
|
|
13
|
+
//# sourceMappingURL=redlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redlock.d.ts","sourceRoot":"","sources":["../../src/service/redlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAExD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAA4B,MAAM,MAAM,CAAC;AAI1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAElH,qBACa,cAAe,SAAQ,QAAQ;IAC1C,OAAO,CAAC,eAAe,CAAU;IAEpB,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuCzG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IAWpI,OAAO,KAAK,cAAc,GAKzB;IAEM,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,GAAG,OAAO;IAKrE,OAAO,CAAC,OAAO;CAUhB"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
package/dist/types/redlock.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redlock.d.ts","sourceRoot":"","sources":["../../src/types/redlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,MAAM,kBAAkB,CAAC,EAAE,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA2B,SAAQ,mBAAmB,EAAE,OAAO,CAAC,OAAO,CAAC;CAAG;AAE5F,OAAO,QAAQ,oBAAoB,CAAC;IAClC,UAAiB,eAAe;QAC9B,OAAO,EAAE,KAAK,CAAC;KAChB;CACF"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona-module-a-redlock",
|
|
3
|
-
"
|
|
4
|
-
"version": "5.0.30",
|
|
5
|
-
"title": "a-redlock",
|
|
6
|
-
"vonaModule": {
|
|
7
|
-
"dependencies": {},
|
|
8
|
-
"globalDependencies": {
|
|
9
|
-
"@sesamecare-oss/redlock": true
|
|
10
|
-
},
|
|
11
|
-
"globalDependenciesDev": {},
|
|
12
|
-
"metas": {
|
|
13
|
-
"redlock": {
|
|
14
|
-
"scopeResource": true,
|
|
15
|
-
"boilerplate": "boilerplate"
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
},
|
|
3
|
+
"version": "5.1.2",
|
|
19
4
|
"description": "",
|
|
20
|
-
"author": "",
|
|
21
5
|
"keywords": [
|
|
22
6
|
"Vona Module"
|
|
23
7
|
],
|
|
8
|
+
"author": "",
|
|
9
|
+
"files": [
|
|
10
|
+
"assets",
|
|
11
|
+
"cli",
|
|
12
|
+
"dist",
|
|
13
|
+
"src"
|
|
14
|
+
],
|
|
15
|
+
"type": "module",
|
|
24
16
|
"exports": {
|
|
25
17
|
".": {
|
|
26
18
|
"types": [
|
|
@@ -31,11 +23,13 @@
|
|
|
31
23
|
},
|
|
32
24
|
"./package.json": "./package.json"
|
|
33
25
|
},
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
26
|
+
"scripts": {
|
|
27
|
+
"clean": "rimraf dist tsconfig.build.tsbuildinfo",
|
|
28
|
+
"tsc:publish": "npm run clean && vona :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
|
|
29
|
+
"prepublishOnly": "npm run tsc:publish",
|
|
30
|
+
"prepack": "clean-package",
|
|
31
|
+
"postpack": "clean-package restore && npm run clean"
|
|
32
|
+
},
|
|
39
33
|
"dependencies": {
|
|
40
34
|
"@sesamecare-oss/redlock": "^1.4.0"
|
|
41
35
|
},
|
|
@@ -43,8 +37,19 @@
|
|
|
43
37
|
"clean-package": "^2.2.0",
|
|
44
38
|
"rimraf": "^6.0.1"
|
|
45
39
|
},
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
"title": "a-redlock",
|
|
41
|
+
"vonaModule": {
|
|
42
|
+
"dependencies": {},
|
|
43
|
+
"globalDependencies": {
|
|
44
|
+
"@sesamecare-oss/redlock": true
|
|
45
|
+
},
|
|
46
|
+
"globalDependenciesDev": {},
|
|
47
|
+
"metas": {
|
|
48
|
+
"redlock": {
|
|
49
|
+
"scopeResource": true,
|
|
50
|
+
"boilerplate": "boilerplate"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"gitHead": "a79189b882c17af5911573896a781bbb0046d37d"
|
|
55
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// eslint-disable
|
|
2
|
+
/** service: begin */
|
|
3
|
+
export * from '../service/redlock.ts';
|
|
4
|
+
|
|
5
|
+
import 'vona-module-a-bean';
|
|
6
|
+
declare module 'vona-module-a-bean' {
|
|
7
|
+
|
|
8
|
+
export interface IServiceRecord {
|
|
9
|
+
'a-redlock:redlock': never;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
declare module 'vona-module-a-redlock' {
|
|
15
|
+
|
|
16
|
+
export interface ServiceRedlock {
|
|
17
|
+
/** @internal */
|
|
18
|
+
get scope(): ScopeModuleARedlock;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ServiceRedlock {
|
|
22
|
+
get $beanFullName(): 'a-redlock.service.redlock';
|
|
23
|
+
get $onionName(): 'a-redlock:redlock';
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** service: end */
|
|
28
|
+
/** service: begin */
|
|
29
|
+
import type { ServiceRedlock } from '../service/redlock.ts';
|
|
30
|
+
export interface IModuleService {
|
|
31
|
+
'redlock': ServiceRedlock;
|
|
32
|
+
}
|
|
33
|
+
/** service: end */
|
|
34
|
+
/** service: begin */
|
|
35
|
+
|
|
36
|
+
import 'vona';
|
|
37
|
+
declare module 'vona' {
|
|
38
|
+
export interface IBeanRecordGeneral {
|
|
39
|
+
'a-redlock.service.redlock': ServiceRedlock;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** service: end */
|
|
43
|
+
/** config: begin */
|
|
44
|
+
export * from '../config/config.ts';
|
|
45
|
+
import type { config } from '../config/config.ts';
|
|
46
|
+
/** config: end */
|
|
47
|
+
/** scope: begin */
|
|
48
|
+
import { BeanScopeBase, type BeanScopeUtil, type TypeModuleConfig } from 'vona';
|
|
49
|
+
import { Scope } from 'vona-module-a-bean';
|
|
50
|
+
|
|
51
|
+
@Scope()
|
|
52
|
+
export class ScopeModuleARedlock extends BeanScopeBase {}
|
|
53
|
+
|
|
54
|
+
export interface ScopeModuleARedlock {
|
|
55
|
+
util: BeanScopeUtil;
|
|
56
|
+
config: TypeModuleConfig<typeof config>;
|
|
57
|
+
service: IModuleService;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
import 'vona';
|
|
61
|
+
declare module 'vona' {
|
|
62
|
+
export interface IBeanScopeRecord {
|
|
63
|
+
'a-redlock': ScopeModuleARedlock;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface IBeanScopeContainer {
|
|
67
|
+
redlock: ScopeModuleARedlock;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface IBeanScopeConfig {
|
|
71
|
+
'a-redlock': ReturnType<typeof config>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
/** scope: end */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { VonaApplication } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { ConfigRedlock } from '../types/redlock.ts';
|
|
4
|
+
|
|
5
|
+
export function config(app: VonaApplication) {
|
|
6
|
+
const lockTTL = app.meta.isDev ? 8 : app.meta.isTest ? 60 : 30;
|
|
7
|
+
const redlock: ConfigRedlock = {
|
|
8
|
+
lockTTL: lockTTL * 1000,
|
|
9
|
+
base: {
|
|
10
|
+
clients: ['redlock'],
|
|
11
|
+
// https://github.com/mike-marcacci/node-redlock#configuration
|
|
12
|
+
options: {
|
|
13
|
+
driftFactor: 0.01,
|
|
14
|
+
retryCount: -1,
|
|
15
|
+
retryDelay: 200,
|
|
16
|
+
retryJitter: 100,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
return redlock;
|
|
21
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FunctionAsync } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { BeanBase, SymbolModuleBelong } from 'vona';
|
|
4
|
+
|
|
5
|
+
import type { IRedlockLockIsolateOptions, IRedlockLockOptions } from '../types/redlock.ts';
|
|
6
|
+
|
|
7
|
+
export class BeanRedlockBase<TypeRedlockLockResource, TypeRedlockLockIsolateResource> extends BeanBase {
|
|
8
|
+
async lock<RESULT>(resource: TypeRedlockLockResource, fn: FunctionAsync<RESULT>, options?: IRedlockLockOptions): Promise<RESULT> {
|
|
9
|
+
return this.$scope.redlock.service.redlock.lock(this._prepareResource(resource), fn, options);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async lockIsolate<RESULT>(
|
|
13
|
+
resource: TypeRedlockLockIsolateResource,
|
|
14
|
+
fn: FunctionAsync<RESULT>,
|
|
15
|
+
options?: IRedlockLockIsolateOptions,
|
|
16
|
+
): Promise<RESULT> {
|
|
17
|
+
return this.$scope.redlock.service.redlock.lockIsolate(this._prepareResource(resource), fn, options);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private _prepareResource(resource: TypeRedlockLockResource | TypeRedlockLockIsolateResource) {
|
|
21
|
+
return `${this[SymbolModuleBelong]}.${resource}`;
|
|
22
|
+
}
|
|
23
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './beanRedlockBase.ts';
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { FunctionAsync, PowerPartial } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { Redlock } from '@sesamecare-oss/redlock';
|
|
4
|
+
import { BeanBase, deepExtend, instanceDesp } from 'vona';
|
|
5
|
+
import { Service } from 'vona-module-a-bean';
|
|
6
|
+
import { getRedisClientKeyPrefix } from 'vona-module-a-redis';
|
|
7
|
+
|
|
8
|
+
import type { IRedlockClientOptions, IRedlockLockIsolateOptions, IRedlockLockOptions } from '../types/redlock.ts';
|
|
9
|
+
|
|
10
|
+
@Service()
|
|
11
|
+
export class ServiceRedlock extends BeanBase {
|
|
12
|
+
private _redlockDefault: Redlock;
|
|
13
|
+
|
|
14
|
+
public async lock<RESULT>(resource: string, fn: FunctionAsync<RESULT>, options?: IRedlockLockOptions): Promise<RESULT> {
|
|
15
|
+
const instanceName = options?.instanceName === undefined ? this.ctx?.instanceName : options?.instanceName;
|
|
16
|
+
const redlock = options?.redlock ?? this.redlockDefault;
|
|
17
|
+
const lockTTL = options?.lockTTL ?? this.scope.config.lockTTL;
|
|
18
|
+
// resource
|
|
19
|
+
const _lockResource = `${getRedisClientKeyPrefix('redlock', this.app)}${instanceDesp(instanceName)}:${resource}`;
|
|
20
|
+
// lock
|
|
21
|
+
let _lock = await redlock.acquire([_lockResource], lockTTL);
|
|
22
|
+
// timer
|
|
23
|
+
let _lockTimer = null as any;
|
|
24
|
+
const _lockDone = () => {
|
|
25
|
+
if (_lockTimer) {
|
|
26
|
+
clearInterval(_lockTimer);
|
|
27
|
+
_lockTimer = null;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
_lockTimer = setInterval(() => {
|
|
31
|
+
_lock
|
|
32
|
+
.extend(lockTTL)
|
|
33
|
+
.then(lock => {
|
|
34
|
+
_lock = lock;
|
|
35
|
+
})
|
|
36
|
+
.catch(_err => {
|
|
37
|
+
// need not logger error
|
|
38
|
+
// this.$logger.error(err);
|
|
39
|
+
_lockDone();
|
|
40
|
+
});
|
|
41
|
+
}, lockTTL / 2);
|
|
42
|
+
try {
|
|
43
|
+
return await fn();
|
|
44
|
+
} finally {
|
|
45
|
+
_lockDone();
|
|
46
|
+
// not await, and throw error
|
|
47
|
+
_lock.release().catch(_err => {
|
|
48
|
+
// do nothing
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public async lockIsolate<RESULT>(resource: string, fn: FunctionAsync<RESULT>, options?: IRedlockLockIsolateOptions): Promise<RESULT> {
|
|
54
|
+
return await this.lock(
|
|
55
|
+
resource,
|
|
56
|
+
async () => {
|
|
57
|
+
if (!this.bean.database.current) return await fn();
|
|
58
|
+
return await this.bean.database.switchDbIsolate(fn, options);
|
|
59
|
+
},
|
|
60
|
+
options,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private get redlockDefault() {
|
|
65
|
+
if (!this._redlockDefault) {
|
|
66
|
+
this._redlockDefault = this._create(this.scope.config.base);
|
|
67
|
+
}
|
|
68
|
+
return this._redlockDefault;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public create(options?: PowerPartial<IRedlockClientOptions>): Redlock {
|
|
72
|
+
const options2: IRedlockClientOptions = options ? deepExtend({}, this.scope.config.base, options) : this.scope.config.base;
|
|
73
|
+
return this._create(options2);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private _create(options: IRedlockClientOptions) {
|
|
77
|
+
// clients
|
|
78
|
+
const clients = [] as any;
|
|
79
|
+
for (const clientName of options.clients) {
|
|
80
|
+
const client = this.app.bean.redis.get(clientName);
|
|
81
|
+
clients.push(client);
|
|
82
|
+
}
|
|
83
|
+
// create
|
|
84
|
+
return new Redlock(clients, options.options);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './redlock.ts';
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type * as Redlock from '@sesamecare-oss/redlock';
|
|
2
|
+
import type { IInstanceRecord } from 'vona';
|
|
3
|
+
import type { IDbInfo } from 'vona-module-a-orm';
|
|
4
|
+
import type { IRedisClientRecord } from 'vona-module-a-redis';
|
|
5
|
+
|
|
6
|
+
export interface IRedlockClientOptions {
|
|
7
|
+
clients: (keyof IRedisClientRecord)[];
|
|
8
|
+
options: Redlock.Settings;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ConfigRedlock {
|
|
12
|
+
lockTTL: number;
|
|
13
|
+
base: IRedlockClientOptions;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface IRedlockLockOptions {
|
|
17
|
+
instanceName?: keyof IInstanceRecord | undefined | null;
|
|
18
|
+
redlock?: Redlock.Redlock;
|
|
19
|
+
lockTTL?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface IRedlockLockIsolateOptions extends IRedlockLockOptions, Partial<IDbInfo> {}
|
|
23
|
+
|
|
24
|
+
declare module 'vona-module-a-meta' {
|
|
25
|
+
export interface IMetaNameRecord {
|
|
26
|
+
redlock: never;
|
|
27
|
+
}
|
|
28
|
+
}
|