Download packages/core/src/database/path.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.14 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/core/src/database/path.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/core/src/database/path.ts
-
curl -L -o path.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/core/src/database/path.ts
2.14 kB
| 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)))) | |
| }, | |
| }) | |