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

Function makeBuilder

packages/effect/src/internal/layer.ts:378–495  ·  view source on GitHub ↗
(
  self: Layer.Layer<ROut, E, RIn>,
  scope: Scope.Scope,
  inMemoMap = false
)

Source from the content-addressed store, hash-verified

376)
377
378const makeBuilder = <RIn, E, ROut>(
379 self: Layer.Layer<ROut, E, RIn>,
380 scope: Scope.Scope,
381 inMemoMap = false
382): Effect.Effect<(memoMap: Layer.MemoMap) => Effect.Effect<Context.Context<ROut>, E, RIn>> => {
383 const op = self as Primitive
384 switch (op._op_layer) {
385 case "Locally": {
386 return core.sync(() => (memoMap: Layer.MemoMap) => op.f(memoMap.getOrElseMemoize(op.self, scope)))
387 }
388 case "ExtendScope": {
389 return core.sync(() => (memoMap: Layer.MemoMap) =>
390 fiberRuntime.scopeWith(
391 (scope) => memoMap.getOrElseMemoize(op.layer, scope)
392 ) as unknown as Effect.Effect<Context.Context<ROut>, E, RIn>
393 )
394 }
395 case "Fold": {
396 return core.sync(() => (memoMap: Layer.MemoMap) =>
397 pipe(
398 memoMap.getOrElseMemoize(op.layer, scope),
399 core.matchCauseEffect({
400 onFailure: (cause) => memoMap.getOrElseMemoize(op.failureK(cause), scope),
401 onSuccess: (value) => memoMap.getOrElseMemoize(op.successK(value), scope)
402 })
403 )
404 )
405 }
406 case "Fresh": {
407 return core.sync(() => (_: Layer.MemoMap) => pipe(op.layer, buildWithScope(scope)))
408 }
409 case "FromEffect": {
410 return inMemoMap
411 ? core.sync(() => (_: Layer.MemoMap) => op.effect as Effect.Effect<Context.Context<ROut>, E, RIn>)
412 : core.sync(() => (memoMap: Layer.MemoMap) => memoMap.getOrElseMemoize(self, scope))
413 }
414 case "Provide": {
415 return core.sync(() => (memoMap: Layer.MemoMap) =>
416 pipe(
417 memoMap.getOrElseMemoize(op.first, scope),
418 core.flatMap((env) =>
419 pipe(
420 memoMap.getOrElseMemoize(op.second, scope),
421 core.provideContext(env)
422 )
423 )
424 )
425 )
426 }
427 case "Scoped": {
428 return inMemoMap
429 ? core.sync(() => (_: Layer.MemoMap) =>
430 fiberRuntime.scopeExtend(
431 op.effect as Effect.Effect<Context.Context<ROut>, E, RIn>,
432 scope
433 )
434 )
435 : core.sync(() => (memoMap: Layer.MemoMap) => memoMap.getOrElseMemoize(self, scope))

Callers 2

getOrElseMemoizeMethod · 0.85
layer.tsFile · 0.85

Calls 6

syncMethod · 0.80
getOrElseMemoizeMethod · 0.80
pipeFunction · 0.70
fMethod · 0.65
evaluateMethod · 0.65
mapMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…