effect-io-ai

Package: effect
Module: Stream

Stream.provide

Provides a layer or context to the stream, removing the corresponding service requirements. Use options.local to build the layer every time; by default, layers are shared between provide calls.

Example (Providing stream requirements)

import { Console, Context, Effect, Layer, Stream } from "effect"

class Env extends Context.Service<Env, { readonly name: string }>()("Env") {}

const layer = Layer.succeed(Env)({ name: "Ada" })

const stream = Stream.fromEffect(
  Effect.gen(function*() {
    const env = yield* Effect.service(Env)
    return `Hello, ${env.name}`
  })
)

const withEnv = stream.pipe(Stream.provide(layer))

const program = Stream.runCollect(withEnv).pipe(
  Effect.flatMap((values) => Console.log(values))
)

Effect.runPromise(program)
// Output:
// ["Hello, Ada"]

Signature

declare const provide: { <AL, EL = never, RL = never>(layer: Layer.Layer<AL, EL, RL> | Context.Context<AL>, options?: { readonly local?: boolean | undefined; } | undefined): <A, E, R>(self: Stream<A, E, R>) => Stream<A, E | EL, Exclude<R, AL> | RL>; <A, E, R, AL, EL = never, RL = never>(self: Stream<A, E, R>, layer: Layer.Layer<AL, EL, RL> | Context.Context<AL>, options?: { readonly local?: boolean | undefined; } | undefined): Stream<A, E | EL, Exclude<R, AL> | RL>; }

Source

Since v4.0.0