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

Function ContextProvider

packages/infra/src/ContextProvider.ts:93–134  ·  view source on GitHub ↗
(
  input: {
    effect: Effect.Effect<
      | Effect.Effect<ContextProviderA, never, ContextProviderR>
      | (() => Generator<
        Effect.Effect<any, never, ContextProviderR>,
        ContextProviderA
      >),
      MakeContextProviderE,
      MakeContextProviderR | Scope.Scope
    >
    dependencies?: Dependencies
  }
)

Source from the content-addressed store, hash-verified

91
92// Effect Rpc Middleware: for single tag providing, we could use Provides, for providing Context or Layer (bad boy) we could use Wrap..
93export const ContextProvider = <
94 ContextProviderA,
95 MakeContextProviderE,
96 MakeContextProviderR,
97 ContextProviderR extends Scope.Scope,
98 Dependencies extends NonEmptyReadonlyArray<Layer.Any>
99>(
100 input: {
101 effect: Effect.Effect<
102 | Effect.Effect<ContextProviderA, never, ContextProviderR>
103 | (() => Generator<
104 Effect.Effect<any, never, ContextProviderR>,
105 ContextProviderA
106 >),
107 MakeContextProviderE,
108 MakeContextProviderR | Scope.Scope
109 >
110 dependencies?: Dependencies
111 }
112) => {
113 const ctx = Context.Service<
114 ContextProviderId,
115 Effect.Effect<ContextProviderA, never, ContextProviderR>
116 >(
117 "ContextProvider"
118 )
119 const e = input.effect.pipe(
120 Effect.map((eg) => (eg as any)[Symbol.toStringTag] === "GeneratorFunction" ? Effect.fnUntraced(eg as any)() : eg)
121 )
122 const l = Layer.effect(ctx, e as any)
123 return Object.assign(ctx, {
124 Default: l.pipe(
125 input.dependencies ? Layer.provide([...input.dependencies] as [Layer.Any, ...Layer.Any[]]) as any : (_: any) => _
126 ) satisfies Layer.Layer<
127 ContextProviderId,
128 | MakeContextProviderE
129 | LayerUtils.GetLayersError<Dependencies>,
130 | Exclude<MakeContextProviderR, LayerUtils.GetLayersSuccess<Dependencies>>
131 | LayerUtils.GetLayersContext<Dependencies>
132 >
133 })
134}
135
136// Note: the type here must be aligned with mergeContextProviders
137export const MergedContextProvider = <

Callers 3

MergedContextProviderFunction · 0.85
ContextProvider.tsFile · 0.85

Calls 3

pipeMethod · 0.65
mapMethod · 0.65
provideMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…