Skip to content

TypeScript API / laikacms/assets/r2 / R2AssetsDataSource

Class: R2AssetsDataSource ​

R2AssetsDataSource provides low-level operations for binary assets in Cloudflare R2. Unlike the storage datasource which handles text serialization, this handles raw binary data.

Constructors ​

Constructor ​

ts
new R2AssetsDataSource(bucket): R2AssetsDataSource;

Parameters ​

ParameterType
bucketR2Bucket

Returns ​

R2AssetsDataSource

Methods ​

abortMultipartUpload() ​

ts
abortMultipartUpload(key, uploadId): Promise<LaikaResult<void>>;

Abort a multipart upload

Parameters ​

ParameterType
keystring
uploadIdstring

Returns ​

Promise<LaikaResult<void>>


completeMultipartUpload() ​

ts
completeMultipartUpload(
   key, 
   uploadId, 
   parts
): Promise<LaikaResult<R2AssetMeta>>;

Complete a multipart upload

Parameters ​

ParameterType
keystring
uploadIdstring
partsobject[]

Returns ​

Promise<LaikaResult<R2AssetMeta>>


createFolder() ​

ts
createFolder(key): Promise<LaikaResult<void>>;

Create an empty folder (using .keep file)

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<void>>


deleteFolder() ​

ts
deleteFolder(key, recursive?): Promise<LaikaResult<void>>;

Delete a folder and optionally all its contents

Parameters ​

ParameterTypeDefault value
keystringundefined
recursivebooleanfalse

Returns ​

Promise<LaikaResult<void>>


deleteObject() ​

ts
deleteObject(key): Promise<LaikaResult<void>>;

Delete an object

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<void>>


deleteObjects() ​

ts
deleteObjects(keys): AsyncGenerator<LaikaResult<string>>;

Delete multiple objects

Parameters ​

ParameterType
keysreadonly string[]

Returns ​

AsyncGenerator<LaikaResult<string>>


exists() ​

ts
exists(key): Promise<boolean>;

Check if an object exists

Parameters ​

ParameterType
keystring

Returns ​

Promise<boolean>


getFolderMeta() ​

ts
getFolderMeta(key): Promise<LaikaResult<{
  createdAt: Date;
  updatedAt: Date;
}>>;

Get folder metadata (for R2, folders don't have real metadata)

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<{ createdAt: Date; updatedAt: Date; }>>


getObjectBody() ​

ts
getObjectBody(key): Promise<LaikaResult<{
  body: ArrayBuffer;
  meta: R2AssetMeta;
}>>;

Get object body as ArrayBuffer

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<{ body: ArrayBuffer; meta: R2AssetMeta; }>>


getObjectMeta() ​

ts
getObjectMeta(key): Promise<LaikaResult<R2AssetMeta>>;

Get object metadata without fetching the body

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<R2AssetMeta>>


getObjectStream() ​

ts
getObjectStream(key): Promise<LaikaResult<{
  meta: R2AssetMeta;
  stream: ReadableStream;
}>>;

Get object body as ReadableStream

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<{ meta: R2AssetMeta; stream: ReadableStream; }>>


isDirectory() ​

ts
isDirectory(key): Promise<boolean>;

Check if a key represents a directory (has objects with that prefix)

Parameters ​

ParameterType
keystring

Returns ​

Promise<boolean>


listDirectory() ​

ts
listDirectory(prefix, options?): Promise<LaikaResult<R2AssetEntry[]>>;

List objects in a "directory" (prefix)

Parameters ​

ParameterType
prefixstring
options?{ includeMetadata?: boolean; }
options.includeMetadata?boolean

Returns ​

Promise<LaikaResult<R2AssetEntry[]>>


listPage() ​

ts
listPage(prefix, options?): Promise<LaikaResult<{
  cursor?: string;
  entries: R2AssetEntry[];
}>>;

List one native R2 page of objects under a prefix, recursively (no delimiter), surfacing R2's own continuation cursor instead of draining. Returns only files (.keep folder markers are skipped, so a page may carry slightly fewer entries than limit); a returned cursor means the listing is truncated and can be resumed from that exact position.

Parameters ​

ParameterType
prefixstring
options?{ cursor?: string; includeMetadata?: boolean; limit?: number; }
options.cursor?string
options.includeMetadata?boolean
options.limit?number

Returns ​

Promise<LaikaResult<{ cursor?: string; entries: R2AssetEntry[]; }>>


putObject() ​

ts
putObject(
   key, 
   body, 
   options?
): Promise<LaikaResult<R2AssetMeta>>;

Put an object (create or update)

Parameters ​

ParameterType
keystring
body| string | ReadableStream<any> | ArrayBuffer | Uint8Array<ArrayBufferLike> | ArrayBufferView<ArrayBufferLike>
options?{ cacheControl?: string; contentType?: string; customMetadata?: Record<string, string>; }
options.cacheControl?string
options.contentType?string
options.customMetadata?Record<string, string>

Returns ​

Promise<LaikaResult<R2AssetMeta>>


startMultipartUpload() ​

ts
startMultipartUpload(key, options?): Promise<LaikaResult<{
  uploadId: string;
}>>;

Start a multipart upload

Parameters ​

ParameterType
keystring
options?{ contentType?: string; customMetadata?: Record<string, string>; }
options.contentType?string
options.customMetadata?Record<string, string>

Returns ​

Promise<LaikaResult<{ uploadId: string; }>>


uploadPart() ​

ts
uploadPart(
   key, 
   uploadId, 
   partNumber, 
   body
): Promise<LaikaResult<{
  etag: string;
  partNumber: number;
}>>;

Upload a part in a multipart upload

Parameters ​

ParameterType
keystring
uploadIdstring
partNumbernumber
body| string | ReadableStream<any> | ArrayBuffer | Uint8Array<ArrayBufferLike> | ArrayBufferView<ArrayBufferLike>

Returns ​

Promise<LaikaResult<{ etag: string; partNumber: number; }>>

Released under the MIT License.