import { SQL, sql } from "drizzle-orm"; import { SelectResultFields } from "drizzle-orm/query-builders/select.types"; import { SelectedFields } from "drizzle-orm/sqlite-core"; export function jsonObject(shape: T) { const chunks: SQL[] = []; Object.entries(shape).forEach(([key, value]) => { if (chunks.length > 0) { chunks.push(sql.raw(`,`)); } chunks.push(sql.raw(`'${key}',`)); chunks.push(sql`${value}`); }); return sql>`coalesce(json_object(${sql.join( chunks, )}), ${sql`json_object()`})`; } export function jsonAggObject(shape: T) { return sql[]>`coalesce(json_group_array(${jsonObject( shape, )}), ${sql`json_array()`})`.mapWith( (v) => JSON.parse(v) as SelectResultFields[], ); }