Merge pull request #20651 from Snuffleupagus/Response-bytes

Start using `Response.prototype.bytes()` in the code-base
This commit is contained in:
calixteman 2026-02-13 10:31:54 +01:00 committed by GitHub
commit fa28ca1468
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 24 additions and 15 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

@ -44,10 +44,10 @@ async function fetchData(url, type = "text") {
throw new Error(response.statusText);
}
switch (type) {
case "arraybuffer":
return response.arrayBuffer();
case "blob":
return response.blob();
case "bytes":
return response.bytes();
case "json":
return response.json();
}
@ -58,7 +58,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,7 +66,9 @@ async function fetchData(url, type = "text") {
}
if (request.status === 200 || request.status === 0) {
switch (type) {
case "arraybuffer":
case "bytes":
resolve(new Uint8Array(request.response));
return;
case "blob":
case "json":
resolve(request.response);

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");
}
}