Skip to content

Commit 225d6d6

Browse files
authored
use XDG base directory compatible cache location (#12676)
* use XDG base directory compatible cache location * use ~/Library/Caches on darwin
1 parent 5c71de1 commit 225d6d6

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

src/server/server.ts

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,41 @@ namespace ts.server {
2020
} = require("os");
2121

2222
function getGlobalTypingsCacheLocation() {
23-
let basePath: string;
2423
switch (process.platform) {
25-
case "win32":
26-
basePath = process.env.LOCALAPPDATA ||
24+
case "win32": {
25+
const basePath = process.env.LOCALAPPDATA ||
2726
process.env.APPDATA ||
2827
(os.homedir && os.homedir()) ||
2928
process.env.USERPROFILE ||
3029
(process.env.HOMEDRIVE && process.env.HOMEPATH && normalizeSlashes(process.env.HOMEDRIVE + process.env.HOMEPATH)) ||
3130
os.tmpdir();
32-
break;
33-
case "linux":
34-
case "android":
35-
basePath = (os.homedir && os.homedir()) ||
36-
process.env.HOME ||
37-
((process.env.LOGNAME || process.env.USER) && `/home/${process.env.LOGNAME || process.env.USER}`) ||
38-
os.tmpdir();
39-
break;
31+
return combinePaths(normalizeSlashes(basePath), "Microsoft/TypeScript");
32+
}
4033
case "darwin":
41-
const homeDir = (os.homedir && os.homedir()) ||
42-
process.env.HOME ||
43-
((process.env.LOGNAME || process.env.USER) && `/Users/${process.env.LOGNAME || process.env.USER}`) ||
44-
os.tmpdir();
45-
basePath = combinePaths(homeDir, "Library/Application Support/");
46-
break;
34+
case "linux":
35+
case "android": {
36+
const cacheLocation = getNonWindowsCacheLocation(process.platform === "darwin");
37+
return combinePaths(cacheLocation, "typescript");
38+
}
39+
default:
40+
Debug.fail(`unsupported platform '${process.platform}'`);
41+
return;
4742
}
43+
}
4844

49-
Debug.assert(basePath !== undefined);
50-
return combinePaths(normalizeSlashes(basePath), "Microsoft/TypeScript");
45+
function getNonWindowsCacheLocation(platformIsDarwin: boolean) {
46+
if (process.env.XDG_CACHE_HOME) {
47+
return process.env.XDG_CACHE_HOME;
48+
}
49+
const usersDir = platformIsDarwin ? "Users" : "home"
50+
const homePath = (os.homedir && os.homedir()) ||
51+
process.env.HOME ||
52+
((process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}`) ||
53+
os.tmpdir();
54+
const cacheFolder = platformIsDarwin
55+
? "Library/Caches"
56+
: ".cache"
57+
return combinePaths(normalizeSlashes(homePath), cacheFolder);
5158
}
5259

5360
interface NodeChildProcess {

0 commit comments

Comments
 (0)