Spaces:
Running
Running
; | |
const path = require('path'); | |
const os = require('os'); | |
const homedir = os.homedir(); | |
const tmpdir = os.tmpdir(); | |
const {env} = process; | |
const macos = name => { | |
const library = path.join(homedir, 'Library'); | |
return { | |
data: path.join(library, 'Application Support', name), | |
config: path.join(library, 'Preferences', name), | |
cache: path.join(library, 'Caches', name), | |
log: path.join(library, 'Logs', name), | |
temp: path.join(tmpdir, name) | |
}; | |
}; | |
const windows = name => { | |
const appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming'); | |
const localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local'); | |
return { | |
// Data/config/cache/log are invented by me as Windows isn't opinionated about this | |
data: path.join(localAppData, name, 'Data'), | |
config: path.join(appData, name, 'Config'), | |
cache: path.join(localAppData, name, 'Cache'), | |
log: path.join(localAppData, name, 'Log'), | |
temp: path.join(tmpdir, name) | |
}; | |
}; | |
// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html | |
const linux = name => { | |
const username = path.basename(homedir); | |
return { | |
data: path.join(env.XDG_DATA_HOME || path.join(homedir, '.local', 'share'), name), | |
config: path.join(env.XDG_CONFIG_HOME || path.join(homedir, '.config'), name), | |
cache: path.join(env.XDG_CACHE_HOME || path.join(homedir, '.cache'), name), | |
// https://wiki.debian.org/XDGBaseDirectorySpecification#state | |
log: path.join(env.XDG_STATE_HOME || path.join(homedir, '.local', 'state'), name), | |
temp: path.join(tmpdir, username, name) | |
}; | |
}; | |
const envPaths = (name, options) => { | |
if (typeof name !== 'string') { | |
throw new TypeError(`Expected string, got ${typeof name}`); | |
} | |
options = Object.assign({suffix: 'nodejs'}, options); | |
if (options.suffix) { | |
// Add suffix to prevent possible conflict with native apps | |
name += `-${options.suffix}`; | |
} | |
if (process.platform === 'darwin') { | |
return macos(name); | |
} | |
if (process.platform === 'win32') { | |
return windows(name); | |
} | |
return linux(name); | |
}; | |
module.exports = envPaths; | |
// TODO: Remove this for the next major release | |
module.exports.default = envPaths; | |