Open History to see the last commit
1import { BINARY_PREVIEW_MAX_BYTES } from "./binaryPreviewProtocol";
2
3export async function readBinaryPreview(src: string, signal: AbortSignal) {
4 const response = await fetch(src, { signal });
5 if (!response.ok) throw new Error("The file could not be loaded. Close it and try again.");
6 if (Number(response.headers.get("content-length")) > BINARY_PREVIEW_MAX_BYTES)
7 throw new Error("Preview limited to files under 50 MB.");
8 const reader = response.body?.getReader();
9 if (!reader) throw new Error("The file is unavailable.");
10 const chunks: Uint8Array<ArrayBuffer>[] = [];
11 let size = 0;
12 try {
13 while (true) {
14 const { value, done } = await reader.read();
15 if (done) break;
16 size += value.length;
17 if (size > BINARY_PREVIEW_MAX_BYTES) throw new Error("Preview limited to files under 50 MB.");
18 chunks.push(value);
19 }
20 } finally {
21 await reader.cancel();
22 }
23 return new Blob(chunks).arrayBuffer();
24}