@decaf-ts/core 0.8.55 → 0.8.57
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 +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/persistence/Adapter.d.ts +2 -0
- package/lib/esm/persistence/Adapter.js +4 -0
- package/lib/esm/persistence/Adapter.js.map +1 -1
- package/lib/esm/persistence/Context.d.ts +0 -4
- package/lib/esm/persistence/Context.js +9 -7
- package/lib/esm/persistence/Context.js.map +1 -1
- package/lib/esm/persistence/ContextLock.d.ts +18 -0
- package/lib/esm/persistence/ContextLock.js +75 -0
- package/lib/esm/persistence/ContextLock.js.map +1 -0
- package/lib/esm/persistence/index.d.ts +2 -0
- package/lib/esm/persistence/index.js +2 -0
- package/lib/esm/persistence/index.js.map +1 -1
- package/lib/esm/persistence/transactions.d.ts +4 -0
- package/lib/esm/persistence/transactions.js +67 -0
- package/lib/esm/persistence/transactions.js.map +1 -0
- package/lib/esm/persistence/types.d.ts +3 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/persistence/Adapter.cjs +4 -0
- package/lib/persistence/Adapter.d.ts +2 -0
- package/lib/persistence/Adapter.js.map +1 -1
- package/lib/persistence/Context.cjs +10 -9
- package/lib/persistence/Context.d.ts +0 -4
- package/lib/persistence/Context.js.map +1 -1
- package/lib/persistence/ContextLock.cjs +80 -0
- package/lib/persistence/ContextLock.d.ts +18 -0
- package/lib/persistence/ContextLock.js.map +1 -0
- package/lib/persistence/index.cjs +2 -0
- package/lib/persistence/index.d.ts +2 -0
- package/lib/persistence/index.js.map +1 -1
- package/lib/persistence/transactions.cjs +71 -0
- package/lib/persistence/transactions.d.ts +4 -0
- package/lib/persistence/transactions.js.map +1 -0
- package/lib/persistence/types.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Context =
|
|
3
|
+
exports.Context = void 0;
|
|
4
4
|
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
|
-
const transactional_decorators_1 = require("@decaf-ts/transactional-decorators");
|
|
6
|
-
class ContextLock extends transactional_decorators_1.Lock {
|
|
7
|
-
constructor() {
|
|
8
|
-
super();
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
exports.ContextLock = ContextLock;
|
|
12
5
|
class Context extends db_decorators_1.Context {
|
|
13
6
|
constructor(ctx) {
|
|
14
7
|
super(ctx);
|
|
@@ -35,7 +28,15 @@ class Context extends db_decorators_1.Context {
|
|
|
35
28
|
if (children.length) {
|
|
36
29
|
const results = children
|
|
37
30
|
.map((child) => child.getFromChildren(key, visited))
|
|
38
|
-
.
|
|
31
|
+
.reduce((acc, el) => {
|
|
32
|
+
if (Array.isArray(el)) {
|
|
33
|
+
acc.push(...el);
|
|
34
|
+
}
|
|
35
|
+
else if (el !== undefined && el !== null) {
|
|
36
|
+
acc.push(el);
|
|
37
|
+
}
|
|
38
|
+
return acc;
|
|
39
|
+
}, [])
|
|
39
40
|
.filter((el) => el !== undefined && el !== null);
|
|
40
41
|
if (!results.length)
|
|
41
42
|
return undefined;
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { Context as Ctx } from "@decaf-ts/db-decorators";
|
|
2
2
|
import { AdapterFlags, ContextFlags } from "./types";
|
|
3
|
-
import { Lock } from "@decaf-ts/transactional-decorators";
|
|
4
|
-
export declare class ContextLock extends Lock {
|
|
5
|
-
constructor();
|
|
6
|
-
}
|
|
7
3
|
export declare class Context<F extends ContextFlags<any> = AdapterFlags<any>> extends Ctx<F> {
|
|
8
4
|
constructor(ctx?: Context<any>);
|
|
9
5
|
pushPending(key: string, id: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Context.js","sourceRoot":"","sources":["../../src/persistence/Context.ts"],"names":[],"mappings":";;;AAAA,2DAAwE;
|
|
1
|
+
{"version":3,"file":"Context.js","sourceRoot":"","sources":["../../src/persistence/Context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContextLock = exports.AdapterTransaction = void 0;
|
|
4
|
+
const transactional_decorators_1 = require("@decaf-ts/transactional-decorators");
|
|
5
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
6
|
+
class AdapterTransaction {
|
|
7
|
+
constructor(adapter,
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
9
|
+
...args) {
|
|
10
|
+
this.adapter = adapter;
|
|
11
|
+
}
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
13
|
+
async begin(...args) {
|
|
14
|
+
// do nothing
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
+
async commit(...args) {
|
|
18
|
+
//do nothing
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
21
|
+
async rollback(...args) {
|
|
22
|
+
// do nothing
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.AdapterTransaction = AdapterTransaction;
|
|
26
|
+
class ContextLock extends transactional_decorators_1.Lock {
|
|
27
|
+
constructor(adapterTransaction) {
|
|
28
|
+
super();
|
|
29
|
+
this.adapterTransaction = adapterTransaction;
|
|
30
|
+
this.acquireCount = 0;
|
|
31
|
+
this.lock = new transactional_decorators_1.Lock();
|
|
32
|
+
}
|
|
33
|
+
async acquire(...args) {
|
|
34
|
+
await this.lock.acquire();
|
|
35
|
+
this.acquireCount++;
|
|
36
|
+
if (this.acquireCount === 1) {
|
|
37
|
+
this.lock.release();
|
|
38
|
+
await this.adapterTransaction.begin(...args);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.lock.release();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async release(...args) {
|
|
45
|
+
await this.lock.acquire();
|
|
46
|
+
this.acquireCount--;
|
|
47
|
+
if (this.acquireCount === 0) {
|
|
48
|
+
try {
|
|
49
|
+
await this.adapterTransaction.commit(...args);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
await this.adapterTransaction.rollback(new db_decorators_1.InternalError(`Failed to submit transaction: ${e}`), ...args);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
this.lock.release();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (this.acquireCount < 0) {
|
|
59
|
+
this.acquireCount = 0;
|
|
60
|
+
this.lock.release();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.lock.release();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async rollback(e, ...args) {
|
|
67
|
+
await this.lock.acquire();
|
|
68
|
+
try {
|
|
69
|
+
await this.adapterTransaction.rollback(new db_decorators_1.InternalError(`Failed to submit transaction: ${e}`), ...args);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
throw new db_decorators_1.InternalError(`Failed to rollback transaction: ${e}`);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
this.lock.release();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.ContextLock = ContextLock;
|
|
80
|
+
//# sourceMappingURL=ContextLock.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Lock } from "@decaf-ts/transactional-decorators";
|
|
2
|
+
import { type Adapter } from "./Adapter";
|
|
3
|
+
export declare class AdapterTransaction<A extends Adapter<any, any, any, any>> {
|
|
4
|
+
protected adapter: A;
|
|
5
|
+
constructor(adapter: A, ...args: any[]);
|
|
6
|
+
begin(...args: any[]): Promise<void>;
|
|
7
|
+
commit(...args: any[]): Promise<void>;
|
|
8
|
+
rollback(...args: any[]): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare class ContextLock extends Lock {
|
|
11
|
+
protected adapterTransaction: AdapterTransaction<any>;
|
|
12
|
+
private acquireCount;
|
|
13
|
+
protected readonly lock: Lock;
|
|
14
|
+
constructor(adapterTransaction: AdapterTransaction<any>);
|
|
15
|
+
acquire(...args: any[]): Promise<void>;
|
|
16
|
+
release(...args: any[]): Promise<void>;
|
|
17
|
+
rollback(e: Error, ...args: any[]): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextLock.js","sourceRoot":"","sources":["../../src/persistence/ContextLock.ts"],"names":[],"mappings":";;;AAAA,iFAA0D;AAE1D,2DAAwD;AAExD,MAAa,kBAAkB;IAC7B,YACY,OAAU;IACpB,6DAA6D;IAC7D,GAAG,IAAW;QAFJ,YAAO,GAAP,OAAO,CAAG;IAGnB,CAAC;IAEJ,6DAA6D;IAC7D,KAAK,CAAC,KAAK,CAAC,GAAG,IAAW;QACxB,aAAa;IACf,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,MAAM,CAAC,GAAG,IAAW;QACzB,YAAY;IACd,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAW;QAC3B,aAAa;IACf,CAAC;CACF;AArBD,gDAqBC;AAED,MAAa,WAAY,SAAQ,+BAAI;IAInC,YAAsB,kBAA2C;QAC/D,KAAK,EAAE,CAAC;QADY,uBAAkB,GAAlB,kBAAkB,CAAyB;QAHzD,iBAAY,GAAW,CAAC,CAAC;QACd,SAAI,GAAS,IAAI,+BAAI,EAAE,CAAC;IAI3C,CAAC;IAEQ,KAAK,CAAC,OAAO,CAAC,GAAG,IAAW;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,OAAO,CAAC,GAAG,IAAW;QACnC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,CAAU,EAAE,CAAC;gBACpB,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CACpC,IAAI,6BAAa,CAAC,iCAAiC,CAAC,EAAE,CAAC,EACvD,GAAG,IAAI,CACR,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,CAAQ,EAAE,GAAG,IAAW;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CACpC,IAAI,6BAAa,CAAC,iCAAiC,CAAC,EAAE,CAAC,EACvD,GAAG,IAAI,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,IAAI,6BAAa,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAtDD,kCAsDC"}
|
|
@@ -23,6 +23,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
23
23
|
__exportStar(require("./Dispatch.cjs"), exports);
|
|
24
24
|
__exportStar(require("./constants.cjs"), exports);
|
|
25
25
|
__exportStar(require("./Context.cjs"), exports);
|
|
26
|
+
__exportStar(require("./ContextLock.cjs"), exports);
|
|
26
27
|
__exportStar(require("./decorators.cjs"), exports);
|
|
27
28
|
__exportStar(require("./errors.cjs"), exports);
|
|
28
29
|
__exportStar(require("./generators.cjs"), exports);
|
|
@@ -30,5 +31,6 @@ __exportStar(require("./event-filters.cjs"), exports);
|
|
|
30
31
|
__exportStar(require("./ObserverHandler.cjs"), exports);
|
|
31
32
|
__exportStar(require("./Sequence.cjs"), exports);
|
|
32
33
|
__exportStar(require("./types.cjs"), exports);
|
|
34
|
+
__exportStar(require("./transactions.cjs"), exports);
|
|
33
35
|
__exportStar(require("./Adapter.cjs"), exports);
|
|
34
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export * from "./Dispatch";
|
|
7
7
|
export * from "./constants";
|
|
8
8
|
export * from "./Context";
|
|
9
|
+
export * from "./ContextLock";
|
|
9
10
|
export * from "./decorators";
|
|
10
11
|
export * from "./errors";
|
|
11
12
|
export * from "./generators";
|
|
@@ -13,4 +14,5 @@ export * from "./event-filters";
|
|
|
13
14
|
export * from "./ObserverHandler";
|
|
14
15
|
export * from "./Sequence";
|
|
15
16
|
export * from "./types";
|
|
17
|
+
export * from "./transactions";
|
|
16
18
|
export * from "./Adapter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;GAIG;AACH,2BAA2B;AAC3B,iDAA2B;AAC3B,kDAA4B;AAC5B,gDAA0B;AAC1B,mDAA6B;AAC7B,+CAAyB;AACzB,mDAA6B;AAC7B,sDAAgC;AAChC,wDAAkC;AAClC,iDAA2B;AAC3B,8CAAwB;AACxB,gDAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;GAIG;AACH,2BAA2B;AAC3B,iDAA2B;AAC3B,kDAA4B;AAC5B,gDAA0B;AAC1B,oDAA8B;AAC9B,mDAA6B;AAC7B,+CAAyB;AACzB,mDAA6B;AAC7B,sDAAgC;AAChC,wDAAkC;AAClC,iDAA2B;AAC3B,8CAAwB;AACxB,qDAA+B;AAC/B,gDAA0B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAdapterTransaction = getAdapterTransaction;
|
|
4
|
+
exports.getContextLock = getContextLock;
|
|
5
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
6
|
+
const decoration_1 = require("@decaf-ts/decoration");
|
|
7
|
+
const transactional_decorators_1 = require("@decaf-ts/transactional-decorators");
|
|
8
|
+
const ModelService_1 = require("./../services/ModelService.cjs");
|
|
9
|
+
const Repository_1 = require("./../repository/Repository.cjs");
|
|
10
|
+
const Adapter_1 = require("./Adapter.cjs");
|
|
11
|
+
const ContextLock_1 = require("./ContextLock.cjs");
|
|
12
|
+
function getAdapterTransaction(obj, ...args) {
|
|
13
|
+
let adapter;
|
|
14
|
+
if (obj instanceof ModelService_1.ModelService)
|
|
15
|
+
adapter = obj.repo.adapter;
|
|
16
|
+
if (obj instanceof Repository_1.Repository)
|
|
17
|
+
adapter = obj["adapter"];
|
|
18
|
+
if (obj instanceof Adapter_1.Adapter)
|
|
19
|
+
adapter = obj;
|
|
20
|
+
if (!adapter)
|
|
21
|
+
throw new db_decorators_1.InternalError(`Could not find adapter to extract transaction`);
|
|
22
|
+
return adapter.transactionLock(...args);
|
|
23
|
+
}
|
|
24
|
+
function getContextLock(obj, ...args) {
|
|
25
|
+
return new ContextLock_1.ContextLock(getAdapterTransaction(obj, ...args));
|
|
26
|
+
}
|
|
27
|
+
function innerTransactional(...data) {
|
|
28
|
+
return function (target, propertyKey, descriptor) {
|
|
29
|
+
if (!descriptor)
|
|
30
|
+
throw new db_decorators_1.InternalError("This decorator only applies to methods");
|
|
31
|
+
(0, decoration_1.method)()(target, propertyKey, descriptor);
|
|
32
|
+
decoration_1.Metadata.set(target.constructor, decoration_1.Metadata.key(transactional_decorators_1.TransactionalKeys.TRANSACTIONAL, propertyKey), {
|
|
33
|
+
data: data,
|
|
34
|
+
});
|
|
35
|
+
descriptor.value = new Proxy(descriptor.value, {
|
|
36
|
+
async apply(obj, thisArg, argArray) {
|
|
37
|
+
const { log, ctx } = (await thisArg["logCtx"](argArray, obj.name, true)).for(obj);
|
|
38
|
+
const lock = ctx.getOrUndefined("transactionLock") || getContextLock(thisArg);
|
|
39
|
+
ctx.put("transactionLock", lock);
|
|
40
|
+
await lock.acquire();
|
|
41
|
+
let results;
|
|
42
|
+
try {
|
|
43
|
+
results = await obj.call(thisArg, ...argArray, ctx);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
try {
|
|
47
|
+
await lock.rollback(e);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
log.error(`Failed to rollback transaction`, e);
|
|
51
|
+
}
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
await lock.release();
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
throw new db_decorators_1.InternalError(`Failed to release transaction: ${e}`);
|
|
59
|
+
}
|
|
60
|
+
return results;
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
return descriptor;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
decoration_1.Decoration.for(transactional_decorators_1.TransactionalKeys.TRANSACTIONAL)
|
|
67
|
+
.define({
|
|
68
|
+
decorator: innerTransactional,
|
|
69
|
+
})
|
|
70
|
+
.apply();
|
|
71
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Adapter } from "../persistence/Adapter";
|
|
2
|
+
import { ContextLock } from "../persistence/ContextLock";
|
|
3
|
+
export declare function getAdapterTransaction(obj: any, ...args: any[]): import("../persistence/ContextLock").AdapterTransaction<Adapter<any, any, any, any>>;
|
|
4
|
+
export declare function getContextLock(obj: any, ...args: any[]): ContextLock;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/persistence/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { Context } from "./Context";
|
|
|
9
9
|
import { Repository } from "../repository/Repository";
|
|
10
10
|
import { PersistenceKeys } from "./constants";
|
|
11
11
|
import { PreparedStatementKeys } from "../query/constants";
|
|
12
|
+
import { ContextLock } from "./ContextLock";
|
|
12
13
|
export type FlagsOfContext<C extends Context<any>> = C extends Context<infer F> ? F : never;
|
|
13
14
|
export type LoggerOfContext<C extends Context<any>> = LoggerOfFlags<FlagsOfContext<C>>;
|
|
14
15
|
export type ContextOfRepository<R extends Repository<any, any>> = R extends Repository<any, infer A> ? ContextOf<A> : never;
|
|
@@ -58,6 +59,7 @@ export type PreparedModel = {
|
|
|
58
59
|
};
|
|
59
60
|
export type ContextFlags<LOG extends Logger> = CtxFlags<LOG> & Pick<RepositoryFlags<LOG>, "operation" | "correlationId" | "ignoreDevSafeGuards" | "parentContext" | "childContexts"> & {
|
|
60
61
|
pending?: Record<string, string[]>;
|
|
62
|
+
transactionLock?: ContextLock;
|
|
61
63
|
};
|
|
62
64
|
export type AdapterFlags<LOG extends Logger = Logger> = RepositoryFlags<LOG> & ContextFlags<LOG> & {
|
|
63
65
|
allowGenerationOverride: boolean;
|
|
@@ -73,6 +75,7 @@ export type AdapterFlags<LOG extends Logger = Logger> = RepositoryFlags<LOG> & C
|
|
|
73
75
|
observeFullResult: boolean;
|
|
74
76
|
paginateByBookmark: boolean;
|
|
75
77
|
dryRun: boolean;
|
|
78
|
+
lock?: ContextLock;
|
|
76
79
|
};
|
|
77
80
|
export type RawResult<R, D extends boolean> = D extends true ? R : {
|
|
78
81
|
data: R;
|