@@ -30,6 +30,15 @@ import * as Stream from "effect/Stream";
3030 * Layer.provide(Git.BlobStoreR2(MyBucket)),
3131 * // ...
3232 * );
33+ *
34+ * // The Worker picks the ReadWriteBucket implementation.
35+ * export default class GitHost extends Cloudflare.Worker<GitHost>()(
36+ * "GitHost",
37+ * { main: import.meta.url, ...Git.GIT_WORKER_OPTIONS },
38+ * Effect.gen(function* () {
39+ * return { fetch: yield* HttpRouter.toHttpEffect(GitLive) };
40+ * }).pipe(Effect.provide(Cloudflare.R2.ReadWriteBucketBinding)),
41+ * ) {}
3342 * ```
3443 */
3544import * as Cloudflare from "../Cloudflare/index.ts" ;
@@ -223,19 +232,22 @@ export const makeBlobStoreR2 = (bucket: ReadWriteBucketClient): BlobStoreShape =
223232
224233/**
225234 * R2-backed {@link BlobStore}: packs, bundles, oversize objects, and
226- * push spill live in the given bucket. Registers the bucket binding on
227- * the host Worker.
235+ * push spill live in the given bucket. Requires the
236+ * `Cloudflare.R2.ReadWriteBucket` capability; provide an implementation
237+ * (`Cloudflare.R2.ReadWriteBucketBinding` or `ReadWriteBucketHttp`) on the
238+ * Worker.
228239 *
229240 * @layer
230241 * @provides Git.BlobStore
231242 */
232243export const BlobStoreR2 = (
233244 bucket : Parameters < typeof Cloudflare . R2 . ReadWriteBucket > [ 0 ] ,
234- ) : Layer . Layer < BlobStore > =>
245+ ) : Layer . Layer < BlobStore , never , Cloudflare . R2 . ReadWriteBucket > =>
235246 Layer . effect (
236247 BlobStore ,
237248 Effect . gen ( function * ( ) {
238249 const client = yield * Cloudflare . R2 . ReadWriteBucket ( bucket ) ;
239250 return makeBlobStoreR2 ( client ) ;
240251 } ) ,
241- ) . pipe ( Layer . provide ( Cloudflare . R2 . ReadWriteBucketBinding ) ) as never ;
252+ // `bucket` may be a declaration Effect, which widens the inferred requirement.
253+ ) as Layer . Layer < BlobStore , never , Cloudflare . R2 . ReadWriteBucket > ;
0 commit comments