Skip to content

Commit 6dea805

Browse files
jsDoc tiny issues progress --> 90% complete
1 parent 7c7ed2f commit 6dea805

File tree

5 files changed

+447
-305
lines changed

5 files changed

+447
-305
lines changed

package-lock.json

Lines changed: 67 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"pg": "^8.14.1",
2222
"sqlite": "^5.1.1",
2323
"sqlite3": "^5.1.7",
24-
"tiny-essentials": "^1.8.5"
24+
"tiny-essentials": "^1.10.2"
2525
},
2626
"keywords": [],
2727
"scripts": {
@@ -46,8 +46,10 @@
4646
"@rollup/plugin-node-resolve": "^16.0.1",
4747
"@rollup/plugin-terser": "^0.4.4",
4848
"@rollup/plugin-typescript": "^12.1.2",
49+
"@types/http-errors": "^2.0.4",
4950
"@types/node": "^22.14.1",
5051
"babel-preset-es2015": "^6.24.1",
52+
"http-errors": "^2.0.0",
5153
"prettier": "3.5.3",
5254
"rollup": "^4.40.0",
5355
"rollup-preserve-directives": "^1.1.3",

src/TinySQL.mjs

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { open } from 'sqlite';
22
import { Database } from 'sqlite3';
33
import * as pg from 'pg';
44
import { EventEmitter } from 'events';
5-
import { objType } from 'tiny-essentials';
5+
import { isJsonObject } from 'tiny-essentials';
66

77
import 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

965986
export default PuddySqlInstance;

0 commit comments

Comments
 (0)