18d307f52SEvan Baconimport fs from 'fs-extra'; 28d307f52SEvan Bacon 3*8010f0caSEvan Baconexport function directoryExistsSync(file: string): boolean { 4*8010f0caSEvan Bacon try { 5*8010f0caSEvan Bacon return fs.statSync(file)?.isDirectory() ?? false; 6*8010f0caSEvan Bacon } catch { 7*8010f0caSEvan Bacon return false; 8*8010f0caSEvan Bacon } 9*8010f0caSEvan Bacon} 10*8010f0caSEvan Bacon 118d307f52SEvan Baconexport async function directoryExistsAsync(file: string): Promise<boolean> { 128d307f52SEvan Bacon return (await fs.promises.stat(file).catch(() => null))?.isDirectory() ?? false; 138d307f52SEvan Bacon} 148d307f52SEvan Bacon 158d307f52SEvan Baconexport async function fileExistsAsync(file: string): Promise<boolean> { 168d307f52SEvan Bacon return (await fs.promises.stat(file).catch(() => null))?.isFile() ?? false; 178d307f52SEvan Bacon} 188d307f52SEvan Bacon 198d307f52SEvan Baconexport const ensureDirectoryAsync = (path: string) => fs.promises.mkdir(path, { recursive: true }); 208d307f52SEvan Bacon 21c4ef02aeSEvan Baconexport const ensureDirectory = (path: string) => fs.mkdirSync(path, { recursive: true }); 22c4ef02aeSEvan Bacon 238d307f52SEvan Baconexport const copySync = fs.copySync; 24dc51e206SEvan Bacon 25dc51e206SEvan Baconexport const copyAsync = fs.copy; 26dc51e206SEvan Bacon 27dc51e206SEvan Baconexport const removeAsync = fs.remove; 28