/** * Mock R2 Bucket for testing Cloudflare Workers * * Provides a minimal implementation of R2Bucket for testing * image storage and asset retrieval. * * @example * ```typescript * const bucket = createMockR2Bucket(); * * // Pre-populate data * await bucket.put('image.png', new ArrayBuffer(100)); * * // Use in tests * const env = { IMAGES: bucket as unknown as R2Bucket }; * * // Check stored objects * expect(bucket._store.has('image.png')).toBe(true); * * // Reset between tests * bucket._reset(); * ``` */ /** * R2 object metadata */ interface R2ObjectMeta { key: string; size: number; uploaded: Date; httpEtag: string; etag: string; customMetadata?: Record; } /** * Stored R2 object */ interface StoredR2Object { body: ArrayBuffer; meta: R2ObjectMeta; } /** * Mock R2 object returned from get() */ export interface MockR2Object { key: string; size: number; uploaded: Date; httpEtag: string; etag: string; customMetadata?: Record; arrayBuffer: () => Promise; text: () => Promise; json: () => Promise; blob: () => Promise; } /** * Extended mock R2 bucket with test helpers */ export interface MockR2Bucket { get: (key: string) => Promise; put: (key: string, value: ArrayBuffer | string | ReadableStream | Blob, options?: { customMetadata?: Record; }) => Promise; delete: (key: string | string[]) => Promise; list: (options?: { prefix?: string; limit?: number; cursor?: string; }) => Promise<{ objects: R2ObjectMeta[]; truncated: boolean; cursor?: string; }>; head: (key: string) => Promise; /** Internal storage map (for assertions) */ _store: Map; /** Reset all storage */ _reset: () => void; } /** * Creates a mock R2 bucket for testing * * @returns A mock R2 bucket that can be cast to R2Bucket */ export declare function createMockR2Bucket(): MockR2Bucket; export {}; //# sourceMappingURL=r2.d.ts.map