Package: effect
Module: RequestResolver
Wraps request resolver execution between before and after effects.
Example (Running effects around request resolution)
import { Effect, Exit, Request, RequestResolver } from "effect"
interface GetDataRequest extends Request.Request<string> {
readonly _tag: "GetDataRequest"
}
const GetDataRequest = Request.tagged<GetDataRequest>("GetDataRequest")
const resolver = RequestResolver.make<GetDataRequest>((entries) =>
Effect.sync(() => {
for (const entry of entries) {
entry.completeUnsafe(Exit.succeed("data"))
}
})
)
// Add setup and cleanup around request execution
const resolverWithAround = RequestResolver.around(
resolver,
(entries) =>
Effect.gen(function*() {
yield* Effect.log(`Starting batch of ${entries.length} requests`)
return entries.length
}),
(entries, initialSize) =>
Effect.gen(function*() {
yield* Effect.log(
`Batch completed with ${entries.length} requests (started with ${initialSize})`
)
})
)
Signature
declare const around: { <A extends Request.Any, A2, X>(before: (entries: NonEmptyArray<Request.Entry<NoInfer<A>>>) => Effect.Effect<A2, Request.Error<A>>, after: (entries: NonEmptyArray<Request.Entry<NoInfer<A>>>, a: A2) => Effect.Effect<X, Request.Error<A>>): (self: RequestResolver<A>) => RequestResolver<A>; <A extends Request.Any, A2, X>(self: RequestResolver<A>, before: (entries: NonEmptyArray<Request.Entry<NoInfer<A>>>) => Effect.Effect<A2, Request.Error<A>>, after: (entries: NonEmptyArray<Request.Entry<NoInfer<A>>>, a: A2) => Effect.Effect<X, Request.Error<A>>): RequestResolver<A>; }
Since v2.0.0