/ src / utils / appData.js
appData.js
 1  import path from "path";
 2  import fs from "fs";
 3  
 4  export function getAppDataDir() {
 5    return ensureExists(appData("codex-cli"));
 6  }
 7  
 8  export function getDefaultCodexRootPath() {
 9    return ensureExists(appData("codex"));
10  }
11  
12  function ensureExists(dir) {
13    if (!fs.existsSync(dir)) {
14      fs.mkdirSync(dir, { recursive: true });
15    }
16    return dir;
17  }
18  
19  function appData(...app) {
20    let appData;
21    if (process.platform === "win32") {
22      appData = path.join(process.env.APPDATA, ...app);
23    } else if (process.platform === "darwin") {
24      appData = path.join(
25        process.env.HOME,
26        "Library",
27        "Application Support",
28        ...app,
29      );
30    } else {
31      appData = path.join(process.env.HOME, ...prependDot(...app));
32    }
33    return appData;
34  }
35  
36  function prependDot(...app) {
37    return app.map((item, i) => {
38      if (i === 0) {
39        return `.${item}`;
40      } else {
41        return item;
42      }
43    });
44  }