68 lines
1.3 KiB
JavaScript
68 lines
1.3 KiB
JavaScript
/* eslint-env es6, node */
|
|
// # spell-checker:ignore HomeDrive HomePath LocalAppData UserProfile WinDir
|
|
'use strict';
|
|
|
|
const os = require('os');
|
|
const paths = require('path');
|
|
|
|
const isWinOS = /^win/i.test(process.platform);
|
|
|
|
function normalize_path(path) {
|
|
return paths.normalize(paths.join(path, '.'));
|
|
}
|
|
|
|
const base = () => {
|
|
const { env } = process;
|
|
|
|
const object = {};
|
|
|
|
object.home = () => normalize_path(os.homedir ? os.homedir() : env.HOME);
|
|
|
|
object.temp = () => normalize_path(os.tmpdir ? os.tmpdir() : env.TMPDIR || env.TEMP || env.TMP);
|
|
|
|
return object;
|
|
};
|
|
|
|
const windows = () => {
|
|
const { env } = process;
|
|
|
|
const object = {};
|
|
|
|
object.home = () =>
|
|
normalize_path(
|
|
os.homedir
|
|
? os.homedir()
|
|
: env.USERPROFILE || paths.join(env.HOMEDRIVE, env.HOMEPATH) || env.HOME
|
|
);
|
|
|
|
object.temp = () =>
|
|
normalize_path(
|
|
os.tmpdir
|
|
? os.tmpdir()
|
|
: env.TEMP ||
|
|
env.TMP ||
|
|
paths.join(env.LOCALAPPDATA || env.SystemRoot || env.windir, 'Temp')
|
|
);
|
|
|
|
return object;
|
|
};
|
|
|
|
class _OSPaths {
|
|
constructor() {
|
|
const OSPaths = function () {
|
|
return new _OSPaths();
|
|
};
|
|
|
|
this._fn = OSPaths;
|
|
|
|
// Connect to platform-specific API functions by extension
|
|
const extension = isWinOS ? windows() : base();
|
|
Object.keys(extension).forEach((key) => {
|
|
this._fn[key] = extension[key];
|
|
});
|
|
|
|
return this._fn;
|
|
}
|
|
}
|
|
|
|
module.exports = new _OSPaths();
|