UNPKG

@fto-consult/node-utils

Version:

Bibliothèque d'outils pour application nodeJS

52 lines (50 loc) • 2.03 kB
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; } }