@zudojs/transactions 0.0.1
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 +21 -0
- package/README.md +40 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/adapter/adapter.core.d.ts +15 -0
- package/dist/adapter/adapter.core.d.ts.map +1 -0
- package/dist/adapter/adapter.core.js +47 -0
- package/dist/adapter/adapter.core.js.map +1 -0
- package/dist/adapter/index.d.ts +7 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +7 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/context/context.core.d.ts +19 -0
- package/dist/context/context.core.d.ts.map +1 -0
- package/dist/context/context.core.js +38 -0
- package/dist/context/context.core.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/hooks/hooks.core.d.ts +11 -0
- package/dist/hooks/hooks.core.d.ts.map +1 -0
- package/dist/hooks/hooks.core.js +78 -0
- package/dist/hooks/hooks.core.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/manager/index.d.ts +7 -0
- package/dist/manager/index.d.ts.map +1 -0
- package/dist/manager/index.js +7 -0
- package/dist/manager/index.js.map +1 -0
- package/dist/manager/manager.commit.d.ts +17 -0
- package/dist/manager/manager.commit.d.ts.map +1 -0
- package/dist/manager/manager.commit.js +66 -0
- package/dist/manager/manager.commit.js.map +1 -0
- package/dist/manager/manager.core.d.ts +26 -0
- package/dist/manager/manager.core.d.ts.map +1 -0
- package/dist/manager/manager.core.js +92 -0
- package/dist/manager/manager.core.js.map +1 -0
- package/dist/manager/manager.propagation.d.ts +15 -0
- package/dist/manager/manager.propagation.d.ts.map +1 -0
- package/dist/manager/manager.propagation.js +56 -0
- package/dist/manager/manager.propagation.js.map +1 -0
- package/dist/registry/index.d.ts +7 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +7 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.core.d.ts +11 -0
- package/dist/registry/registry.core.d.ts.map +1 -0
- package/dist/registry/registry.core.js +26 -0
- package/dist/registry/registry.core.js.map +1 -0
- package/dist/transaction/index.d.ts +7 -0
- package/dist/transaction/index.d.ts.map +1 -0
- package/dist/transaction/index.js +7 -0
- package/dist/transaction/index.js.map +1 -0
- package/dist/transaction/transaction.core.d.ts +9 -0
- package/dist/transaction/transaction.core.d.ts.map +1 -0
- package/dist/transaction/transaction.core.js +139 -0
- package/dist/transaction/transaction.core.js.map +1 -0
- package/dist/transaction/transactionStateMachine.d.ts +9 -0
- package/dist/transaction/transactionStateMachine.d.ts.map +1 -0
- package/dist/transaction/transactionStateMachine.js +27 -0
- package/dist/transaction/transactionStateMachine.js.map +1 -0
- package/dist/transactionErrors/index.d.ts +6 -0
- package/dist/transactionErrors/index.d.ts.map +1 -0
- package/dist/transactionErrors/index.js +6 -0
- package/dist/transactionErrors/index.js.map +1 -0
- package/dist/transactionErrors/transactionError.base.d.ts +15 -0
- package/dist/transactionErrors/transactionError.base.d.ts.map +1 -0
- package/dist/transactionErrors/transactionError.base.js +19 -0
- package/dist/transactionErrors/transactionError.base.js.map +1 -0
- package/dist/transactionErrors/transactionError.types.d.ts +74 -0
- package/dist/transactionErrors/transactionError.types.d.ts.map +1 -0
- package/dist/transactionErrors/transactionError.types.js +129 -0
- package/dist/transactionErrors/transactionError.types.js.map +1 -0
- package/dist/transactionTypes/index.d.ts +10 -0
- package/dist/transactionTypes/index.d.ts.map +1 -0
- package/dist/transactionTypes/index.js +10 -0
- package/dist/transactionTypes/index.js.map +1 -0
- package/dist/transactionTypes/transaction.interface.d.ts +62 -0
- package/dist/transactionTypes/transaction.interface.d.ts.map +1 -0
- package/dist/transactionTypes/transaction.interface.js +7 -0
- package/dist/transactionTypes/transaction.interface.js.map +1 -0
- package/dist/transactionTypes/transactionAdapter.d.ts +56 -0
- package/dist/transactionTypes/transactionAdapter.d.ts.map +1 -0
- package/dist/transactionTypes/transactionAdapter.js +7 -0
- package/dist/transactionTypes/transactionAdapter.js.map +1 -0
- package/dist/transactionTypes/transactionHooks.d.ts +63 -0
- package/dist/transactionTypes/transactionHooks.d.ts.map +1 -0
- package/dist/transactionTypes/transactionHooks.js +17 -0
- package/dist/transactionTypes/transactionHooks.js.map +1 -0
- package/dist/transactionTypes/transactionState.d.ts +12 -0
- package/dist/transactionTypes/transactionState.d.ts.map +1 -0
- package/dist/transactionTypes/transactionState.js +7 -0
- package/dist/transactionTypes/transactionState.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/utils.helper.d.ts +20 -0
- package/dist/utils/utils.helper.d.ts.map +1 -0
- package/dist/utils/utils.helper.js +33 -0
- package/dist/utils/utils.helper.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AsyncLocalStorage-based transaction context for automatic propagation.
|
|
3
|
+
*
|
|
4
|
+
* @module context/context
|
|
5
|
+
*/
|
|
6
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
|
+
/**
|
|
8
|
+
* Create a transaction context backed by AsyncLocalStorage.
|
|
9
|
+
*/
|
|
10
|
+
export function createTransactionContext() {
|
|
11
|
+
const storage = new AsyncLocalStorage();
|
|
12
|
+
return {
|
|
13
|
+
get() {
|
|
14
|
+
return storage.getStore();
|
|
15
|
+
},
|
|
16
|
+
async run(transaction, callback) {
|
|
17
|
+
return storage.run(transaction, callback);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Default context instance. */
|
|
22
|
+
let defaultContext;
|
|
23
|
+
/**
|
|
24
|
+
* Get or create the default transaction context.
|
|
25
|
+
*/
|
|
26
|
+
export function getDefaultContext() {
|
|
27
|
+
if (!defaultContext) {
|
|
28
|
+
defaultContext = createTransactionContext();
|
|
29
|
+
}
|
|
30
|
+
return defaultContext;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Reset the default context (useful for testing).
|
|
34
|
+
*/
|
|
35
|
+
export function resetDefaultContext() {
|
|
36
|
+
defaultContext = undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=context.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.core.js","sourceRoot":"","sources":["../../src/context/context.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAIrD;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAe,CAAC;IAErD,OAAO;QACL,GAAG;YACD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,GAAG,CACP,WAAwB,EACxB,QAA0B;YAE1B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,IAAI,cAA8C,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,wBAAwB,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook composition — merge multiple hook sets.
|
|
3
|
+
*
|
|
4
|
+
* @module hooks/hooks
|
|
5
|
+
*/
|
|
6
|
+
import type { TransactionHooks } from "../transactionTypes/transactionHooks.js";
|
|
7
|
+
/**
|
|
8
|
+
* Merge multiple hook sets into one. Later hooks run after earlier ones.
|
|
9
|
+
*/
|
|
10
|
+
export declare function mergeHooks(...hookSets: readonly TransactionHooks[]): TransactionHooks;
|
|
11
|
+
//# sourceMappingURL=hooks.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.core.d.ts","sourceRoot":"","sources":["../../src/hooks/hooks.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,yCAAyC,CAAC;AAEjD;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACvC,gBAAgB,CAsElB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook composition — merge multiple hook sets.
|
|
3
|
+
*
|
|
4
|
+
* @module hooks/hooks
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Merge multiple hook sets into one. Later hooks run after earlier ones.
|
|
8
|
+
*/
|
|
9
|
+
export function mergeHooks(...hookSets) {
|
|
10
|
+
const merged = {};
|
|
11
|
+
for (const hooks of hookSets) {
|
|
12
|
+
if (hooks.beforeBegin) {
|
|
13
|
+
const existing = merged.beforeBegin;
|
|
14
|
+
merged.beforeBegin = existing
|
|
15
|
+
? async (ctx) => {
|
|
16
|
+
await existing(ctx);
|
|
17
|
+
await hooks.beforeBegin(ctx);
|
|
18
|
+
}
|
|
19
|
+
: hooks.beforeBegin;
|
|
20
|
+
}
|
|
21
|
+
if (hooks.afterBegin) {
|
|
22
|
+
const existing = merged.afterBegin;
|
|
23
|
+
merged.afterBegin = existing
|
|
24
|
+
? async (ctx) => {
|
|
25
|
+
await existing(ctx);
|
|
26
|
+
await hooks.afterBegin(ctx);
|
|
27
|
+
}
|
|
28
|
+
: hooks.afterBegin;
|
|
29
|
+
}
|
|
30
|
+
if (hooks.beforeCommit) {
|
|
31
|
+
const existing = merged.beforeCommit;
|
|
32
|
+
merged.beforeCommit = existing
|
|
33
|
+
? async (ctx) => {
|
|
34
|
+
await existing(ctx);
|
|
35
|
+
await hooks.beforeCommit(ctx);
|
|
36
|
+
}
|
|
37
|
+
: hooks.beforeCommit;
|
|
38
|
+
}
|
|
39
|
+
if (hooks.afterCommit) {
|
|
40
|
+
const existing = merged.afterCommit;
|
|
41
|
+
merged.afterCommit = existing
|
|
42
|
+
? async (ctx) => {
|
|
43
|
+
await existing(ctx);
|
|
44
|
+
await hooks.afterCommit(ctx);
|
|
45
|
+
}
|
|
46
|
+
: hooks.afterCommit;
|
|
47
|
+
}
|
|
48
|
+
if (hooks.beforeRollback) {
|
|
49
|
+
const existing = merged.beforeRollback;
|
|
50
|
+
merged.beforeRollback = existing
|
|
51
|
+
? async (ctx) => {
|
|
52
|
+
await existing(ctx);
|
|
53
|
+
await hooks.beforeRollback(ctx);
|
|
54
|
+
}
|
|
55
|
+
: hooks.beforeRollback;
|
|
56
|
+
}
|
|
57
|
+
if (hooks.afterRollback) {
|
|
58
|
+
const existing = merged.afterRollback;
|
|
59
|
+
merged.afterRollback = existing
|
|
60
|
+
? async (ctx) => {
|
|
61
|
+
await existing(ctx);
|
|
62
|
+
await hooks.afterRollback(ctx);
|
|
63
|
+
}
|
|
64
|
+
: hooks.afterRollback;
|
|
65
|
+
}
|
|
66
|
+
if (hooks.onError) {
|
|
67
|
+
const existing = merged.onError;
|
|
68
|
+
merged.onError = existing
|
|
69
|
+
? async (ctx) => {
|
|
70
|
+
await existing(ctx);
|
|
71
|
+
await hooks.onError(ctx);
|
|
72
|
+
}
|
|
73
|
+
: hooks.onError;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return merged;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=hooks.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.core.js","sourceRoot":"","sources":["../../src/hooks/hooks.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/transactions
|
|
3
|
+
*
|
|
4
|
+
* Generic transaction abstraction for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides transaction lifecycle management, async context propagation,
|
|
7
|
+
* adapter contracts, savepoints, hooks, and rollback-only semantics.
|
|
8
|
+
*
|
|
9
|
+
* @module @zudojs/transactions
|
|
10
|
+
*/
|
|
11
|
+
export * from "./transactionTypes/index.js";
|
|
12
|
+
export * from "./transactionErrors/index.js";
|
|
13
|
+
export * from "./transaction/index.js";
|
|
14
|
+
export * from "./context/index.js";
|
|
15
|
+
export * from "./adapter/index.js";
|
|
16
|
+
export * from "./hooks/index.js";
|
|
17
|
+
export * from "./registry/index.js";
|
|
18
|
+
export * from "./utils/index.js";
|
|
19
|
+
export { createTransactionManager, type TransactionManagerOptions, } from "./manager/index.js";
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/transactions
|
|
3
|
+
*
|
|
4
|
+
* Generic transaction abstraction for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides transaction lifecycle management, async context propagation,
|
|
7
|
+
* adapter contracts, savepoints, hooks, and rollback-only semantics.
|
|
8
|
+
*
|
|
9
|
+
* @module @zudojs/transactions
|
|
10
|
+
*/
|
|
11
|
+
export * from "./transactionTypes/index.js";
|
|
12
|
+
export * from "./transactionErrors/index.js";
|
|
13
|
+
export * from "./transaction/index.js";
|
|
14
|
+
export * from "./context/index.js";
|
|
15
|
+
export * from "./adapter/index.js";
|
|
16
|
+
export * from "./hooks/index.js";
|
|
17
|
+
export * from "./registry/index.js";
|
|
18
|
+
export * from "./utils/index.js";
|
|
19
|
+
export { createTransactionManager, } from "./manager/index.js";
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EACL,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,GAEzB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction commit and rollback orchestration.
|
|
3
|
+
*
|
|
4
|
+
* @module manager/manager.commit
|
|
5
|
+
*/
|
|
6
|
+
import type { Transaction } from "../transactionTypes/transaction.interface.js";
|
|
7
|
+
import type { TransactionAdapter } from "../transactionTypes/transactionAdapter.js";
|
|
8
|
+
import type { TransactionHooks } from "../transactionTypes/transactionHooks.js";
|
|
9
|
+
/**
|
|
10
|
+
* Commit a transaction with hooks and adapter coordination.
|
|
11
|
+
*/
|
|
12
|
+
export declare function commitTransaction(transaction: Transaction, adapter: TransactionAdapter, hooks?: TransactionHooks): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Rollback a transaction with hooks and adapter coordination.
|
|
15
|
+
*/
|
|
16
|
+
export declare function rollbackTransaction(transaction: Transaction, adapter: TransactionAdapter, reason?: unknown, hooks?: TransactionHooks): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=manager.commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.commit.d.ts","sourceRoot":"","sources":["../../src/manager/manager.commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAMhF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,kBAAkB,EAC3B,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,kBAAkB,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAkCf"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction commit and rollback orchestration.
|
|
3
|
+
*
|
|
4
|
+
* @module manager/manager.commit
|
|
5
|
+
*/
|
|
6
|
+
import { TransactionCommitError, TransactionRollbackError, } from "../transactionErrors/transactionError.types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Commit a transaction with hooks and adapter coordination.
|
|
9
|
+
*/
|
|
10
|
+
export async function commitTransaction(transaction, adapter, hooks) {
|
|
11
|
+
if (transaction.state !== "active")
|
|
12
|
+
return;
|
|
13
|
+
if (hooks?.beforeCommit) {
|
|
14
|
+
await hooks.beforeCommit({ transaction });
|
|
15
|
+
}
|
|
16
|
+
const handle = transaction._getHandle();
|
|
17
|
+
try {
|
|
18
|
+
await adapter.commit(handle);
|
|
19
|
+
await transaction.commit();
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (transaction.state === "committing") {
|
|
23
|
+
transaction._transition("failed");
|
|
24
|
+
}
|
|
25
|
+
if (hooks?.onError) {
|
|
26
|
+
await hooks.onError({ transaction, error });
|
|
27
|
+
}
|
|
28
|
+
throw new TransactionCommitError(transaction.id, error);
|
|
29
|
+
}
|
|
30
|
+
if (hooks?.afterCommit) {
|
|
31
|
+
await hooks.afterCommit({ transaction });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Rollback a transaction with hooks and adapter coordination.
|
|
36
|
+
*/
|
|
37
|
+
export async function rollbackTransaction(transaction, adapter, reason, hooks) {
|
|
38
|
+
if (transaction.state === "committed" ||
|
|
39
|
+
transaction.state === "rolled_back" ||
|
|
40
|
+
transaction.state === "failed") {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (hooks?.beforeRollback) {
|
|
44
|
+
await hooks.beforeRollback({ transaction });
|
|
45
|
+
}
|
|
46
|
+
const handle = transaction._getHandle();
|
|
47
|
+
try {
|
|
48
|
+
if (handle !== undefined) {
|
|
49
|
+
await adapter.rollback(handle, reason);
|
|
50
|
+
}
|
|
51
|
+
await transaction.rollback(reason);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (hooks?.onError) {
|
|
55
|
+
await hooks.onError({ transaction, error });
|
|
56
|
+
}
|
|
57
|
+
throw new TransactionRollbackError(transaction.id, {
|
|
58
|
+
cause: error,
|
|
59
|
+
originalError: reason,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (hooks?.afterRollback) {
|
|
63
|
+
await hooks.afterRollback({ transaction });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=manager.commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.commit.js","sourceRoot":"","sources":["../../src/manager/manager.commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gDAAgD,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAwB,EACxB,OAA2B,EAC3B,KAAwB;IAExB,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO;IAE3C,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GACV,WACD,CAAC,UAAU,EAAE,CAAC;IACf,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,WAAW,CAAC,KAAgB,KAAK,YAAY,EAAE,CAAC;YAEjD,WACD,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAwB,EACxB,OAA2B,EAC3B,MAAgB,EAChB,KAAwB;IAExB,IACE,WAAW,CAAC,KAAK,KAAK,WAAW;QACjC,WAAW,CAAC,KAAK,KAAK,aAAa;QACnC,WAAW,CAAC,KAAK,KAAK,QAAQ,EAC9B,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,EAAE,cAAc,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GACV,WACD,CAAC,UAAU,EAAE,CAAC;IACf,IAAI,CAAC;QACH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,wBAAwB,CAAC,WAAW,CAAC,EAAE,EAAE;YACjD,KAAK,EAAE,KAAK;YACZ,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,EAAE,aAAa,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction manager — coordinates begin, commit, rollback, and context.
|
|
3
|
+
*
|
|
4
|
+
* @module manager/manager
|
|
5
|
+
*/
|
|
6
|
+
import type { Transaction, TransactionOptions } from "../transactionTypes/transaction.interface.js";
|
|
7
|
+
import type { TransactionAdapter } from "../transactionTypes/transactionAdapter.js";
|
|
8
|
+
import type { TransactionContext } from "../transactionTypes/transactionAdapter.js";
|
|
9
|
+
import type { TransactionHooks } from "../transactionTypes/transactionHooks.js";
|
|
10
|
+
/** Options for creating a transaction manager. */
|
|
11
|
+
export interface TransactionManagerOptions {
|
|
12
|
+
readonly adapter: TransactionAdapter;
|
|
13
|
+
readonly context?: TransactionContext;
|
|
14
|
+
readonly hooks?: TransactionHooks;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a transaction manager.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createTransactionManager(options: TransactionManagerOptions): {
|
|
20
|
+
begin(opts?: TransactionOptions): Promise<Transaction>;
|
|
21
|
+
run<T>(callback: (transaction: Transaction) => Promise<T>, opts?: TransactionOptions): Promise<T>;
|
|
22
|
+
commit(transaction: Transaction): Promise<void>;
|
|
23
|
+
rollback(transaction: Transaction, reason?: unknown): Promise<void>;
|
|
24
|
+
getCurrent(): Transaction | undefined;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=manager.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.core.d.ts","sourceRoot":"","sources":["../../src/manager/manager.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EACnB,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAShF,kDAAkD;AAClD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB;IAWjE,KAAK,QAAQ,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;IAmDtD,GAAG,CAAC,CAAC,YACC,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,SAC3C,kBAAkB,GACxB,OAAO,CAAC,CAAC,CAAC;IA8BP,MAAM,cAAc,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,QAAQ,cAAc,WAAW,WAAW,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzE,UAAU,IAAI,WAAW,GAAG,SAAS;EAIxC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction manager — coordinates begin, commit, rollback, and context.
|
|
3
|
+
*
|
|
4
|
+
* @module manager/manager
|
|
5
|
+
*/
|
|
6
|
+
import { createTransaction } from "../transaction/transaction.core.js";
|
|
7
|
+
import { TransactionAdapterError, TransactionRollbackError, } from "../transactionErrors/transactionError.types.js";
|
|
8
|
+
import { handlePropagation } from "./manager.propagation.js";
|
|
9
|
+
import { commitTransaction, rollbackTransaction } from "./manager.commit.js";
|
|
10
|
+
/**
|
|
11
|
+
* Create a transaction manager.
|
|
12
|
+
*/
|
|
13
|
+
export function createTransactionManager(options) {
|
|
14
|
+
const { adapter, hooks } = options;
|
|
15
|
+
const resolveContext = () => {
|
|
16
|
+
if (options.context)
|
|
17
|
+
return options.context;
|
|
18
|
+
const mod = require("../context/context.core.js");
|
|
19
|
+
return mod.getDefaultContext();
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
async begin(opts) {
|
|
23
|
+
const context = resolveContext();
|
|
24
|
+
const current = context.get();
|
|
25
|
+
if (current) {
|
|
26
|
+
return handlePropagation(current, opts?.propagation ?? "required", opts, adapter, context, hooks);
|
|
27
|
+
}
|
|
28
|
+
const transaction = createTransaction(opts);
|
|
29
|
+
if (hooks?.beforeBegin)
|
|
30
|
+
await hooks.beforeBegin({ transaction });
|
|
31
|
+
try {
|
|
32
|
+
const handle = await adapter.begin(opts);
|
|
33
|
+
transaction._setHandle(handle);
|
|
34
|
+
transaction._transition("active");
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
transaction._transition("failed");
|
|
38
|
+
throw new TransactionAdapterError("Failed to begin transaction", error);
|
|
39
|
+
}
|
|
40
|
+
if (hooks?.afterBegin)
|
|
41
|
+
await hooks.afterBegin({ transaction });
|
|
42
|
+
if (opts?.timeout && opts.timeout > 0) {
|
|
43
|
+
const timer = setTimeout(() => {
|
|
44
|
+
transaction._markTimedOut();
|
|
45
|
+
transaction.markRollbackOnly("timeout");
|
|
46
|
+
}, opts.timeout);
|
|
47
|
+
const clearTimer = () => clearTimeout(timer);
|
|
48
|
+
transaction.afterCommit(async () => clearTimer());
|
|
49
|
+
transaction.afterRollback(async () => clearTimer());
|
|
50
|
+
}
|
|
51
|
+
return transaction;
|
|
52
|
+
},
|
|
53
|
+
async run(callback, opts) {
|
|
54
|
+
const context = resolveContext();
|
|
55
|
+
const transaction = await this.begin(opts);
|
|
56
|
+
return context.run(transaction, async () => {
|
|
57
|
+
try {
|
|
58
|
+
const result = await callback(transaction);
|
|
59
|
+
if (transaction.state === "active") {
|
|
60
|
+
await this.commit(transaction);
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (transaction.state === "active" ||
|
|
66
|
+
transaction.state === "committing") {
|
|
67
|
+
try {
|
|
68
|
+
await this.rollback(transaction, error);
|
|
69
|
+
}
|
|
70
|
+
catch (rollbackError) {
|
|
71
|
+
throw new TransactionRollbackError(transaction.id, {
|
|
72
|
+
cause: rollbackError,
|
|
73
|
+
originalError: error,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
async commit(transaction) {
|
|
82
|
+
return commitTransaction(transaction, adapter, hooks);
|
|
83
|
+
},
|
|
84
|
+
async rollback(transaction, reason) {
|
|
85
|
+
return rollbackTransaction(transaction, adapter, reason, hooks);
|
|
86
|
+
},
|
|
87
|
+
getCurrent() {
|
|
88
|
+
return resolveContext().get();
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=manager.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.core.js","sourceRoot":"","sources":["../../src/manager/manager.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction propagation strategies.
|
|
3
|
+
*
|
|
4
|
+
* @module manager/manager.propagation
|
|
5
|
+
*/
|
|
6
|
+
import type { Transaction } from "../transactionTypes/transaction.interface.js";
|
|
7
|
+
import type { TransactionOptions } from "../transactionTypes/transaction.interface.js";
|
|
8
|
+
import type { TransactionAdapter } from "../transactionTypes/transactionAdapter.js";
|
|
9
|
+
import type { TransactionContext } from "../transactionTypes/transactionAdapter.js";
|
|
10
|
+
import type { TransactionHooks } from "../transactionTypes/transactionHooks.js";
|
|
11
|
+
/**
|
|
12
|
+
* Handle transaction propagation when a transaction already exists.
|
|
13
|
+
*/
|
|
14
|
+
export declare function handlePropagation(current: Transaction, propagation: string, opts: TransactionOptions | undefined, adapter: TransactionAdapter, context: TransactionContext, hooks?: TransactionHooks): Promise<Transaction>;
|
|
15
|
+
//# sourceMappingURL=manager.propagation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.propagation.d.ts","sourceRoot":"","sources":["../../src/manager/manager.propagation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAIhF;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,kBAAkB,GAAG,SAAS,EACpC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,kBAAkB,EAC3B,KAAK,CAAC,EAAE,gBAAgB,GACvB,OAAO,CAAC,WAAW,CAAC,CAsCtB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction propagation strategies.
|
|
3
|
+
*
|
|
4
|
+
* @module manager/manager.propagation
|
|
5
|
+
*/
|
|
6
|
+
import { createTransaction } from "../transaction/transaction.core.js";
|
|
7
|
+
import { TransactionPropagationError } from "../transactionErrors/transactionError.types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Handle transaction propagation when a transaction already exists.
|
|
10
|
+
*/
|
|
11
|
+
export async function handlePropagation(current, propagation, opts, adapter, context, hooks) {
|
|
12
|
+
switch (propagation) {
|
|
13
|
+
case "required":
|
|
14
|
+
return current;
|
|
15
|
+
case "requires_new": {
|
|
16
|
+
const newTxn = createTransaction(opts);
|
|
17
|
+
if (hooks?.beforeBegin)
|
|
18
|
+
await hooks.beforeBegin({ transaction: newTxn });
|
|
19
|
+
const handle = await adapter.begin(opts);
|
|
20
|
+
newTxn._setHandle(handle);
|
|
21
|
+
if (hooks?.afterBegin)
|
|
22
|
+
await hooks.afterBegin({ transaction: newTxn });
|
|
23
|
+
return newTxn;
|
|
24
|
+
}
|
|
25
|
+
case "supports":
|
|
26
|
+
return current;
|
|
27
|
+
case "not_supported":
|
|
28
|
+
return current;
|
|
29
|
+
case "mandatory":
|
|
30
|
+
return current;
|
|
31
|
+
case "never":
|
|
32
|
+
throw new TransactionPropagationError("Transaction exists but propagation is 'never'");
|
|
33
|
+
case "nested":
|
|
34
|
+
return createNestedTransaction(current, opts, adapter);
|
|
35
|
+
default:
|
|
36
|
+
throw new TransactionPropagationError(`Unknown propagation: ${propagation}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a nested transaction using savepoints.
|
|
41
|
+
*/
|
|
42
|
+
async function createNestedTransaction(parent, opts, adapter) {
|
|
43
|
+
if (!adapter.capabilities.savepoints || !adapter.createSavepoint) {
|
|
44
|
+
throw new TransactionPropagationError("Nested transactions require savepoint support");
|
|
45
|
+
}
|
|
46
|
+
const child = createTransaction(opts, parent.id);
|
|
47
|
+
const savepointName = `sp_${child.id}`;
|
|
48
|
+
const handle = parent._getHandle();
|
|
49
|
+
await adapter.createSavepoint(handle, savepointName);
|
|
50
|
+
child._setHandle({
|
|
51
|
+
parent: handle,
|
|
52
|
+
savepoint: savepointName,
|
|
53
|
+
});
|
|
54
|
+
return child;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=manager.propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.propagation.js","sourceRoot":"","sources":["../../src/manager/manager.propagation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAE7F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAoB,EACpB,WAAmB,EACnB,IAAoC,EACpC,OAA2B,EAC3B,OAA2B,EAC3B,KAAwB;IAExB,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,OAAO,OAAO,CAAC;QAEjB,KAAK,cAAc,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,EAAE,WAAW;gBAAE,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAA0D,CAAC,UAAU,CACpE,MAAM,CACP,CAAC;YACF,IAAI,KAAK,EAAE,UAAU;gBAAE,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,UAAU;YACb,OAAO,OAAO,CAAC;QAEjB,KAAK,eAAe;YAClB,OAAO,OAAO,CAAC;QAEjB,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;QAEjB,KAAK,OAAO;YACV,MAAM,IAAI,2BAA2B,CACnC,+CAA+C,CAChD,CAAC;QAEJ,KAAK,QAAQ;YACX,OAAO,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzD;YACE,MAAM,IAAI,2BAA2B,CACnC,wBAAwB,WAAW,EAAE,CACtC,CAAC;IACN,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,MAAmB,EACnB,IAAoC,EACpC,OAA2B;IAE3B,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACjE,MAAM,IAAI,2BAA2B,CACnC,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC;IAEvC,MAAM,MAAM,GACV,MACD,CAAC,UAAU,EAAE,CAAC;IACf,MAAM,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpD,KAAyD,CAAC,UAAU,CAAC;QACpE,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction registry — tracks active transactions.
|
|
3
|
+
*
|
|
4
|
+
* @module registry/registry
|
|
5
|
+
*/
|
|
6
|
+
import type { TransactionRegistry } from "../transactionTypes/transactionHooks.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create an in-memory transaction registry.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createTransactionRegistry(): TransactionRegistry;
|
|
11
|
+
//# sourceMappingURL=registry.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.core.d.ts","sourceRoot":"","sources":["../../src/registry/registry.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CAoB/D"}
|