MCPcopy Create free account
hub / github.com/effect-app/libs / fromEffectTagged

Function fromEffectTagged

repos/effect/packages/effect/src/RequestResolver.ts:487–530  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

485 * const GetPost = Request.tagged<GetPost>("GetPost")
486 *
487 * // Create a resolver that handles different request types
488 * const MyResolver = RequestResolver.fromEffectTagged<MyRequest>()({
489 * GetUser: (requests) =>
490 * Effect.succeed(requests.map((req) => `User ${req.request.id}`)),
491 * GetPost: (requests) =>
492 * Effect.succeed(requests.map((req) => `Post ${req.request.id}`))
493 * })
494 *
495 * const program = Effect.all([
496 * Effect.request<GetUser>(GetUser({ id: 1 }), MyResolver),
497 * Effect.request<GetPost>(GetPost({ id: 2 }), MyResolver)
498 * ] as const)
499 * await Effect.runPromise(program) // => ["User 1", "Post 2"]
500 * ```
501 *
502 * @category constructors
503 * @since 2.0.0
504 */
505export const fromEffectTagged = <A extends Request.Any & { readonly _tag: string }>() =>
506<
507 Fns extends {
508 readonly [Tag in A["_tag"]]: [Extract<A, { readonly _tag: Tag }>] extends [infer Req]
509 ? Req extends Request.Request<infer ReqA, infer ReqE, infer _ReqR> ?
510 (requests: Array<Request.Entry<Req>>) => Effect.Effect<Iterable<ReqA>, ReqE>
511 : never
512 : never
513 }
514>(
515 fns: Fns
516): RequestResolver<A> =>
517 make<A>(
518 (entries): Effect.Effect<void> => {
519 const grouped = new Map<A["_tag"], Array<Request.Entry<A>>>()
520 for (let i = 0, len = entries.length; i < len; i++) {
521 const group = grouped.get(entries[i].request._tag)
522 if (group) {
523 group.push(entries[i])
524 } else {
525 grouped.set(entries[i].request._tag, [entries[i]])
526 }
527 }
528 return Effect.forEach(
529 grouped,
530 ([tag, requests]) =>
531 Effect.matchCause((fns[tag] as any)(requests) as Effect.Effect<Array<any>, unknown, unknown>, {
532 onFailure: (cause) => {
533 for (let i = 0; i < requests.length; i++) {

Callers

nothing calls this directly

Calls 7

exitFailFunction · 0.90
pushMethod · 0.80
completeUnsafeMethod · 0.80
makeFunction · 0.70
getMethod · 0.65
setMethod · 0.65
forEachMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…