diff options
| author | Kit Langton <[email protected]> | 2026-04-15 22:14:14 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-16 02:14:14 +0000 |
| commit | c6286d1bb94d208ba66a97d16445978bba7c5c6b (patch) | |
| tree | 31cb821def1b81334d130ada6d817d63fb3c3507 /packages | |
| parent | 710c81984aa38618ca7106b9521100a9964ae51d (diff) | |
| download | opencode-c6286d1bb94d208ba66a97d16445978bba7c5c6b.tar.gz opencode-c6286d1bb94d208ba66a97d16445978bba7c5c6b.zip | |
feat: unwrap uenv namespace to flat exports + barrel (#22701)
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/env/env.ts | 35 | ||||
| -rw-r--r-- | packages/opencode/src/env/index.ts | 38 |
2 files changed, 36 insertions, 37 deletions
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<string, string | undefined> + +export interface Interface { + readonly get: (key: string) => Effect.Effect<string | undefined> + readonly all: () => Effect.Effect<State> + readonly set: (key: string, value: string) => Effect.Effect<void> + readonly remove: (key: string) => Effect.Effect<void> +} + +export class Service extends Context.Service<Service, Interface>()("@opencode/Env") {} + +export const layer = Layer.effect( + Service, + Effect.gen(function* () { + const state = yield* InstanceState.make<State>(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<string, string | undefined> - - export interface Interface { - readonly get: (key: string) => Effect.Effect<string | undefined> - readonly all: () => Effect.Effect<State> - readonly set: (key: string, value: string) => Effect.Effect<void> - readonly remove: (key: string) => Effect.Effect<void> - } - - export class Service extends Context.Service<Service, Interface>()("@opencode/Env") {} - - export const layer = Layer.effect( - Service, - Effect.gen(function* () { - const state = yield* InstanceState.make<State>(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" |
