Skip to content

Commit 0aad6d7

Browse files
committed
Docs for WorkersKvStore
1 parent 9674ec2 commit 0aad6d7

4 files changed

Lines changed: 73 additions & 6 deletions

File tree

docs/.vitepress/config.mts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import deflist from "markdown-it-deflist";
44
import footnote from "markdown-it-footnote";
55
import { jsrRef } from "markdown-it-jsr-ref";
66
import process from "node:process";
7+
import { ModuleKind, ModuleResolutionKind, ScriptTarget } from "typescript";
78
import { defineConfig } from "vitepress";
89
import {
910
groupIconMdPlugin,
@@ -210,12 +211,16 @@ export default withMermaid(defineConfig({
210211
transformerTwoslash({
211212
twoslashOptions: {
212213
compilerOptions: {
214+
moduleResolution: ModuleResolutionKind.Bundler,
215+
module: ModuleKind.ESNext,
216+
target: ScriptTarget.ESNext,
213217
lib: ["dom", "dom.iterable", "esnext"],
214218
types: [
215219
"dom",
216220
"dom.iterable",
217221
"esnext",
218222
"@teidesu/deno-types/full",
223+
"@cloudflare/workers-types/experimental",
219224
],
220225
// @ts-ignore: Although it's typed as string, it's actually an array
221226
jsx: ["react-jsx"],

docs/manual/kv.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,55 @@ const federation = createFederation<void>({
142142
[`PostgresKvStore`]: https://jsr.io/@fedify/postgres/doc/kv/~/PostgresKvStore
143143
[@fedify/postgres]: https://github.com/fedify-dev/postgres
144144

145+
### `WorkersKvStore` (Cloudflare Workers only)
146+
147+
*This API is available since Fedify 1.6.0.*
148+
149+
`WorkersKvStore` is a key–value store implementation for [Cloudflare Workers]
150+
that uses Cloudflare's built-in [Cloudflare Workers KV] API. It provides
151+
persistent storage and good performance for Cloudflare Workers environments.
152+
It's suitable for production use in Cloudflare Workers applications.
153+
154+
Best for
155+
: Production use in Cloudflare Workers environments.
156+
157+
Pros
158+
: Persistent storage, good performance, easy to set up.
159+
160+
Cons
161+
: Only available in Cloudflare Workers runtime.
162+
163+
~~~~ typescript twoslash
164+
// @noErrors: 2345
165+
import type { FederationBuilder } from "@fedify/fedify";
166+
const builder = undefined as unknown as FederationBuilder<void>;
167+
// ---cut-before---
168+
import type { Federation } from "@fedify/fedify";
169+
import { WorkersKvStore } from "@fedify/fedify/x/cfworkers";
170+
171+
export default {
172+
async fetch(request, env, ctx) {
173+
const federation: Federation<void> = await builder.build({
174+
kv: new WorkersKvStore(env.KV_BINDING),
175+
});
176+
return await federation.fetch(request, { contextData: undefined });
177+
}
178+
} satisfies ExportedHandler<{ KV_BINDING: KVNamespace<string> }>;
179+
~~~~
180+
181+
> [!NOTE]
182+
> Since your `KVNamespace` is not bound to a global variable, but rather
183+
> passed as an argument to the `fetch()` method, you need to instantiate
184+
> your `Federation` object inside the `fetch()` method.
185+
>
186+
> For better organization, you probably want to use a builder pattern to
187+
> register your dispatchers and listeners before instantiating the `Federation`
188+
> object. See the [*Builder pattern for structuring*
189+
> section](./federation.md#builder-pattern-for-structuring) for details.
190+
191+
[Cloudflare Workers]: https://workers.cloudflare.com/
192+
[Cloudflare Workers KV]: https://developers.cloudflare.com/kv/
193+
145194

146195
Implementing a custom `KvStore`
147196
-------------------------------

docs/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"devDependencies": {
33
"@braintree/sanitize-url": "^7.1.1",
4+
"@cloudflare/workers-types": "4.20250529.0",
45
"@deno/kv": "^0.8.4",
56
"@fedify/amqp": "^0.2.0",
6-
"@fedify/fedify": "^1.6.1-dev.828",
7+
"@fedify/fedify": "1.6.1-pr.242.860",
78
"@fedify/postgres": "^0.3.0",
89
"@fedify/redis": "^0.4.0",
910
"@hono/node-server": "^1.13.7",
@@ -30,6 +31,7 @@
3031
"mermaid": "^11.4.1",
3132
"postgres": "^3.4.5",
3233
"stringify-entities": "^4.0.4",
34+
"typescript": "^5.8.3",
3335
"vitepress": "^1.5.0",
3436
"vitepress-plugin-group-icons": "^1.3.5",
3537
"vitepress-plugin-llms": "^1.1.0",

docs/pnpm-lock.yaml

Lines changed: 16 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)