UNPKG

cfw-bindings-wrangler-bridge

Version:

This bridge makes it possible to interact with **remote** Cloudflare Workers bindings(like KV, D1, etc...) **from anywhere** you want.

70 lines (58 loc) 1.87 kB
// @ts-check // Refs: // https://developers.cloudflare.com/r2/api/workers/workers-api-reference/#r2multipartupload-definition // https://github.com/cloudflare/workerd/blob/main/src/workerd/api/r2-multipart.c%2B%2B // https://github.com/cloudflare/miniflare/blob/master/packages/r2/src/multipart.ts import { HeadResult$ } from "./r2-object.js"; import { encodeKey } from "./shared.js"; /** * @typedef {import("./types.ts").Dispatch} Dispatch * @typedef {import("./types.ts").R2MultipartUploadJSON} R2MultipartUploadJSON * @typedef {import("./types.ts").R2ObjectJSON} R2ObjectJSON */ // implements R2MultipartUpload export class R2MultipartUpload$ { #dispatch; key; uploadId; /** * @param {R2MultipartUploadJSON} json * @param {Dispatch} dispatch */ constructor({ key, uploadId }, dispatch) { this.#dispatch = dispatch; this.key = key; this.uploadId = uploadId; // JSG_LAZY_READONLY_INSTANCE_PROPERTY Object.freeze(this); } /** * @param {number} partNumber * @param {ReadableStream | ArrayBuffer | ArrayBufferView | string | Blob} value */ async uploadPart(partNumber, value) { const res = await this.#dispatch( "R2MultipartUpload.uploadPart", [encodeKey(this.key), this.uploadId, partNumber], value, ); const json = await res.json(); return json; } async abort() { await this.#dispatch("R2MultipartUpload.abort", [ encodeKey(this.key), this.uploadId, ]); } /** @param {import("@cloudflare/workers-types/experimental").R2UploadedPart[]} uploadedParts */ async complete(uploadedParts) { const res = await this.#dispatch("R2MultipartUpload.complete", [ encodeKey(this.key), this.uploadId, uploadedParts, ]); const json = /** @type {R2ObjectJSON} */ (await res.json()); return new HeadResult$(json); } }