mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-14 16:51:33 +00:00
Move the Global module from packages/opencode/src/global to packages/core/src/global to provide a unified location for managing XDG directories and application paths. This eliminates duplicate path definitions across packages and ensures consistent access to data, config, cache, state, log, and bin directories throughout the codebase.
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import path from "path"
|
|
import fs from "fs/promises"
|
|
import { xdgData, xdgCache, xdgConfig, xdgState } from "xdg-basedir"
|
|
import os from "os"
|
|
import { Context, Effect, Layer } from "effect"
|
|
import { Flock } from "./util/flock"
|
|
|
|
const app = "opencode"
|
|
const data = path.join(xdgData!, app)
|
|
const cache = path.join(xdgCache!, app)
|
|
const config = path.join(xdgConfig!, app)
|
|
const state = path.join(xdgState!, app)
|
|
|
|
const paths = {
|
|
get home() {
|
|
return process.env.OPENCODE_TEST_HOME ?? os.homedir()
|
|
},
|
|
data,
|
|
bin: path.join(cache, "bin"),
|
|
log: path.join(data, "log"),
|
|
cache,
|
|
config,
|
|
state,
|
|
}
|
|
|
|
export const Path = paths
|
|
|
|
Flock.setGlobal({ state })
|
|
|
|
await Promise.all([
|
|
fs.mkdir(Path.data, { recursive: true }),
|
|
fs.mkdir(Path.config, { recursive: true }),
|
|
fs.mkdir(Path.state, { recursive: true }),
|
|
fs.mkdir(Path.log, { recursive: true }),
|
|
fs.mkdir(Path.bin, { recursive: true }),
|
|
])
|
|
|
|
export class Service extends Context.Service<Service, Interface>()("@opencode/Global") {}
|
|
|
|
export interface Interface {
|
|
readonly home: string
|
|
readonly data: string
|
|
readonly cache: string
|
|
readonly config: string
|
|
readonly state: string
|
|
readonly bin: string
|
|
readonly log: string
|
|
}
|
|
|
|
export const layer = Layer.effect(
|
|
Service,
|
|
Effect.gen(function* () {
|
|
return Service.of({
|
|
home: Path.home,
|
|
data: Path.data,
|
|
cache: Path.cache,
|
|
config: Path.config,
|
|
state: Path.state,
|
|
bin: Path.bin,
|
|
log: Path.log,
|
|
})
|
|
}),
|
|
)
|
|
|
|
export * as Global from "./global"
|