Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 29 additions & 32 deletions src/envpaths/EnvPaths.hx
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
package envpaths;

import haxe.io.Path;
//import haxe.io.*;
import Sys;

typedef Envpath = {
home: String,
data: String,
config: String,
cache: String,
log: String,
temp: String,
home:String,
data:String,
config:String,
cache:String,
log:String,
temp:String,
}

final macos: String -> Envpath = name -> {
typedef GetEnvPath = String->Envpath

final macos: GetEnvPath = name -> {
final homedir = Sys.getEnv('HOME');
final tmpdir = Sys.getEnv('TMPDIR');
final library = Path.join([homedir, 'Library']);

return {
home: homedir,
data: Path.join([library, 'Application Support', name]),
Expand All @@ -28,12 +28,11 @@ final macos: String -> Envpath = name -> {
};
};

final windows = name -> {
final windows: GetEnvPath = name -> {
final homedir = Sys.getEnv('USERPROFILE');
final tmpdir = Sys.getEnv('TEMP');
final appData = Sys.getEnv('APPDATA') ?? Path.join([homedir, 'AppData', 'Roaming']);
final localAppData = Sys.getEnv('LOCALAPPDATA') ?? Path.join([homedir, 'AppData', 'Local']);

return {
// Data/config/cache/log are invented by me as Windows isn't opinionated about this
home: homedir,
Expand All @@ -46,11 +45,10 @@ final windows = name -> {
};

// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
final linux = name -> {
final linux: GetEnvPath= name -> {
final homedir = Sys.getEnv('HOME');
final username = Path.withoutDirectory(homedir);
final tmpdir = Sys.getEnv("TMPDIR") ?? Sys.getEnv("TMP") ?? "/tmp";

return {
home: homedir,
data: Path.join(linuxPathHelper("XDG_DATA_HOME", [homedir, '.local', 'share'], name)),
Expand All @@ -62,28 +60,27 @@ final linux = name -> {
};
};

final linuxPathHelper: String -> Array<String> -> String -> Array<String> = (env, path, name) -> {
final xdgPath = Sys.getEnv(env);
if (Std.isOfType(xdgPath, String)){
return [xdgPath, name];
} else {
return path.concat([name]);
}
}
private final linuxPathHelper = (env: String, path:Array<String>, name: String) -> ({
final xdgPath = Sys.getEnv(env);
if (Std.isOfType(xdgPath, String)) {
return [xdgPath, name];
} else {
return path.concat([name]);
}
} : Array<String>);

function envPaths(name: String, ?suffix: String) {
final envPaths = (name:String, ?suffix:String) -> ({
if (Std.isOfType(suffix, String) && suffix != "") {
// Add suffix to prevent possible conflict with native apps
name += "-${suffix}";
}

if (Sys.systemName() == 'Mac') {
return macos(name);
}

if (Sys.systemName() == 'Windows') {
return windows(name);
switch (Sys.systemName()) {
case "Mac":
return macos(name);
case "Windows":
return windows(name);
case _:
// BSD is like Linux
return linux(name);
}

return linux(name); // BSD is like Linux.
}
} : Envpath );
8 changes: 0 additions & 8 deletions test.hxml
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
# -cp src
# -cp test
# -lib buddy
# -main envpaths.EnvPaths
# --interp
#
# --next

-cp src
-cp test
-lib buddy
Expand Down
4 changes: 2 additions & 2 deletions test/Demo.hx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import envpaths.EnvPaths;

function main(){
trace(envPaths(""));
final main = () -> {
trace(envPaths(""));
}