@fto-consult/node-utils
Version:
Bibliothèque d'outils pour application nodeJS
52 lines (50 loc) • 2.03 kB
JavaScript
const {homedir} = require("os");
const path = require("path");
const fs = require("fs");
const isWritable = require("./isWritable");
module.exports = function getAppDataPath(appName) {
let p = undefined;
appName = typeof appName =="string" && appName.trim().toUpperCase() || "";
let appDataPath = isWritable(process.env.ProgramData) && process.env.ProgramData || isWritable(process.env.ALLUSERSPROFILE) && process.env.ALLUSERSPROFILE || process.env["APPDATA"];
if (!appDataPath || !fs.existsSync(appDataPath)) {
const homePath = homedir();
const HOME = process.env.HOME;
switch (process.platform) {
case "win32":
p = path.join("AppData", "Roaming");
if(fs.existsSync(path.join(homePath,p))){
return appName ? path.join(homePath,p,appName) : path.join(homePath,p);
}
break;
case "darwin":
p = path.join("Library", "Application Support");
if(fs.existsSync(path.join(homePath,p))){
return appName ? path.join(homePath,p,appName) : path.join(homePath,p);
}
if(HOME && fs.existsSync(HOME)){
p = path.join('Library','Preferences');
if(fs.existsSync(path.join(HOME,p))){
return appName ? path.join(HOME,p,appName) : path.join(HOME,p);
}
}
break;
case "linux":
p = path.join(".config");
if(fs.existsSync(path.join(homePath,p))){
return appName ? path.join(homePath,p,appName) : path.join(homePath,p);
}
if(HOME && fs.existsSync(HOME)){
p = path.join("local","share");
if(fs.existsSync(path.join(HOME,p))){
return appName ? path.join(HOME,p,appName) : path.join(HOME,p);
}
}
break;
default:
appDataPath = process.cwd();
}
return appName ? path.resolve(homePath,appName) : homePath;
} else {
return appName ? path.join(appDataPath,appName) : appName;
}
}