summaryrefslogtreecommitdiffhomepage
path: root/cloud/core/src/drizzle/index.ts
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-09-18 01:32:40 -0400
committerFrank <[email protected]>2025-09-18 01:32:40 -0400
commitfc4f281408c56ab12db571a470456212a479edf5 (patch)
tree309d23b0c497bc61af6f8e650a6036fa41d7cbdb /cloud/core/src/drizzle/index.ts
parentf8c4f713a5b48892899d0ac195c3470ab7ef764c (diff)
downloadopencode-fc4f281408c56ab12db571a470456212a479edf5.tar.gz
opencode-fc4f281408c56ab12db571a470456212a479edf5.zip
wip: zen
Diffstat (limited to 'cloud/core/src/drizzle/index.ts')
-rw-r--r--cloud/core/src/drizzle/index.ts86
1 files changed, 0 insertions, 86 deletions
diff --git a/cloud/core/src/drizzle/index.ts b/cloud/core/src/drizzle/index.ts
deleted file mode 100644
index 806037996..000000000
--- a/cloud/core/src/drizzle/index.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-import { drizzle } from "drizzle-orm/planetscale-serverless"
-import { Resource } from "@opencode/cloud-resource"
-export * from "drizzle-orm"
-import { Client } from "@planetscale/database"
-
-import { MySqlTransaction, type MySqlTransactionConfig } from "drizzle-orm/mysql-core"
-import type { ExtractTablesWithRelations } from "drizzle-orm"
-import type { PlanetScalePreparedQueryHKT, PlanetscaleQueryResultHKT } from "drizzle-orm/planetscale-serverless"
-import { Context } from "../context"
-import { memo } from "../util/memo"
-
-export namespace Database {
- export type Transaction = MySqlTransaction<
- PlanetscaleQueryResultHKT,
- PlanetScalePreparedQueryHKT,
- Record<string, never>,
- ExtractTablesWithRelations<Record<string, never>>
- >
-
- const client = memo(() => {
- const result = new Client({
- host: Resource.Database.host,
- username: Resource.Database.username,
- password: Resource.Database.password,
- })
- const db = drizzle(result, {})
- return db
- })
-
- export type TxOrDb = Transaction | ReturnType<typeof client>
-
- const TransactionContext = Context.create<{
- tx: TxOrDb
- effects: (() => void | Promise<void>)[]
- }>()
-
- export async function use<T>(callback: (trx: TxOrDb) => Promise<T>) {
- try {
- const { tx } = TransactionContext.use()
- return tx.transaction(callback)
- } catch (err) {
- if (err instanceof Context.NotFound) {
- const effects: (() => void | Promise<void>)[] = []
- const result = await TransactionContext.provide(
- {
- effects,
- tx: client(),
- },
- () => callback(client()),
- )
- await Promise.all(effects.map((x) => x()))
- return result
- }
- throw err
- }
- }
- export async function fn<Input, T>(callback: (input: Input, trx: TxOrDb) => Promise<T>) {
- return (input: Input) => use(async (tx) => callback(input, tx))
- }
-
- export async function effect(effect: () => any | Promise<any>) {
- try {
- const { effects } = TransactionContext.use()
- effects.push(effect)
- } catch {
- await effect()
- }
- }
-
- export async function transaction<T>(callback: (tx: TxOrDb) => Promise<T>, config?: MySqlTransactionConfig) {
- try {
- const { tx } = TransactionContext.use()
- return callback(tx)
- } catch (err) {
- if (err instanceof Context.NotFound) {
- const effects: (() => void | Promise<void>)[] = []
- const result = await client().transaction(async (tx) => {
- return TransactionContext.provide({ tx, effects }, () => callback(tx))
- }, config)
- await Promise.all(effects.map((x) => x()))
- return result
- }
- throw err
- }
- }
-}