@origami-minecraft/devbuilds
Version:
Origami is a terminal-first Minecraft launcher that supports authentication, installation, and launching of Minecraft versions — with built-in support for Microsoft accounts, mod loaders, profile management, and more. Designed for power users, modders, an
65 lines (53 loc) • 1.89 kB
text/typescript
/// Credits to (env-paths => https://github.com/sindresorhus/env-paths)
/// envs.ts
import path from 'node:path';
import os from 'node:os';
import process from 'node:process';
const homedir = os.homedir();
const tmpdir = os.tmpdir();
const {env} = process;
const macos = (name: string) => {
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: string) => {
const appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming');
const localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local');
return {
data: path.join(localAppData, name),
config: path.join(appData, name),
cache: path.join(tmpdir, name),
log: path.join(localAppData, name),
temp: path.join(tmpdir, name),
};
};
// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
const linux = (name: string) => {
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),
};
};
export default function envPaths(name: string) {
if (typeof name !== 'string') {
throw new TypeError(`Expected a string, got ${typeof name}`);
}
if (process.platform === 'darwin') {
return macos(name);
}
if (process.platform === 'win32') {
return windows(name);
}
return linux(name);
}