UNPKG

apemandb

Version:
59 lines (54 loc) 1.93 kB
/** * @function setupDatabase * @param {string} dialect * @param {string} rootUsername - Username of root * @param {string} rootPassword - Password of root * @param {Object} config - Database config */ 'use strict' const co = require('co') const { exec } = require('child_process') /** @lends setupDatabase */ function setupDatabase (dialect, rootUsername, rootPassword, config) { return co(function * () { switch (dialect) { case 'sqlite': return case 'mysql': yield setupDatabase.setupMysqlUser(rootUsername, rootPassword, config) return default: throw new Error(`[apemandb] Setup is not available for dialect: ${dialect}`) } }) } Object.assign(setupDatabase, { setupMysqlUser (rootUsername = process.env.MYSQL_ROOT_USERNAME, rootPassword = process.env.MYSQL_ROOT_PASSWORD, config = {}) { const escape = (value) => `${'\\`'}${value}${'\\`'}` return co(function * () { let { username, password, database, host = 'localhost', port } = config rootUsername = rootUsername || config.rootUsername || 'root' rootPassword = rootPassword || config.rootPassword let sql = `CREATE DATABASE IF NOT EXISTS ${database}; GRANT ALL ON ${escape(database)}.* TO '${username}'@'%' IDENTIFIED BY '${password}'` let command = `mysql -u${rootUsername} --host=${host} ${host === 'localhost' ? '' : '--protocol=tcp '}-e"${sql}"` let env = Object.assign({}, process.env) if (rootPassword) { env.MYSQL_PWD = rootPassword } let { stdout, stderr } = yield new Promise((resolve, reject) => exec(command, { env }, (err, stdout, stderr) => err ? reject(err) : resolve({ stdout, stderr }) ) ) if (stdout) { console.log(stdout) } if (stderr) { console.error(stderr) } }) } }) module.exports = setupDatabase