import { blobToArrayBuffer } from '../bin' import { fromBase64, toBase64 } from './bin' export function dataUriToUint8Array(dataUri: string): Uint8Array | undefined { if (dataUri.startsWith('data:')) return fromBase64(dataUri.split(',', 2)[1]) } export function dataUriToMimeType(dataUri: string): string | undefined { if (dataUri.startsWith('data:')) return dataUri.slice(5).split(',', 2)[0] } export function dataUriToBlob(dataUri: string): Blob | undefined { if (dataUri.startsWith('data:')) { const [mimeString, base64String] = dataUri.slice(5).split(',', 2) const u = fromBase64(base64String) // create a plain ArrayBuffer copy (ensures .buffer is an ArrayBuffer, not SharedArrayBuffer) const buffer = u.slice().buffer return new Blob([buffer], { type: mimeString }) } } export async function blobToDataUri(blob: Blob): Promise { const bin = await blobToArrayBuffer(blob) if (bin) return `data:${blob.type},${toBase64(bin)}` } export function Uint8ArrayToDataUri(bin: Uint8Array, type = 'application/octet-stream'): string { return `data:${type},${toBase64(bin)}` }