Home Identifier Source Repository

src/adapters/nedb/index.js

const Promise = require('bluebird');
const Datastore = require('nedb');

/**
 * @namespace nedb
 */
export const nedb = {};

/**
 * Accepts config parameters
 * @memberof nedb
 * @param {Object} cfg Configuration
 */
nedb.config = (cfg) => {
  nedb.db = Promise.promisifyAll(new Datastore(cfg));
  return true;
};

/**
 * Creates a new entry in the database
 * @memberof nedb
 * @param {Object} body Contents to create entry
 * @param {String|Number} [version] The version of the model to use
 * @returns {Object} promise
 */
nedb.create = (body, version = false) => {
  // Test validation
  const validationErrors = nedb.validate(body, version);
  // Return promise
  return new Promise((resolve, reject) => {
    /* istanbul ignore if */
    if (validationErrors) {
      reject(validationErrors);
    } else {
      resolve(nedb.db.insertAsync(body));
    }
  });
};

/**
 * Reads from the database
 * @memberof nedb
 * @param {Object} query Specific id or query to construct read
 * @returns {Object} promise
 */
nedb.read = (query) => nedb.db.findAsync(query);

/**
 * Updates an entry in the database
 * @memberof nedb
 * @param {String} query Query to locate entries to update
 * @param {Object} body Contents to update
 * @param {String|Number} [version] The version of the model to use
 * @returns {Object} promise
 */
nedb.update = (query, body, version = false) => {
  // Test validation
  const validationErrors = nedb.validate(body, version);
  // Return promise
  return new Promise((resolve, reject) => {
    /* istanbul ignore if */
    if (validationErrors) {
      reject(validationErrors);
    } else {
      resolve(nedb.db.updateAsync(query, { $set: body }, { multi: true }));
    }
  });
};

/**
 * Deletes an item from the database
 * @memberof nedb
 * @param {Object} query Query to locate entries to delete
 * @returns {Object} promise
 */
nedb.delete = (query) => nedb.db.removeAsync(query, { multi: true });

/**
 * Extends adapter by adding new method
 * @memberof nedb
 * @param {String} name The name of the method
 * @param {Function} fn The method to add
 */
nedb.extend = (name, fn) => {
  nedb[name] = fn.bind(nedb);
};