velocious 1.0.569 → 1.0.570

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.
@@ -46,6 +46,12 @@ export default class VelociousDatabaseOperationConnection {
46
46
  * @returns {Promise<T>} - Callback result.
47
47
  */
48
48
  transaction<T>(callback: () => Promise<T>): Promise<T>;
49
+ /**
50
+ * Registers an operation-owned before-commit guard.
51
+ * @param {() => void | Promise<void>} callback - Guard callback.
52
+ * @returns {Promise<void>} - Resolves after registration.
53
+ */
54
+ beforeCommit(callback: () => void | Promise<void>): Promise<void>;
49
55
  /**
50
56
  * Registers an operation-owned after-commit callback.
51
57
  * @param {() => void | Promise<void>} callback - Callback.
@@ -1 +1 @@
1
- {"version":3,"file":"operation-connection.d.ts","sourceRoot":"","sources":["../../../src/database/operation-connection.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IACE;;;;;;OAMG;IACH,8CAJG;QAAkD,UAAU,EAApD,OAAO,mBAAmB,EAAE,OAAO;QACI,SAAS,EAAhD,OAAO,gBAAgB,EAAE,OAAO;QACnB,KAAK,EAAlB,MAAM;KAChB,EA0BA;IAxBC,yDAAqC;IACrC,6CAA2B;IAC3B,eAAmB;IAwBrB;;;;;OAKG;IACH,WAJW,MAAM,YACN,OAAO,mBAAmB,EAAE,YAAY,GACtC,OAAO,CAAC,OAAO,mBAAmB,EAAE,eAAe,CAAC,CAMhE;IAED;;;;;OAKG;IACH,iBAJW,MAAM,YACN,OAAO,mBAAmB,EAAE,YAAY,2EAOlD;IAED;;;;;OAKG;IACH,kBAJW,MAAM,YACN,OAAO,mBAAmB,EAAE,YAAY,GACtC,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;;;;OAKG;IACH,YAJa,CAAC,YACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMtB;IAED;;;;OAIG;IACH,sBAHW,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,gBAFa,OAAO,CAAC,MAAM,CAAC,CAM3B;CACF"}
1
+ {"version":3,"file":"operation-connection.d.ts","sourceRoot":"","sources":["../../../src/database/operation-connection.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IACE;;;;;;OAMG;IACH,8CAJG;QAAkD,UAAU,EAApD,OAAO,mBAAmB,EAAE,OAAO;QACI,SAAS,EAAhD,OAAO,gBAAgB,EAAE,OAAO;QACnB,KAAK,EAAlB,MAAM;KAChB,EA0BA;IAxBC,yDAAqC;IACrC,6CAA2B;IAC3B,eAAmB;IAwBrB;;;;;OAKG;IACH,WAJW,MAAM,YACN,OAAO,mBAAmB,EAAE,YAAY,GACtC,OAAO,CAAC,OAAO,mBAAmB,EAAE,eAAe,CAAC,CAMhE;IAED;;;;;OAKG;IACH,iBAJW,MAAM,YACN,OAAO,mBAAmB,EAAE,YAAY,2EAOlD;IAED;;;;;OAKG;IACH,kBAJW,MAAM,YACN,OAAO,mBAAmB,EAAE,YAAY,GACtC,OAAO,CAAC,MAAM,CAAC,CAM3B;IAED;;;;;OAKG;IACH,YAJa,CAAC,YACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMtB;IAED;;;;OAIG;IACH,uBAHW,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;;OAIG;IACH,sBAHW,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,gBAFa,OAAO,CAAC,MAAM,CAAC,CAM3B;CACF"}
@@ -72,6 +72,15 @@ export default class VelociousDatabaseOperationConnection {
72
72
  this._operation.assertActive();
73
73
  return /** @type {Promise<T>} */ (this._physicalConnection.transaction(callback, { operationOwner: this._owner }));
74
74
  }
