/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/core/src/database/path.ts
91 строка
2 KB
Luke Parker
fix(opencode): enforce storage path invariants (#29666)
02 июн 2026, 03:54
Не верифицирован
02 июн 2026, 03:54
f0c7feb
Код
Авторство
О чём код?
import nodePath from "path" import { customType } from "drizzle-orm/sqlite-core" import { AbsolutePath } from "../schema" 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) if (!nodePath.posix.isAbsolute(result) && !(process.platform === "win32" && 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) }, }) export const absoluteArrayColumn = customType<{ data: AbsolutePath[] driverData: string driverOutput: string }>({ dataType() { return "text" }, toDriver(input) { return JSON.stringify(input.map(absolute)) }, fromDriver(input) { return (JSON.parse(input) as string[]).map((item) => AbsolutePath.make(toPlatform(absolute(item)))) }, })