@firesystem/indexeddb
Version:
IndexedDB implementation of Virtual File System
63 lines (59 loc) • 2.38 kB
text/typescript
import { BaseFileSystem, TypedEventEmitter, FileSystemEventPayloads, IFileSystemCapabilities, FileEntry, FileMetadata, FSEvent, Disposable, FileStat } from '@firesystem/core';
interface IndexedDBConfig {
dbName: string;
version?: number;
storeName?: string;
enableExternalSync?: boolean;
deepChangeDetection?: boolean;
}
declare class IndexedDBFileSystem extends BaseFileSystem {
private db;
private config;
private watchers;
private isInitialized;
readonly events: TypedEventEmitter<FileSystemEventPayloads>;
private broadcastChannel;
private fileSnapshots;
private pollingInterval;
private enableExternalSync;
private deepChangeDetection;
readonly capabilities: IFileSystemCapabilities;
constructor(config: IndexedDBConfig);
private ensureDB;
initialize(): Promise<void>;
private loadAllFiles;
readFile(path: string): Promise<FileEntry>;
writeFile(path: string, content: any, metadata?: FileMetadata): Promise<FileEntry>;
deleteFile(path: string): Promise<void>;
exists(path: string): Promise<boolean>;
readDir(path: string): Promise<FileEntry[]>;
mkdir(path: string, recursive?: boolean): Promise<FileEntry>;
rmdir(path: string, recursive?: boolean): Promise<void>;
rename(oldPath: string, newPath: string): Promise<FileEntry>;
move(sourcePaths: string[], targetPath: string): Promise<void>;
copy(sourcePath: string, targetPath: string): Promise<FileEntry>;
watch(pattern: string, callback: (event: FSEvent) => void): Disposable;
stat(path: string): Promise<FileStat>;
glob(pattern: string): Promise<string[]>;
clear(): Promise<void>;
size(): Promise<number>;
private calculateHash;
private calculateSize;
private ensureParentExists;
private deleteRecursive;
private matchesPattern;
private notifyWatchers;
private generateWatcherId;
private ensureRootExists;
private setupBroadcastChannel;
private broadcastChange;
startWatching(pollingIntervalMs?: number): Promise<void>;
stopWatching(): Promise<void>;
private updateFileSnapshots;
private checkForExternalChanges;
private performDeepContentCheck;
dispose(): void;
canModify(path: string): Promise<boolean>;
canCreateIn(parentPath: string): Promise<boolean>;
}
export { type IndexedDBConfig, IndexedDBFileSystem };