| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import {resolve, dirname as _dirname} from 'path';
- import _fs, {existsSync, readFileSync} from 'fs';
- const {promises: fs} = _fs;
- class Database {
- /**
- * Create new Database
- * @param {String} filepath Path to specified json database
- * @param {...any} args JSON.stringify arguments
- */
- constructor(filepath, ...args) {
- this.file = resolve(filepath);
- this.logger = console;
- this._load();
- this._jsonargs = args;
- this._state = false;
- this._queue = [];
- this._interval = setInterval(async () => {
- if (!this._state && this._queue && this._queue[0]) {
- this._state = true;
- await this[this._queue.shift()]().catch(this.logger.error);
- this._state = false;
- }
- }, 1000);
- }
- get data() {
- return this._data;
- }
- set data(value) {
- this._data = value;
- this.save();
- }
- /**
- * Queue Load
- */
- load() {
- this._queue.push('_load');
- }
- /**
- * Queue Save
- */
- save() {
- this._queue.push('_save');
- }
- _load() {
- try {
- return this._data = existsSync(this.file) ? JSON.parse(readFileSync(this.file)) : {};
- } catch (e) {
- this.logger.error(e);
- return this._data = {};
- }
- }
- async _save() {
- const dirname = _dirname(this.file);
- if (!existsSync(dirname)) await fs.mkdir(dirname, {recursive: true});
- await fs.writeFile(this.file, JSON.stringify(this._data, ...this._jsonargs));
- return this.file;
- }
- }
- export default Database;
|