@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
88 lines (87 loc) • 3.29 kB
TypeScript
/**
* IStorage.ts
*
* ARCHITECTURE DOCUMENTATION
* ==========================
*
* This file defines the core storage abstraction interface used throughout MCTools.
* IStorage represents a virtual file system that can be backed by:
* - Local file system (NodeStorage)
* - HTTP/HTTPS endpoints (HttpStorage)
* - ZIP files (ZipStorage)
* - Browser local storage (BrowserStorage)
* - VS Code file system (VsFsStorage)
* - Virtual/composite folders (VirtualFolderStorage)
*
* EVENTS (used for real-time synchronization):
* --------------------------------------------
* - onFileAdded: Fired when a new file is detected
* - onFileRemoved: Fired when a file is deleted
* - onFileContentsUpdated: Fired when file content changes
* - onFolderMoved: Fired when a folder is renamed/moved
* - onFolderAdded: Fired when a new folder is created (added for watcher support)
* - onFolderRemoved: Fired when a folder is deleted (added for watcher support)
*
* These events enable the real-time sync pipeline:
* NodeStorage -> HttpServer (WebSocket) -> HttpStorage -> MCWorld -> WorldView
*
* RELATED FILES:
* --------------
* - IStorageWatcher.ts: Watcher interface extensions
* - StorageBase.ts: Base implementation with event dispatchers
* - NodeStorage.ts: File system watcher implementation
* - HttpStorage.ts: WebSocket notification receiver
*/
import IFolder from "./IFolder";
import IFile, { FileUpdateType } from "./IFile";
import { IEvent } from "ste-events";
import IVersionContent from "./IVersionContent";
export declare enum StorageErrorStatus {
none = 0,
unprocessable = 1,
notPresent = 2
}
export interface IFolderMove {
previousStoragePath?: string;
newStoragePath: string;
folder: IFolder;
}
export interface IFileUpdateEvent {
file: IFile;
updateType: FileUpdateType;
sourceId?: string;
priorVersion?: IVersionContent;
}
export default interface IStorage {
rootFolder: IFolder;
storagePath: string | undefined;
containerFile?: IFile;
getUsesPollingBasedUpdating(): boolean;
readonly folderDelimiter: string;
priorVersions: IVersionContent[];
currentVersionId?: string;
onFileAdded: IEvent<IStorage, IFile>;
onFileRemoved: IEvent<IStorage, string>;
onFileContentsUpdated: IEvent<IStorage, IFileUpdateEvent>;
onFolderMoved: IEvent<IStorage, IFolderMove>;
/** Event fired when a folder is added (for watcher support) */
onFolderAdded: IEvent<IStorage, IFolder>;
/** Event fired when a folder is removed (for watcher support) */
onFolderRemoved: IEvent<IStorage, string>;
errorStatus?: StorageErrorStatus;
errorMessage?: string;
channelId?: string;
isContentUpdated: boolean;
readOnly: boolean;
available?: boolean;
getAvailable(): Promise<boolean>;
resetContentUpdated(): void;
incrementalScanForChanges(): Promise<void>;
scanForChanges(): Promise<void>;
addVersion(versionContent: IVersionContent, updateType: FileUpdateType): void;
trimAfterVersion(versionId: string): void;
setToVersion(versionId: string): void;
notifyFileContentsUpdated(fileEvent: IFileUpdateEvent): void;
joinPath(pathA: string, pathB: string): string;
ensureFolderFromStorageRelativePath(path: string): Promise<IFolder>;
}