OS environment utilities: platform detection, safe path operations, and OS-standard directory resolution (XDG/macOS/Windows) with temp_dir support
Dependencies
platform/ OS detection (no dependencies)
|
path/ Path operations (depends on platform)
|
validate/ Security validation (depends on path)
|
dirs/ Directory resolution (depends on platform, path, validate)moon add trkbt10/osenvimport {
"trkbt10/osenv/dirs" @dirs,
"trkbt10/osenv/path" @path,
"trkbt10/osenv/platform" @platform,
}fn main {
let p = @platform.platform() // MacOS, Linux, Windows, or Unknown
println("Running on: \{p}")
let config = @dirs.config_dir_for("myapp") // raises PathError on bad input
match config {
Some(dir) => println("Config: \{dir}")
None => println("Config dir not available")
}
let tmp = @dirs.temp_dir() // always returns a value
println("Temp: \{tmp}")
}moon run --target native cmd/main| Function | Signature | Description |
|---|---|---|
| platform() | () -> Platform | Returns current OS: Linux, MacOS, Windows, or Unknown |
| is_windows() | () -> Bool | Shorthand for Windows check |
| Function | Signature | Description |
|---|---|---|
| sep() | () -> String | Runtime path separator (/ or \\) |
| join(segments) | (Array[String]) -> String raise PathError | Join segments; rejects null bytes and absolute path hijacking |
| normalize(path) | (String) -> String | Collapse . and .., deduplicate separators |
| basename(path) | (String) -> String | Last path component |
| dirname(path) | (String) -> String | Parent directory |
| extname(path) | (String) -> String | File extension including dot |
| is_absolute(path) | (String) -> Bool | / or C:\ style |
| is_relative(path) | (String) -> Bool | Inverse of is_absolute |
| to_relative(path, base) | (String, String) -> String | Strip base prefix (normalizes both first) |
| to_absolute(path, base) | (String, String) -> String | Prepend base to relative path |
| strip_trailing_sep(s) | (String) -> String | Remove trailing / or \ |
| contains_null_byte(s) | (String) -> Bool | Detect null bytes |
| Function | Signature | Description |
|---|---|---|
| validate_app_name(name) | (String) -> String raise PathError | Rejects empty, null bytes, /, \, ., .., control chars |
| is_within(child, base) | (String, String) -> Bool | Check path containment after normalization |
| Function | Returns | Linux | macOS | Windows |
|---|---|---|---|---|
| home_dir() | String? | $HOME | $HOME | %USERPROFILE% |
| config_dir() | String? | $XDG_CONFIG_HOME or ~/.config | ~/Library/Application Support | %APPDATA% |
| data_dir() | String? | $XDG_DATA_HOME or ~/.local/share | ~/Library/Application Support | %LOCALAPPDATA% |
| cache_dir() | String? | $XDG_CACHE_HOME or ~/.cache | ~/Library/Caches | %LOCALAPPDATA% |
| temp_dir() | String | $TMPDIR or /tmp | $TMPDIR or /tmp | %TEMP% or %TMP% |
| runtime_dir() | String? | $XDG_RUNTIME_DIR | None | None |
| state_dir() | String? | $XDG_STATE_HOME or ~/.local/state | None | None |
moon add trkbt10/osenv| Target | Platform Detection | Path Ops | Directory Resolution |
|---|---|---|---|
| native | Full (C FFI) | Full | Full |
| js | Full (process.platform) | Full | Full |
| wasm-gc | Unknown | Full | Fallback (HOME-based) |
OS environment utilities: platform detection, safe path operations, and OS-standard directory resolution (XDG/macOS/Windows) with temp_dir support
Dependencies