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.
- package/README.md +12 -2
- package/build/database/drivers/base.js +82 -44
- package/build/database/operation-connection.js +11 -0
- package/build/database/operation.js +10 -0
- package/build/src/database/drivers/base.d.ts +30 -3
- package/build/src/database/drivers/base.d.ts.map +1 -1
- package/build/src/database/drivers/base.js +78 -42
- package/build/src/database/operation-connection.d.ts +6 -0
- package/build/src/database/operation-connection.d.ts.map +1 -1
- package/build/src/database/operation-connection.js +10 -1
- package/build/src/database/operation.d.ts +8 -0
- package/build/src/database/operation.d.ts.map +1 -1
- package/build/src/database/operation.js +10 -1
- package/package.json +1 -1
- package/src/database/drivers/base.js +82 -44
- package/src/database/operation-connection.js +11 -0
- package/src/database/operation.js +10 -0
|
@@ -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,
|
|
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;
|
|
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
|
@@ -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 {
|
|
175
|
-
|
|
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.
|
|
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
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
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
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
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.
|
|
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.
|
|
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
|
|
1248
|
-
const
|
|
1285
|
+
async _commitTransactionCallbackFrame() {
|
|
1286
|
+
const committedFrame = this._transactionCallbackFrames.pop()
|
|
1249
1287
|
|
|
1250
|
-
if (!
|
|
1288
|
+
if (!committedFrame || committedFrame.afterCommitCallbacks.length === 0) return
|
|
1251
1289
|
|
|
1252
|
-
const parentFrame = this.
|
|
1290
|
+
const parentFrame = this._transactionCallbackFrames[this._transactionCallbackFrames.length - 1]
|
|
1253
1291
|
|
|
1254
1292
|
if (parentFrame) {
|
|
1255
|
-
parentFrame.push(...
|
|
1293
|
+
parentFrame.afterCommitCallbacks.push(...committedFrame.afterCommitCallbacks)
|
|
1256
1294
|
return
|
|
1257
1295
|
}
|
|
1258
1296
|
|
|
1259
|
-
for (const callback of
|
|
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
|