Package: effect
Module: RequestResolver
Constructs a request resolver with the requests grouped by a calculated key.
Details
The key can use the Equal trait to determine if two keys are equal.
Example (Grouping requests by key)
import { Effect, Exit, Request, RequestResolver } from "effect"
interface GetUserByRole extends Request.Request<string, Error> {
readonly _tag: "GetUserByRole"
readonly role: string
readonly id: number
}
const GetUserByRole = Request.tagged<GetUserByRole>("GetUserByRole")
// Group requests by role for efficient batch processing
const UserByRoleResolver = RequestResolver.makeGrouped<GetUserByRole, string>({
key: ({ request }) => request.role,
resolver: (entries, role) =>
Effect.sync(() => {
console.log(`Processing ${entries.length} requests for role: ${role}`)
for (const entry of entries) {
entry.completeUnsafe(
Exit.succeed(`User ${entry.request.id} with role ${role}`)
)
}
})
})
Signature
declare const makeGrouped: <A extends Request.Any, K>(options: { readonly key: (entry: Request.Entry<A>) => K; readonly resolver: (entries: NonEmptyArray<Request.Entry<A>>, key: K) => Effect.Effect<void, Request.Error<A>>; }) => RequestResolver<A>
Since v4.0.0