75
+ /**
76
+ * Registers an operation-owned before-commit guard.
77
+ * @param {() => void | Promise<void>} callback - Guard callback.
78
+ * @returns {Promise<void>} - Resolves after registration.
79
+ */
80
+ async beforeCommit(callback) {
81
+ this._operation.assertActive();
82
+ await this._physicalConnection.beforeCommit(callback, { operationOwner: this._owner });
83
+ }
75
84
  /**
76
85
  * Registers an operation-owned after-commit callback.
77
86
  * @param {() => void | Promise<void>} callback - Callback.
@@ -90,4 +99,4 @@ export default class VelociousDatabaseOperationConnection {
90
99
  return await this._physicalConnection.lastInsertID({ operationOwner: this._owner });
91
100
  }
92
101
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLWNvbm5lY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvb3BlcmF0aW9uLWNvbm5lY3Rpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sb0NBQW9DO0lBQ3ZEOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQztRQUN4QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1FBRW5CLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3JCLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO29CQUVyRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO2dCQUNqRSxDQUFDO2dCQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFFekQsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtZQUNuRSxDQUFDO1lBQ0QsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUN2RCxDQUFDO2dCQUVELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUM3RCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUU5QixPQUFPLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBQyxHQUFHLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRTlCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUMsR0FBRyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO0lBQzdGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFOUIsT0FBTyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUMsR0FBRyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO0lBQ3BHLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRTlCLE9BQU8seUJBQXlCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFOUIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUNyRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUU5QixPQUFPLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxFQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBFeHBsaWNpdCBjb25uZWN0aW9uIGZhY2FkZSB0aGF0IHRhZ3Mgb3BlcmF0aW9uLW93bmVkIGFzeW5jaHJvbm91cyB3b3JrIHdoaWxlXG4gKiBmb3J3YXJkaW5nIHRoZSBkcml2ZXIncyBzeW5jaHJvbm91cyBTUUwtYnVpbGRlciBhbmQgY2FwYWJpbGl0eSBBUElzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZU9wZXJhdGlvbkNvbm5lY3Rpb24ge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBDb25uZWN0aW9uIG93bmVyc2hpcC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbm5lY3Rpb24gLSBQaW5uZWQgcGh5c2ljYWwgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL29wZXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLm9wZXJhdGlvbiAtIE93bmluZyBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7c3ltYm9sfSBhcmdzLm93bmVyIC0gT3BhcXVlIGxlYXNlIG93bmVyIHRva2VuLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2Nvbm5lY3Rpb24sIG9wZXJhdGlvbiwgb3duZXJ9KSB7XG4gICAgdGhpcy5fcGh5c2ljYWxDb25uZWN0aW9uID0gY29ubmVjdGlvblxuICAgIHRoaXMuX29wZXJhdGlvbiA9IG9wZXJhdGlvblxuICAgIHRoaXMuX293bmVyID0gb3duZXJcblxuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcilcblxuICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHZhbHVlLmJpbmQodGFyZ2V0KSA6IHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KGNvbm5lY3Rpb24sIHByb3BlcnR5LCByZWNlaXZlcilcblxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB2YWx1ZS5iaW5kKHJlY2VpdmVyKSA6IHZhbHVlXG4gICAgICB9LFxuICAgICAgc2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgcmVjZWl2ZXIpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQoY29ubmVjdGlvbiwgcHJvcGVydHksIHZhbHVlLCBjb25uZWN0aW9uKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIHRhZ2dlZCBTUUwgcXVlcnkgb24gdGhlIHBpbm5lZCBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsIC0gU1FMIHN0cmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeU9wdGlvbnN9IFtvcHRpb25zXSAtIFF1ZXJ5IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLlF1ZXJ5UmVzdWx0VHlwZT59IC0gUXVlcnkgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgcXVlcnkoc3FsLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9vcGVyYXRpb24uYXNzZXJ0QWN0aXZlKClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl9waHlzaWNhbENvbm5lY3Rpb24ucXVlcnkoc3FsLCB7Li4ub3B0aW9ucywgb3BlcmF0aW9uT3duZXI6IHRoaXMuX293bmVyfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW1zIGFuIG9wZXJhdGlvbi1vd25lZCBTUUwgcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWwgLSBTUUwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLlF1ZXJ5T3B0aW9uc30gW29wdGlvbnNdIC0gUXVlcnkgb3B0aW9ucy5cbiAgICogQHlpZWxkcyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IC0gUXVlcnkgcm93cy5cbiAgICovXG4gIGFzeW5jICpxdWVyeVN0cmVhbShzcWwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuX29wZXJhdGlvbi5hc3NlcnRBY3RpdmUoKVxuXG4gICAgeWllbGQqIHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbi5xdWVyeVN0cmVhbShzcWwsIHsuLi5vcHRpb25zLCBvcGVyYXRpb25Pd25lcjogdGhpcy5fb3duZXJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGFuIG9wZXJhdGlvbi1vd25lZCBtdXRhdGlvbiBhbmQgcmV0dXJucyBpdHMgYWZmZWN0ZWQgcm93IGNvdW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsIC0gTXV0YXRpb24gU1FMIHN0cmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeU9wdGlvbnN9IFtvcHRpb25zXSAtIFF1ZXJ5IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IC0gQWZmZWN0ZWQgcm93IGNvdW50LlxuICAgKi9cbiAgYXN5bmMgYWZmZWN0ZWRSb3dzKHNxbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5fb3BlcmF0aW9uLmFzc2VydEFjdGl2ZSgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGh5c2ljYWxDb25uZWN0aW9uLmFmZmVjdGVkUm93cyhzcWwsIHsuLi5vcHRpb25zLCBvcGVyYXRpb25Pd25lcjogdGhpcy5fb3duZXJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYW4gb3BlcmF0aW9uLW93bmVkIHRyYW5zYWN0aW9uIG9yIG5lc3RlZCBzYXZlcG9pbnQuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTxUPn0gY2FsbGJhY2sgLSBUcmFuc2FjdGlvbiBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8VD59IC0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgdHJhbnNhY3Rpb24oY2FsbGJhY2spIHtcbiAgICB0aGlzLl9vcGVyYXRpb24uYXNzZXJ0QWN0aXZlKClcblxuICAgIHJldHVybiAvKiogQHR5cGUge1Byb21pc2U8VD59ICovICh0aGlzLl9waHlzaWNhbENvbm5lY3Rpb24udHJhbnNhY3Rpb24oY2FsbGJhY2ssIHtvcGVyYXRpb25Pd25lcjogdGhpcy5fb3duZXJ9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYW4gb3BlcmF0aW9uLW93bmVkIGFmdGVyLWNvbW1pdCBjYWxsYmFjay5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVnaXN0cmF0aW9uIG9yIGV4ZWN1dGlvbi5cbiAgICovXG4gIGFzeW5jIGFmdGVyQ29tbWl0KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fb3BlcmF0aW9uLmFzc2VydEFjdGl2ZSgpXG5cbiAgICBhd2FpdCB0aGlzLl9waHlzaWNhbENvbm5lY3Rpb24uYWZ0ZXJDb21taXQoY2FsbGJhY2ssIHtvcGVyYXRpb25Pd25lcjogdGhpcy5fb3duZXJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3QgaW5zZXJ0ZWQgaWRlbnRpZmllciB0aHJvdWdoIHRoZSBvcGVyYXRpb24gbGVhc2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG51bWJlcj59IC0gTGFzdCBpbnNlcnRlZCBpZGVudGlmaWVyLlxuICAgKi9cbiAgYXN5bmMgbGFzdEluc2VydElEKCkge1xuICAgIHRoaXMuX29wZXJhdGlvbi5hc3NlcnRBY3RpdmUoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbi5sYXN0SW5zZXJ0SUQoe29wZXJhdGlvbk93bmVyOiB0aGlzLl9vd25lcn0pXG4gIH1cbn1cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLWNvbm5lY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJhc2Uvb3BlcmF0aW9uLWNvbm5lY3Rpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sb0NBQW9DO0lBQ3ZEOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQztRQUN4QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1FBRW5CLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3JCLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO29CQUVyRCxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO2dCQUNqRSxDQUFDO2dCQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFFekQsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtZQUNuRSxD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QyxDQUFDLENBQUE7SUFDbkYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogRXhwbGljaXQgY29ubmVjdGlvbiBmYWNhZGUgdGhhdCB0YWdzIG9wZXJhdGlvbi1vd25lZCBhc3luY2hyb25vdXMgd29yayB3aGlsZVxuICogZm9yd2FyZGluZyB0aGUgZHJpdmVyJ3Mgc3luY2hyb25vdXMgU1FMLWJ1aWxkZXIgYW5kIGNhcGFiaWxpdHkgQVBJcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VPcGVyYXRpb25Db25uZWN0aW9uIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQ29ubmVjdGlvbiBvd25lcnNoaXAuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5jb25uZWN0aW9uIC0gUGlubmVkIHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9vcGVyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5vcGVyYXRpb24gLSBPd25pbmcgb3BlcmF0aW9uLlxuICAgKiBAcGFyYW0ge3N5bWJvbH0gYXJncy5vd25lciAtIE9wYXF1ZSBsZWFzZSBvd25lciB0b2tlbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25uZWN0aW9uLCBvcGVyYXRpb24sIG93bmVyfSkge1xuICAgIHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbiA9IGNvbm5lY3Rpb25cbiAgICB0aGlzLl9vcGVyYXRpb24gPSBvcGVyYXRpb25cbiAgICB0aGlzLl9vd25lciA9IG93bmVyXG5cbiAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpXG5cbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB2YWx1ZS5iaW5kKHRhcmdldCkgOiB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldChjb25uZWN0aW9uLCBwcm9wZXJ0eSwgcmVjZWl2ZXIpXG5cbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdmFsdWUuYmluZChyZWNlaXZlcikgOiB2YWx1ZVxuICAgICAgfSxcbiAgICAgIHNldDogKHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlcikgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KGNvbm5lY3Rpb24sIHByb3BlcnR5LCB2YWx1ZSwgY29ubmVjdGlvbilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSB0YWdnZWQgU1FMIHF1ZXJ5IG9uIHRoZSBwaW5uZWQgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIFNRTCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuUXVlcnlPcHRpb25zfSBbb3B0aW9uc10gLSBRdWVyeSBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeVJlc3VsdFR5cGU+fSAtIFF1ZXJ5IHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHF1ZXJ5KHNxbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5fb3BlcmF0aW9uLmFzc2VydEFjdGl2ZSgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGh5c2ljYWxDb25uZWN0aW9uLnF1ZXJ5KHNxbCwgey4uLm9wdGlvbnMsIG9wZXJhdGlvbk93bmVyOiB0aGlzLl9vd25lcn0pXG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtcyBhbiBvcGVyYXRpb24tb3duZWQgU1FMIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsIC0gU1FMIHN0cmluZy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5RdWVyeU9wdGlvbnN9IFtvcHRpb25zXSAtIFF1ZXJ5IG9wdGlvbnMuXG4gICAqIEB5aWVsZHMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAtIFF1ZXJ5IHJvd3MuXG4gICAqL1xuICBhc3luYyAqcXVlcnlTdHJlYW0oc3FsLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl9vcGVyYXRpb24uYXNzZXJ0QWN0aXZlKClcblxuICAgIHlpZWxkKiB0aGlzLl9waHlzaWNhbENvbm5lY3Rpb24ucXVlcnlTdHJlYW0oc3FsLCB7Li4ub3B0aW9ucywgb3BlcmF0aW9uT3duZXI6IHRoaXMuX293bmVyfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhbiBvcGVyYXRpb24tb3duZWQgbXV0YXRpb24gYW5kIHJldHVybnMgaXRzIGFmZmVjdGVkIHJvdyBjb3VudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIE11dGF0aW9uIFNRTCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuUXVlcnlPcHRpb25zfSBbb3B0aW9uc10gLSBRdWVyeSBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIEFmZmVjdGVkIHJvdyBjb3VudC5cbiAgICovXG4gIGFzeW5jIGFmZmVjdGVkUm93cyhzcWwsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuX29wZXJhdGlvbi5hc3NlcnRBY3RpdmUoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbi5hZmZlY3RlZFJvd3Moc3FsLCB7Li4ub3B0aW9ucywgb3BlcmF0aW9uT3duZXI6IHRoaXMuX293bmVyfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFuIG9wZXJhdGlvbi1vd25lZCB0cmFuc2FjdGlvbiBvciBuZXN0ZWQgc2F2ZXBvaW50LlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gVHJhbnNhY3Rpb24gY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHRyYW5zYWN0aW9uKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fb3BlcmF0aW9uLmFzc2VydEFjdGl2ZSgpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtQcm9taXNlPFQ+fSAqLyAodGhpcy5fcGh5c2ljYWxDb25uZWN0aW9uLnRyYW5zYWN0aW9uKGNhbGxiYWNrLCB7b3BlcmF0aW9uT3duZXI6IHRoaXMuX293bmVyfSkpXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGFuIG9wZXJhdGlvbi1vd25lZCBiZWZvcmUtY29tbWl0IGd1YXJkLlxuICAgKiBAcGFyYW0geygpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIEd1YXJkIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICBhc3luYyBiZWZvcmVDb21taXQoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9vcGVyYXRpb24uYXNzZXJ0QWN0aXZlKClcblxuICAgIGF3YWl0IHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbi5iZWZvcmVDb21taXQoY2FsbGJhY2ssIHtvcGVyYXRpb25Pd25lcjogdGhpcy5fb3duZXJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhbiBvcGVyYXRpb24tb3duZWQgYWZ0ZXItY29tbWl0IGNhbGxiYWNrLlxuICAgKiBAcGFyYW0geygpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZWdpc3RyYXRpb24gb3IgZXhlY3V0aW9uLlxuICAgKi9cbiAgYXN5bmMgYWZ0ZXJDb21taXQoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9vcGVyYXRpb24uYXNzZXJ0QWN0aXZlKClcblxuICAgIGF3YWl0IHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbi5hZnRlckNvbW1pdChjYWxsYmFjaywge29wZXJhdGlvbk93bmVyOiB0aGlzLl9vd25lcn0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBpbnNlcnRlZCBpZGVudGlmaWVyIHRocm91Z2ggdGhlIG9wZXJhdGlvbiBsZWFzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBMYXN0IGluc2VydGVkIGlkZW50aWZpZXIuXG4gICAqL1xuICBhc3luYyBsYXN0SW5zZXJ0SUQoKSB7XG4gICAgdGhpcy5fb3BlcmF0aW9uLmFzc2VydEFjdGl2ZSgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGh5c2ljYWxDb25uZWN0aW9uLmxhc3RJbnNlcnRJRCh7b3BlcmF0aW9uT3duZXI6IHRoaXMuX293bmVyfSlcbiAgfVxufVxuIl19
@@ -50,6 +50,14 @@ export default class VelociousDatabaseOperation {
50
50
  * @returns {Promise<void>} - Resolves after registration or execution.
51
51
  */
