import { singleton } from 'tsyringe'; import { invoke, convertFileSrc } from '@tauri-apps/api/core'; import type { IFileSystem, FileEntry } from '@esengine/editor-core'; @singleton() export class TauriFileSystemService implements IFileSystem { dispose(): void { // No cleanup needed } async readFile(path: string): Promise { return await invoke('read_file_content', { path }); } async writeFile(path: string, content: string): Promise { await invoke('write_file_content', { path, content }); } async writeBinary(path: string, data: Uint8Array): Promise { await invoke('write_binary_file', { filePath: path, content: Array.from(data) }); } async exists(path: string): Promise { try { await invoke('read_file_content', { path }); return true; } catch { return false; } } async createDirectory(path: string): Promise { await invoke('create_directory', { path }); } async listDirectory(path: string): Promise { const entries = await invoke>('list_directory', { path }); return entries.map((entry) => ({ name: entry.name, isDirectory: entry.is_dir, path: entry.path })); } async deleteFile(path: string): Promise { await invoke('delete_file', { path }); } async deleteDirectory(path: string): Promise { await invoke('delete_directory', { path }); } async scanFiles(basePath: string, pattern: string): Promise { return await invoke('scan_directory', { path: basePath, pattern }); } convertToAssetUrl(filePath: string): string { return convertFileSrc(filePath); } }