本文へ移動
SDK ガイド / 保存・合流

保存・合流

保存先、持ち出し、同じ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>;

リファレンスの目次