| 'use strict'; |
| 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; |