Start using Response.prototype.bytes() in the code-base

In all cases where we currently use `Response.prototype.arrayBuffer()` the result is immediately wrapped in a `Uint8Array`, which can be avoided by instead using the newer `Response.prototype.bytes()` method; see https://developer.mozilla.org/en-US/docs/Web/API/Response/bytes
This commit is contained in:
Jonas Jenwald 2026-02-11 22:37:49 +01:00
parent 7077b2a998
commit 8ba83e73fa
7 changed files with 24 additions and 12 deletions

View File

@ -129,7 +129,7 @@ async function fetchBinaryData(url) {
`Failed to fetch file "${url}" with "${response.statusText}".`
);
}
return new Uint8Array(await response.arrayBuffer());
return response.bytes();
}
/**

View File

@ -64,11 +64,9 @@ class DOMCMapReaderFactory extends BaseCMapReaderFactory {
async _fetch(url) {
const data = await fetchData(
url,
/* type = */ this.isCompressed ? "arraybuffer" : "text"
/* type = */ this.isCompressed ? "bytes" : "text"
);
return data instanceof ArrayBuffer
? new Uint8Array(data)
: stringToBytes(data);
return data instanceof Uint8Array ? data : stringToBytes(data);
}
}

View File

@ -48,6 +48,8 @@ async function fetchData(url, type = "text") {
return response.arrayBuffer();
case "blob":
return response.blob();
case "bytes":
return response.bytes();
case "json":
return response.json();
}
@ -58,7 +60,7 @@ async function fetchData(url, type = "text") {
return new Promise((resolve, reject) => {
const request = new XMLHttpRequest();
request.open("GET", url, /* async = */ true);
request.responseType = type;
request.responseType = type === "bytes" ? "arraybuffer" : type;
request.onreadystatechange = () => {
if (request.readyState !== XMLHttpRequest.DONE) {
@ -66,6 +68,9 @@ async function fetchData(url, type = "text") {
}
if (request.status === 200 || request.status === 0) {
switch (type) {
case "bytes":
resolve(new Uint8Array(request.response));
return;
case "arraybuffer":
case "blob":
case "json":

View File

@ -57,8 +57,7 @@ class DOMStandardFontDataFactory extends BaseStandardFontDataFactory {
* @ignore
*/
async _fetch(url) {
const data = await fetchData(url, /* type = */ "arraybuffer");
return new Uint8Array(data);
return fetchData(url, /* type = */ "bytes");
}
}

View File

@ -55,8 +55,7 @@ class DOMWasmFactory extends BaseWasmFactory {
* @ignore
*/
async _fetch(url) {
const data = await fetchData(url, /* type = */ "arraybuffer");
return new Uint8Array(data);
return fetchData(url, /* type = */ "bytes");
}
}

View File

@ -1248,6 +1248,18 @@ if (
};
}
// See https://developer.mozilla.org/en-US/docs/Web/API/Response/bytes#browser_compatibility
if (
typeof PDFJSDev !== "undefined" &&
!PDFJSDev.test("SKIP_BABEL") &&
typeof Response.prototype.bytes !== "function"
) {
Response.prototype.bytes = async function () {
return new Uint8Array(await this.arrayBuffer());
};
}
// TODO: Remove this once Safari 17.4 is the lowest supported version.
if (
typeof PDFJSDev !== "undefined" &&
!PDFJSDev.test("SKIP_BABEL") &&

View File

@ -41,8 +41,7 @@ class DefaultFileReaderFactory {
if (isNodeJS) {
return fetchDataNode(params.path);
}
const data = await fetchDataDOM(params.path, /* type = */ "arraybuffer");
return new Uint8Array(data);
return fetchDataDOM(params.path, /* type = */ "bytes");
}
}