1import fs from 'fs';
2
3/**
4 * A non-failing version of async FS stat.
5 *
6 * @param file
7 */
8async function statAsync(file: string): Promise<fs.Stats | null> {
9  try {
10    return await fs.promises.stat(file);
11  } catch {
12    return null;
13  }
14}
15
16export async function fileExistsAsync(file: string): Promise<boolean> {
17  return (await statAsync(file))?.isFile() ?? false;
18}
19
20export async function directoryExistsAsync(file: string): Promise<boolean> {
21  return (await statAsync(file))?.isDirectory() ?? false;
22}
23
24export function fileExists(file: string): boolean {
25  try {
26    return fs.statSync(file).isFile();
27  } catch {
28    return false;
29  }
30}
31