R2D1 / ドキュメント
TypeScript
TypeScript パッケージは R2 のドキュメントストアと D1 のインデックスを1つのコレクション API で接続します。ランタイム用 adapter を選び、schema と document codec を渡します。
インストール
Node.js adapter には Node.js 22 以降が必要です。Cloudflare Workers では Workers の subpath を使います。
npm install @nexcraft-dev/r2d1Node.js
R2 と D1 用の Node.js adapter を使います。下のコードでは r2Config、d1Config、schema、codec を設定済みとします。
import { R2D1 } from "@nexcraft-dev/r2d1";
import { NodeR2DocumentStore, NodeD1IndexStore } from "@nexcraft-dev/r2d1/node";
const users = await new R2D1(
new NodeR2DocumentStore(r2Config),
new NodeD1IndexStore(d1Config),
).collection(schema, codec);
await users.put({ id: "user-1", country: "NZ", score: 4.5 });
const page = await users
.query().where("country").eq("NZ")
.sortBy("score", "DESC").limit(20).fetch();Cloudflare Workers
R2 bucket を DOCUMENTS、D1 database を INDEXES として binding し、Workers adapter に渡します。
import { R2D1 } from "@nexcraft-dev/r2d1";
import {
WorkersR2DocumentStore,
WorkersD1IndexStore,
} from "@nexcraft-dev/r2d1/workers";
const users = await new R2D1(
new WorkersR2DocumentStore(env.DOCUMENTS),
new WorkersD1IndexStore(env.INDEXES),
).collection(schema, codec);Java データとの互換性
R2 key、D1 table、index、cursor 形式は Java の契約に従います。ドキュメント bytes の形式はアプリケーションが決めます。Java に既定の形式はありません。同じ bytes を読み書きする TypeScript codec を使います。jsonCodec は任意機能で bigint に対応しません。TypeScript の long フィールドには bigint を使います。
完全な例
リポジトリには Node.js、Workers、共通 codec の完全な例があります。
