Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/src/core/appdirs.ts
3557 views
1
/*
2
* appdirs.ts
3
*
4
* Copyright (C) 2020-2022 Posit Software, PBC
5
*/
6
7
import { join } from "../deno_ral/path.ts";
8
import { ensureDirSync } from "../deno_ral/fs.ts";
9
import { os as platformOs } from "../deno_ral/platform.ts";
10
11
export function quartoDataDir(subdir?: string, roaming = false) {
12
return quartoDir(userDataDir, subdir, roaming);
13
}
14
15
export function quartoConfigDir(subdir?: string, roaming = false) {
16
return quartoDir(userConfigDir, subdir, roaming);
17
}
18
19
export function quartoCacheDir(subdir?: string) {
20
return quartoDir(userCacheDir, subdir);
21
}
22
23
export function quartoRuntimeDir(subdir?: string) {
24
return quartoDir(userRuntimeDir, subdir);
25
}
26
27
function quartoDir(
28
sourceFn: (appName: string, roaming?: boolean) => string,
29
subdir?: string,
30
roaming?: boolean,
31
) {
32
const dir = sourceFn("quarto", roaming);
33
const fullDir = subdir ? join(dir, subdir) : dir;
34
ensureDirSync(fullDir);
35
return fullDir;
36
}
37
38
export function userDataDir(appName: string, roaming = false) {
39
switch (platformOs) {
40
case "darwin":
41
return darwinUserDataDir(appName);
42
case "windows":
43
return windowsUserDataDir(appName, roaming);
44
default: // assume generic unix
45
// in 1.32.5 this is:
46
// case "linux":
47
// case "netbsd":
48
// case "aix":
49
// case "solaris":
50
// case "illumos":
51
// case "freebsd":
52
return xdgUserDataDir(appName);
53
}
54
}
55
56
export function userConfigDir(appName: string, roaming = false) {
57
switch (platformOs) {
58
case "darwin":
59
return darwinUserDataDir(appName);
60
case "windows":
61
return windowsUserDataDir(appName, roaming);
62
default: // assume generic unix
63
// in 1.32.5 this is:
64
// case "linux":
65
// case "netbsd":
66
// case "aix":
67
// case "solaris":
68
// case "illumos":
69
// case "freebsd":
70
return xdgUserConfigDir(appName);
71
}
72
}
73
74
export function userCacheDir(appName: string) {
75
switch (platformOs) {
76
case "darwin":
77
return darwinUserCacheDir(appName);
78
case "windows":
79
return windowsUserDataDir(appName);
80
default: // assume generic unix
81
// in 1.32.5 this is:
82
// case "linux":
83
// case "netbsd":
84
// case "aix":
85
// case "solaris":
86
// case "illumos":
87
// case "freebsd":
88
return xdgUserCacheDir(appName);
89
}
90
}
91
92
export function userRuntimeDir(appName: string) {
93
switch (platformOs) {
94
case "darwin":
95
return darwinUserCacheDir(appName);
96
case "windows":
97
return windowsUserDataDir(appName);
98
default: // assume generic unix
99
// in 1.32.5 this is:
100
// case "linux":
101
// case "netbsd":
102
// case "aix":
103
// case "solaris":
104
// case "illumos":
105
// case "freebsd":
106
return xdgUserRuntimeDir(appName);
107
}
108
}
109
110
function darwinUserDataDir(appName: string) {
111
return join(
112
Deno.env.get("HOME") || "",
113
"Library",
114
"Application Support",
115
appName,
116
);
117
}
118
119
function darwinUserCacheDir(appName: string) {
120
return join(
121
Deno.env.get("HOME") || "",
122
"Library",
123
"Caches",
124
appName,
125
);
126
}
127
128
function xdgUserDataDir(appName: string) {
129
const dataHome = Deno.env.get("XDG_DATA_HOME") ||
130
join(Deno.env.get("HOME") || "", ".local", "share");
131
return join(dataHome, appName);
132
}
133
134
function xdgUserConfigDir(appName: string) {
135
const configHome = Deno.env.get("XDG_CONFIG_HOME") ||
136
join(Deno.env.get("HOME") || "", ".config");
137
return join(configHome, appName);
138
}
139
140
function xdgUserCacheDir(appName: string) {
141
const cacheHome = Deno.env.get("XDG_CACHE_HOME") ||
142
join(Deno.env.get("HOME") || "", ".cache");
143
return join(cacheHome, appName);
144
}
145
146
function xdgUserRuntimeDir(appName: string) {
147
const runtimeDir = Deno.env.get("XDG_RUNTIME_DIR");
148
if (runtimeDir) {
149
return runtimeDir;
150
} else {
151
return xdgUserDataDir(appName);
152
}
153
}
154
155
function windowsUserDataDir(appName: string, roaming = false) {
156
const dir =
157
(roaming ? Deno.env.get("APPDATA") : Deno.env.get("LOCALAPPDATA")) || "";
158
return join(dir, appName);
159
}
160
161