From 6cea94e21bbd8daf2508d76b9417db90cd626003 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 5 Dec 2016 12:34:49 -0800 Subject: [PATCH 1/2] use XDG base directory compatible cache location --- src/server/server.ts | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/server/server.ts b/src/server/server.ts index 7367741b9ea21..efce8f5067bd9 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -20,34 +20,37 @@ namespace ts.server { } = require("os"); function getGlobalTypingsCacheLocation() { - let basePath: string; switch (process.platform) { - case "win32": - basePath = process.env.LOCALAPPDATA || + case "win32": { + const basePath = process.env.LOCALAPPDATA || process.env.APPDATA || (os.homedir && os.homedir()) || process.env.USERPROFILE || (process.env.HOMEDRIVE && process.env.HOMEPATH && normalizeSlashes(process.env.HOMEDRIVE + process.env.HOMEPATH)) || os.tmpdir(); - break; - case "linux": - case "android": - basePath = (os.homedir && os.homedir()) || - process.env.HOME || - ((process.env.LOGNAME || process.env.USER) && `/home/${process.env.LOGNAME || process.env.USER}`) || - os.tmpdir(); - break; + return combinePaths(normalizeSlashes(basePath), "Microsoft/TypeScript"); + } case "darwin": - const homeDir = (os.homedir && os.homedir()) || - process.env.HOME || - ((process.env.LOGNAME || process.env.USER) && `/Users/${process.env.LOGNAME || process.env.USER}`) || - os.tmpdir(); - basePath = combinePaths(homeDir, "Library/Application Support/"); - break; + case "linux": + case "android": { + const cacheLocation = getNonWindowsCacheLocation(process.platform === "darwin" ? "Users" : "home"); + return combinePaths(cacheLocation, "typescript"); + } + default: + Debug.fail(`unsupported platform '${process.platform}'`); + return; } + } - Debug.assert(basePath !== undefined); - return combinePaths(normalizeSlashes(basePath), "Microsoft/TypeScript"); + function getNonWindowsCacheLocation(usersDir: string) { + if (process.env.XDG_CACHE_HOME) { + return process.env.XDG_CACHE_HOME; + } + const homePath = (os.homedir && os.homedir()) || + process.env.HOME || + ((process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}`) || + os.tmpdir(); + return combinePaths(normalizeSlashes(homePath), ".cache"); } interface NodeChildProcess { From ddaaf8b4758dfe652d9056954c8b8633fb10263f Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Mon, 5 Dec 2016 13:08:15 -0800 Subject: [PATCH 2/2] use ~/Library/Caches on darwin --- src/server/server.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/server/server.ts b/src/server/server.ts index efce8f5067bd9..a020ef210fec2 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -33,7 +33,7 @@ namespace ts.server { case "darwin": case "linux": case "android": { - const cacheLocation = getNonWindowsCacheLocation(process.platform === "darwin" ? "Users" : "home"); + const cacheLocation = getNonWindowsCacheLocation(process.platform === "darwin"); return combinePaths(cacheLocation, "typescript"); } default: @@ -42,15 +42,19 @@ namespace ts.server { } } - function getNonWindowsCacheLocation(usersDir: string) { + function getNonWindowsCacheLocation(platformIsDarwin: boolean) { if (process.env.XDG_CACHE_HOME) { return process.env.XDG_CACHE_HOME; } + const usersDir = platformIsDarwin ? "Users" : "home" const homePath = (os.homedir && os.homedir()) || process.env.HOME || ((process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}`) || os.tmpdir(); - return combinePaths(normalizeSlashes(homePath), ".cache"); + const cacheFolder = platformIsDarwin + ? "Library/Caches" + : ".cache" + return combinePaths(normalizeSlashes(homePath), cacheFolder); } interface NodeChildProcess {