builder / lib /vfs /binary-encoding.ts
Leon4gr45's picture
Upload folder using huggingface_hub (part 3)
94193b5 verified
Raw
History Blame Contribute Delete
1.08 kB
/**
* Base64 helpers for serializing binary file content (images, video, fonts) to
* and from JSON. VirtualFile binary content is an ArrayBuffer, which
* JSON.stringify turns into `{}` — so JSON project exports must encode it as a
* base64 string and decode it back on import.
*/
/** Encode an ArrayBuffer as a base64 string (chunked to avoid call-stack limits). */
export function arrayBufferToBase64(buffer: ArrayBuffer): string {
const bytes = new Uint8Array(buffer);
const chunkSize = 0x8000; // 32KB per chunk keeps String.fromCharCode within limits
let binary = '';
for (let i = 0; i < bytes.length; i += chunkSize) {
const chunk = bytes.subarray(i, i + chunkSize);
binary += String.fromCharCode(...chunk);
}
return btoa(binary);
}
/** Decode a base64 string back into an ArrayBuffer. */
export function base64ToArrayBuffer(base64: string): ArrayBuffer {
const binary = atob(base64);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return bytes.buffer;
}