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 }