import { type Context, Effect, type Layer, Scope } from "effect" import type { ScopeOptions } from "./ScopeOptions.js" import { useMemo } from "./useMemo.js" import { useScope } from "./useScope.js" export const useContext: { ( layer: Layer.Layer, options?: ScopeOptions, ): Effect.Effect, E, Exclude> } = Effect.fn("useContext")(function* ( layer: Layer.Layer, options?: ScopeOptions, ) { const scope = yield* useScope([layer], options) return yield* useMemo(() => Effect.provideService( Effect.provide(Effect.context(), layer), Scope.Scope, scope, ), [scope]) })