import * as Ref from "@confect/core/Ref"; import type { AdvancedRunQueryOptions, GenericDataModel, GenericMutationCtx, } from "convex/server"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; import type { Options as MutationOptions } from "./QueryTransactionContext"; export type { TransactionLimits } from "convex/server"; export type { Options as MutationOptions } from "./QueryTransactionContext"; export type QueryOptions = AdvancedRunQueryOptions; const make = ( ctx: Pick, "runQuery" | "runMutation">, ) => ({ runQuery: Effect.fn("MutationTransactionContext.runQuery")( ( query: Query, args: Ref.Args, options: QueryOptions, ) => Ref.runWithCodec(query, args, (ref, encodedArgs) => ctx.runQuery(ref, encodedArgs, options), ), ), runMutation: Effect.fn("MutationTransactionContext.runMutation")( ( mutation: Mutation, args: Ref.Args, options: MutationOptions, ) => Ref.runWithCodec(mutation, args, (ref, encodedArgs) => ctx.runMutation(ref, encodedArgs, options), ), ), }); export class MutationTransactionContext extends Context.Service< MutationTransactionContext, ReturnType >()("@confect/server/MutationTransactionContext") {} export const layer = ( ctx: Pick, "runQuery" | "runMutation">, ) => Layer.succeed(MutationTransactionContext, make(ctx));