summaryrefslogtreecommitdiffhomepage
path: root/packages/opencode/src/storage/db.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/opencode/src/storage/db.ts')
-rw-r--r--packages/opencode/src/storage/db.ts21
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>
}