Skip to content

Commit 304c85f

Browse files
authored
refactor(util): remove xdg-basedir dependency (#42462)
1 parent 85988b9 commit 304c85f

5 files changed

Lines changed: 73 additions & 12 deletions

File tree

‎bun.lock‎

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎packages/util/package.json‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@
5252
"mime-types": "3.0.2",
5353
"minimatch": "10.2.5",
5454
"npm-package-arg": "13.0.2",
55-
"resolve.exports": "catalog:",
56-
"xdg-basedir": "5.1.0"
55+
"resolve.exports": "catalog:"
5756
},
5857
"devDependencies": {
5958
"@tsconfig/bun": "catalog:",

‎packages/util/src/global-roots.ts‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
import os from "os"
22
import path from "path"
3-
import { xdgCache, xdgConfig, xdgData, xdgState } from "xdg-basedir"
3+
4+
const home = os.homedir()
5+
const data = process.env.XDG_DATA_HOME || (home ? path.join(home, ".local", "share") : undefined)
6+
const cache = process.env.XDG_CACHE_HOME || (home ? path.join(home, ".cache") : undefined)
7+
const config = process.env.XDG_CONFIG_HOME || (home ? path.join(home, ".config") : undefined)
8+
const state = process.env.XDG_STATE_HOME || (home ? path.join(home, ".local", "state") : undefined)
49

510
/** The XDG base directories that root opencode's global paths. */
611
export function roots(app: string) {
712
return {
8-
data: path.join(xdgData!, app),
9-
cache: path.join(xdgCache!, app),
10-
config: path.join(xdgConfig!, app),
11-
state: path.join(xdgState!, app),
13+
data: path.join(data!, app),
14+
cache: path.join(cache!, app),
15+
config: path.join(config!, app),
16+
state: path.join(state!, app),
1217
tmp: path.join(os.tmpdir(), app),
1318
}
1419
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { describe, expect, test } from "bun:test"
2+
import os from "os"
3+
import path from "path"
4+
import { pathToFileURL } from "url"
5+
6+
const module = pathToFileURL(path.join(import.meta.dir, "../src/global-roots.ts")).href
7+
8+
describe("global roots", () => {
9+
test("uses XDG overrides", () => {
10+
const root = path.join(os.tmpdir(), "opencode-xdg-overrides")
11+
const env = {
12+
XDG_DATA_HOME: path.join(root, "data"),
13+
XDG_CACHE_HOME: path.join(root, "cache"),
14+
XDG_CONFIG_HOME: path.join(root, "config"),
15+
XDG_STATE_HOME: path.join(root, "state"),
16+
}
17+
18+
expect(run(env)).toEqual({
19+
data: path.join(env.XDG_DATA_HOME, "opencode"),
20+
cache: path.join(env.XDG_CACHE_HOME, "opencode"),
21+
config: path.join(env.XDG_CONFIG_HOME, "opencode"),
22+
state: path.join(env.XDG_STATE_HOME, "opencode"),
23+
tmp: path.join(os.tmpdir(), "opencode"),
24+
})
25+
})
26+
27+
test("empty XDG overrides use home directory defaults", () => {
28+
const home = path.join(os.tmpdir(), "opencode-xdg-home")
29+
30+
expect(
31+
run({
32+
XDG_DATA_HOME: "",
33+
XDG_CACHE_HOME: "",
34+
XDG_CONFIG_HOME: "",
35+
XDG_STATE_HOME: "",
36+
...(process.platform === "win32" ? { USERPROFILE: home } : { HOME: home }),
37+
}),
38+
).toEqual({
39+
data: path.join(home, ".local", "share", "opencode"),
40+
cache: path.join(home, ".cache", "opencode"),
41+
config: path.join(home, ".config", "opencode"),
42+
state: path.join(home, ".local", "state", "opencode"),
43+
tmp: path.join(os.tmpdir(), "opencode"),
44+
})
45+
})
46+
})
47+
48+
function run(env: Record<string, string>) {
49+
const result = Bun.spawnSync({
50+
cmd: [
51+
process.execPath,
52+
"-e",
53+
`const { roots } = await import(${JSON.stringify(module)}); console.log(JSON.stringify(roots("opencode")))`,
54+
],
55+
env: { ...process.env, ...env },
56+
stdout: "pipe",
57+
stderr: "pipe",
58+
})
59+
60+
expect(result.exitCode, result.stderr.toString()).toBe(0)
61+
return JSON.parse(result.stdout.toString())
62+
}

‎packages/workerd-spike/package.json‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
"@cloudflare/workers-types": "^4.20250808.0",
2525
"vitest": "3.2.7",
2626
"wrangler": "4.28.0",
27-
"xdg-basedir": "5.1.0",
2827
"unenv": "2.0.0-rc.24",
2928
"@effect/platform-node": "catalog:"
3029
}

0 commit comments

Comments
 (0)