(
input: {
effect: Effect.Effect<
| Effect.Effect<ContextProviderA, never, ContextProviderR>
| (() => Generator<
Effect.Effect<any, never, ContextProviderR>,
ContextProviderA
>),
MakeContextProviderE,
MakeContextProviderR | Scope.Scope
>
dependencies?: Dependencies
}
)
| 91 | |
| 92 | // Effect Rpc Middleware: for single tag providing, we could use Provides, for providing Context or Layer (bad boy) we could use Wrap.. |
| 93 | export 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 |
| 137 | export const MergedContextProvider = < |
no test coverage detected
searching dependent graphs…