@@ -2,7 +2,7 @@ import { open } from 'sqlite';
22import { Database } from 'sqlite3' ;
33import * as pg from 'pg' ;
44import { EventEmitter } from 'events' ;
5- import { objType } from 'tiny-essentials' ;
5+ import { isJsonObject } from 'tiny-essentials' ;
66
77import PuddySqlQuery from './TinySqlQuery.mjs' ;
88
@@ -610,7 +610,7 @@ class PuddySqlInstance {
610610
611611 // Graceful shutdown on process termination
612612 process . on ( 'SIGINT' , async ( ) => {
613- await this . #db . close ( ) . catch ( ( ) => { } ) ;
613+ await this . destroy ( ) ;
614614 } ) ;
615615 } else throw new Error ( 'SQL has already been initialized in this instance!' ) ;
616616 }
@@ -724,7 +724,7 @@ class PuddySqlInstance {
724724 db . get ( query , params )
725725 . then ( ( result ) => {
726726 sendSqlDebugResult ( id , debugName , '' , result ) ;
727- resolve ( objType ( result , 'object' ) ? result : null ) ;
727+ resolve ( isJsonObject ( result ) ? result : null ) ;
728728 } )
729729 . catch ( ( err ) => rejectConnection ( reject , err ) ) ;
730730 } ) ;
@@ -744,7 +744,7 @@ class PuddySqlInstance {
744744 db . run ( query , params )
745745 . then ( ( result ) => {
746746 sendSqlDebugResult ( id , debugName , '' , result ) ;
747- resolve ( objType ( result , 'object' ) ? result : null ) ;
747+ resolve ( isJsonObject ( result ) ? result : null ) ;
748748 } )
749749 . catch ( ( err ) => rejectConnection ( reject , err ) ) ;
750750 } ) ;
@@ -774,7 +774,7 @@ class PuddySqlInstance {
774774
775775 // Attach handler to close DB on process termination
776776 process . on ( 'SIGINT' , async ( ) => {
777- await this . #db . end ( ) . catch ( ( ) => { } ) ;
777+ await this . destroy ( ) ;
778778 } ) ;
779779
780780 // Connect to the PostgreSQL database
@@ -869,7 +869,7 @@ class PuddySqlInstance {
869869 sendSqlDebug ( id , debugName , query , params ) ;
870870 const res = await db . query ( query , params ) ;
871871 sendSqlDebugResult ( id , debugName , '' , res ) ;
872- return objType ( res , 'object' ) && Array . isArray ( res . rows ) ? res . rows : null ;
872+ return isJsonObject ( res ) && Array . isArray ( res . rows ) ? res . rows : null ;
873873 } catch ( err ) {
874874 rejectConnection ( err ) ;
875875 throw err ;
@@ -889,7 +889,7 @@ class PuddySqlInstance {
889889 sendSqlDebug ( id , debugName , query , params ) ;
890890 const res = await db . query ( query , params ) ;
891891 sendSqlDebugResult ( id , debugName , '' , res ) ;
892- return objType ( res , 'object' ) && Array . isArray ( res . rows ) && objType ( res . rows [ 0 ] , 'object' )
892+ return isJsonObject ( res ) && Array . isArray ( res . rows ) && isJsonObject ( res . rows [ 0 ] )
893893 ? res . rows [ 0 ]
894894 : null ;
895895 } catch ( err ) {
@@ -911,7 +911,7 @@ class PuddySqlInstance {
911911 sendSqlDebug ( id , debugName , query , params ) ;
912912 const res = await db . query ( query , params ) ;
913913 sendSqlDebugResult ( id , debugName , '' , res ) ;
914- return objType ( res , 'object' ) ? res : null ;
914+ return isJsonObject ( res ) ? res : null ;
915915 } catch ( err ) {
916916 rejectConnection ( err ) ;
917917 throw err ;
@@ -960,6 +960,27 @@ class PuddySqlInstance {
960960 */
961961 // @ts -ignore
962962 run = ( query , params , debugName = '' ) => new Promise ( ( resolve ) => resolve ( null ) ) ;
963+
964+ /**
965+ * Gracefully destroys the current instance by:
966+ * - Removing all internal and system event listeners;
967+ * - Properly closing the database connection based on the SQL engine in use.
968+ *
969+ * Supports both PostgreSQL (`postgre`) and SQLite3 (`sqlite3`) engines.
970+ * Errors during database disconnection are caught and logged to the console.
971+ *
972+ * @returns {Promise<void> } Resolves when all cleanup operations are complete.
973+ */
974+ async destroy ( ) {
975+ this . #events. removeAllListeners ( ) ;
976+ this . #sysEvents. removeAllListeners ( ) ;
977+
978+ const sqlEngine = this . getSqlEngine ( ) ;
979+ if ( typeof sqlEngine === 'string' ) {
980+ if ( sqlEngine === 'postgre' ) await this . #db. end ( ) . catch ( console . error ) ;
981+ if ( sqlEngine === 'sqlite3' ) await this . #db. close ( ) . catch ( console . error ) ;
982+ }
983+ }
963984}
964985
965986export default PuddySqlInstance ;
0 commit comments