@@ -12,35 +12,39 @@ export class PgTransactionManager extends TransactionManager {
1212 super ( ) ;
1313 }
1414
15- public startTransaction (
16- callback : ( transaction : PgTransaction ) => Promise < void >
17- ) : Promise < void > {
18- return PgTransactionManager . createTransaction ( this . db , callback ) ;
15+ public startTransaction < Result > (
16+ callback : ( transaction : PgTransaction ) => Promise < Result >
17+ ) {
18+ return PgTransactionManager . createTransaction < Result > ( this . db , callback ) ;
1919 }
2020
21- public savePoint (
21+ public savePoint < Result > (
2222 transaction : PgTransaction ,
23- callback : ( nestedTransaction : PgTransaction ) => Promise < void >
24- ) : Promise < void > {
25- return PgTransactionManager . createTransaction (
23+ callback : ( nestedTransaction : PgTransaction ) => Promise < Result >
24+ ) {
25+ return PgTransactionManager . createTransaction < Result > (
2626 transaction . context ,
2727 callback
2828 ) ;
2929 }
3030
3131 private static store = new AsyncLocalStorage < NodePgDatabaseTransaction > ( ) ;
3232
33- private static async createTransaction (
33+ private static async createTransaction < Result > (
3434 pgDriver : NodePgDatabase | NodePgDatabaseTransaction ,
35- callback : ( transaction : PgTransaction ) => Promise < void >
36- ) : Promise < void > {
35+ callback : ( transaction : PgTransaction ) => Promise < Result >
36+ ) {
3737 try {
38- await pgDriver . transaction ( ( context ) => {
38+ const res = await pgDriver . transaction < Result > ( ( context ) => {
3939 const transaction = new PgTransaction ( this . store ) ;
4040 return this . store . run ( context , ( ) => callback ( transaction ) ) ;
4141 } ) ;
42+ return res ;
4243 } catch ( error ) {
43- if ( error instanceof TransactionRollbackError ) return ;
44+ // Needed to cast because unreachable code after a `rollback` is not detected by the TypeScript compiler,
45+ // even though the `ReturnType` of the `rollback` is `never`
46+ // This is a workaround to make it work for now until it's fixed.
47+ if ( error instanceof TransactionRollbackError ) return undefined as Result ;
4448 const err = error instanceof Error ? error : new Error ( 'Unknown error' ) ;
4549 throw new InvalidOperationException ( err . message , error ) ;
4650 }
0 commit comments