From c6286d1bb94d208ba66a97d16445978bba7c5c6b Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 15 Apr 2026 22:14:14 -0400 Subject: [PATCH] feat: unwrap uenv namespace to flat exports + barrel (#22701) --- packages/opencode/src/env/env.ts | 35 +++++++++++++++++++++++++++ packages/opencode/src/env/index.ts | 38 +----------------------------- 2 files changed, 36 insertions(+), 37 deletions(-) create mode 100644 packages/opencode/src/env/env.ts diff --git a/packages/opencode/src/env/env.ts b/packages/opencode/src/env/env.ts new file mode 100644 index 000000000..0ffd5ebdc --- /dev/null +++ b/packages/opencode/src/env/env.ts @@ -0,0 +1,35 @@ +import { Context, Effect, Layer } from "effect" +import { InstanceState } from "@/effect/instance-state" + +type State = Record + +export interface Interface { + readonly get: (key: string) => Effect.Effect + readonly all: () => Effect.Effect + readonly set: (key: string, value: string) => Effect.Effect + readonly remove: (key: string) => Effect.Effect +} + +export class Service extends Context.Service()("@opencode/Env") {} + +export const layer = Layer.effect( + Service, + Effect.gen(function* () { + const state = yield* InstanceState.make(Effect.fn("Env.state")(() => Effect.succeed({ ...process.env }))) + + const get = Effect.fn("Env.get")((key: string) => InstanceState.use(state, (env) => env[key])) + const all = Effect.fn("Env.all")(() => InstanceState.get(state)) + const set = Effect.fn("Env.set")(function* (key: string, value: string) { + const env = yield* InstanceState.get(state) + env[key] = value + }) + const remove = Effect.fn("Env.remove")(function* (key: string) { + const env = yield* InstanceState.get(state) + delete env[key] + }) + + return Service.of({ get, all, set, remove }) + }), +) + +export const defaultLayer = layer diff --git a/packages/opencode/src/env/index.ts b/packages/opencode/src/env/index.ts index b9efb6852..c589edbfd 100644 --- a/packages/opencode/src/env/index.ts +++ b/packages/opencode/src/env/index.ts @@ -1,37 +1 @@ -import { Context, Effect, Layer } from "effect" -import { InstanceState } from "@/effect/instance-state" - -export namespace Env { - type State = Record - - export interface Interface { - readonly get: (key: string) => Effect.Effect - readonly all: () => Effect.Effect - readonly set: (key: string, value: string) => Effect.Effect - readonly remove: (key: string) => Effect.Effect - } - - export class Service extends Context.Service()("@opencode/Env") {} - - export const layer = Layer.effect( - Service, - Effect.gen(function* () { - const state = yield* InstanceState.make(Effect.fn("Env.state")(() => Effect.succeed({ ...process.env }))) - - const get = Effect.fn("Env.get")((key: string) => InstanceState.use(state, (env) => env[key])) - const all = Effect.fn("Env.all")(() => InstanceState.get(state)) - const set = Effect.fn("Env.set")(function* (key: string, value: string) { - const env = yield* InstanceState.get(state) - env[key] = value - }) - const remove = Effect.fn("Env.remove")(function* (key: string) { - const env = yield* InstanceState.get(state) - delete env[key] - }) - - return Service.of({ get, all, set, remove }) - }), - ) - - export const defaultLayer = layer -} +export * as Env from "./env"