UNPKG

@tldraw/utils

Version:

tldraw infinite canvas SDK (private utilities).

93 lines (85 loc) 2.25 kB
import { fetch } from './network' /** * Helpers for files * * @public */ export class FileHelpers { /** * @deprecated Use `urlToArrayBuffer` instead. */ static async dataUrlToArrayBuffer(dataURL: string) { return fetch(dataURL).then(function (result) { return result.arrayBuffer() }) } /** * @param url - The url of the file. */ static async urlToArrayBuffer(url: string) { const response = await fetch(url) return await response.arrayBuffer() } static async urlToBlob(url: string) { const response = await fetch(url) return await response.blob() } static async urlToDataUrl(url: string) { if (url.startsWith('data:')) return url const blob = await FileHelpers.urlToBlob(url) return await FileHelpers.blobToDataUrl(blob) } /** * Convert a file to a base64 encoded data url. * * @example * * ```ts * const A = FileHelpers.toDataUrl(myImageFile) * ``` * * @param file - The file as a blob. */ static async blobToDataUrl(file: Blob): Promise<string> { return await new Promise((resolve, reject) => { if (file) { const reader = new FileReader() reader.onload = () => resolve(reader.result as string) reader.onerror = (error) => reject(error) reader.onabort = (error) => reject(error) reader.readAsDataURL(file) } }) } /** * Convert a file to a unicode text string. * * @example * * ```ts * const A = FileHelpers.fileToDataUrl(myTextFile) * ``` * * @param file - The file as a blob. */ static async blobToText(file: Blob): Promise<string> { return await new Promise((resolve, reject) => { if (file) { const reader = new FileReader() reader.onload = () => resolve(reader.result as string) reader.onerror = (error) => reject(error) reader.onabort = (error) => reject(error) reader.readAsText(file) } }) } static rewriteMimeType(blob: Blob, newMimeType: string): Blob static rewriteMimeType(blob: File, newMimeType: string): File static rewriteMimeType(blob: Blob | File, newMimeType: string): Blob | File { if (blob.type === newMimeType) return blob if (blob instanceof File) { return new File([blob], blob.name, { type: newMimeType }) } return new Blob([blob], { type: newMimeType }) } }