@decaf-ts/transactional-decorators 0.1.2 → 0.1.3

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 (44) hide show
  1. package/LICENSE.md +21 -157
  2. package/dist/transactional-decorators.cjs +166 -67
  3. package/dist/transactional-decorators.esm.cjs +166 -67
  4. package/lib/Transaction.cjs +87 -39
  5. package/lib/Transaction.d.ts +86 -38
  6. package/lib/constants.cjs +14 -1
  7. package/lib/constants.d.ts +13 -0
  8. package/lib/decorators.cjs +35 -11
  9. package/lib/decorators.d.ts +34 -10
  10. package/lib/esm/Transaction.d.ts +86 -38
  11. package/lib/esm/Transaction.js +90 -42
  12. package/lib/esm/constants.d.ts +13 -0
  13. package/lib/esm/constants.js +14 -1
  14. package/lib/esm/decorators.d.ts +34 -10
  15. package/lib/esm/decorators.js +37 -13
  16. package/lib/esm/index.d.ts +7 -13
  17. package/lib/esm/index.js +14 -20
  18. package/lib/esm/interfaces/TransactionLock.d.ts +13 -11
  19. package/lib/esm/interfaces/TransactionLock.js +1 -1
  20. package/lib/esm/interfaces/index.d.ts +5 -0
  21. package/lib/esm/interfaces/index.js +7 -2
  22. package/lib/esm/locks/Lock.d.ts +13 -5
  23. package/lib/esm/locks/Lock.js +14 -6
  24. package/lib/esm/locks/SyncronousLock.d.ts +3 -4
  25. package/lib/esm/locks/SyncronousLock.js +14 -2
  26. package/lib/esm/locks/index.d.ts +5 -0
  27. package/lib/esm/locks/index.js +8 -3
  28. package/lib/esm/types.d.ts +13 -3
  29. package/lib/esm/types.js +1 -1
  30. package/lib/index.cjs +8 -14
  31. package/lib/index.d.ts +7 -13
  32. package/lib/interfaces/TransactionLock.cjs +1 -1
  33. package/lib/interfaces/TransactionLock.d.ts +13 -11
  34. package/lib/interfaces/index.cjs +6 -1
  35. package/lib/interfaces/index.d.ts +5 -0
  36. package/lib/locks/Lock.cjs +14 -6
  37. package/lib/locks/Lock.d.ts +13 -5
  38. package/lib/locks/SyncronousLock.cjs +13 -1
  39. package/lib/locks/SyncronousLock.d.ts +3 -4
  40. package/lib/locks/index.cjs +6 -1
  41. package/lib/locks/index.d.ts +5 -0
  42. package/lib/types.cjs +1 -1
  43. package/lib/types.d.ts +13 -3
  44. package/package.json +2 -2
@@ -1,26 +1,28 @@
1
1
  import { Transaction } from "../Transaction";
2
2
  /**
3
- * @summary Transaction lock interface
3
+ * @description Interface for transaction lock implementations
4
+ * @summary Defines the contract for transaction lock implementations that manage transaction execution order and concurrency
4
5
  * @interface TransactionLock
5
- *
6
- * @category Transactions
6
+ * @memberOf module:transactions
7
7
  */
8
8
  export interface TransactionLock {
9
9
  /**
10
- * @summary stores the current transactions
11
- * @property currentTransaction
10
+ * @description Current active transaction reference
11
+ * @summary Stores a reference to the currently executing transaction, allowing access to the active transaction context
12
12
  */
13
13
  currentTransaction?: Transaction;
14
14
  /**
15
- * @summary Submits a transaction to be processed
16
- * @param {Transaction} transaction
17
- * @method
15
+ * @description Submits a transaction for processing
16
+ * @summary Adds a transaction to the processing queue and handles its execution according to the lock's concurrency rules
17
+ * @param {Transaction} transaction - The transaction to be processed
18
+ * @return {void}
18
19
  */
19
20
  submit(transaction: Transaction): void;
20
21
  /**
21
- * @summary Releases The lock after the conclusion of a transaction
22
- * @param {Err} [err] the error (if any) that caused the release
23
- * @method
22
+ * @description Releases the transaction lock
23
+ * @summary Releases the lock after the conclusion of a transaction, allowing the next transaction to proceed, and handles any errors that occurred
24
+ * @param {Error} [err] - The error (if any) that caused the transaction to release the lock
25
+ * @return {Promise<void>} A promise that resolves when the lock has been released
24
26
  */
25
27
  release(err?: Error): Promise<void>;
26
28
  }
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
+ /**
3
+ * @description Transaction interfaces module
4
+ * @summary Contains interface definitions for the transaction system, providing contracts for transaction-related components
5
+ * @module transactions/interfaces
6
+ */
2
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
8
  if (k2 === undefined) k2 = k;
4
9
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -15,4 +20,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
20
  };
16
21
  Object.defineProperty(exports, "__esModule", { value: true });
