style: format code for improved readability and consistency across multiple files

This commit is contained in:
MythEclipse
2026-05-31 16:54:15 +07:00
parent f224be2a66
commit 30ce607d88
14 changed files with 131 additions and 57 deletions
+51 -7
View File
@@ -1,14 +1,15 @@
import process from "node:process";
import {
getDatabase,
initializeDatabase,
} from "../../src/database/drizzle";
import { Pool } from "pg";
import { getDatabase, initializeDatabase } from "../../src/database/drizzle";
interface RunnableDatabase {
run(sql: string): Promise<unknown>;
}
const SAFE_TEST_DATABASE_NAME = /(^|[_-])(test|testing)([_-]|$)|gmw_test/i;
const DEFAULT_TEST_SCHEMA = "gmw_test";
const SAFE_TEST_SCHEMA_NAME =
/^[a-zA-Z_][a-zA-Z0-9_]*(test|testing)[a-zA-Z0-9_]*$/i;
function getDatabaseNameFromUrl(databaseUrl: string): string {
try {
@@ -26,6 +27,41 @@ function getConfiguredDatabaseName(): string {
return process.env.POSTGRES_DB ?? "";
}
function getTestSchemaName(): string {
const schemaName = process.env.TEST_DATABASE_SCHEMA ?? DEFAULT_TEST_SCHEMA;
if (!SAFE_TEST_SCHEMA_NAME.test(schemaName)) {
throw new Error(
`Refusing to use unsafe test schema "${schemaName}". Schema name must contain "test" and use identifier-safe characters only.`,
);
}
return schemaName;
}
function quoteIdentifier(identifier: string): string {
return `"${identifier.replace(/"/g, '""')}"`;
}
async function ensureTestSchemaExists(): Promise<void> {
assertSafeTestDatabaseUrl();
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const schemaName = getTestSchemaName();
try {
await pool.query(
`CREATE SCHEMA IF NOT EXISTS ${quoteIdentifier(schemaName)}`,
);
} finally {
await pool.end();
}
}
async function configureTestSearchPath(): Promise<void> {
const db = getTestDatabase();
await db.run(
`SET search_path TO ${quoteIdentifier(getTestSchemaName())}, public`,
);
}
export function assertSafeTestDatabaseUrl(): void {
if (process.env.NODE_ENV !== "test") {
throw new Error(
@@ -38,16 +74,24 @@ export function assertSafeTestDatabaseUrl(): void {
}
const databaseName = getConfiguredDatabaseName();
if (!SAFE_TEST_DATABASE_NAME.test(databaseName)) {
const hasSafeSchema = Boolean(process.env.TEST_DATABASE_SCHEMA);
if (!SAFE_TEST_DATABASE_NAME.test(databaseName) && !hasSafeSchema) {
throw new Error(
`Refusing to run destructive database test against non-test database "${databaseName || "unknown"}". Set TEST_DATABASE_URL or DATABASE_URL to a database whose name contains "test" (for example hub_test).`,
`Refusing to run destructive database test against non-test database "${databaseName || "unknown"}" without TEST_DATABASE_SCHEMA. Set TEST_DATABASE_SCHEMA to a safe test schema name or use a database whose name contains "test" (for example hub_test).`,
);
}
if (hasSafeSchema) {
getTestSchemaName();
}
}
export async function initializeTestDatabase() {
assertSafeTestDatabaseUrl();
return initializeDatabase();
await ensureTestSchemaExists();
const database = await initializeDatabase();
await configureTestSearchPath();
return database;
}
export function getTestDatabase(): RunnableDatabase {