@decaf-ts/transactional-decorators 0.1.5 → 0.2.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.
Files changed (82) hide show
  1. package/README.md +1 -1
  2. package/dist/transactional-decorators.cjs +1 -1
  3. package/dist/transactional-decorators.cjs.map +1 -1
  4. package/dist/transactional-decorators.js +1 -1
  5. package/dist/transactional-decorators.js.map +1 -1
  6. package/lib/Transaction.cjs +254 -56
  7. package/lib/Transaction.d.ts +44 -18
  8. package/lib/Transaction.js.map +1 -1
  9. package/lib/constants.cjs +0 -1
  10. package/lib/constants.js.map +1 -1
  11. package/lib/decorators.cjs +60 -146
  12. package/lib/decorators.d.ts +1 -11
  13. package/lib/decorators.js.map +1 -1
  14. package/lib/errors.cjs +11 -0
  15. package/lib/errors.d.ts +4 -0
  16. package/lib/errors.js.map +1 -0
  17. package/lib/esm/Transaction.d.ts +44 -18
  18. package/lib/esm/Transaction.js +254 -56
  19. package/lib/esm/Transaction.js.map +1 -1
  20. package/lib/esm/constants.js +0 -1
  21. package/lib/esm/constants.js.map +1 -1
  22. package/lib/esm/decorators.d.ts +1 -11
  23. package/lib/esm/decorators.js +60 -145
  24. package/lib/esm/decorators.js.map +1 -1
  25. package/lib/esm/errors.d.ts +4 -0
  26. package/lib/esm/errors.js +7 -0
  27. package/lib/esm/errors.js.map +1 -0
  28. package/lib/esm/index.d.ts +4 -1
  29. package/lib/esm/index.js +6 -1
  30. package/lib/esm/index.js.map +1 -1
  31. package/lib/esm/interfaces/TransactionLock.d.ts +2 -2
  32. package/lib/esm/locks/{SyncronousLock.d.ts → SynchronousLock.d.ts} +10 -6
  33. package/lib/esm/locks/SynchronousLock.js +131 -0
  34. package/lib/esm/locks/SynchronousLock.js.map +1 -0
  35. package/lib/esm/locks/index.d.ts +1 -1
  36. package/lib/esm/locks/index.js +1 -1
  37. package/lib/esm/locks/index.js.map +1 -1
  38. package/lib/esm/overrides/Metadata.d.ts +8 -0
  39. package/lib/esm/overrides/Metadata.js +2 -0
  40. package/lib/esm/overrides/Metadata.js.map +1 -0
  41. package/lib/esm/overrides/index.d.ts +2 -0
  42. package/lib/esm/overrides/index.js +3 -0
  43. package/lib/esm/overrides/index.js.map +1 -0
  44. package/lib/esm/overrides/overrides.d.ts +1 -0
  45. package/lib/esm/overrides/overrides.js +12 -0
  46. package/lib/esm/overrides/overrides.js.map +1 -0
  47. package/lib/esm/types.d.ts +0 -10
  48. package/lib/esm/types.js +11 -0
  49. package/lib/esm/types.js.map +1 -1
  50. package/lib/index.cjs +7 -2
  51. package/lib/index.d.ts +4 -1
  52. package/lib/index.js.map +1 -1
  53. package/lib/interfaces/TransactionLock.d.ts +2 -2
  54. package/lib/locks/SynchronousLock.cjs +135 -0
  55. package/lib/locks/{SyncronousLock.d.ts → SynchronousLock.d.ts} +10 -6
  56. package/lib/locks/SynchronousLock.js.map +1 -0
  57. package/lib/locks/index.cjs +1 -1
  58. package/lib/locks/index.d.ts +1 -1
  59. package/lib/locks/index.js.map +1 -1
  60. package/lib/overrides/Metadata.cjs +4 -0
  61. package/lib/overrides/Metadata.d.ts +8 -0
  62. package/lib/overrides/Metadata.js.map +1 -0
  63. package/lib/overrides/index.cjs +19 -0
  64. package/lib/overrides/index.d.ts +2 -0
  65. package/lib/overrides/index.js.map +1 -0
  66. package/lib/overrides/overrides.cjs +14 -0
  67. package/lib/overrides/overrides.d.ts +1 -0
  68. package/lib/overrides/overrides.js.map +1 -0
  69. package/lib/types.cjs +11 -0
  70. package/lib/types.d.ts +0 -10
  71. package/lib/types.js.map +1 -1
  72. package/package.json +4 -6
  73. package/lib/esm/locks/SyncronousLock.js +0 -128
  74. package/lib/esm/locks/SyncronousLock.js.map +0 -1
  75. package/lib/esm/utils.d.ts +0 -1
  76. package/lib/esm/utils.js +0 -14
  77. package/lib/esm/utils.js.map +0 -1
  78. package/lib/locks/SyncronousLock.cjs +0 -132
  79. package/lib/locks/SyncronousLock.js.map +0 -1
  80. package/lib/utils.cjs +0 -17
  81. package/lib/utils.d.ts +0 -1
  82. package/lib/utils.js.map +0 -1
