import * as Ref from "@confect/core/Ref"; import type { GenericDataModel, GenericQueryCtx, TransactionLimits, } from "convex/server"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; export type { TransactionLimits } from "convex/server"; export interface Options { readonly transactionLimits?: TransactionLimits; } const make = (ctx: Pick, "runQuery">) => ({ runQuery: Effect.fn("QueryTransactionContext.runQuery")( ( query: Query, args: Ref.Args, options: Options, ) => Ref.runWithCodec(query, args, (ref, encodedArgs) => ctx.runQuery(ref, encodedArgs, options), ), ), }); export class QueryTransactionContext extends Context.Service< QueryTransactionContext, ReturnType >()("@confect/server/QueryTransactionContext") {} export const layer = ( ctx: Pick, "runQuery">, ) => Layer.succeed(QueryTransactionContext, make(ctx));