import { type AsyncmuxLock } from "asyncmux"; import { type ILogger } from "../shared/logger.js"; import type { BucketName, Checksum, EntityId, MimeType, MimeTypeLike, NumParts, ObjectPath, ObjectSize, ObjectTags, OpenMode, PartSize, Timestamp, TimestampLike, WritableObjectTagsLike } from "../shared/schemas.js"; import type { IStorage } from "../shared/storage.js"; import { type Uint8ArraySource } from "../shared/to-uint8-array.js"; import type { IHash } from "./_hash.js"; import type Metadata from "./metadata.js"; /** * `Omnio` のインターフェースです。 */ interface IOmnio { /** * `Omnio` が閉じているかかどうかを示します。 */ readonly closed: boolean; } /** * `ObjectFileWriteStream` を構築するための入力パラメーターです。 */ type ObjectFileWriteStreamInput = Readonly<{ /** * オブジェクトのデータ形式です。 */ type: MimeType | undefined; /** * バケット名です。 */ bucketName: BucketName; /** * バケット内のオブジェクトパスです。 */ objectPath: ObjectPath; /** * オブジェクトに関連付けられたオブジェクトタグです。 */ objectTags: ObjectTags | undefined; /** * オブジェクトの説明文です。 */ description: string | null | undefined; /** * オブジェクトのユーザー定義のメタデータです。 */ userMetadata: unknown | undefined; /** * カスタムのタイムスタンプです。 */ timestamp: Timestamp | undefined; /** * オブジェクトを開く際のモードです。 */ flag: OpenMode; /** * 実際に保存されるオブジェクトの識別子です。 */ newEntityId: EntityId; /** * 実際に保存されているオブジェクトの識別子です。 */ oldEntityId: EntityId | undefined; /** * 各パートのサイズ (バイト数) です。 */ partSize: PartSize; /** * `Omnio` オブジェクトです。 */ omnio: IOmnio; /** * ログを記録する関数群です。 */ logger: ILogger; /** * メタデータを管理するオブジェクトです。 */ metadata: Metadata; /** * 書き込みロックを獲得した結果です。 */ lock: AsyncmuxLock; /** * オブジェクトを永続化するためのファイルシステムです。 */ storage: IStorage; /** * ハッシュ値を計算するためのストリームです。 */ hash: IHash; /** * 既存のメタデータに期待する値です。 */ expect: Readonly<{ /** * 既存のチェックサムに期待する値です。 */ checksum: Checksum; }> | undefined; /** * 現在のオブジェクトのサイズ (バイト数) です。 */ currentSize: ObjectSize | undefined; /** * 現在のオブジェクトのパートの総数です。 */ currentNumParts: NumParts | undefined; }>; /** * オブジェクトを書き込むストリームです。 */ export default class ObjectFileWriteStream implements AsyncDisposable { #private; /** * ストリームが属するバケット名です。 */ readonly bucketName: BucketName; /** * バケット内のオブジェクトパスです。 */ readonly objectPath: ObjectPath; /** * オブジェクトを開く際のモードです。 * * - **`"w"`**: 書き込みモードで開きます。オブジェクトが存在しない場合は新規作成され、もし存在する場合は上書きします。 * - **`"wx"`**: 書き込みモードで開きます。オブジェクトが存在する場合はエラーになります。 * - **`"a"`**: 追加書き込みモードで開きます。オブジェクトが存在しない場合は新規作成されます。 * - **`"ax"`**: 追加書き込みモードで開きます。オブジェクトが存在する場合はエラーになります */ readonly flag: OpenMode; /** * オブジェクトのデータ形式です。 */ type: MimeTypeLike | undefined; /** * オブジェクトに関連付けられたオブジェクトタグです。 */ objectTags: WritableObjectTagsLike | undefined; /** * オブジェクトの説明文です。 */ description: string | null | undefined; /** * オブジェクトのユーザー定義のメタデータです。 */ userMetadata: unknown | undefined; /** * カスタムのタイムスタンプです。 */ timestamp: TimestampLike | undefined; /** * `ObjectFileWriteStream` クラスの新しいインスタンスを初期化します。 * * @param inp `ObjectFileWriteStream` を構築するための入力パラメーターです。 */ constructor(inp: ObjectFileWriteStreamInput); /** * `true` ならストリームは閉じています。 */ get closed(): boolean; /** * オブジェクトのサイズ (バイト数) です。 */ get size(): ObjectSize; /** * ストリームに書き込まれたバイト数です。 */ get bytesWritten(): ObjectSize; /** * ストリームにチャンクデータを書き込みます。 * * @param chunk `Uint8Array` に変換できるチャンクデータです。 */ write(chunk: Uint8ArraySource): Promise; /** * ストリームを終了します。これにより、オブジェクトのデータとメタデータが永続化されます。 */ close(): Promise; /** * ストリームを中断します。 * * @param reason 中断の理由です。 */ abort(reason?: unknown): Promise; [Symbol.asyncDispose](): Promise; } export {}; //# sourceMappingURL=object-file-write-stream.d.ts.map