import type { MiddlewareHandler } from 'astro' import { appRouter } from './routers' import { createCallerFactory } from './trpc' import { schema } from './db/schema' import { drizzle } from 'drizzle-orm/mysql2' import mysql from 'mysql2/promise' import { clone } from 'lodash-es' import { astroMiddleware } from '@altipla/sentry' import { sequence } from 'astro:middleware' import { env } from './config' let db: ReturnType> let createCaller = createCallerFactory(appRouter) export type Context = { db: typeof db } export type LocalsAPI = ReturnType export const onRequest: MiddlewareHandler = sequence(astroMiddleware, async ({ locals }, next) => { if (!db) { let connection = mysql.createPool({ uri: env.DATABASE_URL, }) db = drizzle(connection, { mode: 'default', schema, logger: import.meta.env.DEV, }) } locals.db = db locals.api = createCaller(clone(locals)) return next() })