36 lines
959 B
Plaintext
36 lines
959 B
Plaintext
import { lookup } from "./vendor/image-size/lookup.js";
|
|
async function probe(url) {
|
|
const response = await fetch(url);
|
|
if (!response.body || !response.ok) {
|
|
throw new Error("Failed to fetch image");
|
|
}
|
|
const reader = response.body.getReader();
|
|
let done, value;
|
|
let accumulatedChunks = new Uint8Array();
|
|
while (!done) {
|
|
const readResult = await reader.read();
|
|
done = readResult.done;
|
|
if (done)
|
|
break;
|
|
if (readResult.value) {
|
|
value = readResult.value;
|
|
let tmp = new Uint8Array(accumulatedChunks.length + value.length);
|
|
tmp.set(accumulatedChunks, 0);
|
|
tmp.set(value, accumulatedChunks.length);
|
|
accumulatedChunks = tmp;
|
|
try {
|
|
const dimensions = lookup(accumulatedChunks);
|
|
if (dimensions) {
|
|
await reader.cancel();
|
|
return dimensions;
|
|
}
|
|
} catch (error) {
|
|
}
|
|
}
|
|
}
|
|
throw new Error("Failed to parse the size");
|
|
}
|
|
export {
|
|
probe
|
|
};
|