/** * Wrapper functions for asynchronous database operations * @module utils/asyncDatabase */ import sqlite3 from "sqlite3"; /** Callback function type for {@link asyncDatabaseRead} */ type asyncDatabaseRowsCallbackFunction = (rows: any[]) => any; /** Callback function type for {@link asyncDatabaseWrite} */ type asyncDatabaseVoidCallbackFunction = () => any; /** * Wrapper functions that perform read operations to database asynchronously * @template Type * @param {sqlite3.Database} database sqlite3 database object * @param {string} sqlQuery SQL query to execute * @param {asyncDatabaseRowsCallbackFunction} callback callback to perform further operations on each row * @returns {Promise} Promise for database operation */ const asyncDatabaseRead = ( database: sqlite3.Database, sqlQuery: string, callback: asyncDatabaseRowsCallbackFunction ): Promise => { return new Promise((resolve, reject) => { database.all(sqlQuery, (err: any, rows) => { if (err) { reject(err); } else { resolve(callback(rows)); } }); }); }; /** * Wrapper functions that perform write operations to database asynchronously * @template Type * @param {sqlite3.Database} database sqlite3 database object * @param {string} sqlQuery SQL query to execute * @param {asyncDatabaseVoidCallbackFunction} callback callback to perform after the operation * @returns {Promise} Promise for database operation */ const asyncDatabaseWrite = ( database: sqlite3.Database, sqlQuery: string, callback: asyncDatabaseVoidCallbackFunction ): Promise => { return new Promise((resolve, reject) => { database.run(sqlQuery, (err: any) => { if (err) { reject(err); } else { resolve(callback()); } }); }); }; export { asyncDatabaseRead, asyncDatabaseWrite }; export type { asyncDatabaseRowsCallbackFunction, asyncDatabaseVoidCallbackFunction, };