| import Helper from './helper.js' | |
| import { Low, JSONFile } from 'lowdb' | |
| import { cloudDBAdapter, mongoDB, mongoDBV2 } from './DB_Adapters/index.js' | |
| import lodash from 'lodash' | |
| const databaseUrl = Helper.opts['db'] || '' | |
| const databaseAdapter = /https?:\/\//.test(databaseUrl) ? | |
| new cloudDBAdapter(databaseUrl) : /mongodb(\+srv)?:\/\//i.test(databaseUrl) ? | |
| (Helper.opts['mongodbv2'] ? new mongoDBV2(databaseUrl) : | |
| new mongoDB(databaseUrl)) : | |
| new JSONFile(`${Helper.opts._[0] ? Helper.opts._[0] + '_' : ''}database.json`) | |
| /** @typedef {{ [Key: string]: {[Key: string]: any } }} DatabaseData */ | |
| let database = /** @type {Low<DatabaseData> & { chain: import('lodash').ObjectChain<DatabaseData>, _read: Promise<void> | void }} */ | |
| (new Low(databaseAdapter)) | |
| loadDatabase() | |
| async function loadDatabase() { | |
| // If database is processed to be loaded from cloud, wait for it to be done | |
| if (database._read) await database._read | |
| if (database.data !== null) return database.data | |
| database._read = database.read().catch(console.error) | |
| await database._read | |
| console.log('- Database loaded -') | |
| database.data = { | |
| users: {}, | |
| chats: {}, | |
| stats: {}, | |
| msgs: {}, | |
| sticker: {}, | |
| settings: {}, | |
| ...(database.data || {}) | |
| } | |
| database.chain = lodash.chain(database.data) | |
| return database.data | |
| } | |
| export { | |
| databaseUrl, | |
| databaseAdapter, | |
| database, | |
| loadDatabase | |
| } | |
| export default database | |