MCPcopy Create free account
hub / github.com/Effect-TS/effect / fromEffectTagged

Function fromEffectTagged

packages/effect/src/RequestResolver.ts:505–548  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

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++) {
534 const entry = requests[i]
535 entry.completeUnsafe(exitFail(cause) as any)
536 }
537 },
538 onSuccess: (res) => {
539 for (let i = 0; i < res.length; i++) {
540 const entry = requests[i]
541 entry.completeUnsafe(exitSucceed(res[i]) as any)
542 }
543 }
544 }),
545 { concurrency: "unbounded", discard: true }
546 ) as Effect.Effect<void>
547 }
548 ) as any
549
550/**
551 * Sets the batch delay effect for this request resolver.

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