import { createDecorator, type ServiceIdentifier } from '#/_base/di/instantiation'; import type { TextDecodeErrors } from '#/_base/execEnv/decodeText'; export interface HostFileStat { readonly isFile: boolean; readonly isDirectory: boolean; readonly isSymbolicLink?: boolean; readonly size: number; readonly mtimeMs?: number; readonly ino?: number; } export interface HostDirEntry { readonly name: string; readonly isFile: boolean; readonly isDirectory: boolean; readonly isSymbolicLink?: boolean; } export interface IHostFileSystem { readonly _serviceBrand: undefined; readText( path: string, options?: { encoding?: BufferEncoding; errors?: TextDecodeErrors }, ): Promise; writeText(path: string, data: string): Promise; appendText(path: string, data: string): Promise; readBytes(path: string, n?: number, offset?: number): Promise; writeBytes(path: string, data: Uint8Array): Promise; readLines( path: string, options?: { encoding?: BufferEncoding; errors?: TextDecodeErrors }, ): AsyncGenerator; createExclusive(path: string, data: Uint8Array): Promise; stat(path: string): Promise; lstat(path: string): Promise; readdir(path: string): Promise; mkdir(path: string, options?: { readonly recursive?: boolean }): Promise; remove(path: string): Promise; realpath(path: string): Promise; } export const IHostFileSystem: ServiceIdentifier = createDecorator('hostFileSystem');