@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,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction registry — tracks active transactions.
|
|
3
|
+
*
|
|
4
|
+
* @module registry/registry
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create an in-memory transaction registry.
|
|
8
|
+
*/
|
|
9
|
+
export function createTransactionRegistry() {
|
|
10
|
+
const active = new Map();
|
|
11
|
+
return {
|
|
12
|
+
register(transaction) {
|
|
13
|
+
active.set(transaction.id, transaction);
|
|
14
|
+
},
|
|
15
|
+
unregister(transactionId) {
|
|
16
|
+
active.delete(transactionId);
|
|
17
|
+
},
|
|
18
|
+
get(transactionId) {
|
|
19
|
+
return active.get(transactionId);
|
|
20
|
+
},
|
|
21
|
+
getActive() {
|
|
22
|
+
return Array.from(active.values());
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=registry.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.core.js","sourceRoot":"","sources":["../../src/registry/registry.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,OAAO;QACL,QAAQ,CAAC,WAAwB;YAC/B,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,UAAU,CAAC,aAAqB;YAC9B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;QAED,GAAG,CAAC,aAAqB;YACvB,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;QAED,SAAS;YACP,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transaction/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transaction/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Transaction implementation with state machine enforcement.
|
|
3
|
+
*/
|
|
4
|
+
import type { Transaction, TransactionOptions } from "../transactionTypes/transaction.interface.js";
|
|
5
|
+
/**
|
|
6
|
+
* Create a new Transaction instance.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createTransaction(options?: TransactionOptions, parentId?: string): Transaction;
|
|
9
|
+
//# sourceMappingURL=transaction.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.core.d.ts","sourceRoot":"","sources":["../../src/transaction/transaction.core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EACnB,MAAM,8CAA8C,CAAC;AAgBtD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,EAChC,QAAQ,CAAC,EAAE,MAAM,GAChB,WAAW,CA2Ib"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Transaction implementation with state machine enforcement.
|
|
3
|
+
*/
|
|
4
|
+
import { randomBytes } from "node:crypto";
|
|
5
|
+
import { TransactionStateError, TransactionCommitError, TransactionRollbackError, } from "../transactionErrors/transactionError.types.js";
|
|
6
|
+
import { createTransitionFunction } from "./transactionStateMachine.js";
|
|
7
|
+
/**
|
|
8
|
+
* Generate a unique transaction ID.
|
|
9
|
+
*/
|
|
10
|
+
function generateTransactionId() {
|
|
11
|
+
return `txn_${randomBytes(16).toString("hex")}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Create a new Transaction instance.
|
|
15
|
+
*/
|
|
16
|
+
export function createTransaction(options = {}, parentId) {
|
|
17
|
+
let state = "pending";
|
|
18
|
+
let rollbackOnly = false;
|
|
19
|
+
let rollbackOnlyReason;
|
|
20
|
+
let timedOut = false;
|
|
21
|
+
const afterCommitCallbacks = [];
|
|
22
|
+
const afterRollbackCallbacks = [];
|
|
23
|
+
let handle;
|
|
24
|
+
const setHandle = (h) => {
|
|
25
|
+
handle = h;
|
|
26
|
+
};
|
|
27
|
+
const getHandle = () => handle;
|
|
28
|
+
const transition = createTransitionFunction(() => state, (s) => {
|
|
29
|
+
state = s;
|
|
30
|
+
});
|
|
31
|
+
const metadata = new Map(options.metadata ? Object.entries(options.metadata) : []);
|
|
32
|
+
const id = generateTransactionId();
|
|
33
|
+
const startedAt = Date.now();
|
|
34
|
+
const txn = {
|
|
35
|
+
get id() {
|
|
36
|
+
return id;
|
|
37
|
+
},
|
|
38
|
+
get parentId() {
|
|
39
|
+
return parentId;
|
|
40
|
+
},
|
|
41
|
+
get state() {
|
|
42
|
+
return state;
|
|
43
|
+
},
|
|
44
|
+
get options() {
|
|
45
|
+
return Object.freeze({ ...options });
|
|
46
|
+
},
|
|
47
|
+
get startedAt() {
|
|
48
|
+
return startedAt;
|
|
49
|
+
},
|
|
50
|
+
get metadata() {
|
|
51
|
+
return metadata;
|
|
52
|
+
},
|
|
53
|
+
get timedOut() {
|
|
54
|
+
return timedOut;
|
|
55
|
+
},
|
|
56
|
+
async commit() {
|
|
57
|
+
if (state !== "active") {
|
|
58
|
+
throw new TransactionStateError(state, "commit");
|
|
59
|
+
}
|
|
60
|
+
if (rollbackOnly) {
|
|
61
|
+
await txn.rollback(rollbackOnlyReason ?? "marked rollback-only");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
transition("committing");
|
|
65
|
+
try {
|
|
66
|
+
transition("committed");
|
|
67
|
+
for (const cb of afterCommitCallbacks) {
|
|
68
|
+
try {
|
|
69
|
+
await cb();
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
/* swallow */
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
afterCommitCallbacks.length = 0;
|
|
76
|
+
afterRollbackCallbacks.length = 0;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
transition("failed");
|
|
80
|
+
throw new TransactionCommitError(id, error);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
async rollback(reason) {
|
|
84
|
+
if (state === "committed" ||
|
|
85
|
+
state === "rolled_back" ||
|
|
86
|
+
state === "failed") {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (state !== "active" && state !== "committing" && state !== "pending") {
|
|
90
|
+
throw new TransactionStateError(state, "rollback");
|
|
91
|
+
}
|
|
92
|
+
transition("rolling_back");
|
|
93
|
+
try {
|
|
94
|
+
transition("rolled_back");
|
|
95
|
+
for (const cb of afterRollbackCallbacks) {
|
|
96
|
+
try {
|
|
97
|
+
await cb();
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
/* swallow */
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
afterCommitCallbacks.length = 0;
|
|
104
|
+
afterRollbackCallbacks.length = 0;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
transition("failed");
|
|
108
|
+
throw new TransactionRollbackError(id, {
|
|
109
|
+
cause: error,
|
|
110
|
+
originalError: reason,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
markRollbackOnly(reason) {
|
|
115
|
+
rollbackOnly = true;
|
|
116
|
+
rollbackOnlyReason = reason;
|
|
117
|
+
},
|
|
118
|
+
isRollbackOnly() {
|
|
119
|
+
return rollbackOnly;
|
|
120
|
+
},
|
|
121
|
+
afterCommit(callback) {
|
|
122
|
+
afterCommitCallbacks.push(callback);
|
|
123
|
+
},
|
|
124
|
+
afterRollback(callback) {
|
|
125
|
+
afterRollbackCallbacks.push(callback);
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
return Object.assign(txn, {
|
|
129
|
+
/** @internal */ _setHandle: setHandle,
|
|
130
|
+
/** @internal */ _getHandle: getHandle,
|
|
131
|
+
/** @internal */ _transition: transition,
|
|
132
|
+
/** @internal */ _markTimedOut: () => {
|
|
133
|
+
timedOut = true;
|
|
134
|
+
},
|
|
135
|
+
/** @internal */ _getAfterCommitCallbacks: () => afterCommitCallbacks,
|
|
136
|
+
/** @internal */ _getAfterRollbackCallbacks: () => afterRollbackCallbacks,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=transaction.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.core.js","sourceRoot":"","sources":["../../src/transaction/transaction.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction state machine — valid transitions and helpers.
|
|
3
|
+
*/
|
|
4
|
+
import type { TransactionState } from "../transactionTypes/transactionState.js";
|
|
5
|
+
/**
|
|
6
|
+
* Creates a state transition function for a transaction.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createTransitionFunction(getState: () => TransactionState, setState: (state: TransactionState) => void): (to: TransactionState) => void;
|
|
9
|
+
//# sourceMappingURL=transactionStateMachine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionStateMachine.d.ts","sourceRoot":"","sources":["../../src/transaction/transactionStateMachine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAchF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,gBAAgB,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAC1C,CAAC,EAAE,EAAE,gBAAgB,KAAK,IAAI,CAQhC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction state machine — valid transitions and helpers.
|
|
3
|
+
*/
|
|
4
|
+
import { TransactionStateError } from "../transactionErrors/transactionError.types.js";
|
|
5
|
+
/** Valid state transitions. */
|
|
6
|
+
const VALID_TRANSITIONS = {
|
|
7
|
+
pending: ["active", "failed"],
|
|
8
|
+
active: ["committing", "rolling_back", "failed"],
|
|
9
|
+
committing: ["committed", "failed", "rolling_back"],
|
|
10
|
+
committed: [],
|
|
11
|
+
rolling_back: ["rolled_back", "failed"],
|
|
12
|
+
rolled_back: [],
|
|
13
|
+
failed: [],
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Creates a state transition function for a transaction.
|
|
17
|
+
*/
|
|
18
|
+
export function createTransitionFunction(getState, setState) {
|
|
19
|
+
return (to) => {
|
|
20
|
+
const current = getState();
|
|
21
|
+
if (!VALID_TRANSITIONS[current]?.includes(to)) {
|
|
22
|
+
throw new TransactionStateError(current, `transition to ${to}`);
|
|
23
|
+
}
|
|
24
|
+
setState(to);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=transactionStateMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionStateMachine.js","sourceRoot":"","sources":["../../src/transaction/transactionStateMachine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAEvF,+BAA+B;AAC/B,MAAM,iBAAiB,GAAiD;IACtE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,MAAM,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,QAAQ,CAAC;IAChD,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC;IACnD,SAAS,EAAE,EAAE;IACb,YAAY,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;IACvC,WAAW,EAAE,EAAE;IACf,MAAM,EAAE,EAAE;CACX,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAgC,EAChC,QAA2C;IAE3C,OAAO,CAAC,EAAoB,EAAQ,EAAE;QACpC,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction error types.
|
|
3
|
+
*/
|
|
4
|
+
export { TransactionError } from "./transactionError.base.js";
|
|
5
|
+
export { TransactionStateError, TransactionTimeoutError, TransactionCommitError, TransactionRollbackError, TransactionAdapterError, TransactionPropagationError, TransactionIsolationError, SavepointError, TransactionRequiredError, TransactionUnexpectedError, TransactionCapabilityError, } from "./transactionError.types.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transactionErrors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction error types.
|
|
3
|
+
*/
|
|
4
|
+
export { TransactionError } from "./transactionError.base.js";
|
|
5
|
+
export { TransactionStateError, TransactionTimeoutError, TransactionCommitError, TransactionRollbackError, TransactionAdapterError, TransactionPropagationError, TransactionIsolationError, SavepointError, TransactionRequiredError, TransactionUnexpectedError, TransactionCapabilityError, } from "./transactionError.types.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transactionErrors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base transaction error class.
|
|
3
|
+
*/
|
|
4
|
+
import { BaseError, ErrorCode, type ErrorMetadata } from "@zudojs/errors";
|
|
5
|
+
/**
|
|
6
|
+
* Base error for all transaction-related failures.
|
|
7
|
+
*/
|
|
8
|
+
export declare class TransactionError extends BaseError {
|
|
9
|
+
constructor(message: string, options?: {
|
|
10
|
+
readonly code?: ErrorCode;
|
|
11
|
+
readonly metadata?: ErrorMetadata;
|
|
12
|
+
readonly cause?: unknown;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=transactionError.base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionError.base.d.ts","sourceRoot":"","sources":["../../src/transactionErrors/transactionError.base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,SAAS,EAGT,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,YACE,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;QAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;KAC1B,EASF;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base transaction error class.
|
|
3
|
+
*/
|
|
4
|
+
import { BaseError, ErrorCode, ErrorCategory, ErrorSeverity, } from "@zudojs/errors";
|
|
5
|
+
/**
|
|
6
|
+
* Base error for all transaction-related failures.
|
|
7
|
+
*/
|
|
8
|
+
export class TransactionError extends BaseError {
|
|
9
|
+
constructor(message, options) {
|
|
10
|
+
super(message, {
|
|
11
|
+
code: options?.code ?? ErrorCode.OPERATION_FAILED,
|
|
12
|
+
category: ErrorCategory.DATABASE,
|
|
13
|
+
severity: ErrorSeverity.ERROR,
|
|
14
|
+
metadata: options?.metadata,
|
|
15
|
+
cause: options?.cause,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=transactionError.base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionError.base.js","sourceRoot":"","sources":["../../src/transactionErrors/transactionError.base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,GAEd,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,YACE,OAAe,EACf,OAIC;QAED,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC,gBAAgB;YACjD,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,QAAQ,EAAE,aAAa,CAAC,KAAK;YAC7B,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,KAAK,EAAE,OAAO,EAAE,KAAK;SACtB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specific transaction error subclasses.
|
|
3
|
+
*/
|
|
4
|
+
import { TransactionError } from "./transactionError.base.js";
|
|
5
|
+
/**
|
|
6
|
+
* Transaction is in an invalid state for the requested operation.
|
|
7
|
+
*/
|
|
8
|
+
export declare class TransactionStateError extends TransactionError {
|
|
9
|
+
constructor(state: string, operation: string);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Transaction exceeded its timeout.
|
|
13
|
+
*/
|
|
14
|
+
export declare class TransactionTimeoutError extends TransactionError {
|
|
15
|
+
constructor(transactionId: string, timeoutMs: number);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Transaction commit failed.
|
|
19
|
+
*/
|
|
20
|
+
export declare class TransactionCommitError extends TransactionError {
|
|
21
|
+
constructor(transactionId: string, cause?: unknown);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Transaction rollback failed.
|
|
25
|
+
*/
|
|
26
|
+
export declare class TransactionRollbackError extends TransactionError {
|
|
27
|
+
constructor(transactionId: string, options?: {
|
|
28
|
+
readonly cause?: unknown;
|
|
29
|
+
readonly originalError?: unknown;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The underlying adapter threw an error.
|
|
34
|
+
*/
|
|
35
|
+
export declare class TransactionAdapterError extends TransactionError {
|
|
36
|
+
constructor(message: string, cause?: unknown);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Propagation strategy violation.
|
|
40
|
+
*/
|
|
41
|
+
export declare class TransactionPropagationError extends TransactionError {
|
|
42
|
+
constructor(message: string);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Required isolation level is not supported by the adapter.
|
|
46
|
+
*/
|
|
47
|
+
export declare class TransactionIsolationError extends TransactionError {
|
|
48
|
+
constructor(level: string);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Savepoint operation failed.
|
|
52
|
+
*/
|
|
53
|
+
export declare class SavepointError extends TransactionError {
|
|
54
|
+
constructor(message: string, cause?: unknown);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A transaction is required but none exists.
|
|
58
|
+
*/
|
|
59
|
+
export declare class TransactionRequiredError extends TransactionError {
|
|
60
|
+
constructor();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A transaction exists but none was expected.
|
|
64
|
+
*/
|
|
65
|
+
export declare class TransactionUnexpectedError extends TransactionError {
|
|
66
|
+
constructor();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The adapter does not support the requested capability.
|
|
70
|
+
*/
|
|
71
|
+
export declare class TransactionCapabilityError extends TransactionError {
|
|
72
|
+
constructor(capability: string);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=transactionError.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionError.types.d.ts","sourceRoot":"","sources":["../../src/transactionErrors/transactionError.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,YAAY,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAK3C;CACF;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,gBAAgB;IAC3D,YAAY,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAKnD;CACF;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,gBAAgB;IAC1D,YAAY,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAMjD;CACF;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,YACE,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;KAClC,EAaF;CACF;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,gBAAgB;IAC3D,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAK3C;CACF;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,gBAAgB;IAC/D,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;IAC7D,YAAY,KAAK,EAAE,MAAM,EAKxB;CACF;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;IAClD,YAAY,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAK3C;CACF;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,cAIC;CACF;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,cAIC;CACF;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAY,UAAU,EAAE,MAAM,EAK7B;CACF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specific transaction error subclasses.
|
|
3
|
+
*/
|
|
4
|
+
import { ErrorCode } from "@zudojs/errors";
|
|
5
|
+
import { TransactionError } from "./transactionError.base.js";
|
|
6
|
+
/**
|
|
7
|
+
* Transaction is in an invalid state for the requested operation.
|
|
8
|
+
*/
|
|
9
|
+
export class TransactionStateError extends TransactionError {
|
|
10
|
+
constructor(state, operation) {
|
|
11
|
+
super(`Cannot ${operation} transaction in state "${state}"`, {
|
|
12
|
+
code: ErrorCode.LIFECYCLE_STATE,
|
|
13
|
+
metadata: { state, operation },
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Transaction exceeded its timeout.
|
|
19
|
+
*/
|
|
20
|
+
export class TransactionTimeoutError extends TransactionError {
|
|
21
|
+
constructor(transactionId, timeoutMs) {
|
|
22
|
+
super(`Transaction "${transactionId}" timed out after ${timeoutMs}ms`, {
|
|
23
|
+
code: ErrorCode.TIMEOUT,
|
|
24
|
+
metadata: { transactionId, timeoutMs },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Transaction commit failed.
|
|
30
|
+
*/
|
|
31
|
+
export class TransactionCommitError extends TransactionError {
|
|
32
|
+
constructor(transactionId, cause) {
|
|
33
|
+
super(`Transaction "${transactionId}" commit failed`, {
|
|
34
|
+
code: ErrorCode.DATABASE_TRANSACTION,
|
|
35
|
+
cause,
|
|
36
|
+
metadata: { transactionId },
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Transaction rollback failed.
|
|
42
|
+
*/
|
|
43
|
+
export class TransactionRollbackError extends TransactionError {
|
|
44
|
+
constructor(transactionId, options) {
|
|
45
|
+
super(`Transaction "${transactionId}" rollback failed`, {
|
|
46
|
+
code: ErrorCode.DATABASE_TRANSACTION,
|
|
47
|
+
cause: options?.cause,
|
|
48
|
+
metadata: {
|
|
49
|
+
transactionId,
|
|
50
|
+
originalError: options?.originalError instanceof Error
|
|
51
|
+
? options.originalError.message
|
|
52
|
+
: String(options?.originalError ?? "unknown"),
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The underlying adapter threw an error.
|
|
59
|
+
*/
|
|
60
|
+
export class TransactionAdapterError extends TransactionError {
|
|
61
|
+
constructor(message, cause) {
|
|
62
|
+
super(message, {
|
|
63
|
+
code: ErrorCode.ADAPTER_OPERATION_FAILED,
|
|
64
|
+
cause,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Propagation strategy violation.
|
|
70
|
+
*/
|
|
71
|
+
export class TransactionPropagationError extends TransactionError {
|
|
72
|
+
constructor(message) {
|
|
73
|
+
super(message, { code: ErrorCode.VALIDATION_FAILED });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Required isolation level is not supported by the adapter.
|
|
78
|
+
*/
|
|
79
|
+
export class TransactionIsolationError extends TransactionError {
|
|
80
|
+
constructor(level) {
|
|
81
|
+
super(`Isolation level "${level}" is not supported by the adapter`, {
|
|
82
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
83
|
+
metadata: { level },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Savepoint operation failed.
|
|
89
|
+
*/
|
|
90
|
+
export class SavepointError extends TransactionError {
|
|
91
|
+
constructor(message, cause) {
|
|
92
|
+
super(message, {
|
|
93
|
+
code: ErrorCode.OPERATION_FAILED,
|
|
94
|
+
cause,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A transaction is required but none exists.
|
|
100
|
+
*/
|
|
101
|
+
export class TransactionRequiredError extends TransactionError {
|
|
102
|
+
constructor() {
|
|
103
|
+
super("A transaction is required but none exists", {
|
|
104
|
+
code: ErrorCode.PRECONDITION_FAILED,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* A transaction exists but none was expected.
|
|
110
|
+
*/
|
|
111
|
+
export class TransactionUnexpectedError extends TransactionError {
|
|
112
|
+
constructor() {
|
|
113
|
+
super("A transaction already exists but none was expected", {
|
|
114
|
+
code: ErrorCode.CONFLICT,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The adapter does not support the requested capability.
|
|
120
|
+
*/
|
|
121
|
+
export class TransactionCapabilityError extends TransactionError {
|
|
122
|
+
constructor(capability) {
|
|
123
|
+
super(`Adapter does not support: ${capability}`, {
|
|
124
|
+
code: ErrorCode.NOT_IMPLEMENTED,
|
|
125
|
+
metadata: { capability },
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=transactionError.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionError.types.js","sourceRoot":"","sources":["../../src/transactionErrors/transactionError.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core transaction type definitions.
|
|
3
|
+
*
|
|
4
|
+
* @module transactionTypes
|
|
5
|
+
*/
|
|
6
|
+
export { type TransactionState, type TransactionPropagation, type TransactionIsolationLevel, } from "./transactionState.js";
|
|
7
|
+
export { type Transaction, type TransactionOptions, type TransactionRetryOptions, } from "./transaction.interface.js";
|
|
8
|
+
export { type TransactionHandle, type TransactionAdapterCapabilities, type TransactionAdapter, type Savepoint, type TransactionContext, } from "./transactionAdapter.js";
|
|
9
|
+
export { type TransactionHookContext, type TransactionErrorContext, type TransactionHooks, type TransactionRegistry, type TransactionResult, TRANSACTION_EVENTS, type TransactionEvent, type TransactionEventHandler, } from "./transactionHooks.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transactionTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,GAC/B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,8BAA8B,EACnC,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core transaction type definitions.
|
|
3
|
+
*
|
|
4
|
+
* @module transactionTypes
|
|
5
|
+
*/
|
|
6
|
+
export {} from "./transactionState.js";
|
|
7
|
+
export {} from "./transaction.interface.js";
|
|
8
|
+
export {} from "./transactionAdapter.js";
|
|
9
|
+
export { TRANSACTION_EVENTS, } from "./transactionHooks.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transactionTypes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAIN,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAIN,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAMN,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAML,kBAAkB,GAGnB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transaction interface, options, and retry configuration.
|
|
3
|
+
*
|
|
4
|
+
* @module transactionTypes/transaction
|
|
5
|
+
*/
|
|
6
|
+
import type { TransactionState, TransactionPropagation, TransactionIsolationLevel } from "./transactionState.js";
|
|
7
|
+
/** Options for starting a transaction. */
|
|
8
|
+
export interface TransactionOptions {
|
|
9
|
+
/** Isolation level. */
|
|
10
|
+
readonly isolation?: TransactionIsolationLevel;
|
|
11
|
+
/** Propagation strategy for nested transactions. */
|
|
12
|
+
readonly propagation?: TransactionPropagation;
|
|
13
|
+
/** Timeout in ms. 0 = no timeout. */
|
|
14
|
+
readonly timeout?: number;
|
|
15
|
+
/** Whether this is a read-only transaction. */
|
|
16
|
+
readonly readOnly?: boolean;
|
|
17
|
+
/** Human-readable transaction name for observability. */
|
|
18
|
+
readonly name?: string;
|
|
19
|
+
/** Arbitrary metadata attached to the transaction. */
|
|
20
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
21
|
+
/** Retry configuration. */
|
|
22
|
+
readonly retry?: TransactionRetryOptions;
|
|
23
|
+
}
|
|
24
|
+
/** Retry configuration for transaction failures. */
|
|
25
|
+
export interface TransactionRetryOptions {
|
|
26
|
+
/** Maximum number of retry attempts. Defaults to 0 (no retry). */
|
|
27
|
+
readonly attempts?: number;
|
|
28
|
+
/** Delay between retries in ms. */
|
|
29
|
+
readonly delay?: number;
|
|
30
|
+
/** Backoff strategy. */
|
|
31
|
+
readonly backoff?: "fixed" | "exponential";
|
|
32
|
+
}
|
|
33
|
+
/** The core transaction interface. */
|
|
34
|
+
export interface Transaction {
|
|
35
|
+
/** Unique transaction identifier. */
|
|
36
|
+
readonly id: string;
|
|
37
|
+
/** Parent transaction ID (for nested transactions). */
|
|
38
|
+
readonly parentId?: string;
|
|
39
|
+
/** Current lifecycle state. */
|
|
40
|
+
readonly state: TransactionState;
|
|
41
|
+
/** Options used to start this transaction. */
|
|
42
|
+
readonly options: Readonly<TransactionOptions>;
|
|
43
|
+
/** Timestamp when the transaction was created (ms since epoch). */
|
|
44
|
+
readonly startedAt: number;
|
|
45
|
+
/** Arbitrary metadata. */
|
|
46
|
+
readonly metadata: ReadonlyMap<string, unknown>;
|
|
47
|
+
/** Whether a timeout was detected. */
|
|
48
|
+
readonly timedOut: boolean;
|
|
49
|
+
/** Commit the transaction. */
|
|
50
|
+
commit(): Promise<void>;
|
|
51
|
+
/** Rollback the transaction. */
|
|
52
|
+
rollback(reason?: unknown): Promise<void>;
|
|
53
|
+
/** Mark the transaction as rollback-only (prevents commit). */
|
|
54
|
+
markRollbackOnly(reason?: unknown): void;
|
|
55
|
+
/** Whether the transaction is marked rollback-only. */
|
|
56
|
+
isRollbackOnly(): boolean;
|
|
57
|
+
/** Register a callback to run after commit. */
|
|
58
|
+
afterCommit(callback: () => Promise<void>): void;
|
|
59
|
+
/** Register a callback to run after rollback. */
|
|
60
|
+
afterRollback(callback: () => Promise<void>): void;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=transaction.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.interface.d.ts","sourceRoot":"","sources":["../../src/transactionTypes/transaction.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,0CAA0C;AAC1C,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,yBAAyB,CAAC;IAC/C,oDAAoD;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAC9C,qCAAqC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC;CAC1C;AAED,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACtC,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CAC5C;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,8BAA8B;IAC9B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,gCAAgC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,+DAA+D;IAC/D,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,uDAAuD;IACvD,cAAc,IAAI,OAAO,CAAC;IAC1B,+CAA+C;IAC/C,WAAW,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,iDAAiD;IACjD,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpD"}
|