UNPKG

apemandb

Version:
63 lines (55 loc) 1.86 kB
/** * Create an apemandb instance. * @function create * @param {object} config * @param {object} config.env - Env variables. * @param {string|string[]} config.models * @param {string|string[]} config.hooks * @param {string|string[]} config.models * @param {string|string[]} config.addons * @param [object} options - Optional setting. */ 'use strict' const Apemandb = require('./apemandb') const { camelcase } = require('stringcase') const modelsFromFiles = require('./modeling/from_files') const seedsFromFiles = require('./seeding/from_files') const hooksFromFiles = require('./hooking/from_files') const addonsFromFiles = require('./adding/from_files') const debug = require('debug')('apeman:db') /** @lends create */ function create (config) { let { env } = config let db = _newDb(env) let { modelSearchPath } = config Object.assign(db, { modelSearchPath }) let models = modelsFromFiles(db, config.models || []) let seeds = seedsFromFiles(models, config.seeds || []) let hooks = hooksFromFiles(models, config.hooks || []) let addons = addonsFromFiles(models, config.addons || []) debug(`models: ${Object.keys(models)}`) return Object.assign(db, { env, models, seeds, hooks, addons, config }) } function _newDb (env) { let options = _formatKeys(env || {}) let database = options.database || options.schema let username = options.username || options.user let password = options.password delete options.database delete options.schema delete options.username delete options.user delete options.password return new Apemandb(database, username, password, options) } function _formatKeys (obj) { let result = {} Object.keys(obj).forEach((key) => { let lowerKey = camelcase(key.toLowerCase()) result[ lowerKey ] = obj[ lowerKey ] || obj[ key ] }) return result } module.exports = create