diff options
Diffstat (limited to 'packages/opencode/src/storage/db.ts')
| -rw-r--r-- | packages/opencode/src/storage/db.ts | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/packages/opencode/src/storage/db.ts b/packages/opencode/src/storage/db.ts index f41a1ecd8..4cb0dbc3e 100644 --- a/packages/opencode/src/storage/db.ts +++ b/packages/opencode/src/storage/db.ts @@ -10,8 +10,9 @@ import { NamedError } from "@opencode-ai/util/error" import z from "zod" import path from "path" import { readFileSync, readdirSync, existsSync } from "fs" -import { Installation } from "../installation" import { Flag } from "../flag/flag" +import { CHANNEL } from "../installation/meta" +import { InstanceState } from "@/effect/instance-state" import { iife } from "@/util/iife" import { init } from "#db" @@ -28,10 +29,9 @@ const log = Log.create({ service: "db" }) export namespace Database { export function getChannelPath() { - const channel = Installation.CHANNEL - if (["latest", "beta"].includes(channel) || Flag.OPENCODE_DISABLE_CHANNEL_DB) + if (["latest", "beta"].includes(CHANNEL) || Flag.OPENCODE_DISABLE_CHANNEL_DB) return path.join(Global.Path.data, "opencode.db") - const safe = channel.replace(/[^a-zA-Z0-9._-]/g, "-") + const safe = CHANNEL.replace(/[^a-zA-Z0-9._-]/g, "-") return path.join(Global.Path.data, `opencode-${safe}.db`) } @@ -142,10 +142,11 @@ export namespace Database { } export function effect(fn: () => any | Promise<any>) { + const bound = InstanceState.bind(fn) try { - ctx.use().effects.push(fn) + ctx.use().effects.push(bound) } catch { - fn() + bound() } } @@ -162,12 +163,8 @@ export namespace Database { } catch (err) { if (err instanceof Context.NotFound) { const effects: (() => void | Promise<void>)[] = [] - const result = Client().transaction( - (tx: TxOrDb) => { - return ctx.provide({ tx, effects }, () => callback(tx)) - }, - { behavior: options?.behavior }, - ) + const txCallback = InstanceState.bind((tx: TxOrDb) => ctx.provide({ tx, effects }, () => callback(tx))) + const result = Client().transaction(txCallback, { behavior: options?.behavior }) for (const effect of effects) effect() return result as NotPromise<T> } |