@@ -1,5 +1,7 @@
1
1
  import { TransactionLock } from "./interfaces/TransactionLock";
2
- import { Callback } from "./types";
2
+ import "./overrides";
3
+ import { LoggedClass } from "@decaf-ts/logging";
4
+ type TransactionRunnable<R, C = unknown> = (this: C) => R | Promise<R>;
3
5
  /**
4
6
  * @description Core transaction management class
5
7
  * @summary Manages transaction lifecycle, including creation, execution, and cleanup. Provides mechanisms for binding transactions to objects and methods, ensuring proper transaction context propagation.
@@ -44,24 +46,37 @@ import { Callback } from "./types";
44
46
  * T->>L: release(error?)
45
47
  * L-->>C: Return result/error
46
48
  */
47
- export declare class Transaction {
49
+ export declare class Transaction<R> extends LoggedClass {
50
+ static debug: boolean;
51
+ static globalTimeout: number;
52
+ private static readonly metadataCache;
53
+ private static log;
54
+ get log(): any;
48
55
  readonly id: number;
49
- protected action?: () => any;
56
+ protected action?: () => Promise<R>;
50
57
  readonly method?: string;
51
58
  readonly source?: string;
52
- readonly log: string[];
59
+ readonly logs: string[];
53
60
  private readonly metadata?;
61
+ private readonly completion;
62
+ private resolveCompletion?;
63
+ private rejectCompletion?;
64
+ private initialFireDispatched;
65
+ private released;
54
66
  private static lock;
55
- constructor(source: string, method?: string, action?: () => any, metadata?: any[]);
67
+ private static readonly contexts;
68
+ constructor(source: string, method?: string, action?: () => Promise<R>, metadata?: any[]);
56
69
  /**
57
70
  * @description Queues a transaction for execution
58
71
  * @summary Pushes a transaction to the queue and waits for its resolution. Creates a new transaction with the provided issuer and callback method, then submits it to the transaction lock.
59
72
  * @param {any} issuer - Any class instance that will be used as 'this' when calling the callbackMethod
60
- * @param {Function} callbackMethod - Callback function containing the transaction logic, will be called with the issuer as 'this'
73
+ * @param {Function} method - function containing the transaction logic, will be called with the issuer as 'this'
61
74
  * @param {any[]} args - Arguments to pass to the method. Last one must be the callback function
62
75
  * @return {void}
63
76
  */
64
- static push(issuer: any, callbackMethod: (...argzz: (any | Callback)[]) => void, ...args: (any | Callback)[]): void;
77
+ static push<R>(issuer: any, method: (...argzz: any[]) => Promise<R>, ...args: any[]): Promise<R>;
78
+ static run<R, C = unknown>(runnable: TransactionRunnable<R, C>, metadata?: any[]): Promise<R>;
79
+ static run<R, C = unknown>(context: C, runnable: TransactionRunnable<R, C>, metadata?: any[]): Promise<R>;
65
80
  /**
66
81
  * @description Configures the transaction lock implementation
67
82
  * @summary Sets the lock implementation to be used for transaction management, allowing customization of the transaction behavior
@@ -81,7 +96,7 @@ export declare class Transaction {
81
96
  * @param {Transaction} transaction - The transaction to submit for processing
82
97
  * @return {void}
83
98
  */
84
- static submit(transaction: Transaction): void;
99
+ static submit<R>(transaction: Transaction<R>): Promise<R>;
85
100
  /**
86
101
  * @description Releases the transaction lock
87
102
  * @summary Releases the current transaction lock, optionally with an error, allowing the next transaction to proceed
@@ -89,19 +104,27 @@ export declare class Transaction {
89
104
  * @return {Promise<void>} A promise that resolves when the lock has been released
90
105
  */
91
106
  static release(err?: Error): Promise<void>;
107
+ /**
108
+ * @description Releases the transaction instance once
109
+ * @summary Ensures the underlying lock is released at most a single time for the transaction
110
+ * @param {Error} [err] - Optional error to propagate to the lock implementation
111
+ * @return {Promise<void>} Resolves once the lock release call finishes or immediately when already released
112
+ */
113
+ release(err?: Error): Promise<void>;
92
114
  /**
93
115
  * @description Retrieves transaction metadata
94
116
  * @summary Returns a copy of the metadata associated with this transaction, ensuring the original metadata remains unmodified
95
117
  * @return {any[] | undefined} A copy of the transaction metadata or undefined if no metadata exists
96
118
  */
97
119
  getMetadata(): any[] | undefined;
120
+ private static getTransactionalMetadata;
98
121
  /**
99
122
  * @description Links a new transaction to the current one
100
123
  * @summary Binds a new transaction operation to the current transaction, transferring logs and binding methods to maintain transaction context
101
124
  * @param {Transaction} nextTransaction - The new transaction to bind to the current one
102
125
  * @return {void}
103
126
  */
104
- bindTransaction(nextTransaction: Transaction): void;
127
+ bindTransaction(nextTransaction: Transaction<any>): void;
105
128
  /**
106
129
  * @description Binds an object to the current transaction context
107
130
  * @summary Binds a transactional decorated object to the transaction by ensuring all transactional methods automatically receive the current transaction as their first argument
@@ -109,12 +132,19 @@ export declare class Transaction {
109
132
  * @return {any} The bound object with transaction-aware method wrappers
110
133
  */
111
134
  bindToTransaction(obj: any): any;
135
+ /**
136
+ * @description Applies the global timeout to the provided Promise, if configured
137
+ * @param {Promise<R>} execution - Transaction execution promise
138
+ * @return {Promise<R>} Promise that respects the configured global timeout
139
+ * @private
140
+ */
141
+ private applyGlobalTimeout;
112
142
  /**
113
143
  * @description Executes the transaction action
114
144
  * @summary Fires the transaction by executing its associated action function, throwing an error if no action is defined
115
145
  * @return {any} The result of the transaction action
116
146
  */
117
- fire(): any;
147
+ fire(): Promise<R>;
118
148
  /**
119
149
  * @description Provides a string representation of the transaction
120
150
  * @summary Overrides the default toString method to provide a formatted string representation of the transaction, optionally including the transaction ID and log
@@ -123,12 +153,8 @@ export declare class Transaction {
123
153
  * @return {string} A string representation of the transaction
124
154
  */
125
155
  toString(withId?: boolean, withLog?: boolean): string;
126
- /**
127
- * @description Generates a reflection metadata key for transactions
128
- * @summary Creates a prefixed reflection key for transaction-related metadata, ensuring proper namespacing
129
- * @param {string} key - The base key to prefix with the transaction reflection namespace
130
- * @return {string} The complete reflection key for transaction metadata
131
- * @function key
132
- */
133
- static key(key: string): string;
156
+ static contextTransaction(context: any): Transaction<any> | undefined;
157
+ wait(): Promise<R>;
158
+ private static describeTarget;
134
159
  }
160
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../src/Transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../src/Transaction.ts"],"names":[],"mappings":"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"}
package/lib/constants.cjs CHANGED
@@ -15,7 +15,6 @@ exports.TransactionalKeys = void 0;
15
15
  * @memberOf module:transactions
16
16
  */
17
17
  exports.TransactionalKeys = {
18
- REFLECT: "model.transactional.",
19
18
  TRANSACTIONAL: "transactional",
20
19
  };
21
20
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;;;;;GAMG;AACU,QAAA,iBAAiB,GAA2B;IACvD,OAAO,EAAE,sBAAsB;IAC/B,aAAa,EAAE,eAAe;CAC/B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH;;;;;;GAMG;AACU,QAAA,iBAAiB,GAA2B;IACvD,aAAa,EAAE,eAAe;CAC/B,CAAC"}
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.transactional = transactional;
4
- exports.transactionalSuperCall = transactionalSuperCall;
5
4
  const constants_1 = require("./constants.cjs");
6
- const reflection_1 = require("@decaf-ts/reflection");
5
+ const decoration_1 = require("@decaf-ts/decoration");
7
6
  const Transaction_1 = require("./Transaction.cjs");
8
7
  const db_decorators_1 = require("@decaf-ts/db-decorators");
9
8
  /**
@@ -41,151 +40,66 @@ const db_decorators_1 = require("@decaf-ts/db-decorators");
41
40
  function transactional(...data) {
42
41
  return function (target, propertyKey, descriptor) {
43
42
  if (!descriptor)
44
- throw new db_decorators_1.InternalError("Missing descriptor. Should be impossible");
45
- (0, reflection_1.metadata)(Transaction_1.Transaction.key(constants_1.TransactionalKeys.TRANSACTIONAL), data)(target, propertyKey);
46
- const originalMethod = descriptor.value;
47
- const methodWrapper = function (...args) {
48
- // eslint-disable-next-line @typescript-eslint/no-this-alias
49
- const self = this;
50
- return new Promise((resolve, reject) => {
51
- const cb = (err, result) => {
52
- Transaction_1.Transaction.release(err).then(() => {
53
- if (err)
54
- return reject(err);
55
- resolve(result);
56
- });
57
- };
58
- let transaction = args.shift();
59
- if (transaction instanceof Transaction_1.Transaction) {
60
- const updatedTransaction = new Transaction_1.Transaction(this.constructor.name, propertyKey, async () => {
61
- originalMethod
62
- .call(updatedTransaction.bindToTransaction(self), ...args)
63
- .then(resolve)
64
- .catch(reject);
65
- }, data.length ? data : undefined);
66
- transaction.bindTransaction(updatedTransaction);
67
- transaction.fire();
68
- }
69
- else {
70
- args.unshift(transaction);
71
- transaction = new Transaction_1.Transaction(this.constructor.name, propertyKey, () => {
72
- originalMethod
73
- .call(transaction.bindToTransaction(self), ...args)
74
- .then((result) => cb(undefined, result))
75
- .catch(cb);
76
- }, data.length ? data : undefined);
77
- Transaction_1.Transaction.submit(transaction);
78
- }
79
- });
80
- };
81
- Object.defineProperty(methodWrapper, "name", {
82
- value: propertyKey,
43
+ throw new db_decorators_1.InternalError("This decorator only applies to methods");
44
+ (0, decoration_1.method)()(target, propertyKey, descriptor);
45
+ decoration_1.Metadata.set(target.constructor, decoration_1.Metadata.key(constants_1.TransactionalKeys.TRANSACTIONAL, propertyKey), {
46
+ data: data,
83
47
  });
84
- descriptor.value = methodWrapper;
48
+ descriptor.value = new Proxy(descriptor.value, {
49
+ async apply(obj, thisArg, argArray) {
50
+ return new Promise((resolve, reject) => {
51
+ async function exitFunction(transaction, err, result) {
52
+ if (err && !(err instanceof Error) && !result) {
53
+ result = err;
54
+ err = undefined;
55
+ }
56
+ await transaction.release(err);
57
+ return err
58
+ ? reject(err)
59
+ : resolve(result);
60
+ }
61
+ const candidate = argArray[0];
62
+ const transactionPrefixLength = (() => {
63
+ let count = 0;
64
+ while (count < argArray.length &&
65
+ argArray[count] instanceof Transaction_1.Transaction) {
66
+ count++;
67
+ }
68
+ return count;
69
+ })();
70
+ const invocationArgs = transactionPrefixLength > 0
71
+ ? argArray.slice(transactionPrefixLength)
72
+ : argArray;
73
+ const activeTransaction = candidate instanceof Transaction_1.Transaction
74
+ ? candidate
75
+ : Transaction_1.Transaction.contextTransaction(thisArg);
76
+ if (activeTransaction) {
77
+ const updatedTransaction = new Transaction_1.Transaction(target.name, propertyKey, async () => {
78
+ try {
79
+ return resolve(await Reflect.apply(obj, updatedTransaction.bindToTransaction(thisArg), invocationArgs));
80
+ }
81
+ catch (e) {
82
+ return reject(e);
83
+ }
84
+ }, data.length ? data : undefined);
85
+ activeTransaction.bindTransaction(updatedTransaction);
86
+ activeTransaction.fire();
87
+ }
88
+ else {
89
+ const newTransaction = new Transaction_1.Transaction(target.name, propertyKey, async () => {
90
+ try {
91
+ return exitFunction(newTransaction, undefined, await Reflect.apply(obj, newTransaction.bindToTransaction(thisArg), invocationArgs));
92
+ }
93
+ catch (e) {
94
+ return exitFunction(newTransaction, e);
95
+ }
96
+ }, data.length ? data : undefined);
97
+ Transaction_1.Transaction.submit(newTransaction);
98
+ }
99
+ });
100
+ },
101
+ });
102
+ return descriptor;
85
103
  };
86
104
  }
87
- //
88
- // /**
89
- // * @summary Sets a class Async method as transactional
90
- // *
91
- // * @param {any[]} [metadata] option metadata available to the {@link TransactionLock}
92
- // *
93
- // * @function transactionalAsync
94
- // *
95
- // * @memberOf module:db-decorators.Decorators.transactions
96
- // */
97
- // export function transactionalAsync(...metadata: any[]) {
98
- // return function (
99
- // target: any,
100
- // propertyKey: string,
101
- // descriptor: PropertyDescriptor,
102
- // ) {
103
- // metadasta(getTransactionalKey(TransactionalKeys.TRANSACTIONAL))
104
- // Reflect.defineMetadata(
105
- // ,
106
- // {
107
- // type: "async",
108
- // metadata: metadata.length ? metadata : undefined,
109
- // } as TransactionalMetadata,
110
- // target,
111
- // propertyKey,
112
- // );
113
- //
114
- // const originalMethod = descriptor.value;
115
- //
116
- // const methodWrapper = function (this: any, ...args: any[]) {
117
- // const callback: Callback = args.pop();
118
- // if (!callback || typeof callback !== "function")
119
- // throw new CriticalError(`Missing Callback`);
120
- //
121
- // const cb = (err?: Err, ...args: any[]) => {
122
- // Transaction.release(err).then((_) => callback(err, ...args));
123
- // };
124
- //
125
- // const self = this;
126
- //
127
- // let transaction = args.shift();
128
- // if (transaction instanceof Transaction) {
129
- // const updatedTransaction: Transaction = new Transaction(
130
- // this.constructor.name,
131
- // propertyKey,
132
- // () => {
133
- // try {
134
- // return originalMethod.call(
135
- // updatedTransaction.bindToTransaction(self),
136
- // ...args,
137
- // callback,
138
- // );
139
- // } catch (e: any) {
140
- // return callback(e);
141
- // }
142
- // },
143
- // metadata.length ? metadata : undefined,
144
- // );
145
- //
146
- // transaction.bindTransaction(updatedTransaction);
147
- // transaction.fire();
148
- // } else {
149
- // args.unshift(transaction);
150
- // transaction = undefined;
151
- // transaction = new Transaction(
152
- // this.constructor.name,
153
- // propertyKey,
154
- // () => {
155
- // try {
156
- // return originalMethod.call(
157
- // transaction.bindToTransaction(self),
158
- // ...args,
159
- // cb,
160
- // );
161
- // } catch (e: any) {
162
- // return cb(e);
163
- // }
164
- // },
165
- // metadata.length ? metadata : undefined,
166
- // );
167
- // Transaction.submit(transaction);
168
- // }
169
- // };
170
- //
171
- // Object.defineProperty(methodWrapper, "name", {
172
- // value: propertyKey,
173
- // });
174
- // descriptor.value = methodWrapper;
175
- // };
176
- // }
177
- /**
178
- * @description Utility for handling super calls in transactional methods
179
- * @summary Wraps super method calls with the current transaction context when the super's method is also transactional, ensuring transaction continuity through the inheritance chain
180
- * @param {Function} method - The super method (must be bound to the proper this), e.g., super.create.bind(this)
181
- * @param {any[]} args - The arguments to call the method with
182
- * @return {any} The result of the super method call
183
- * @function transactionalSuperCall
184
- * @memberOf module:transactions
185
- */
186
- function transactionalSuperCall(method, ...args) {
187
- const lock = Transaction_1.Transaction.getLock();
188
- const currentTransaction = lock.currentTransaction;
189
- return method(currentTransaction, ...args);
190
- }
191
105
  //# sourceMappingURL=decorators.js.map
@@ -30,14 +30,4 @@
30
30
  * T-->>C: Return result/error
31
31
  * @category Decorators
32
32
  */
33
- export declare function transactional(...data: any[]): (target: any, propertyKey?: any, descriptor?: PropertyDescriptor) => void;
34
- /**
35
- * @description Utility for handling super calls in transactional methods
36
- * @summary Wraps super method calls with the current transaction context when the super's method is also transactional, ensuring transaction continuity through the inheritance chain
37
- * @param {Function} method - The super method (must be bound to the proper this), e.g., super.create.bind(this)
38
- * @param {any[]} args - The arguments to call the method with
39
- * @return {any} The result of the super method call
40
- * @function transactionalSuperCall
41
- * @memberOf module:transactions
42
- */
43
- export declare function transactionalSuperCall(method: any, ...args: any): any;
33
+ export declare function transactional(...data: any[]): (target: any, propertyKey?: any, descriptor?: any) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
package/lib/errors.cjs ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TimeoutError = void 0;
4
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
5
+ class TimeoutError extends db_decorators_1.InternalError {
6
+ constructor(message = "Transaction timed out") {
7
+ super(message, TimeoutError.name, 500);
8
+ }
9
+ }
10
+ exports.TimeoutError = TimeoutError;
11
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1,4 @@
1
+ import { InternalError } from "@decaf-ts/db-decorators";
2
+ export declare class TimeoutError extends InternalError {
3
+ constructor(message?: string | Error);
4
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,2DAAwD;AAExD,MAAa,YAAa,SAAQ,6BAAa;IAC7C,YAAY,UAA0B,uBAAuB;QAC3D,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAJD,oCAIC"}
@@ -1,5 +1,7 @@
1
1
  import { TransactionLock } from "./interfaces/TransactionLock";
2
- import { Callback } from "./types";
2
+ import "./overrides";
3
+ import { LoggedClass } from "@decaf-ts/logging";
4
+ type TransactionRunnable<R, C = unknown> = (this: C) => R | Promise<R>;
3
5
  /**
4
6
  * @description Core transaction management class
5
7
  * @summary Manages transaction lifecycle, including creation, execution, and cleanup. Provides mechanisms for binding transactions to objects and methods, ensuring proper transaction context propagation.
@@ -44,24 +46,37 @@ import { Callback } from "./types";
44
46
  * T->>L: release(error?)
45
47
  * L-->>C: Return result/error
46
48
  */
47
- export declare class Transaction {
49
+ export declare class Transaction<R> extends LoggedClass {
50
+ static debug: boolean;
51
+ static globalTimeout: number;
52
+ private static readonly metadataCache;
53
+ private static log;
54
+ get log(): any;
48
55
  readonly id: number;
49
- protected action?: () => any;
56
+ protected action?: () => Promise<R>;
50
57
  readonly method?: string;
51
58
  readonly source?: string;
52
- readonly log: string[];
59
+ readonly logs: string[];
53
60
  private readonly metadata?;
61
+ private readonly completion;
62
+ private resolveCompletion?;
63
+ private rejectCompletion?;
64
+ private initialFireDispatched;
65
+ private released;
54
66
  private static lock;
55
- constructor(source: string, method?: string, action?: () => any, metadata?: any[]);
67
+ private static readonly contexts;
68
+ constructor(source: string, method?: string, action?: () => Promise<R>, metadata?: any[]);
56
69
  /**
57
70
  * @description Queues a transaction for execution
58
71
  * @summary Pushes a transaction to the queue and waits for its resolution. Creates a new transaction with the provided issuer and callback method, then submits it to the transaction lock.
59
72
  * @param {any} issuer - Any class instance that will be used as 'this' when calling the callbackMethod
60
- * @param {Function} callbackMethod - Callback function containing the transaction logic, will be called with the issuer as 'this'
73
+ * @param {Function} method - function containing the transaction logic, will be called with the issuer as 'this'
61
74
  * @param {any[]} args - Arguments to pass to the method. Last one must be the callback function
62
75
  * @return {void}
63
76
  */
64
- static push(issuer: any, callbackMethod: (...argzz: (any | Callback)[]) => void, ...args: (any | Callback)[]): void;
77
+ static push<R>(issuer: any, method: (...argzz: any[]) => Promise<R>, ...args: any[]): Promise<R>;
78
+ static run<R, C = unknown>(runnable: TransactionRunnable<R, C>, metadata?: any[]): Promise<R>;
79
+ static run<R, C = unknown>(context: C, runnable: TransactionRunnable<R, C>, metadata?: any[]): Promise<R>;
65
80
  /**
66
81
  * @description Configures the transaction lock implementation
67
82
  * @summary Sets the lock implementation to be used for transaction management, allowing customization of the transaction behavior
@@ -81,7 +96,7 @@ export declare class Transaction {
81
96
  * @param {Transaction} transaction - The transaction to submit for processing
82
97
  * @return {void}
83
98
  */
84
- static submit(transaction: Transaction): void;
99
+ static submit<R>(transaction: Transaction<R>): Promise<R>;
85
100
  /**
86
101
  * @description Releases the transaction lock
87
102
  * @summary Releases the current transaction lock, optionally with an error, allowing the next transaction to proceed
@@ -89,19 +104,27 @@ export declare class Transaction {
89
104
  * @return {Promise<void>} A promise that resolves when the lock has been released
90
105
  */
91
106
  static release(err?: Error): Promise<void>;
107
+ /**
108
+ * @description Releases the transaction instance once
109
+ * @summary Ensures the underlying lock is released at most a single time for the transaction
110
+ * @param {Error} [err] - Optional error to propagate to the lock implementation
111
+ * @return {Promise<void>} Resolves once the lock release call finishes or immediately when already released
112
+ */
113
+ release(err?: Error): Promise<void>;
92
114
  /**
93
115
  * @description Retrieves transaction metadata
94
116
  * @summary Returns a copy of the metadata associated with this transaction, ensuring the original metadata remains unmodified
95
117
  * @return {any[] | undefined} A copy of the transaction metadata or undefined if no metadata exists
96
118
  */
97
119
  getMetadata(): any[] | undefined;
120
+ private static getTransactionalMetadata;
98
121
  /**
99
122
  * @description Links a new transaction to the current one
100
123
  * @summary Binds a new transaction operation to the current transaction, transferring logs and binding methods to maintain transaction context
101
124
  * @param {Transaction} nextTransaction - The new transaction to bind to the current one
102
125
  * @return {void}
103
126
  */
104
- bindTransaction(nextTransaction: Transaction): void;
127
+ bindTransaction(nextTransaction: Transaction<any>): void;
105
128
  /**
106
129
  * @description Binds an object to the current transaction context
107
130
  * @summary Binds a transactional decorated object to the transaction by ensuring all transactional methods automatically receive the current transaction as their first argument
@@ -109,12 +132,19 @@ export declare class Transaction {
109
132
  * @return {any} The bound object with transaction-aware method wrappers
110
133
  */
111
134
  bindToTransaction(obj: any): any;
135
+ /**
136
+ * @description Applies the global timeout to the provided Promise, if configured
137
+ * @param {Promise<R>} execution - Transaction execution promise
138
+ * @return {Promise<R>} Promise that respects the configured global timeout
139
+ * @private
140
+ */
141
+ private applyGlobalTimeout;
112
142
  /**
113
143
  * @description Executes the transaction action
114
144
  * @summary Fires the transaction by executing its associated action function, throwing an error if no action is defined
115
145
  * @return {any} The result of the transaction action
116
146
  */
117
- fire(): any;
147
+ fire(): Promise<R>;
118
148
  /**
119
149
  * @description Provides a string representation of the transaction
120
150
  * @summary Overrides the default toString method to provide a formatted string representation of the transaction, optionally including the transaction ID and log
@@ -123,12 +153,8 @@ export declare class Transaction {
123
153
  * @return {string} A string representation of the transaction
124
154
  */
125
155
  toString(withId?: boolean, withLog?: boolean): string;
126
- /**
127
- * @description Generates a reflection metadata key for transactions
128
- * @summary Creates a prefixed reflection key for transaction-related metadata, ensuring proper namespacing
129
- * @param {string} key - The base key to prefix with the transaction reflection namespace
130
- * @return {string} The complete reflection key for transaction metadata
131
- * @function key
132
- */
133
- static key(key: string): string;
156
+ static contextTransaction(context: any): Transaction<any> | undefined;
157
+ wait(): Promise<R>;
158
+ private static describeTarget;
134
159
  }
160
+ export {};