import { type Asyncmux } from "asyncmux"; import type { IDatabase, Row } from "../shared/database.js"; import { type ILogger } from "../shared/logger.js"; import { type BucketNameLike, type MimeTypeLike, type ObjectDirectoryPathLike, type ObjectId, type ObjectPath, type ObjectPathLike, type ObjectTagsLike, type OpenModeLike, type OrderTypeLike, type PartSizeLike, type TimestampLike, type UintLike } from "../shared/schemas.js"; import type { IStorage } from "../shared/storage.js"; import type { ITextSearch } from "../shared/text-search.js"; import type { Uint8ArraySource } from "../shared/to-uint8-array.js"; import type { Awaitable } from "../shared/type-utils.js"; import type { IJson, Sql } from "./metadata.js"; import type { $Get, $Select, ObjectInTrashMetadata, ObjectInTrashMetadataSelectQuery, ObjectMetadata, ObjectMetadataSelectQuery } from "./metadata.js"; import ObjectFileReadStream from "./object-file-read-stream.js"; import ObjectFileWriteStream from "./object-file-write-stream.js"; import ObjectFile from "./object-file.js"; /*************************************************************************************************** * * 入力パラメーター * **************************************************************************************************/ /** * `Omnio` を閉じるときに実行されるクリーンアップ関数のインターフェースです。 */ export interface ICleanupFunction { /** * クリーンアップします。 */ (): Awaitable; } /** * セットアップするためのパラメーターです。 */ export type SetupParams = Readonly<{ /** * バケット名です。 */ bucketName: BucketNameLike; /** * オブジェクトを保存するためのストレージクライアントです。 */ storage: IStorage; /** * メタデータを記録するためのデータベースクライアントです。 */ database: IDatabase; /** * 排他制御のためのキューを管理するオブジェクトです。 */ mutex?: Asyncmux | undefined; /** * JavaScript の値と JSON 文字列を相互変換するための関数群です。 */ json?: IJson | undefined; /** * Omnio で使用されるロガーです。 * 内部情報や、ただちにアプリケーションを停止する必要はないものの、記録しておくべきメッセージを通知する際に使用されます。 */ logger?: ILogger | undefined; /** * オブジェクトの説明文の検索に使用する関数群です。 */ textSearch?: ITextSearch | undefined; /** * オブジェクトの説明文の最大サイズ (バイト数) です。 * * @default 10 KB */ maxDescriptionTextByteSize?: number | undefined; /** * ユーザー定義のメタデータの最大サイズ (バイト数) です。 * このサイズは、ユーザー定義のメタデータを `json.stringify` で変換したあとの文字列に対して計算されます。 * * @default 10 KB */ maxUserMetadataJsonByteSize?: number | undefined; /** * `Omnio` を閉じるときに実行されるクリーンアップ関数です。 */ cleanup?: ICleanupFunction | undefined; }>; /** * `Omnio` の利用を開始する際に実行されるセットアップ関数のインターフェースです。 */ export interface ISetupFunction { /** * セットアップします。 * * @returns セットアップするためのパラメーターです。 */ (): Awaitable; } /*************************************************************************************************** * * 行データ * **************************************************************************************************/ export type { ObjectInTrashMetadata, ObjectMetadata }; /*************************************************************************************************** * * 行データのセレクター * **************************************************************************************************/ export type { ObjectInTrashMetadataSelectQuery, ObjectMetadataSelectQuery }; /*************************************************************************************************** * * 作成 * **************************************************************************************************/ /** * 書き込みストリームのオプションです。 */ export type CreateWriteStreamOptions = Readonly<{ /** * オブジェクトを開く際のモードです。 * * - **`"w"`**: 書き込みモードで開きます。オブジェクトが存在しない場合は新規作成され、もし存在する場合は上書きします。 * - **`"wx"`**: 書き込みモードで開きます。オブジェクトが存在する場合はエラーになります。 * - **`"a"`**: 追加書き込みモードで開きます。オブジェクトが存在しない場合は新規作成されます。 * - **`"ax"`**: 追加書き込みモードで開きます。オブジェクトが存在する場合はエラーになります * * @default "w" */ flag?: OpenModeLike | undefined; /** * 各パートのサイズ (バイト数) です。 */ partSize?: PartSizeLike | undefined; /** * オブジェクトのデータ形式です。`undefined` の場合はオブジェクトパスから自動判定されます。 * 判定できない場合は "application/octet-stream" になります。 */ mimeType?: MimeTypeLike | undefined; /** * オブジェクトに関連付けられたオブジェクトタグです。 * * @default [] */ objectTags?: ObjectTagsLike | undefined; /** * オブジェクトの説明文です。 * * @default null */ description?: string | null | undefined; /** * ユーザー定義のメタデータです。 * * @default null */ userMetadata?: unknown; /** * カスタムのタイムスタンプです。デフォルトで現在時刻です。 */ timestamp?: TimestampLike | undefined; /** * 中止シグナルです。 */ abortSignal?: AbortSignal | undefined; }>; /** * オプジェクトを書き込む際のオプションです。 */ export type PutObjectOptions = CreateWriteStreamOptions; /*************************************************************************************************** * * 読み取り * **************************************************************************************************/ /** * 追加のデータを読み込むためのオプションです。読み込むデータを選択します。 */ export type ObjectMetadataLoadOptions = Readonly<{ /** * オブジェクトに関連付けられたオブジェクトタグです。 * * @default false */ objectTags?: boolean | undefined; /** * オブジェクトの説明文です。 * * @default false */ description?: boolean | undefined; /** * ユーザー定義のメタデータです。 * * @default false */ userMetadata?: boolean | undefined; }>; /** * 読み込みストリームのオプションです。 */ export type CreateReadStreamOptions = Readonly<{ /** * 追加のデータを読み込むためのオプションです。読み込むデータを選択します。`true` の場合は全ての追加のデータを読み込みます。 * * @default false */ load?: boolean | ObjectMetadataLoadOptions | undefined; /** * 中止シグナルです。 */ abortSignal?: AbortSignal | undefined; }>; /** * オブジェクトを取得する際のオプションです。 */ export type GetObjectOptions = CreateReadStreamOptions; /** * 存在するオブジェクトのメタデータを取得するためのクエリーです。 */ export type GetObjectMetadataQuery = Readonly<{ /** * 結果に含めるカラムを選択します。 */ select?: ObjectMetadataSelectQuery | undefined; /** * 対象を限定します。 */ where: Readonly<{ /** * バケット内のオブジェクトパスです。 */ path: ObjectPathLike; }>; }>; /** * 存在するオブジェクトのメタデータを取得するためのオプションです。 */ export type GetObjectMetadataOptions = Readonly<{ /** * 中止シグナルです。 */ abortSignal?: AbortSignal | undefined; }>; /** * 存在するオブジェクトのメタデータを取得した結果です。 * * @template TSelect SELECT するカラムです。 */ export type GetObjectMetadataResult = $Select; /** * オブジェクトとディレクトリーのステータス情報です。 */ export type Stats = { /** * `true` なら指定したパスはオブジェクトです。 */ isObject: boolean; /** * `true` なら指定したパスはディレクトリーです。 */ isDirectory: boolean; }; /** * ディレクトリーまたはオブジェクトをリストアップするためのクエリーです。 */ export type ListQuery = Readonly<{ /** * リストアイテムがオブジェクトのときに結果に含めるカラムを選択します。 */ select?: ObjectMetadataSelectQuery | undefined; /** * 対象を限定します。 */ where?: Readonly<{ /** * ディレクトリーパスです。 */ dirPath?: ObjectDirectoryPathLike | undefined; /** * `true` ならオブジェクトのみを、`false` ならディレクトリーのみをリストアップします。 */ isObject?: boolean | undefined; }> | undefined; /** * スキップするアイテムの数です。 * * @default 0 */ skip?: UintLike | undefined; /** * 取得するアイテムの最大数です。 * * @default 上限なし */ take?: UintLike | undefined; /** * 結果の並び順を指定します。 */ orderBy?: Readonly<{ /** * オブジェクト名の並び順です。 */ name?: OrderTypeLike | Readonly<{ /** * 並び順です。 * * @default "ASC" */ type?: OrderTypeLike | undefined; /** * 照合順序です。 * * @default "nfc" */ collate?: string | undefined; }> | undefined; /** * オブジェクトを先頭にします。 * * @default false */ preferObject?: boolean | undefined; }> | undefined; }>; /** * ディレクトリーをリストアップした結果です。 * * @template TSelect SELECT するカラムです。 */ export type ListItemDirectory = { /** * `false` ならディレクトリーです。 */ isObject: false; /** * リストアイテムの名前です。 */ name: string; }; /** * オブジェクトをリストアップした結果です。 * * @template TSelect SELECT するカラムです。 */ export type ListItemObject = $Select & { /** * `true` ならオブジェクトです。 */ isObject: true; /** * リストアイテムの名前です。 */ name: string; }; /** * ディレクトリーまたはオブジェクトをリストアップした結果です。 * * @template TSelect SELECT するカラムです。 * @template TIsObject オブジェクトのみを選択するかどうかです。 */ export type ListItem = undefined extends TIsObject ? ListItemDirectory | ListItemObject : ((false extends TIsObject ? ListItemDirectory : never) | (true extends TIsObject ? ListItemObject : never)); /** * ディレクトリーまたはオブジェクトをリストアップするためのクエリーです。 */ export type ListInTrashQuery = Readonly<{ /** * リストアイテムがオブジェクトのときに結果に含めるカラムを選択します。 */ select?: ObjectInTrashMetadataSelectQuery | undefined; /** * 対象を限定します。 */ where?: Readonly<{ /** * ディレクトリーパスです。 */ dirPath?: ObjectDirectoryPathLike | undefined; }> | undefined; /** * スキップするアイテムの数です。 * * @default 0 */ skip?: UintLike | undefined; /** * 取得するアイテムの最大数です。 * * @default 上限なし */ take?: UintLike | undefined; /** * 結果の並び順を指定します。 */ orderBy?: Readonly<{ /** * オブジェクト名の並び順です。 */ name?: OrderTypeLike | Readonly<{ /** * 並び順です。 * * @default "ASC" */ type?: OrderTypeLike | undefined; /** * 照合順序です。 * * @default "nfc" */ collate?: string | undefined; }> | undefined; }> | undefined; }>; /** * ゴミ箱に入れられたオブジェクトのメタデータを取得した結果です。 * * @template TSelect SELECT するカラムです。 */ export type ListItemInTrash = $Select & { /** * `true` ならオブジェクトです。 */ isObject: true; /** * リストアイテムの名前です。 */ name: string; }; /** * オブジェクトの説明文を対象に全文検索するためのオプションです。 */ export type SearchObjectsOptions = Readonly<{ /** * 対象を限定します。 */ where?: Readonly<{ /** * ディレクトリーパスです。 */ dirPath?: ObjectDirectoryPathLike | undefined; }> | undefined; /** * スキップする検索結果の数です。 * * @default 0 */ skip?: UintLike | undefined; /** * 取得する検索結果の最大数です。 * * @default 上限なし */ take?: UintLike | undefined; /** * ディレクトリー内のオブジェクトを再帰的に検索するなら `true`、しないなら `false` を指定します。 * * @default false */ recursive?: boolean | undefined; /** * 検索にヒットしたと判断するスコアのしきい値です。 * * @default 0 */ scoreThreshold?: number | undefined; }>; /** * オブジェクトの説明文を対象に全文検索した結果です。 */ export type SearchObjectResult = { /** * バケット内のオブジェクトパスです。 */ objectPath: ObjectPath; /** * オブジェクトの説明文です。 */ description: string | null; /** * 検索スコアです。 */ searchScore: number; }; /*************************************************************************************************** * * 更新 * **************************************************************************************************/ /** * オブジェクトを移動するためのオプションです。 */ export type MoveObjectOptions = Readonly<{ /** * オブジェクトを開く際のモードです。 * * - **`"w"`**: 書き込みモードで開きます。オブジェクトが存在しない場合は新規作成され、もし存在する場合は上書きします。 * - **`"wx"`**: 書き込みモードで開きます。オブジェクトが存在する場合はエラーになります。 * - **`"a"`**: `"w"` と同じです。 * - **`"ax"`**: `"wx"` と同じです。 * * @default "wx" */ flag?: OpenModeLike | undefined; /** * 中止シグナルです。 */ abortSignal?: AbortSignal | undefined; }>; /** * オブジェクトをコピーするためのオプションです。 */ export type CopyObjectOptions = Readonly<{ /** * オブジェクトを開く際のモードです。 * * - **`"w"`**: 書き込みモードで開きます。オブジェクトが存在しない場合は新規作成され、もし存在する場合は上書きします。 * - **`"wx"`**: 書き込みモードで開きます。オブジェクトが存在する場合はエラーになります。 * - **`"a"`**: `"w"` と同じです。 * - **`"ax"`**: `"wx"` と同じです。 * * @default "wx" */ flag?: OpenModeLike | undefined; /** * カスタムのタイムスタンプです。 * * @default Date.now() */ timestamp?: TimestampLike | undefined; /** * 中止シグナルです。 */ abortSignal?: AbortSignal | undefined; }>; /** * オブジェクトのメタデータを更新するためのオプションです。 */ export type UpdateObjectMetadataOptions = Readonly<{ /** * オブジェクトのデータ形式です。 */ mimeType?: MimeTypeLike | undefined; /** * オブジェクトに関連付けられたオブジェクトタグです。 */ objectTags?: ObjectTagsLike | undefined; /** * オブジェクトの説明文です。 */ description?: string | null | undefined; /** * ユーザー定義のメタデータです。 */ userMetadata?: unknown | undefined; /** * カスタムのタイムスタンプです。 * * @default Date.now() */ timestamp?: TimestampLike | undefined; }>; /** * オブジェクトの削除フラグを立てるためのオプションです。 */ export type TrashObjectOptions = Readonly<{ /** * カスタムのタイムスタンプです。 * * @default Date.now() */ timestamp?: TimestampLike | undefined; }>; /*************************************************************************************************** * * 削除 * **************************************************************************************************/ /** * オブジェクトを削除するためのオプションです。 */ export type DeleteObjectOptions = Readonly<{ /** * 中止シグナルです。 */ abortSignal?: AbortSignal | undefined; }>; /*************************************************************************************************** * * Omnio * **************************************************************************************************/ export default class Omnio { #private; /** * `Omnio` の新しいインスタンスを構築します。 * * @param options `Omnio` の利用を開始する際に実行されるセットアップ関数です。 */ constructor(setup: ISetupFunction); /** * `Omnio` が利用可能かどうかです。 */ get closed(): boolean; /** * Omnio の利用を開始します。 */ open(): Promise; /** * Omnio の利用を終了します。 */ close(): Promise; /** * オブジェクトを書き込むためのストリームを作成します。 * * @param path 書き込み先のオブジェクトパスです。 * @param options 書き込みストリームのオプションです。 * @returns 書き込みストリームです。 */ createWriteStream(path: ObjectPathLike, options?: CreateWriteStreamOptions | undefined): Promise; /** * 指定したパスにオブジェクトのデータとメタデータを書き込みます。 * * @param path 書き込み先のオブジェクトパスです。 * @param data `Uint8Array` に変換できる値またはファイルオブジェクトです。 * @param options オブジェクト書き込み時のオプションです */ putObject(path: ObjectPathLike, data: Uint8ArraySource | Blob, options?: PutObjectOptions | undefined): Promise; /** * オブジェクトを読み込むためのストリームを作成します。 * * @param path オブジェクトパスです。 * @param options 読み込みストリームのオプションです。 * @returns 読み込みストリームです。 */ createReadStream(path: ObjectPathLike, options?: CreateReadStreamOptions | undefined): Promise; /** * オブジェクトを取得します。 * * @param path オブジェクトパスです。 * @param options オブジェクトを取得する際のオプションです。 * @returns `File` クラスを継承したオブジェクトの情報です。 */ getObject(path: ObjectPathLike, options?: GetObjectOptions | undefined): Promise; /** * 存在するオブジェクトのメタデータを取得します。 * * @template TQuery 存在するオブジェクトのメタデータを取得するためのクエリーの型です。 * @param query 存在するオブジェクトのメタデータを取得するためのクエリーです。 * @param options 存在するオブジェクトのメタデータを取得するためのオプションです。 * @returns オブジェクトのメタデータを取得した結果です。 */ getObjectMetadata(query: Tquery, options?: GetObjectMetadataOptions | undefined): Promise>>; /** * オブジェクトが存在するか確認します。 * * @param path オブジェクトパスです。 * @returns `true` ならオブジェクトが存在します。 */ existsPath(path: ObjectPathLike): Promise; /** * ディレクトリーが存在するか確認します。 * * @param directoryPath ディレクトリーを表すパスセグメントの配列です。 * @returns `true` ならディレクトリーが存在します。 */ existsPath(directoryPath: readonly string[]): Promise; /** * オブジェクトまたはディレクトリーが存在するか確認します。 * * @param pathOrDirectoryPath オブジェクトパスまたはディレクトリーを表すパスセグメントの配列です。 * @returns `true` ならオブジェクトまたはディレクトリーが存在します。 */ existsPath(pathOrDirectoryPath: ObjectPathLike | readonly string[]): Promise; /** * オブジェクトやディレクトリーのステータス情報を取得します。 * * @returns オブジェクトやディレクトリーのステータス情報です。 */ statPath(path: ObjectPathLike): Promise; /** * ディレクトリーまたはオブジェクトをリストアップします。 * * @template TQuery リストアップするためのクエリーの型です。 * @param query リストアップするためのクエリーです。 * @returns ディレクトリーまたはオブジェクトをリストアップした結果です。 */ list(query: TQuery): Promise, $Get<$Get, "isObject">>>>; /** * ディレクトリーまたはオブジェクトをリストアップします。 * * @template TQuery リストアップするためのクエリーの型です。 * @param query リストアップするためのクエリーです。 * @returns ディレクトリーまたはオブジェクトをリストアップした結果です。 */ listIntrash(query: TQuery): Promise>>>; /************************************************************************************************* * * 更新 * ************************************************************************************************/ /** * オブジェクトの説明文を対象に全文検索します。 * * @param query 検索クエリーです。 * @param options オブジェクトの説明文を対象に全文検索するためのオプションです。 * @returns オブジェクトの説明文を対象に全文検索した結果です。 */ searchObjects(query: string, options?: SearchObjectsOptions): Promise>; /************************************************************************************************* * * 更新 * ************************************************************************************************/ /** * オブジェクトを移動します。 * * @param sourcePath 移動元のオブジェクトパスです。 * @param destinationPath 移動先のオブジェクトパスです。 * @param options オブジェクトを移動するためのオプションです。 */ moveObject(sourcePath: ObjectPathLike, destinationPath: ObjectPathLike, options?: MoveObjectOptions | undefined): Promise; /** * オブジェクトをコピーします。 * * @param sourcePath コピー元のオブジェクトパスです。 * @param destinationPath コピー先のオブジェクトパスです。 * @param options オブジェクトをコピーするためのオプションです。 */ copyObject(sourcePath: ObjectPathLike, destinationPath: ObjectPathLike, options?: CopyObjectOptions | undefined): Promise; /** * オブジェクトのメタデータを更新します。 * * @param path オブジェクトパスです。 * @param options オブジェクトのメタデータを更新するためのオプションです。 */ updateObjectMetadata(path: ObjectPathLike, options?: UpdateObjectMetadataOptions | undefined): Promise; /** * オブジェクトの削除フラグを立てます。 * * @param path オブジェクトパスです。 * @param options オブジェクトの削除フラグを立てるためのオプションです。 */ trashObject(path: ObjectPathLike, options?: TrashObjectOptions | undefined): Promise; /************************************************************************************************* * * 削除 * ************************************************************************************************/ /** * 存在するオブジェクトを削除します。 * * @param path オブジェクトパスです。 * @param options オブジェクトを削除するためのオプションです。 */ deleteObject(path: ObjectPathLike, options?: DeleteObjectOptions | undefined): Promise; /** * ゴミ箱に入れられたオブジェクトを削除します。 * * @param objectId オブジェクトの識別子です。 */ deleteObjectInTrash(objectId: ObjectId): Promise; /************************************************************************************************* * * その他 * ************************************************************************************************/ /** * メタデータを管理するデータベースに対して SQL クエリーを実行し、結果を返します。 * * @param sql 実行する SQL クエリーです。 * @returns クエリーの実行結果をイテレーターで返します。 */ dangerous_queryObjectMetadata(sql: string | Sql): AsyncGenerator; } //# sourceMappingURL=omnio.d.ts.map