52
52
  afterCommit(callback: () => void | Promise<void>): Promise<void>;
53
+ /**
54
+ * Registers a guard owned by the current transaction/savepoint frame.
55
+ * @param {(context: {operation: VelociousDatabaseOperation}) => void | Promise<void>} callback - Guard callback.
56
+ * @returns {Promise<void>} - Resolves after registration.
57
+ */
58
+ beforeCommit(callback: (context: {
59
+ operation: VelociousDatabaseOperation;
60
+ }) => void | Promise<void>): Promise<void>;
53
61
  /**
54
62
  * Runs a nested operation transaction/savepoint.
55
63
  * @template T
@@ -1 +1 @@
1
- {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../src/database/operation.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACE;;;;;;;;OAQG;IACH,6FANG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACxB,qBAAqB,EAAlC,MAAM;QACoC,UAAU,EAApD,OAAO,mBAAmB,EAAE,OAAO;QACtB,kBAAkB,EAA/B,MAAM;QACO,KAAK,EAAlB,MAAM;KAChB,EAWA;IATC,iBAAmB;IACnB,sDAAmC;IACnC,+BAAmD;IACnD,4BAA6C;IAC7C,iCAIE;IAGJ;;;;;OAKG;IACH,SAJ0D,EAAE,SAA/C,cAAe,mBAAmB,EAAE,OAAQ,cAC9C,EAAE,GACA,OAAO,8BAA8B,EAAE,OAAO,CAAC,EAAE,CAAC,CAU9D;IAED;;;;OAIG;IACH,wBAHW,cAAc,mBAAmB,EAAE,OAAO,GACxC,IAAI,CAYhB;IAED;;;;;OAKG;IACH,WAJmD,KAAK,SAA3C,OAAQ,mBAAmB,EAAE,OAAQ,UACvC,KAAK,GACH,KAAK,CAQjB;IAED;;;;OAIG;IACH,sBAHW,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;;OAKG;IACH,YAJa,CAAC,YACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMtB;IAED;;;OAGG;IACH,cAFa,OAAO,mBAAmB,EAAE,OAAO,CAY/C;IAED;;;OAGG;IACH,gBAFa,IAAI,CAahB;IAED;;;OAGG;IACH,YAFa,IAAI,CAIhB;CACF;gCAzI+B,2BAA2B"}
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../src/database/operation.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH;IACE;;;;;;;;OAQG;IACH,6FANG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACxB,qBAAqB,EAAlC,MAAM;QACoC,UAAU,EAApD,OAAO,mBAAmB,EAAE,OAAO;QACtB,kBAAkB,EAA/B,MAAM;QACO,KAAK,EAAlB,MAAM;KAChB,EAWA;IATC,iBAAmB;IACnB,sDAAmC;IACnC,+BAAmD;IACnD,4BAA6C;IAC7C,iCAIE;IAGJ;;;;;OAKG;IACH,SAJ0D,EAAE,SAA/C,cAAe,mBAAmB,EAAE,OAAQ,cAC9C,EAAE,GACA,OAAO,8BAA8B,EAAE,OAAO,CAAC,EAAE,CAAC,CAU9D;IAED;;;;OAIG;IACH,wBAHW,cAAc,mBAAmB,EAAE,OAAO,GACxC,IAAI,CAYhB;IAED;;;;;OAKG;IACH,WAJmD,KAAK,SAA3C,OAAQ,mBAAmB,EAAE,OAAQ,UACvC,KAAK,GACH,KAAK,CAQjB;IAED;;;;OAIG;IACH,sBAHW,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;OAIG;IACH,uBAHW,CAAC,OAAO,EAAE;QAAC,SAAS,EAAE,0BAA0B,CAAA;KAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACxE,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;;OAKG;IACH,YAJa,CAAC,YACH,MAAM,OAAO,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMtB;IAED;;;OAGG;IACH,cAFa,OAAO,mBAAmB,EAAE,OAAO,CAY/C;IAED;;;OAGG;IACH,gBAFa,IAAI,CAahB;IAED;;;OAGG;IACH,YAFa,IAAI,CAIhB;CACF;gCAnJ+B,2BAA2B"}
@@ -74,6 +74,15 @@ export default class VelociousDatabaseOperation {
74
74
  this.assertActive();
75
75
  await this.connection().afterCommit(callback);
76
76
  }
77
+ /**
78
+ * Registers a guard owned by the current transaction/savepoint frame.
79
+ * @param {(context: {operation: VelociousDatabaseOperation}) => void | Promise<void>} callback - Guard callback.
80
+ * @returns {Promise<void>} - Resolves after registration.
81
+ */
82
+ async beforeCommit(callback) {
83
+ this.assertActive();
84
+ await this.connection().beforeCommit(() => callback({ operation: this }));
85
+ }
77
86
  /**
78
87
  * Runs a nested operation transaction/savepoint.
79
88
  * @template T
@@ -120,4 +129,4 @@ export default class VelociousDatabaseOperation {
120
129
  this._active = false;
121
130
  }
122
131
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL29wZXJhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSwyQkFBMkIsQ0FBQTtBQUUzRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEwQjtJQUM3Qzs7Ozs7Ozs7T0FRRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBQztRQUN2RixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQTtRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUE7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFBO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztZQUN6QyxVQUFVO1lBQ1YsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLO1NBQ04sQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLFVBQVU7UUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFNUIsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLFVBQVU7UUFDcEIsSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsNkNBQTZDLENBQUMsQ0FBQTtRQUM1RixDQUFDO1FBRUQsTUFBTSx1QkFBdUIsR0FBRyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUVsRSxJQUFJLHVCQUF1QixLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLGtCQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLDRCQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5SyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE1BQU07UUFDZixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbEMsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkIsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFbkIsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVU7UUFDUixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFbkI7OztXQUdHO1FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUU1RCxPQUFPLGdCQUFnQixDQUFBO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1FBRXRFLE1BQU0sZUFBZSxHQUFHLElBQUk7YUFDekIsY0FBYzthQUNkLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7YUFDekMsd0JBQXdCLEVBQUUsQ0FBQTtRQUU3QixJQUFJLGVBQWUsS0FBSyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyRUFBMkUsQ0FBQyxDQUFBO1FBQ2hLLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgT3BlcmF0aW9uQ29ubmVjdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24tY29ubmVjdGlvbi5qc1wiXG5cbi8qKlxuICogRXhwbGljaXQgb3duZXIgZm9yIG1vZGVsIHdvcmsgcGVyZm9ybWVkIG9uIG9uZSBwaW5uZWQgdHJhbnNhY3Rpb25hbFxuICogY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VPcGVyYXRpb24ge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcGVyYXRpb24gb3duZXJzaGlwLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gT3duaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbmZpZ3VyYXRpb25SZXVzZUtleSAtIFBoeXNpY2FsIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24ga2V5IGNhcHR1cmVkIGF0IGNoZWNrb3V0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29ubmVjdGlvbiAtIFBpbm5lZCBwaHlzaWNhbCBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZUlkZW50aWZpZXIgLSBTaW5ndWxhciBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3N5bWJvbH0gYXJncy5vd25lciAtIE9wYXF1ZSBwb29sIGxlYXNlIG93bmVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb25SZXVzZUtleSwgY29ubmVjdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyLCBvd25lcn0pIHtcbiAgICB0aGlzLl9hY3RpdmUgPSB0cnVlXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLl9jb25maWd1cmF0aW9uUmV1c2VLZXkgPSBjb25maWd1cmF0aW9uUmV1c2VLZXlcbiAgICB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIgPSBkYXRhYmFzZUlkZW50aWZpZXJcbiAgICB0aGlzLl9jb25uZWN0aW9uID0gbmV3IE9wZXJhdGlvbkNvbm5lY3Rpb24oe1xuICAgICAgY29ubmVjdGlvbixcbiAgICAgIG9wZXJhdGlvbjogdGhpcyxcbiAgICAgIG93bmVyXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9wZXJhdGlvbi1ib3VuZCBtb2RlbCBxdWVyeS9jcmVhdGUgc2NvcGUuXG4gICAqIEB0ZW1wbGF0ZSB7dHlwZW9mIGltcG9ydChcIi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1DXG4gICAqIEBwYXJhbSB7TUN9IE1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcyB0byBiaW5kLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0PE1DPn0gLSBPcGVyYXRpb24tYm91bmQgc2NvcGUuXG4gICAqL1xuICBmb3JNb2RlbChNb2RlbENsYXNzKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIHRoaXMuYXNzZXJ0TW9kZWwoTW9kZWxDbGFzcylcblxuICAgIHJldHVybiBNb2RlbENsYXNzLl9uZXdRdWVyeSh7XG4gICAgICBkcml2ZXI6IHRoaXMuY29ubmVjdGlvbigpLFxuICAgICAgb3BlcmF0aW9uOiB0aGlzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IGEgbW9kZWwgYmVsb25ncyB0byB0aGlzIG9wZXJhdGlvbidzIGNvbmZpZ3VyYXRpb24gYW5kIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFzc2VydE1vZGVsKE1vZGVsQ2xhc3MpIHtcbiAgICBpZiAoTW9kZWxDbGFzcy5fZ2V0Q29uZmlndXJhdGlvbigpICE9PSB0aGlzLl9jb25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7TW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKX0gYmVsb25ncyB0byBhbm90aGVyIFZlbG9jaW91cyBjb25maWd1cmF0aW9uYClcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbERhdGFiYXNlSWRlbnRpZmllciA9IE1vZGVsQ2xhc3MuZ2V0RGF0YWJhc2VJZGVudGlmaWVyKClcblxuICAgIGlmIChtb2RlbERhdGFiYXNlSWRlbnRpZmllciAhPT0gdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7TW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKX0gdXNlcyBkYXRhYmFzZSAke0pTT04uc3RyaW5naWZ5KG1vZGVsRGF0YWJhc2VJZGVudGlmaWVyKX0sIG5vdCBvcGVyYXRpb24gZGF0YWJhc2UgJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgbG9hZGVkIG9yIGJ1aWx0IHJlY29yZCB0byB0aGlzIG9wZXJhdGlvbi5cbiAgICogQHRlbXBsYXRlIHtpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNb2RlbFxuICAgKiBAcGFyYW0ge01vZGVsfSByZWNvcmQgLSBSZWNvcmQgdG8gYmluZC5cbiAgICogQHJldHVybnMge01vZGVsfSAtIEJvdW5kIHJlY29yZC5cbiAgICovXG4gIGJpbmRSZWNvcmQocmVjb3JkKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIHRoaXMuYXNzZXJ0TW9kZWwocmVjb3JkLmdldE1vZGVsQ2xhc3MoKSlcbiAgICByZWNvcmQuYmluZERhdGFiYXNlT3BlcmF0aW9uKHRoaXMpXG5cbiAgICByZXR1cm4gcmVjb3JkXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgb3duZWQgYnkgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIHRyYW5zYWN0aW9uIGZyYW1lLlxuICAgKiBAcGFyYW0geygpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyBhZnRlciByZWdpc3RyYXRpb24gb3IgZXhlY3V0aW9uLlxuICAgKi9cbiAgYXN5bmMgYWZ0ZXJDb21taXQoY2FsbGJhY2spIHtcbiAgICB0aGlzLmFzc2VydEFjdGl2ZSgpXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uKCkuYWZ0ZXJDb21taXQoY2FsbGJhY2spXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIG5lc3RlZCBvcGVyYXRpb24gdHJhbnNhY3Rpb24vc2F2ZXBvaW50LlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHRyYW5zYWN0aW9uKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLnRyYW5zYWN0aW9uKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlbGliZXJhdGVseSBleHBvc2VkIG9wZXJhdGlvbiBjb25uZWN0aW9uIGZhY2FkZSBmb3IgcmF3IFNRTC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IC0gT3BlcmF0aW9uLWJvdW5kIGNvbm5lY3Rpb24uXG4gICAqL1xuICBjb25uZWN0aW9uKCkge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIFByb3h5IGZhY2FkZSB0byB0aGUgY29tcGxldGUgZHJpdmVyIHN1cmZhY2UgdGhhdCBpdCBmb3J3YXJkcy5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH1cbiAgICAgKi9cbiAgICBjb25zdCBjb25uZWN0aW9uRmFjYWRlID0gLyoqIEB0eXBlIHs/fSAqLyAodGhpcy5fY29ubmVjdGlvbilcblxuICAgIHJldHVybiBjb25uZWN0aW9uRmFjYWRlXG4gIH1cblxuICAvKipcbiAgICogUmFpc2VzIHdoZW4gYW4gb3BlcmF0aW9uIGhhbmRsZSBoYXMgbGVmdCBpdHMgY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYXNzZXJ0QWN0aXZlKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZlKSB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYmFzZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFwiKVxuXG4gICAgY29uc3QgY3VycmVudFJldXNlS2V5ID0gdGhpc1xuICAgICAgLl9jb25maWd1cmF0aW9uXG4gICAgICAuZ2V0RGF0YWJhc2VQb29sKHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcilcbiAgICAgIC5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoKVxuXG4gICAgaWYgKGN1cnJlbnRSZXVzZUtleSAhPT0gdGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFiYXNlIG9wZXJhdGlvbiBmb3IgJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpfSBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHBoeXNpY2FsIGRhdGFiYXNlIHRoYW4gdGhlIGN1cnJlbnQgdGVuYW50IGNvbnRleHRgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmVzIHRoZSBvcGVyYXRpb24gYW5kIGFsbCBzY29wZXMvcmVjb3JkcyBib3VuZCB0byBpdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb21wbGV0ZSgpIHtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZVxuICB9XG59XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL29wZXJhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSwyQkFBMkIsQ0FBQTtBQUUzRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEwQjtJQUM3Qzs7Ozs7Ozs7T0FRRztJQUNILFlBQVksRUFBQyxhQUFhLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBQztRQUN2RixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQTtRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLENBQUE7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFBO1FBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztZQUN6QyxVQUFVO1lBQ1YsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLO1NBQ04sQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLFVBQVU7UUFDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFNUIsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3pCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLFVBQVU7UUFDcEIsSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsNkNBQTZDLENBQUMsQ0FBQTtRQUM1RixDQUFDO1FBRUQsTUFBTSx1QkFBdUIsR0FBRyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtRQUVsRSxJQUFJLHVCQUF1QixLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLGtCQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLDRCQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM5SyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE1BQU07UUFDZixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbEMsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDbkIsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUNuQixNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVE7UUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRW5CLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBRW5COzs7V0FHRztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFNUQsT0FBTyxnQkFBZ0IsQ0FBQTtJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUV0RSxNQUFNLGVBQWUsR0FBRyxJQUFJO2FBQ3pCLGNBQWM7YUFDZCxlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2FBQ3pDLHdCQUF3QixFQUFFLENBQUE7UUFFN0IsSUFBSSxlQUFlLEtBQUssSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkVBQTJFLENBQUMsQ0FBQTtRQUNoSyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IE9wZXJhdGlvbkNvbm5lY3Rpb24gZnJvbSBcIi4vb3BlcmF0aW9uLWNvbm5lY3Rpb24uanNcIlxuXG4vKipcbiAqIEV4cGxpY2l0IG93bmVyIGZvciBtb2RlbCB3b3JrIHBlcmZvcm1lZCBvbiBvbmUgcGlubmVkIHRyYW5zYWN0aW9uYWxcbiAqIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3BlcmF0aW9uIG93bmVyc2hpcC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIE93bmluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jb25maWd1cmF0aW9uUmV1c2VLZXkgLSBQaHlzaWNhbCBkYXRhYmFzZSBjb25maWd1cmF0aW9uIGtleSBjYXB0dXJlZCBhdCBjaGVja291dC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbm5lY3Rpb24gLSBQaW5uZWQgcGh5c2ljYWwgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VJZGVudGlmaWVyIC0gU2luZ3VsYXIgZGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtzeW1ib2x9IGFyZ3Mub3duZXIgLSBPcGFxdWUgcG9vbCBsZWFzZSBvd25lci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uUmV1c2VLZXksIGNvbm5lY3Rpb24sIGRhdGFiYXNlSWRlbnRpZmllciwgb3duZXJ9KSB7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZVxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5ID0gY29uZmlndXJhdGlvblJldXNlS2V5XG4gICAgdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyID0gZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBPcGVyYXRpb25Db25uZWN0aW9uKHtcbiAgICAgIGNvbm5lY3Rpb24sXG4gICAgICBvcGVyYXRpb246IHRoaXMsXG4gICAgICBvd25lclxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvcGVyYXRpb24tYm91bmQgbW9kZWwgcXVlcnkvY3JlYXRlIHNjb3BlLlxuICAgKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICAgKiBAcGFyYW0ge01DfSBNb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdG8gYmluZC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDxNQz59IC0gT3BlcmF0aW9uLWJvdW5kIHNjb3BlLlxuICAgKi9cbiAgZm9yTW9kZWwoTW9kZWxDbGFzcykge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcbiAgICB0aGlzLmFzc2VydE1vZGVsKE1vZGVsQ2xhc3MpXG5cbiAgICByZXR1cm4gTW9kZWxDbGFzcy5fbmV3UXVlcnkoe1xuICAgICAgZHJpdmVyOiB0aGlzLmNvbm5lY3Rpb24oKSxcbiAgICAgIG9wZXJhdGlvbjogdGhpc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCBhIG1vZGVsIGJlbG9uZ3MgdG8gdGhpcyBvcGVyYXRpb24ncyBjb25maWd1cmF0aW9uIGFuZCBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBhc3NlcnRNb2RlbChNb2RlbENsYXNzKSB7XG4gICAgaWYgKE1vZGVsQ2xhc3MuX2dldENvbmZpZ3VyYXRpb24oKSAhPT0gdGhpcy5fY29uZmlndXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke01vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCl9IGJlbG9uZ3MgdG8gYW5vdGhlciBWZWxvY2lvdXMgY29uZmlndXJhdGlvbmApXG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxEYXRhYmFzZUlkZW50aWZpZXIgPSBNb2RlbENsYXNzLmdldERhdGFiYXNlSWRlbnRpZmllcigpXG5cbiAgICBpZiAobW9kZWxEYXRhYmFzZUlkZW50aWZpZXIgIT09IHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke01vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCl9IHVzZXMgZGF0YWJhc2UgJHtKU09OLnN0cmluZ2lmeShtb2RlbERhdGFiYXNlSWRlbnRpZmllcil9LCBub3Qgb3BlcmF0aW9uIGRhdGFiYXNlICR7SlNPTi5zdHJpbmdpZnkodGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyKX1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIGxvYWRlZCBvciBidWlsdCByZWNvcmQgdG8gdGhpcyBvcGVyYXRpb24uXG4gICAqIEB0ZW1wbGF0ZSB7aW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTW9kZWxcbiAgICogQHBhcmFtIHtNb2RlbH0gcmVjb3JkIC0gUmVjb3JkIHRvIGJpbmQuXG4gICAqIEByZXR1cm5zIHtNb2RlbH0gLSBCb3VuZCByZWNvcmQuXG4gICAqL1xuICBiaW5kUmVjb3JkKHJlY29yZCkge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcbiAgICB0aGlzLmFzc2VydE1vZGVsKHJlY29yZC5nZXRNb2RlbENsYXNzKCkpXG4gICAgcmVjb3JkLmJpbmREYXRhYmFzZU9wZXJhdGlvbih0aGlzKVxuXG4gICAgcmV0dXJuIHJlY29yZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIG93bmVkIGJ5IHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0cmFuc2FjdGlvbiBmcmFtZS5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVnaXN0cmF0aW9uIG9yIGV4ZWN1dGlvbi5cbiAgICovXG4gIGFzeW5jIGFmdGVyQ29tbWl0KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGd1YXJkIG93bmVkIGJ5IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uL3NhdmVwb2ludCBmcmFtZS5cbiAgICogQHBhcmFtIHsoY29udGV4dDoge29wZXJhdGlvbjogVmVsb2Npb3VzRGF0YWJhc2VPcGVyYXRpb259KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBHdWFyZCBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgYXN5bmMgYmVmb3JlQ29tbWl0KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLmJlZm9yZUNvbW1pdCgoKSA9PiBjYWxsYmFjayh7b3BlcmF0aW9uOiB0aGlzfSkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIG5lc3RlZCBvcGVyYXRpb24gdHJhbnNhY3Rpb24vc2F2ZXBvaW50LlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHRyYW5zYWN0aW9uKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLnRyYW5zYWN0aW9uKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlbGliZXJhdGVseSBleHBvc2VkIG9wZXJhdGlvbiBjb25uZWN0aW9uIGZhY2FkZSBmb3IgcmF3IFNRTC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IC0gT3BlcmF0aW9uLWJvdW5kIGNvbm5lY3Rpb24uXG4gICAqL1xuICBjb25uZWN0aW9uKCkge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIFByb3h5IGZhY2FkZSB0byB0aGUgY29tcGxldGUgZHJpdmVyIHN1cmZhY2UgdGhhdCBpdCBmb3J3YXJkcy5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH1cbiAgICAgKi9cbiAgICBjb25zdCBjb25uZWN0aW9uRmFjYWRlID0gLyoqIEB0eXBlIHs/fSAqLyAodGhpcy5fY29ubmVjdGlvbilcblxuICAgIHJldHVybiBjb25uZWN0aW9uRmFjYWRlXG4gIH1cblxuICAvKipcbiAgICogUmFpc2VzIHdoZW4gYW4gb3BlcmF0aW9uIGhhbmRsZSBoYXMgbGVmdCBpdHMgY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYXNzZXJ0QWN0aXZlKCkge1xuICAgIGlmICghdGhpcy5fYWN0aXZlKSB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhYmFzZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZFwiKVxuXG4gICAgY29uc3QgY3VycmVudFJldXNlS2V5ID0gdGhpc1xuICAgICAgLl9jb25maWd1cmF0aW9uXG4gICAgICAuZ2V0RGF0YWJhc2VQb29sKHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcilcbiAgICAgIC5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoKVxuXG4gICAgaWYgKGN1cnJlbnRSZXVzZUtleSAhPT0gdGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFiYXNlIG9wZXJhdGlvbiBmb3IgJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpfSBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHBoeXNpY2FsIGRhdGFiYXNlIHRoYW4gdGhlIGN1cnJlbnQgdGVuYW50IGNvbnRleHRgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmVzIHRoZSBvcGVyYXRpb24gYW5kIGFsbCBzY29wZXMvcmVjb3JkcyBib3VuZCB0byBpdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb21wbGV0ZSgpIHtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "build/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.569",
6
+ "version": "1.0.570",
7
7
  "main": "build/index.js",
8
8
  "types": "build/index.d.ts",
9
9
  "files": [
@@ -42,6 +42,12 @@
42
42
  * @typedef {Record<string, ?>} QueryRowType
43
43
  * @typedef {Array<QueryRowType>} QueryResultType
44
44
  */
