1import type * as runtime from "@cloudflare/workers-types";
2import * as Effect from "effect/Effect";
3import * as Layer from "effect/Layer";
4import {
5 makeKVNamespaceBinding,
6 makeKVNamespaceHelpers,
7} from "./NamespaceBinding.ts";
8import { WriteNamespace, type WriteNamespaceClient } from "./WriteNamespace.ts";
9
10/**
11 * Implementation of the {@link WriteNamespace} binding that uses a Worker
12 * binding.
13 */
14export const WriteNamespaceBinding = Layer.effect(
15 WriteNamespace,
16 Effect.suspend(() =>
17 makeKVNamespaceBinding({ makeClient: makeWriteKVClient }),
18 ),
19);
20
21/** Build the write half of the binding client. */
22export const makeWriteKVClient = ({
23 use,
24}: ReturnType<typeof makeKVNamespaceHelpers>): WriteNamespaceClient => {
25 return {
26 put: ((...args: Parameters<runtime.KVNamespace["put"]>) =>
27 use((raw) => raw.put(...args))) as any,
28 delete: ((...args: Parameters<runtime.KVNamespace["delete"]>) =>
29 use((raw) => raw.delete(...args))) as any,
30 };
31};