fix: polyfill readable stream async iteration for Safari PDF extraction (#25473)

This commit is contained in:
Chane Lu
2026-06-02 04:47:57 +08:00
committed by GitHub
parent 886c132a10
commit 974b13839e
+35
View File
@@ -1764,7 +1764,42 @@ export const parseJsonValue = (value: string): any => {
return value;
};
type ReadableStreamWithAsyncIterator<T> = ReadableStream<T> & {
[Symbol.asyncIterator]?: () => AsyncIterableIterator<T>;
};
function ensureReadableStreamAsyncIterator() {
if (typeof ReadableStream === 'undefined') {
return;
}
const prototype = ReadableStream.prototype as ReadableStreamWithAsyncIterator<unknown>;
if (prototype[Symbol.asyncIterator]) {
return;
}
Object.defineProperty(prototype, Symbol.asyncIterator, {
value: async function* (this: ReadableStream<unknown>) {
const reader = this.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
return;
}
yield value;
}
} finally {
reader.releaseLock();
}
},
configurable: true,
writable: true
});
}
async function ensurePDFjsLoaded() {
ensureReadableStreamAsyncIterator();
if (!window.pdfjsLib) {
const pdfjs = await import('pdfjs-dist');
pdfjs.GlobalWorkerOptions.workerSrc = pdfWorkerUrl;