/** * 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 { try { await fs.promises.access(filePath, fs.constants.F_OK); return true; } catch { return false; } } async readFile(filePath: string, encoding: BufferEncoding = 'utf8'): Promise { return fs.promises.readFile(filePath, encoding); } async stat(filePath: string): Promise { 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 { 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 } }