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

Function acquireUseRelease

packages/effect/src/Channel.ts:581–597  ·  view source on GitHub ↗
(
  acquire: Effect.Effect<A, E, R>,
  use: (a: A) => Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
  release: (a: A, exit: Exit.Exit<OutDone, OutErr>) => Effect.Effect<unknown>
)

Source from the content-addressed store, hash-verified

579 * @since 2.0.0
580 */
581export const acquireUseRelease = <A, E, R, OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>(
582 acquire: Effect.Effect<A, E, R>,
583 use: (a: A) => Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
584 release: (a: A, exit: Exit.Exit<OutDone, OutErr>) => Effect.Effect<unknown>
585): Channel<OutElem, OutErr | E, OutDone, InElem, InErr, InDone, Env | R> =>
586 fromTransformBracket(
587 Effect.fnUntraced(function*(upstream, scope, forkedScope) {
588 let option = Option.none<A>()
589 yield* Scope.addFinalizerExit(forkedScope, (exit) =>
590 Option.isSome(option)
591 ? release(option.value, exit as any)
592 : Effect.void)
593 const value = yield* Effect.uninterruptible(acquire)
594 option = Option.some(value)
595 return yield* toTransform(use(value))(upstream, scope)
596 })
597 )
598
599/**
600 * Acquires a resource, emits the acquired value as a single channel element,

Callers 1

Channel.tsFile · 0.85

Calls 5

fromTransformBracketFunction · 0.85
toTransformFunction · 0.85
someMethod · 0.80
releaseFunction · 0.70
useFunction · 0.70

Tested by

no test coverage detected