Files
thilalib/src/TRPC/middlewares.ts
Julien Valverdé 02d8e38f4d
All checks were successful
Publish / publish (push) Successful in 13s
Lint / lint (push) Successful in 11s
0.1.17 (#18)
Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Reviewed-on: #18
2024-09-07 20:56:30 +02:00

45 lines
1.3 KiB
TypeScript

import { Effect, Match } from "effect"
import type { TRPCContextTransaction } from "./TRPCContext"
import { importTRPCServer } from "./importTRPCServer"
export const ExpressOnly = importTRPCServer.pipe(Effect.map(({
experimental_standaloneMiddleware,
TRPCError,
}) => experimental_standaloneMiddleware<{
ctx: { readonly transaction: TRPCContextTransaction }
}>().create(opts =>
Match.value(opts.ctx.transaction).pipe(
Match.tag("Express", transaction =>
opts.next({ ctx: { transaction } })
),
Match.orElse(() => {
throw new TRPCError({
code: "BAD_REQUEST",
message: "Only Express transport is supported by this procedure",
})
}),
)
)))
export const WebSocketOnly = importTRPCServer.pipe(Effect.map(({
experimental_standaloneMiddleware,
TRPCError,
}) => experimental_standaloneMiddleware<{
ctx: { readonly transaction: TRPCContextTransaction }
}>().create(opts =>
Match.value(opts.ctx.transaction).pipe(
Match.tag("WebSocket", transaction =>
opts.next({ ctx: { transaction } })
),
Match.orElse(() => {
throw new TRPCError({
code: "BAD_REQUEST",
message: "Only WebSocket transport is supported by this procedure",
})
}),
)
)))