RSS Git Download  Clone
Raw Blame History
const coryFs = require('../fs');
const mz = require('mz');

const load = async (dbFile, data = {}) => {
    const exists = await coryFs.ensureFile(dbFile, data)
    if (exists) {
        data = await mz.fs.readFile(dbFile);
    }
    data = JSON.parse(data.toString());
    return new db(dbFile, data);
}

const db = function (dbFile, data) {
    const getTime = () => {
        return Date.now();
    }

    if (!data.hasOwnProperty('_createdAt')) {
        data._createdAt = getTime();
        data._updatedAt = getTime();
    }

    Object.defineProperty(this, 'raw', {
        get: () => {
            return data;
        }
    })

    this.exists = function (entity, key) {
        if (!data.hasOwnProperty(entity)) {
            return false;
        }
        if (!data[entity].hasOwnProperty(key)) {
            return false;
        }
        return true;
    }

    this.save = function (entity, key, saveData) {
        if (!data.hasOwnProperty(entity)) {
            data[entity] = {};
        }
        if (data[entity].hasOwnProperty(key)) {
            saveData._updatedAt = getTime();
            data[entity][key] = Object.assign(data[entity][key], saveData);
        } else {
            saveData._createdAt = getTime();
            saveData._updatedAt = getTime();
            data[entity][key] = saveData;
        }
    }

    this.write = async function () {
        data._updatedAt = getTime();
        await mz.fs.writeFile(dbFile, JSON.stringify(data, null, 4));
    }
}

module.exports.load = load;