17
22
  __exportStar(require("./TransactionLock.cjs"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vVHJhbnNhY3Rpb25Mb2NrXCI7XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHdEQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIFRyYW5zYWN0aW9uIGludGVyZmFjZXMgbW9kdWxlXG4gKiBAc3VtbWFyeSBDb250YWlucyBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgZm9yIHRoZSB0cmFuc2FjdGlvbiBzeXN0ZW0sIHByb3ZpZGluZyBjb250cmFjdHMgZm9yIHRyYW5zYWN0aW9uLXJlbGF0ZWQgY29tcG9uZW50c1xuICogQG1vZHVsZSB0cmFuc2FjdGlvbnMvaW50ZXJmYWNlc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL1RyYW5zYWN0aW9uTG9ja1wiO1xuIl19
@@ -1 +1,6 @@
1
+ /**
2
+ * @description Transaction interfaces module
3
+ * @summary Contains interface definitions for the transaction system, providing contracts for transaction-related components
4
+ * @module transactions/interfaces
5
+ */
1
6
  export * from "./TransactionLock";
@@ -2,10 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Lock = void 0;
4
4
  /**
5
- * @summary Simple Promise based Lock class
6
- *
5
+ * @description Base lock implementation for concurrency control
6
+ * @summary Provides a basic lock mechanism for controlling access to shared resources, with support for queuing and executing functions when the lock is available
7
7
  * @class Lock
8
- * @category Transactions
8
+ * @example
9
+ * // Using the Lock class to execute a function with exclusive access
10
+ * const lock = new Lock();
11
+ * const result = await lock.execute(async () => {
12
+ * // This code will run with exclusive access
13
+ * return await performCriticalOperation();
14
+ * });
9
15
  */
10
16
  class Lock {
11
17
  constructor() {
@@ -13,8 +19,10 @@ class Lock {
13
19
  this.locked = false;
14
20
  }
15
21
  /**
16
- * @summary executes when lock is available
17
- * @param {Function} func
22
+ * @description Executes a function with exclusive lock access
23
+ * @summary Acquires the lock, executes the provided function, and releases the lock afterward, ensuring proper cleanup even if the function throws an error
24
+ * @param {Function} func - The function to execute when the lock is acquired
25
+ * @return {Promise<any>} A promise that resolves with the result of the executed function
18
26
  */
19
27
  async execute(func) {
20
28
  await this.acquire();
@@ -63,4 +71,4 @@ class Lock {
63
71
  }
64
72
  }
65
73
  exports.Lock = Lock;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2Nrcy9Mb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7OztHQUtHO0FBQ0gsTUFBYSxJQUFJO0lBQWpCO1FBQ1UsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFDM0IsV0FBTSxHQUFHLEtBQUssQ0FBQztJQW1EekIsQ0FBQztJQWpEQzs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQWU7UUFDM0IsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLDREQUE0RDtRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLElBQUksR0FBNkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFDRSxPQUFRLFVBQXlDLENBQUMsTUFBTSxLQUFLLFdBQVc7Z0JBRXhFLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCOztnQkFDckQsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyREQsb0JBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9ja0NhbGxhYmxlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgU2ltcGxlIFByb21pc2UgYmFzZWQgTG9jayBjbGFzc1xuICpcbiAqIEBjbGFzcyBMb2NrXG4gKiBAY2F0ZWdvcnkgVHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NrIHtcbiAgcHJpdmF0ZSBxdWV1ZTogTG9ja0NhbGxhYmxlW10gPSBbXTtcbiAgcHJpdmF0ZSBsb2NrZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQHN1bW1hcnkgZXhlY3V0ZXMgd2hlbiBsb2NrIGlzIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG4gICAqL1xuICBhc3luYyBleGVjdXRlKGZ1bmM6ICgpID0+IGFueSkge1xuICAgIGF3YWl0IHRoaXMuYWNxdWlyZSgpO1xuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZ1bmMoKSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLnJlbGVhc2UoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHRoaXMucmVsZWFzZSgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgd2FpdHMgdG8gYWNxdWlyZSB0aGUgbG9ja1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lzc3Vlcl1cbiAgICovXG4gIGFzeW5jIGFjcXVpcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYubG9ja2VkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNlbGYucXVldWUucHVzaChyZXNvbHZlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYubG9ja2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVsZWFzZXMgdGhlIGxvY2tcbiAgICovXG4gIHJlbGVhc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgbmV4dDogTG9ja0NhbGxhYmxlIHwgdW5kZWZpbmVkID0gc2VsZi5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIHsgd2luZG93OiBhbnkgfSkud2luZG93ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApXG4gICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5uZXh0VGljayhuZXh0KTsgLy8gaWYgeW91IGFyZSBvbiBub2RlXG4gICAgICBlbHNlIHNldFRpbWVvdXQobmV4dCwgMCk7IC8vIGlmIHlvdSBhcmUgaW4gdGhlIGJyb3dzZXJcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5sb2NrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2Nrcy9Mb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxJQUFJO0lBQWpCO1FBQ1UsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFDM0IsV0FBTSxHQUFHLEtBQUssQ0FBQztJQXFEekIsQ0FBQztJQW5EQzs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBZTtRQUMzQixNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixJQUFJLE1BQVcsQ0FBQztRQUNoQixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCw0REFBNEQ7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxHQUE2QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzFELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUNFLE9BQVEsVUFBeUMsQ0FBQyxNQUFNLEtBQUssV0FBVztnQkFFeEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7O2dCQUNyRCxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZERCxvQkF1REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NrQ2FsbGFibGUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBsb2NrIGltcGxlbWVudGF0aW9uIGZvciBjb25jdXJyZW5jeSBjb250cm9sXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIGJhc2ljIGxvY2sgbWVjaGFuaXNtIGZvciBjb250cm9sbGluZyBhY2Nlc3MgdG8gc2hhcmVkIHJlc291cmNlcywgd2l0aCBzdXBwb3J0IGZvciBxdWV1aW5nIGFuZCBleGVjdXRpbmcgZnVuY3Rpb25zIHdoZW4gdGhlIGxvY2sgaXMgYXZhaWxhYmxlXG4gKiBAY2xhc3MgTG9ja1xuICogQGV4YW1wbGVcbiAqIC8vIFVzaW5nIHRoZSBMb2NrIGNsYXNzIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiB3aXRoIGV4Y2x1c2l2ZSBhY2Nlc3NcbiAqIGNvbnN0IGxvY2sgPSBuZXcgTG9jaygpO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgbG9jay5leGVjdXRlKGFzeW5jICgpID0+IHtcbiAqICAgLy8gVGhpcyBjb2RlIHdpbGwgcnVuIHdpdGggZXhjbHVzaXZlIGFjY2Vzc1xuICogICByZXR1cm4gYXdhaXQgcGVyZm9ybUNyaXRpY2FsT3BlcmF0aW9uKCk7XG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIExvY2sge1xuICBwcml2YXRlIHF1ZXVlOiBMb2NrQ2FsbGFibGVbXSA9IFtdO1xuICBwcml2YXRlIGxvY2tlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBmdW5jdGlvbiB3aXRoIGV4Y2x1c2l2ZSBsb2NrIGFjY2Vzc1xuICAgKiBAc3VtbWFyeSBBY3F1aXJlcyB0aGUgbG9jaywgZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uLCBhbmQgcmVsZWFzZXMgdGhlIGxvY2sgYWZ0ZXJ3YXJkLCBlbnN1cmluZyBwcm9wZXIgY2xlYW51cCBldmVuIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gZXJyb3JcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGxvY2sgaXMgYWNxdWlyZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4ZWN1dGVkIGZ1bmN0aW9uXG4gICAqL1xuICBhc3luYyBleGVjdXRlKGZ1bmM6ICgpID0+IGFueSkge1xuICAgIGF3YWl0IHRoaXMuYWNxdWlyZSgpO1xuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZ1bmMoKSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLnJlbGVhc2UoKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHRoaXMucmVsZWFzZSgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgd2FpdHMgdG8gYWNxdWlyZSB0aGUgbG9ja1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lzc3Vlcl1cbiAgICovXG4gIGFzeW5jIGFjcXVpcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHNlbGYubG9ja2VkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNlbGYucXVldWUucHVzaChyZXNvbHZlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYubG9ja2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVsZWFzZXMgdGhlIGxvY2tcbiAgICovXG4gIHJlbGVhc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgbmV4dDogTG9ja0NhbGxhYmxlIHwgdW5kZWZpbmVkID0gc2VsZi5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIHsgd2luZG93OiBhbnkgfSkud2luZG93ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICApXG4gICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5uZXh0VGljayhuZXh0KTsgLy8gaWYgeW91IGFyZSBvbiBub2RlXG4gICAgICBlbHNlIHNldFRpbWVvdXQobmV4dCwgMCk7IC8vIGlmIHlvdSBhcmUgaW4gdGhlIGJyb3dzZXJcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5sb2NrZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,15 +1,23 @@
1
1
  /**
2
- * @summary Simple Promise based Lock class
3
- *
2
+ * @description Base lock implementation for concurrency control
3
+ * @summary Provides a basic lock mechanism for controlling access to shared resources, with support for queuing and executing functions when the lock is available
4
4
  * @class Lock
5
- * @category Transactions
5
+ * @example
6
+ * // Using the Lock class to execute a function with exclusive access
7
+ * const lock = new Lock();
8
+ * const result = await lock.execute(async () => {
9
+ * // This code will run with exclusive access
10
+ * return await performCriticalOperation();
11
+ * });
6
12
  */
7
13
  export declare class Lock {
8
14
  private queue;
9
15
  private locked;
10
16
  /**
11
- * @summary executes when lock is available
12
- * @param {Function} func
17
+ * @description Executes a function with exclusive lock access
18
+ * @summary Acquires the lock, executes the provided function, and releases the lock afterward, ensuring proper cleanup even if the function throws an error
19
+ * @param {Function} func - The function to execute when the lock is acquired
20
+ * @return {Promise<any>} A promise that resolves with the result of the executed function
13
21
  */
14
22
  execute(func: () => any): Promise<any>;
15
23
  /**
@@ -2,6 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SyncronousLock = void 0;
4
4
  const Lock_1 = require("./Lock.cjs");
5
+ /**
6
+ * @summary Simple Synchronous Lock implementation
7
+ * @description for transaction management
8
+ * adapted from {@link https://www.talkinghightech.com/en/creating-a-js-lock-for-a-resource/}
9
+ *
10
+ * @param {number} [counter] the number of simultaneous transactions allowed. defaults to 1
11
+ * @param {Function} [onBegin] to be called at the start of the transaction
12
+ * @param {Function} [onEnd] to be called at the conclusion of the transaction
13
+ *
14
+ * @class SyncronousLock
15
+ * @implements TransactionLock
16
+ */
5
17
  class SyncronousLock {
6
18
  constructor(counter = 1, onBegin, onEnd) {
7
19
  this.currentTransaction = undefined;
@@ -117,4 +129,4 @@ class SyncronousLock {
117
129
  }
118
130
  }
119
131
  exports.SyncronousLock = SyncronousLock;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3luY3Jvbm91c0xvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9ja3MvU3luY3Jvbm91c0xvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEscUNBQThCO0FBRTlCLE1BQWEsY0FBYztJQVN6QixZQUNFLFVBQWtCLENBQUMsRUFDbkIsT0FBNkIsRUFDN0IsS0FBc0M7UUFUeEMsdUJBQWtCLEdBQWlCLFNBQVMsQ0FBQztRQUk1QixTQUFJLEdBQUcsSUFBSSxXQUFJLEVBQUUsQ0FBQztRQU9qQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsV0FBd0I7UUFDN0IsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDNUIsSUFDRSxJQUFJLENBQUMsa0JBQWtCO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLEVBQzdDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFX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QUFDO29CQUNaLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztnQkFFRixJQUFJLElBQUksQ0FBQyxLQUFLO29CQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs7b0JBQzNELGlCQUFpQixFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXBJRCx3Q0FvSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzdW1tYXJ5IFNpbXBsZSBTeW5jaHJvbm91cyBMb2NrIGltcGxlbWVudGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gZm9yIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnRcbiAqIGFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cudGFsa2luZ2hpZ2h0ZWNoLmNvbS9lbi9jcmVhdGluZy1hLWpzLWxvY2stZm9yLWEtcmVzb3VyY2UvfVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRlcl0gdGhlIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdHJhbnNhY3Rpb25zIGFsbG93ZWQuIGRlZmF1bHRzIHRvIDFcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkJlZ2luXSB0byBiZSBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uRW5kXSB0byBiZSBjYWxsZWQgYXQgdGhlIGNvbmNsdXNpb24gb2YgdGhlIHRyYW5zYWN0aW9uXG4gKlxuICogQGNsYXNzIFN5bmNyb25vdXNMb2NrXG4gKiBAaW1wbGVtZW50cyBUcmFuc2FjdGlvbkxvY2tcbiAqXG4gKiBAY2F0ZWdvcnkgVHJhbnNhY3Rpb25zXG4gKi8gaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tIFwiLi4vVHJhbnNhY3Rpb25cIjtcbmltcG9ydCB7IFRyYW5zYWN0aW9uTG9jayB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1RyYW5zYWN0aW9uTG9ja1wiO1xuaW1wb3J0IHsgTG9jayB9IGZyb20gXCIuL0xvY2tcIjtcblxuZXhwb3J0IGNsYXNzIFN5bmNyb25vdXNMb2NrIGltcGxlbWVudHMgVHJhbnNhY3Rpb25Mb2NrIHtcbiAgcHJpdmF0ZSBjb3VudGVyOiBudW1iZXI7XG4gIHByaXZhdGUgcGVuZGluZ1RyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXTtcbiAgY3VycmVudFRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24gPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25CZWdpbj86ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgb25FbmQ/OiAoZXJyPzogRXJyb3IpID0+IFByb21pc2U8dm9pZD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NrID0gbmV3IExvY2soKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb3VudGVyOiBudW1iZXIgPSAxLFxuICAgIG9uQmVnaW4/OiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuICAgIG9uRW5kPzogKGVycj86IEVycm9yKSA9PiBQcm9taXNlPHZvaWQ+LFxuICApIHtcbiAgICB0aGlzLmNvdW50ZXIgPSBjb3VudGVyO1xuICAgIHRoaXMucGVuZGluZ1RyYW5zYWN0aW9ucyA9IFtdO1xuICAgIHRoaXMub25CZWdpbiA9IG9uQmVnaW47XG4gICAgdGhpcy5vbkVuZCA9IG9uRW5kO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byBiZSBwcm9jZXNzZWRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICovXG4gIHN1Ym1pdCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLmxvY2suYWNxdWlyZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBzZWxmLmN1cnJlbnRUcmFuc2FjdGlvbiAmJlxuICAgICAgICBzZWxmLmN1cnJlbnRUcmFuc2FjdGlvbi5pZCA9PT0gdHJhbnNhY3Rpb24uaWRcbiAgICAgICkge1xuICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpO1xuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb24uZmlyZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZi5jb3VudGVyID4gMCkge1xuICAgICAgICBzZWxmLmNvdW50ZXItLTtcbiAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgcmV0dXJuIHNlbGYuZmlyZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYucGVuZGluZ1RyYW5zYWN0aW9ucy5wdXNoKHRyYW5zYWN0aW9uKTtcbiAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBFeGVjdXRlcyBhIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGZpcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLmxvY2suYWNxdWlyZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG4gICAgICBpZiAoc2VsZi5vbkJlZ2luKVxuICAgICAgICBzZWxmLm9uQmVnaW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBhbGwuY2FsbChcbiAgICAgICAgICAvLyAgIHNlbGYsXG4gICAgICAgICAgLy8gICBgRmlyaW5nIHRyYW5zYWN0aW9uIHswfS4gezF9IHJlbWFpbmluZy4uLmAsXG4gICAgICAgICAgLy8gICB0cmFuc2FjdGlvbi5pZCxcbiAgICAgICAgICAvLyAgIHRoaXMucGVuZGluZ1RyYW5zYWN0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgICB0cmFuc2FjdGlvbi5maXJlKCk7XG4gICAgICAgIH0pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIGFsbC5jYWxsKFxuICAgICAgICAvLyAgIHNlbGYsXG4gICAgICAgIC8vICAgYEZpcmluZyB0cmFuc2FjdGlvbiB7MH0uIHsxfSByZW1haW5pbmcuLi5gLFxuICAgICAgICAvLyAgIHRyYW5zYWN0aW9uLmlkLFxuICAgICAgICAvLyAgIHRoaXMucGVuZGluZ1RyYW5zYWN0aW9ucy5sZW5ndGgsXG4gICAgICAgIC8vICk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmZpcmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQHN1bW1hcnkgUmVsZWFzZXMgVGhlIGxvY2sgYWZ0ZXIgdGhlIGNvbmNsdXNpb24gb2YgYSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYXN5bmMgcmVsZWFzZShlcnI/OiBFcnJvcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFzZWxmLmN1cnJlbnRUcmFuc2FjdGlvbilcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlRyeWluZyB0byByZWxlYXNlIGFuIHVuZXhpc3RpbmcgdHJhbnNhY3Rpb24uIHNob3VsZCBuZXZlciBoYXBwZW4uLi5cIixcbiAgICAgICAgICApO1xuICAgICAgICAvLyBkZWJ1Zy5jYWxsKFxuICAgICAgICAvLyAgIHNlbGYsXG4gICAgICAgIC8vICAgXCJSZWxlYXNpbmcgdHJhbnNhY3Rpb246IHswfVwiLFxuICAgICAgICAvLyAgIHNlbGYuY3VycmVudFRyYW5zYWN0aW9uPy50b1N0cmluZyh0cnVlLCB0cnVlKSxcbiAgICAgICAgLy8gKTtcbiAgICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJDb25jbHVzaW9uQ0IgPSAoKSA9PiB7XG4gICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxmLnBlbmRpbmdUcmFuc2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICAgICAgc2VsZi5wZW5kaW5nVHJhbnNhY3Rpb25zLnNoaWZ0KCkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgICAgICAgICAgY29uc3QgY2IgPSAoKSA9PiBzZWxmLmZpcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7XG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIGFsbChcbiAgICAgICAgICAgICAgLy8gICBgUmVsZWFzaW5nIFRyYW5zYWN0aW9uIExvY2sgb24gdHJhbnNhY3Rpb24gezB9YCxcbiAgICAgICAgICAgICAgLy8gICB0cmFuc2FjdGlvbi5pZCxcbiAgICAgICAgICAgICAgLy8gKTtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyB3aW5kb3c6IGFueSB9KS53aW5kb3cgPT09XG4gICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLm5leHRUaWNrKGNiKTsgLy8gaWYgeW91IGFyZSBvbiBub2RlXG4gICAgICAgICAgICAgIGVsc2Ugc2V0VGltZW91dChjYiwgMCk7IC8vIGlmIHlvdSBhcmUgaW4gdGhlIGJyb3dzZXJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuY291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc2VsZi5vbkVuZCkgc2VsZi5vbkVuZChlcnIpLnRoZW4oKCkgPT4gYWZ0ZXJDb25jbHVzaW9uQ0IoKSk7XG4gICAgICAgIGVsc2UgYWZ0ZXJDb25jbHVzaW9uQ0IoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3luY3Jvbm91c0xvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9ja3MvU3luY3Jvbm91c0xvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscUNBQThCO0FBRTlCOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxjQUFjO0lBU3pCLFlBQ0UsVUFBa0IsQ0FBQyxFQUNuQixPQUE2QixFQUM3QixLQUFzQztRQVR4Qyx1QkFBa0IsR0FBaUIsU0FBUyxDQUFDO1FBSTVCLFNBQUksR0FBRyxJQUFJLFdBQUksRUFBRSxDQUFDO1FBT2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxXQUF3QjtRQUM3Qiw0REFBNEQ7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUNFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsRUFDN0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxJQUFJ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Qzt3QkFDcEIsT0FBTyxFQUFFLENBQUM7b0JBQ1osQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDOztvQkFDM0QsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcElELHdDQW9JQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSBcIi4uL1RyYW5zYWN0aW9uXCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkxvY2sgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9UcmFuc2FjdGlvbkxvY2tcIjtcbmltcG9ydCB7IExvY2sgfSBmcm9tIFwiLi9Mb2NrXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgU2ltcGxlIFN5bmNocm9ub3VzIExvY2sgaW1wbGVtZW50YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBmb3IgdHJhbnNhY3Rpb24gbWFuYWdlbWVudFxuICogYWRhcHRlZCBmcm9tIHtAbGluayBodHRwczovL3d3dy50YWxraW5naGlnaHRlY2guY29tL2VuL2NyZWF0aW5nLWEtanMtbG9jay1mb3ItYS1yZXNvdXJjZS99XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtjb3VudGVyXSB0aGUgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyB0cmFuc2FjdGlvbnMgYWxsb3dlZC4gZGVmYXVsdHMgdG8gMVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQmVnaW5dIHRvIGJlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb25FbmRdIHRvIGJlIGNhbGxlZCBhdCB0aGUgY29uY2x1c2lvbiBvZiB0aGUgdHJhbnNhY3Rpb25cbiAqXG4gKiBAY2xhc3MgU3luY3Jvbm91c0xvY2tcbiAqIEBpbXBsZW1lbnRzIFRyYW5zYWN0aW9uTG9ja1xuICovXG5leHBvcnQgY2xhc3MgU3luY3Jvbm91c0xvY2sgaW1wbGVtZW50cyBUcmFuc2FjdGlvbkxvY2sge1xuICBwcml2YXRlIGNvdW50ZXI6IG51bWJlcjtcbiAgcHJpdmF0ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdO1xuICBjdXJyZW50VHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkJlZ2luPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkVuZD86IChlcnI/OiBFcnJvcikgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2sgPSBuZXcgTG9jaygpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvdW50ZXI6IG51bWJlciA9IDEsXG4gICAgb25CZWdpbj86ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgb25FbmQ/OiAoZXJyPzogRXJyb3IpID0+IFByb21pc2U8dm9pZD5cbiAgKSB7XG4gICAgdGhpcy5jb3VudGVyID0gY291bnRlcjtcbiAgICB0aGlzLnBlbmRpbmdUcmFuc2FjdGlvbnMgPSBbXTtcbiAgICB0aGlzLm9uQmVnaW4gPSBvbkJlZ2luO1xuICAgIHRoaXMub25FbmQgPSBvbkVuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gYmUgcHJvY2Vzc2VkXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqL1xuICBzdWJtaXQodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24gJiZcbiAgICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24uaWQgPT09IHRyYW5zYWN0aW9uLmlkXG4gICAgICApIHtcbiAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLmZpcmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuY291bnRlciA+IDApIHtcbiAgICAgICAgc2VsZi5jb3VudGVyLS07XG4gICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG4gICAgICAgIHJldHVybiBzZWxmLmZpcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLnBlbmRpbmdUcmFuc2FjdGlvbnMucHVzaCh0cmFuc2FjdGlvbik7XG4gICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBmaXJlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHNlbGYuY3VycmVudFRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG4gICAgICBzZWxmLmxvY2sucmVsZWFzZSgpO1xuICAgICAgaWYgKHNlbGYub25CZWdpbilcbiAgICAgICAgc2VsZi5vbkJlZ2luKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gYWxsLmNhbGwoXG4gICAgICAgICAgLy8gICBzZWxmLFxuICAgICAgICAgIC8vICAgYEZpcmluZyB0cmFuc2FjdGlvbiB7MH0uIHsxfSByZW1haW5pbmcuLi5gLFxuICAgICAgICAgIC8vICAgdHJhbnNhY3Rpb24uaWQsXG4gICAgICAgICAgLy8gICB0aGlzLnBlbmRpbmdUcmFuc2FjdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIC8vICk7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZmlyZSgpO1xuICAgICAgICB9KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBhbGwuY2FsbChcbiAgICAgICAgLy8gICBzZWxmLFxuICAgICAgICAvLyAgIGBGaXJpbmcgdHJhbnNhY3Rpb24gezB9LiB7MX0gcmVtYWluaW5nLi4uYCxcbiAgICAgICAgLy8gICB0cmFuc2FjdGlvbi5pZCxcbiAgICAgICAgLy8gICB0aGlzLnBlbmRpbmdUcmFuc2FjdGlvbnMubGVuZ3RoLFxuICAgICAgICAvLyApO1xuICAgICAgICB0cmFuc2FjdGlvbi5maXJlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlbGVhc2VzIFRoZSBsb2NrIGFmdGVyIHRoZSBjb25jbHVzaW9uIG9mIGEgdHJhbnNhY3Rpb25cbiAgICovXG4gIGFzeW5jIHJlbGVhc2UoZXJyPzogRXJyb3IpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICghc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24pXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJUcnlpbmcgdG8gcmVsZWFzZSBhbiB1bmV4aXN0aW5nIHRyYW5zYWN0aW9uLiBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uXCJcbiAgICAgICAgICApO1xuICAgICAgICAvLyBkZWJ1Zy5jYWxsKFxuICAgICAgICAvLyAgIHNlbGYsXG4gICAgICAgIC8vICAgXCJSZWxlYXNpbmcgdHJhbnNhY3Rpb246IHswfVwiLFxuICAgICAgICAvLyAgIHNlbGYuY3VycmVudFRyYW5zYWN0aW9uPy50b1N0cmluZyh0cnVlLCB0cnVlKSxcbiAgICAgICAgLy8gKTtcbiAgICAgICAgc2VsZi5jdXJyZW50VHJhbnNhY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJDb25jbHVzaW9uQ0IgPSAoKSA9PiB7XG4gICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxmLnBlbmRpbmdUcmFuc2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICAgICAgc2VsZi5wZW5kaW5nVHJhbnNhY3Rpb25zLnNoaWZ0KCkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgICAgICAgICAgY29uc3QgY2IgPSAoKSA9PiBzZWxmLmZpcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbik7XG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIGFsbChcbiAgICAgICAgICAgICAgLy8gICBgUmVsZWFzaW5nIFRyYW5zYWN0aW9uIExvY2sgb24gdHJhbnNhY3Rpb24gezB9YCxcbiAgICAgICAgICAgICAgLy8gICB0cmFuc2FjdGlvbi5pZCxcbiAgICAgICAgICAgICAgLy8gKTtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHlwZW9mIChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyB3aW5kb3c6IGFueSB9KS53aW5kb3cgPT09XG4gICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLm5leHRUaWNrKGNiKTsgLy8gaWYgeW91IGFyZSBvbiBub2RlXG4gICAgICAgICAgICAgIGVsc2Ugc2V0VGltZW91dChjYiwgMCk7IC8vIGlmIHlvdSBhcmUgaW4gdGhlIGJyb3dzZXJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGYuY291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc2VsZi5vbkVuZCkgc2VsZi5vbkVuZChlcnIpLnRoZW4oKCkgPT4gYWZ0ZXJDb25jbHVzaW9uQ0IoKSk7XG4gICAgICAgIGVsc2UgYWZ0ZXJDb25jbHVzaW9uQ0IoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,3 +1,5 @@
1
+ import { Transaction } from "../Transaction";
2
+ import { TransactionLock } from "../interfaces/TransactionLock";
1
3
  /**
2
4
  * @summary Simple Synchronous Lock implementation
3
5
  * @description for transaction management
@@ -9,10 +11,7 @@
9
11
  *
10
12
  * @class SyncronousLock
11
13
  * @implements TransactionLock
12
- *
13
- * @category Transactions
14
- */ import { Transaction } from "../Transaction";
15
- import { TransactionLock } from "../interfaces/TransactionLock";
14
+ */
16
15
  export declare class SyncronousLock implements TransactionLock {
17
16
  private counter;
18
17
  private pendingTransactions;
@@ -1,4 +1,9 @@
1
1
  "use strict";
2
+ /**
3
+ * @description Transaction lock implementations module
4
+ * @summary Contains implementations of the TransactionLock interface, providing different concurrency control strategies for transactions
5
+ * @module transactions/locks
6
+ */
2
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
8
  if (k2 === undefined) k2 = k;
4
9
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -16,4 +21,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
21
  Object.defineProperty(exports, "__esModule", { value: true });
17
22
  __exportStar(require("./Lock.cjs"), exports);
18
23
  __exportStar(require("./SyncronousLock.cjs"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9ja3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUF1QjtBQUN2Qix1REFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9Mb2NrXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TeW5jcm9ub3VzTG9ja1wiO1xuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9ja3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCw2Q0FBdUI7QUFDdkIsdURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gVHJhbnNhY3Rpb24gbG9jayBpbXBsZW1lbnRhdGlvbnMgbW9kdWxlXG4gKiBAc3VtbWFyeSBDb250YWlucyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFRyYW5zYWN0aW9uTG9jayBpbnRlcmZhY2UsIHByb3ZpZGluZyBkaWZmZXJlbnQgY29uY3VycmVuY3kgY29udHJvbCBzdHJhdGVnaWVzIGZvciB0cmFuc2FjdGlvbnNcbiAqIEBtb2R1bGUgdHJhbnNhY3Rpb25zL2xvY2tzXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vTG9ja1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vU3luY3Jvbm91c0xvY2tcIjtcbiJdfQ==
@@ -1,2 +1,7 @@
1
+ /**
2
+ * @description Transaction lock implementations module
3
+ * @summary Contains implementations of the TransactionLock interface, providing different concurrency control strategies for transactions
4
+ * @module transactions/locks
5
+ */
1
6
  export * from "./Lock";
2
7
  export * from "./SyncronousLock";
package/lib/types.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgZGVmaW5lcyBhIGNhbGxhYmxlIGFzIHBlcmNlaXZlZCBieSB0aGUgbG9ja1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9ycy5UcmFuc2FjdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgTG9ja0NhbGxhYmxlID0gKHZhbHVlPzogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBDYWxsYmFjayA9IChlcnI/OiBFcnJvciwgcmVzdWx0PzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEZ1bmN0aW9uIHR5cGUgZm9yIHRyYW5zYWN0aW9uIGxvY2sgY2FsbGJhY2tzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgY2FsbGFibGUgZnVuY3Rpb24gdHlwZSBhcyBwZXJjZWl2ZWQgYnkgdGhlIHRyYW5zYWN0aW9uIGxvY2ssIHVzZWQgZm9yIHJlc29sdmluZyBwcm9taXNlcyBpbiB0aGUgbG9jayBpbXBsZW1lbnRhdGlvblxuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBMb2NrQ2FsbGFibGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCB0eXBlIExvY2tDYWxsYWJsZSA9ICh2YWx1ZT86IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RhbmRhcmQgY2FsbGJhY2sgZnVuY3Rpb24gdHlwZSBmb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBOb2RlLmpzLXN0eWxlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYW4gb3B0aW9uYWwgZXJyb3IgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBhbmQgb3B0aW9uYWwgcmVzdWx0IGFuZCBhZGRpdGlvbmFsIGFyZ3VtZW50c1xuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBDYWxsYmFja1xuICogQHBhcmFtIHtFcnJvcn0gW2Vycl0gLSBPcHRpb25hbCBlcnJvciBvYmplY3QgaWYgdGhlIG9wZXJhdGlvbiBmYWlsZWRcbiAqIEBwYXJhbSB7YW55fSBbcmVzdWx0XSAtIE9wdGlvbmFsIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uIGlmIHN1Y2Nlc3NmdWxcbiAqIEBwYXJhbSB7Li4uYW55fSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgdHlwZSBDYWxsYmFjayA9IChlcnI/OiBFcnJvciwgcmVzdWx0PzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbiJdfQ==
package/lib/types.d.ts CHANGED
@@ -1,7 +1,17 @@
1
1
  /**
2
- * @summary defines a callable as perceived by the lock
3
- *
4
- * @memberOf module:db-decorators.Transactions
2
+ * @description Function type for transaction lock callbacks
3
+ * @summary Defines a callable function type as perceived by the transaction lock, used for resolving promises in the lock implementation
4
+ * @typedef {Function} LockCallable
5
+ * @memberOf module:transactions
5
6
  */
6
7
  export type LockCallable = (value?: void | PromiseLike<void>) => void;
8
+ /**
9
+ * @description Standard callback function type for asynchronous operations
10
+ * @summary Defines a Node.js-style callback function that receives an optional error as the first parameter and optional result and additional arguments
11
+ * @typedef {Function} Callback
12
+ * @param {Error} [err] - Optional error object if the operation failed
13
+ * @param {any} [result] - Optional result of the operation if successful
14
+ * @param {...any} [args] - Additional arguments that may be passed to the callback
15
+ * @memberOf module:transactions
16
+ */
7
17
  export type Callback = (err?: Error, result?: any, ...args: any[]) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/transactional-decorators",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Locking and transactions",
5
5
  "type": "module",
6
6
  "exports": {
@@ -65,7 +65,7 @@
65
65
  "ts"
66
66
  ],
67
67
  "author": "Tiago Venceslau",
68
- "license": "LGPL-3.0-or-later",
68
+ "license": "MIT",
69
69
  "bugs": {
70
70
  "url": "https://github.com/decaf-ts/ts-workspace/issues"
71
71
  },