import postgres from "postgres"; import { env } from "./env"; declare global { // eslint-disable-next-line no-var var __csa_sql: ReturnType | undefined; } export const sql = globalThis.__csa_sql ?? postgres(env.DATABASE_URL, { max: 10, idle_timeout: 30, connect_timeout: 10, transform: { undefined: null }, types: { // numeric → number numeric: { to: 1700, from: [1700], serialize: (x: number) => String(x), parse: (x: string) => Number(x) }, }, }); if (process.env.NODE_ENV !== "production") globalThis.__csa_sql = sql; export type Sql = typeof sql; /** Serialize a number[] for a pgvector column. */ export function vec(v: number[]): string { return `[${v.join(",")}]`; } export async function getSetting(key: string, fallback: T): Promise { const rows = await sql<{ value: T }[]>`SELECT value FROM settings WHERE key = ${key}`; return rows[0]?.value ?? fallback; } export async function setSetting(key: string, value: unknown): Promise { await sql`INSERT INTO settings (key, value, updated_at) VALUES (${key}, ${sql.json(value as never)}, now()) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value, updated_at = now()`; }