import { sql } from "drizzle-orm" import type { db } from "../../db/index.js" import type { CollectorRead } from "./signals-from-collectors.js" /** Bind internal collector SELECTs to the caller's read-only transaction, including all values. */ export function createCollectorContextReader(context: Pick): CollectorRead { return async (query: string, params: unknown[] = []): Promise => { const parts = query.split("?") if (parts.length !== params.length + 1) throw Error("Неверные параметры запроса источников оповещений") const statement = sql.empty() for (let index = 0; index < parts.length; index++) { statement.append(sql.raw(parts[index])) if (index < params.length) statement.append(sql`${params[index]}`) } const result = await context.execute(statement) return result.rows as T[] } }