import { type Asyncmux, type AsyncmuxLock } from "asyncmux"; import type { CreateWritableOptions, GetDirectoryOptions, GetFileOptions, IDirectoryHandle, IFileHandle, IFileSystem, IWritableFileStream, RemoveOptions, WriteChunkType } from "../../../shared/file-system.js"; import { type FileSystemDirectoryName as DirectoryName, type FileSystemDirectoryNameLike as DirectoryNameLike, type FileSystemEntryName as EntryName, type FileSystemEntryNameLike as EntryNameLike, type FileSystemFileName as FileName, type FileSystemFileNameLike as FileNameLike } from "../../../shared/schemas.js"; /** * ファイルの JSON 表現です。 */ export type FileJson = { /** * ファイルデータの全チャンクです。 */ chunks: number[][]; }; /** * ディレクトリーの JSON 表現です。 */ export type DirectoryJson = { [name: string]: FileJson | DirectoryJson; }; /** * ファイルシステムです。 */ type Root = Readonly<{ /** * ルートディレクトリーです。 */ dir: Directory; /** * ファイルシステムの接続が閉じているかを示すフラグです。 */ closed: boolean; }>; /** * データを格納しているファイルを表すクラスです。 */ declare class File { #private; /** * ファイルデータの全チャンクです。 */ readonly chunks: WriteChunkType[]; /** * `File` の新しいインスタンスを構築します。 * * @param chunks ファイルデータの全チャンクです。 * @param fileName ファイル名です。 */ constructor(chunks: readonly WriteChunkType[], fileName: EntryName); /** * ファイルオブジェクトを複製します。 * * @param fileName 新しいファイル名です。 * @returns 新しいファイルオブジェクトです。 */ clone(fileName: EntryName): File; /** * 新しいファイルオブジェクトを取得します。チャンクデータはすべてコピーされます。 * * @returns ファイルオブジェクトです。 */ getFile(): globalThis.File; /** * `File` を JSON 形式に変換します。テストで使用されることを想定しています。 * * @return JSON 形式の `File` です。 */ toJSON(): FileJson; } /** * ファイルを保存しておくディレクトリーです。 */ declare class Directory extends Map { /** * `Directory` を JSON 形式に変換します。テストで使用されることを想定しています。 * * @return JSON 形式の `Directory` です。 */ toJSON(): DirectoryJson; } /** * ファイルストリームへの書き込みを行うクラスです。 */ declare class WritableFileStream implements IWritableFileStream { #private; /** * `WritableFileStream` の新しいインスタンスを構築します。 * * @param rootDir ルートディレクトリーです。 * @param dirPath ディレクトリーへのパスです。 * @param target 書き込み先のファイル名です。 * @param crswap 書き込みが完了するまでの一時的なファイル名です。 * @param chunks スタックするチャンクデータです。 * @param asyncmux 書き込みロックを獲得した結果です。 */ constructor(root: Root, dirPath: readonly EntryName[], target: FileName, crswap: EntryName, chunks: WriteChunkType[], lock: AsyncmuxLock); /** * データをファイルに書き込みます。 * * @param data 書き込むデータです。 * @returns ストリームに書き込まれたバイト数です。 */ write(data: WriteChunkType): void; /** * ストリームを中断し、閉じます。 * * @param reason 中断の理由です。 */ abort(reason?: unknown): void; /** * ストリームへの書き込みを完了し、閉じます。 */ close(): void; } /** * ファイルのハンドル(操作を可能にする参照)です。読み書き込み可能なストリームの作成を可能にします。 */ declare class FileHandle implements IFileHandle { #private; /** * `FileHandle` の新しいインスタンスを構築します。 * * @param root ファイルシステムです。 * @param dirPath ディレクトリーへのパスです。 * @param mux 排他制御のためのキューを管理するオブジェクトです。 * @param name ファイル名です。 */ constructor(root: Root, dirPath: readonly EntryName[], mux: Asyncmux, name: FileName); /** * ファイルの内容を取得します。 * * @returns `File` オブジェクトです。 */ getFile(): Promise; /** * ファイルへの書き込みが可能なストリームを作成します。 * * @param options ファイルへの書き込みが可能なストリームを作成する際のオプションです。 * @returns ファイルストリームへの書き込みを行うクラスのインスタンスです。 */ createWritable(options: CreateWritableOptions): Promise; } /** * ディレクトリーのハンドル(操作を可能にする参照)です。 ファイルやサブディレクトリーへのアクセスを可能にします。 */ declare class DirectoryHandle implements IDirectoryHandle { #private; /** * `DirectoryHandle` の新しいインスタンスを構築します。 * * @param root ファイルシステムです。 * @param dirPath ディレクトリーへのパスです。 * @param mux 排他制御のためのキューを管理するオブジェクトです。 * @param name ディレクトリー名です。 */ constructor(root: Root, dirPath: readonly EntryName[], mux: Asyncmux, name: DirectoryName); /** * ディレクトリー直下から指定のアイテムを削除します。 * * @param name 削除するアイテムの名前です。 * @param options 削除時のオプションです。 */ removeEntry(name: EntryNameLike, options: RemoveOptions): void; /** * 指定した名前のファイルハンドルを取得します。 * * @param name 取得するファイルの名前です。 * @param options ファイル取得時のオプションです。 * @returns ファイルのハンドル(操作を可能にする参照)を行うクラスのインスタンスです。 */ getFileHandle(name: FileNameLike, options: GetFileOptions): FileHandle; /** * 指定した名前のディレクトリーハンドルを取得します。 * * @param name 取得するディレクトリーの名前です。 * @param options ディレクトリー取得時のオプションです。 * @returns ディレクトリーのハンドル(操作を可能にする参照)を行うクラスのインスタンスです。 */ getDirectoryHandle(name: DirectoryNameLike, options: GetDirectoryOptions): DirectoryHandle; } /** * ファイルシステムを操作するための基本的な機能を提供するクラスです。 * ファイルシステムの接続、切断、およびディレクトリーへのアクセスを可能にします。 */ export default class MemoryFileSystem implements IFileSystem { #private; /** * `MemoryFileSystem` の新しいインスタンスを構築します。 */ constructor(); tree(): DirectoryJson; /** * ファイルシステムへの接続を開きます。 */ open(): void; /** * ファイルシステムへの接続を閉じます。 */ close(): void; /** * ルートディレクトリーを基準に、指定した名前のディレクトリーハンドルを取得します。 * * @param name 取得するディレクトリーの名前です。 * @param options ディレクトリー取得時のオプションです。 * @returns ディレクトリーのハンドル(操作を可能にする参照)を行うクラスのインスタンスです。 */ getDirectoryHandle(name: DirectoryNameLike, options: GetDirectoryOptions): DirectoryHandle; } export {}; //# sourceMappingURL=memory-file-system.d.ts.map