apemandb
Version:
Database for apeman project.
63 lines (55 loc) • 1.86 kB
JavaScript
/**
* 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.
*/
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