Something went wrong. Try again.
opencode v2 mirror
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596import nodePath from "path"import { customType } from "drizzle-orm/sqlite-core"import { Schema } from "effect"import { AbsolutePath } from "../schema.js"
function storagePath(input: string) { if (process.platform !== "win32") return input return input.replaceAll("\\", "/")}
function isWindowsStoragePath(input: string) { return /^[A-Za-z]:\//.test(input) || input.startsWith("//")}
function absolute(input: string) { const result = storagePath(input) // Persisted projects and sessions can move between operating systems during migration. if (!nodePath.posix.isAbsolute(result) && !isWindowsStoragePath(result)) { throw new Error(`Path is not absolute: ${input}`) } return result}
function toPlatform(input: string) { if (process.platform !== "win32" || !isWindowsStoragePath(input)) return input return input.replaceAll("/", "\\")}
export const absoluteColumn = customType<{ data: AbsolutePath driverData: string driverOutput: string}>({ dataType() { return "text" }, toDriver(input) { return absolute(input) }, fromDriver(input) { return AbsolutePath.make(toPlatform(absolute(input))) },})
// Legacy sessions may persist an empty directory. Keep that existing value// readable while normalizing and validating every real directory.export const directoryColumn = customType<{ data: string driverData: string driverOutput: string}>({ dataType() { return "text" }, toDriver(input) { return input ? absolute(input) : input }, fromDriver(input) { return input ? toPlatform(absolute(input)) : input },})
export const pathColumn = customType<{ data: string driverData: string driverOutput: string}>({ dataType() { return "text" }, toDriver(input) { return storagePath(input) }, fromDriver(input) { return storagePath(input) },})
const decodeAbsoluteArray = Schema.decodeUnknownSync(Schema.fromJsonString(Schema.Array(Schema.String)))
export const absoluteArrayColumn = customType<{ data: AbsolutePath[] driverData: string driverOutput: string}>({ dataType() { return "text" }, toDriver(input) { return JSON.stringify(input.map(absolute)) }, fromDriver(input) { return decodeAbsoluteArray(input).map((item) => AbsolutePath.make(toPlatform(absolute(item)))) },})