summaryrefslogtreecommitdiffhomepage
path: root/packages/shared/src/global.ts
diff options
context:
space:
mode:
authorDax <[email protected]>2026-04-15 11:50:24 -0400
committerGitHub <[email protected]>2026-04-15 15:50:24 +0000
commit4ae7c77f8abda8d51ddf52ee6e07890fa19b6629 (patch)
treed1b2891cb58ffe0d7d2a9e3af67340921f9f9758 /packages/shared/src/global.ts
parentf1751401aa2c53a4a0215c6deddf93df306aac8b (diff)
downloadopencode-4ae7c77f8abda8d51ddf52ee6e07890fa19b6629.tar.gz
opencode-4ae7c77f8abda8d51ddf52ee6e07890fa19b6629.zip
migrate: move flock and hash utilities to shared package (#22640)
Diffstat (limited to 'packages/shared/src/global.ts')
-rw-r--r--packages/shared/src/global.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/packages/shared/src/global.ts b/packages/shared/src/global.ts
new file mode 100644
index 000000000..538cc091b
--- /dev/null
+++ b/packages/shared/src/global.ts
@@ -0,0 +1,42 @@
+import path from "path"
+import { xdgData, xdgCache, xdgConfig, xdgState } from "xdg-basedir"
+import os from "os"
+import { Context, Effect, Layer } from "effect"
+
+export namespace Global {
+ 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* () {
+ const app = "opencode"
+ const home = process.env.OPENCODE_TEST_HOME ?? os.homedir()
+ const data = path.join(xdgData!, app)
+ const cache = path.join(xdgCache!, app)
+ const cfg = path.join(xdgConfig!, app)
+ const state = path.join(xdgState!, app)
+ const bin = path.join(cache, "bin")
+ const log = path.join(data, "log")
+
+ return Service.of({
+ home,
+ data,
+ cache,
+ config: cfg,
+ state,
+ bin,
+ log,
+ })
+ }),
+ )
+}