Skip to content

TypeScript API / laikacms/storage/r2 / R2DataSource

Class: R2DataSource ​

R2DataSource provides low-level operations for interacting with Cloudflare R2 storage. It handles the translation between the flat object store model and a hierarchical file system model.

Constructors ​

Constructor ​

ts
new R2DataSource(
   bucket, 
   availableExtensions?, 
   defaultFileExtension?
): R2DataSource;

Parameters ​

ParameterTypeDefault value
bucketR2Bucketundefined
availableExtensionsstring[][]
defaultFileExtensionstring''

Returns ​

R2DataSource

Methods ​

createOrUpdate() ​

ts
createOrUpdate(
   key, 
   content, 
   extension, 
   customMetadata?
): Promise<LaikaResult<{
  key: string;
}>>;

Create or update an object in R2. Pass customMetadata to embed fields that survive subsequent writes (e.g. x-laika-created-at set once on creation so createdAt never drifts).

Parameters ​

ParameterType
keystring
contentstring
extensionstring
customMetadata?Record<string, string>

Returns ​

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


deleteObjects() ​

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

Delete multiple objects from R2

Parameters ​

ParameterType
keysreadonly string[]

Returns ​

AsyncGenerator<LaikaResult<string>>


findExistingObjectExtension() ​

ts
findExistingObjectExtension(key): Promise<string | null>;

Check if an object exists with any of the available extensions. Returns the extension if found, null otherwise.

Parameters ​

ParameterType
keystring

Returns ​

Promise<string | null>


getFolderMeta() ​

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

Get metadata for a "folder" (prefix in R2) Since R2 is a flat object store, folders don't have real metadata. We return the current time as a placeholder.

Parameters ​

ParameterType
keystring

Returns ​

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


getObjectContents() ​

ts
getObjectContents(key): Promise<LaikaResult<{
  content: string;
  extension: string;
  key: string;
}>>;

Get the contents of an object

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<{ content: string; extension: string; key: string; }>>


getObjectMeta() ​

ts
getObjectMeta(key): Promise<LaikaResult<{
  createdAt: Date;
  etag: string;
  extension: string;
  key: string;
  size: number;
  updatedAt: Date;
}>>;

Get metadata for an object

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<{ createdAt: Date; etag: string; extension: string; key: string; size: number; updatedAt: Date; }>>


isDirectory() ​

ts
isDirectory(key): Promise<LaikaResult<boolean>>;

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

Parameters ​

ParameterType
keystring

Returns ​

Promise<LaikaResult<boolean>>


isFile() ​

ts
isFile(key): Promise<boolean>;

Check if a key represents a file (object exists)

Parameters ​

ParameterType
keystring

Returns ​

Promise<boolean>


listDirectory() ​

ts
listDirectory(prefix): Promise<LaikaResult<R2Entry[]>>;

List objects in a "directory" (prefix in R2)

Parameters ​

ParameterType
prefixstring

Returns ​

Promise<LaikaResult<R2Entry[]>>

Released under the MIT License.