64 lines
1.7 KiB
TypeScript
64 lines
1.7 KiB
TypeScript
import { spawn } from "node:child_process";
|
|
import fs from "node:fs";
|
|
|
|
const envFile = ".env";
|
|
const localEnv = fs.existsSync(envFile) ? readEnvFile(envFile) : {};
|
|
|
|
const host = localEnv.DB_HOST || "127.0.0.1";
|
|
const port = localEnv.DB_PORT || "3306";
|
|
const user = localEnv.DB_USER || "root";
|
|
const password = localEnv.DB_PASSWORD || "";
|
|
const catalogDatabase = localEnv.DB_NAME || "9bplus";
|
|
const scrapeDatabase = localEnv.SCRAPE_DB_NAME || "catalog_scrape";
|
|
|
|
const dbgateEnv = {
|
|
...process.env,
|
|
CONNECTIONS: "local9bplus,localscrape",
|
|
|
|
ENGINE_local9bplus: "mariadb@dbgate-plugin-mysql",
|
|
SERVER_local9bplus: host,
|
|
PORT_local9bplus: port,
|
|
USER_local9bplus: user,
|
|
PASSWORD_local9bplus: password,
|
|
DATABASE_local9bplus: catalogDatabase,
|
|
LABEL_local9bplus: "Local 9bplus DB",
|
|
READONLY_local9bplus: "1",
|
|
|
|
ENGINE_localscrape: "mariadb@dbgate-plugin-mysql",
|
|
SERVER_localscrape: host,
|
|
PORT_localscrape: port,
|
|
USER_localscrape: user,
|
|
PASSWORD_localscrape: password,
|
|
DATABASE_localscrape: scrapeDatabase,
|
|
LABEL_localscrape: "Local scrape DB",
|
|
READONLY_localscrape: "0",
|
|
};
|
|
|
|
const child = spawn("dbgate-serve", {
|
|
stdio: "inherit",
|
|
shell: true,
|
|
env: dbgateEnv,
|
|
});
|
|
|
|
child.on("exit", (code, signal) => {
|
|
if (signal) {
|
|
process.kill(process.pid, signal);
|
|
return;
|
|
}
|
|
|
|
process.exit(code ?? 0);
|
|
});
|
|
|
|
function readEnvFile(filePath: string): Record<string, string> {
|
|
return Object.fromEntries(
|
|
fs.readFileSync(filePath, "utf8")
|
|
.split(/\r?\n/)
|
|
.map((line) => line.trim())
|
|
.filter((line) => line && !line.startsWith("#") && line.includes("="))
|
|
.map((line) => {
|
|
const separator = line.indexOf("=");
|
|
return [line.slice(0, separator).trim(), line.slice(separator + 1).trim()];
|
|
}),
|
|
);
|
|
}
|