45
+ /**
46
+ * TransactionCallbackFrame type.
47
+ * @typedef {object} TransactionCallbackFrame
48
+ * @property {Array<() => void | Promise<void>>} afterCommitCallbacks - Callbacks to merge or run after commit.
49
+ * @property {Array<() => void | Promise<void>>} beforeCommitCallbacks - Guards to run before this frame completes.
50
+ */
45
51
  /**
46
52
  * RetryableDatabaseErrorResult type.
47
53
  * @typedef {object} RetryableDatabaseErrorResult
@@ -171,8 +177,8 @@ export default class VelociousDatabaseDriversBase {
171
177
  idSeq = undefined
172
178
  /**
173
179
  * Narrows the runtime value to the documented type.
174
- * @type {Array<Array<() => void | Promise<void>>>} */
175
- _afterCommitCallbackFrames
180
+ * @type {TransactionCallbackFrame[]} */
181
+ _transactionCallbackFrames
176
182
  /**
177
183
  * Narrows the runtime value to the documented type.
178
184
  * @type {Map<string, Promise<?>>} */
@@ -207,7 +213,7 @@ export default class VelociousDatabaseDriversBase {
207
213
  this.configuration = configuration
208
214
  this.mutex = new Mutex() // Can be used to lock this instance for exclusive use
209
215
  this.logger = new Logger(this)
210
- this._afterCommitCallbackFrames = []
216
+ this._transactionCallbackFrames = []
211
217
  this._transactionsCount = 0
212
218
  this._transactionsActionsMutex = new Mutex()
213
219
  this._schemaCache = new Map()
@@ -1068,14 +1074,15 @@ export default class VelociousDatabaseDriversBase {
1068
1074
  */
1069
1075
  async _runTransactionAttempt(callback, options) {
1070
1076
  const savePointName = this.generateSavePointName()
1071
- /**
1072
- * Callback frame.
1073
- * @type {Array<() => void | Promise<void>>} */
1074
- const callbackFrame = []
1077
+ /** @type {TransactionCallbackFrame} */
1078
+ const callbackFrame = {
1079
+ afterCommitCallbacks: [],
1080
+ beforeCommitCallbacks: []
1081
+ }
1075
1082
  let transactionStarted = false
1076
1083
  let savePointStarted = false
1077
1084
 
1078
- this._afterCommitCallbackFrames.push(callbackFrame)
1085
+ this._transactionCallbackFrames.push(callbackFrame)
1079
1086
 
1080
1087
  try {
1081
1088
  if (this._transactionsCount == 0) {
@@ -1088,7 +1095,7 @@ export default class VelociousDatabaseDriversBase {
1088
1095
  savePointStarted = true
1089
1096
  }
1090
1097
  } catch (error) {
1091
- this._afterCommitCallbackFrames.pop()
1098
+ this._transactionCallbackFrames.pop()
1092
1099
  throw error
1093
1100
  }
1094
1101
 
@@ -1096,6 +1103,7 @@ export default class VelociousDatabaseDriversBase {
1096
1103
 
1097
1104
  try {
1098
1105
  result = await callback()
1106
+ await this._runBeforeCommitCallbacks(callbackFrame)
1099
1107
 
1100
1108
  if (savePointStarted) {
1101
1109
  this.logger.debug("Release savepoint", savePointName)
@@ -1113,42 +1121,44 @@ export default class VelociousDatabaseDriversBase {
1113
1121
  this.logger.debug("Transaction error", error)
1114
1122
  }
1115
1123
 
1116
- let transactionRolledBack = false
1117
-
1118
- if (savePointStarted) {
1119
- this.logger.debug("Rollback savepoint", savePointName)
1120
- try {
1121
- await this.rollbackSavePoint(savePointName, options)
1122
- } catch (savePointError) {
1123
- const message = savePointError instanceof Error ? savePointError.message : `${savePointError}`
1124
-
1125
- // MySQL sometimes drops savepoints unexpectedly; fall back to rolling back the full transaction
1126
- if (message.includes("SAVEPOINT") || message.includes("ER_SP_DOES_NOT_EXIST")) {
1127
- this.logger.debug("Savepoint rollback failed; rolling back entire transaction instead")
1128
- await this.rollbackTransaction(options)
1129
- transactionRolledBack = true
1130
- } else {
1131
- throw savePointError
1124
+ try {
1125
+ let transactionRolledBack = false
1126
+
1127
+ if (savePointStarted) {
1128
+ this.logger.debug("Rollback savepoint", savePointName)
1129
+ try {
1130
+ await this.rollbackSavePoint(savePointName, options)
1131
+ } catch (savePointError) {
1132
+ const message = savePointError instanceof Error ? savePointError.message : `${savePointError}`
1133
+
1134
+ // MySQL sometimes drops savepoints unexpectedly; fall back to rolling back the full transaction
1135
+ if (message.includes("SAVEPOINT") || message.includes("ER_SP_DOES_NOT_EXIST")) {
1136
+ this.logger.debug("Savepoint rollback failed; rolling back entire transaction instead")
1137
+ await this.rollbackTransaction(options)
1138
+ transactionRolledBack = true
1139
+ } else {
1140
+ throw savePointError
1141
+ }
1132
1142
  }
1133
1143
  }
1134
- }
1135
1144
 
1136
- // Only roll back if a transaction is still open. A nested savepoint whose rollback failed
1137
- // falls back to rolling back the whole transaction (above), which already closed it and
1138
- // dropped the count to 0; rolling back again here would issue a second ROLLBACK and drive
1139
- // `_transactionsCount` below zero, which would then defeat the outermost deadlock-retry guard.
1140
- if (transactionStarted && !transactionRolledBack && this._transactionsCount > 0) {
1141
- this.logger.debug("Rollback transaction")
1142
- await this.rollbackTransaction(options)
1145
+ // Only roll back if a transaction is still open. A nested savepoint whose rollback failed
1146
+ // falls back to rolling back the whole transaction (above), which already closed it and
1147
+ // dropped the count to 0; rolling back again here would issue a second ROLLBACK and drive
1148
+ // `_transactionsCount` below zero, which would then defeat the outermost deadlock-retry guard.
1149
+ if (transactionStarted && !transactionRolledBack && this._transactionsCount > 0) {
1150
+ this.logger.debug("Rollback transaction")
1151
+ await this.rollbackTransaction(options)
1152
+ }
1153
+ } finally {
1154
+ this._transactionCallbackFrames.pop()
1143
1155
  }
1144
1156
 
1145
- this._afterCommitCallbackFrames.pop()
1146
-
1147
1157
  throw error
1148
1158
  }
1149
1159
 
1150
1160
  try {
1151
- await this._commitAfterCommitCallbackFrame()
1161
+ await this._commitTransactionCallbackFrame()
1152
1162
  } catch (error) {
1153
1163
  throw new VelociousDatabaseAfterCommitCallbackError(error)
1154
1164
  }
@@ -1156,6 +1166,23 @@ export default class VelociousDatabaseDriversBase {
1156
1166
  return result
1157
1167
  }
1158
1168
 
1169
+ /**
1170
+ * Registers a guard to run after the current transaction callback succeeds and before its
1171
+ * outer commit or nested savepoint release.
1172
+ * @param {() => void | Promise<void>} callback - Guard callback.
1173
+ * @param {Pick<QueryOptions, "operationOwner">} [options] - Callback ownership.
1174
+ * @returns {Promise<void>} - Resolves when the guard has been registered.
1175
+ */
1176
+ async beforeCommit(callback, options = {}) {
1177
+ await this._waitForOperationLease(options.operationOwner)
1178
+
1179
+ const currentFrame = this._transactionCallbackFrames[this._transactionCallbackFrames.length - 1]
1180
+
1181
+ if (!currentFrame) throw new Error("beforeCommit requires an active transaction")
1182
+
1183
+ currentFrame.beforeCommitCallbacks.push(callback)
1184
+ }
1185
+
1159
1186
  /**
1160
1187
  * Runs a callback after the surrounding transaction commits.
1161
1188
  * If no transaction is active, the callback runs immediately.
@@ -1166,14 +1193,14 @@ export default class VelociousDatabaseDriversBase {
1166
1193
  async afterCommit(callback, options = {}) {
1167
1194
  await this._waitForOperationLease(options.operationOwner)
1168
1195
 
1169
- const currentFrame = this._afterCommitCallbackFrames[this._afterCommitCallbackFrames.length - 1]
1196
+ const currentFrame = this._transactionCallbackFrames[this._transactionCallbackFrames.length - 1]
1170
1197
 
1171
1198
  if (!currentFrame) {
1172
1199
  await callback()
1173
1200
  return
1174
1201
  }
1175
1202
 
1176
- currentFrame.push(callback)
1203
+ currentFrame.afterCommitCallbacks.push(callback)
1177
1204
  }
1178
1205
 
1179
1206
  /**
@@ -1240,23 +1267,34 @@ export default class VelociousDatabaseDriversBase {
1240
1267
  await this.query("COMMIT", options)
1241
1268
  }
1242
1269
 
1270
+ /**
1271
+ * Runs every guard registered to the transaction frame.
1272
+ * @param {TransactionCallbackFrame} callbackFrame - Frame whose guards are completing.
1273
+ * @returns {Promise<void>} - Resolves when every guard accepts the commit.
1274
+ */
1275
+ async _runBeforeCommitCallbacks(callbackFrame) {
1276
+ for (const callback of callbackFrame.beforeCommitCallbacks) {
1277
+ await callback()
1278
+ }
1279
+ }
1280
+
1243
1281
  /**
1244
1282
  * Merges committed callbacks into the parent transaction frame or runs them when the outermost commit completes.
1245
1283
  * @returns {Promise<void>} - Resolves when complete.
1246
1284
  */
1247
- async _commitAfterCommitCallbackFrame() {
1248
- const committedCallbacks = this._afterCommitCallbackFrames.pop()
1285
+ async _commitTransactionCallbackFrame() {
1286
+ const committedFrame = this._transactionCallbackFrames.pop()
1249
1287
 
1250
- if (!committedCallbacks || committedCallbacks.length === 0) return
1288
+ if (!committedFrame || committedFrame.afterCommitCallbacks.length === 0) return
1251
1289
 
1252
- const parentFrame = this._afterCommitCallbackFrames[this._afterCommitCallbackFrames.length - 1]
1290
+ const parentFrame = this._transactionCallbackFrames[this._transactionCallbackFrames.length - 1]
1253
1291
 
1254
1292
  if (parentFrame) {
1255
- parentFrame.push(...committedCallbacks)
1293
+ parentFrame.afterCommitCallbacks.push(...committedFrame.afterCommitCallbacks)
1256
1294
  return
1257
1295
  }
1258
1296
 
1259
- for (const callback of committedCallbacks) {
1297
+ for (const callback of committedFrame.afterCommitCallbacks) {
1260
1298
  await callback()
1261
1299
  }
1262
1300
  }
@@ -87,6 +87,17 @@ export default class VelociousDatabaseOperationConnection {
87
87
  return /** @type {Promise<T>} */ (this._physicalConnection.transaction(callback, {operationOwner: this._owner}))
88
88
  }
89
89
 
90
+ /**
91
+ * Registers an operation-owned before-commit guard.
92
+ * @param {() => void | Promise<void>} callback - Guard callback.
93
+ * @returns {Promise<void>} - Resolves after registration.
94
+ */
95
+ async beforeCommit(callback) {
96
+ this._operation.assertActive()
97
+
98
+ await this._physicalConnection.beforeCommit(callback, {operationOwner: this._owner})
99
+ }
100
+
90
101
  /**
91
102
  * Registers an operation-owned after-commit callback.
92
103
  * @param {() => void | Promise<void>} callback - Callback.
@@ -85,6 +85,16 @@ export default class VelociousDatabaseOperation {
85
85
  await this.connection().afterCommit(callback)
86
86
  }
87
87
 
88
+ /**
89
+ * Registers a guard owned by the current transaction/savepoint frame.
90
+ * @param {(context: {operation: VelociousDatabaseOperation}) => void | Promise<void>} callback - Guard callback.
91
+ * @returns {Promise<void>} - Resolves after registration.
92
+ */
93
+ async beforeCommit(callback) {
94
+ this.assertActive()
95
+ await this.connection().beforeCommit(() => callback({operation: this}))
96
+ }
97
+
88
98
  /**
89
99
  * Runs a nested operation transaction/savepoint.
90
100
  * @template T