63 lines · 1.6 KB · TypeScript
RawDownload
/** * LocalFileSystemProvider - FileSystemProvider backed by Node's fs module. * * Thin wrapper around Node.js filesystem APIs. * This is the default provider used when operating in local mode. */ import * as fs from 'fs'; import type {  FileSystemProvider,  FsDirent,  FsStatResult,  ReadStreamOptions,} from './FileSystemProvider'; export class LocalFileSystemProvider implements FileSystemProvider {  readonly type = 'local' as const;   async exists(filePath: string): Promise<boolean> {    try {      await fs.promises.access(filePath, fs.constants.F_OK);      return true;    } catch {      return false;    }  }   async readFile(filePath: string, encoding: BufferEncoding = 'utf8'): Promise<string> {    return fs.promises.readFile(filePath, encoding);  }   async stat(filePath: string): Promise<FsStatResult> {    const stats = await fs.promises.stat(filePath);    return {      size: stats.size,      mtimeMs: stats.mtimeMs,      birthtimeMs: stats.birthtimeMs,      isFile: () => stats.isFile(),      isDirectory: () => stats.isDirectory(),    };  }   async readdir(dirPath: string): Promise<FsDirent[]> {    const entries = await fs.promises.readdir(dirPath, { withFileTypes: true });    return entries.map((entry) => ({      name: entry.name,      isFile: () => entry.isFile(),      isDirectory: () => entry.isDirectory(),    }));  }   createReadStream(filePath: string, opts?: ReadStreamOptions): fs.ReadStream {    return fs.createReadStream(filePath, {      start: opts?.start,      encoding: opts?.encoding,    });  }   dispose(): void {    // No resources to clean up for local fs  }}