xdg.ts
utils/xdg.ts
No strong subsystem tag
66
Lines
1876
Bytes
4
Exports
2
Imports
10
Keywords
What this is
This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.
Beginner explanation
This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.
How it is used
Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.
Expert explanation
Architecturally, this file intersects with general runtime concerns. It contains 66 lines, 2 detected imports, and 4 detected exports.
Important relationships
Detected exports
getXDGStateHomegetXDGCacheHomegetXDGDataHomegetUserBinDir
Keywords
optionshomehomedirdirectoryxdgoptionslocaljoinresolveoptionsparamoptional
Detected imports
ospath
Source notes
This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.
Full source
/**
* XDG Base Directory utilities for Claude CLI Native Installer
*
* Implements the XDG Base Directory specification for organizing
* native installer components across appropriate system directories.
*
* @see https://specifications.freedesktop.org/basedir-spec/latest/
*/
import { homedir as osHomedir } from 'os'
import { join } from 'path'
type EnvLike = Record<string, string | undefined>
type XDGOptions = {
env?: EnvLike
homedir?: string
}
function resolveOptions(options?: XDGOptions): { env: EnvLike; home: string } {
return {
env: options?.env ?? process.env,
home: options?.homedir ?? process.env.HOME ?? osHomedir(),
}
}
/**
* Get XDG state home directory
* Default: ~/.local/state
* @param options Optional env and homedir overrides for testing
*/
export function getXDGStateHome(options?: XDGOptions): string {
const { env, home } = resolveOptions(options)
return env.XDG_STATE_HOME ?? join(home, '.local', 'state')
}
/**
* Get XDG cache home directory
* Default: ~/.cache
* @param options Optional env and homedir overrides for testing
*/
export function getXDGCacheHome(options?: XDGOptions): string {
const { env, home } = resolveOptions(options)
return env.XDG_CACHE_HOME ?? join(home, '.cache')
}
/**
* Get XDG data home directory
* Default: ~/.local/share
* @param options Optional env and homedir overrides for testing
*/
export function getXDGDataHome(options?: XDGOptions): string {
const { env, home } = resolveOptions(options)
return env.XDG_DATA_HOME ?? join(home, '.local', 'share')
}
/**
* Get user bin directory (not technically XDG but follows the convention)
* Default: ~/.local/bin
* @param options Optional homedir override for testing
*/
export function getUserBinDir(options?: XDGOptions): string {
const { home } = resolveOptions(options)
return join(home, '.local', 'bin')
}