dev-url.js 1.34 KB
/**
 * 本机开发 MySQL 的连接串 —— 全仓唯一的一份默认值。
 *
 * 「开发机上跑着哪个 MySQL、用什么口令连」是一条规则,只能写一次。以前每个脚本各写一份
 * `process.env.DATABASE_URL || 'mysql://root:<猜的口令>@...'`,猜错了也没人发现(因为没人跑),
 * 于是真链路脚本集体腐烂。
 *
 * 这个实例由 `docker-compose.yml` 的 mysql 服务提供,`tools/scripts/mysql-dev.js` 用本函数解析出
 * 的口令去 provision 它 —— 容器口令和代码口令是同一个字面量,不会再分叉。
 *
 * 部署环境一律由 `DATABASE_URL` 覆盖:`process.env.DATABASE_URL || devMysqlUrl('idearun')`。
 * 本函数是纯的,不读 `process.env`(保持 @drama/db「不读环境变量」的边界纪律)。
 */

/** 本机开发 MySQL 的 server 端点(不含库名)。 */
const DEV_MYSQL_SERVER = 'mysql://root:idearun_dev_pw@127.0.0.1:3306'

/**
 * @param {string} database 库名。建库 / 删库这类管理连接传一个已存在的库名即可(如 `idearun`)。
 * @returns {string} 形如 mysql://root:***@127.0.0.1:3306/<database>
 */
export function devMysqlUrl(database) {
  if (!/^[A-Za-z0-9_]+$/.test(String(database || ''))) {
    throw new Error(`devMysqlUrl: invalid database name: ${database}`)
  }
  return `${DEV_MYSQL_SERVER}/${database}`
}