保存・合流
保存先、持ち出し、同じWorldの変更の合流。
保存・コピー・合流
save は保存完了の確認、export は完全な元本のBlob、merge は同じWorldの内容の合流です。部分的な投影はexportできません。
TypeScript · シグネチャ
interface World {
export(): Promise<WorldData>;
save(): Promise<void>;
merge(data: WorldData, options?: {
basis?: string;
resolutions?: MergeResolution[];
}): Promise<MergeResult>;
}
type WorldData = Blob;
type MergeResult =
| { applied: true; revision: number }
| { applied: false; basis: string; conflicts: MergeConflict[] };MergeConflict・MergeResolution
applied:false の場合は変更せず衝突を返します。basis と resolutions を渡して解消します。対象が変化していれば LocalConflict です。
TypeScript · シグネチャ
type MergeConflict = {
path: string[];
kind: 'changed' | 'delete-edit' | 'invitation-use';
base?: Json;
local?: Json;
remote?: Json;
} | { path: []; kind: 'invalid'; code: string; details: Json };
interface MergeResolution { path: string[]; value?: Json }インタフェース
StorageはSDKが扱うキーとBlobの保存先です。アプリが渡した保存先は、利用するWorldをすべて閉じた後にアプリがcloseします。
TypeScript · シグネチャ
type StorageVersion = string;
interface StorageRead {
version: StorageVersion | null;
values: ReadonlyMap<string, Blob>;
}
interface Storage {
read(keys: readonly string[]): Promise<StorageRead>;
write(
expected: StorageVersion | null,
changes: ReadonlyMap<string, Blob | null>,
): Promise<StorageVersion>;
close(): Promise<void>;
}標準アダプター
MemoryStorage はメモリー、BrowserStorage はIndexedDB、DirectoryStorage はNode.jsのSQLite。保存先省略時はMemoryStorageです。ttlMs / maxBytes の制限超過や欠落はエラーになります。
TypeScript · シグネチャ
interface StorageOptions {
ttlMs?: number;
maxBytes?: number;
}
new MemoryStorage(options?: StorageOptions);
BrowserStorage.open(name: string, options?: StorageOptions): Promise<Storage>;
DirectoryStorage.open(directory: string, options?: StorageOptions): Promise<Storage>;