fix: add pdfjs at compatibility polyfill

Agent-Logs-Url: https://github.com/kekingcn/kkFileView/sessions/287f0212-d368-4b59-ae70-0374fb3fe76f

Co-authored-by: klboke <18591662+klboke@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-09 02:46:24 +00:00
committed by GitHub
parent 405a12ef07
commit 5499150395
4 changed files with 77 additions and 1 deletions

View File

@@ -24,6 +24,7 @@
* pdfjsVersion = 5.4.530
* pdfjsBuild = 50cc4adac
*/
import "../web/compatibility.mjs";
/******/ var __webpack_modules__ = ({
/***/ 34:
@@ -66999,4 +67000,4 @@ globalThis.pdfjsWorker = {
export { WorkerMessageHandler };
//# sourceMappingURL=pdf.worker.mjs.map
//# sourceMappingURL=pdf.worker.mjs.map

View File

@@ -0,0 +1,42 @@
const atTargets = [
Array,
String,
Int8Array,
Uint8Array,
Uint8ClampedArray,
Int16Array,
Uint16Array,
Int32Array,
Uint32Array,
Float32Array,
Float64Array,
globalThis.BigInt64Array,
globalThis.BigUint64Array,
];
function installAtPolyfill(target) {
if (!target?.prototype || typeof target.prototype.at === "function") {
return;
}
Object.defineProperty(target.prototype, "at", {
value(index) {
const length = this.length >>> 0;
let relativeIndex = Number(index) || 0;
if (!Number.isFinite(relativeIndex)) {
relativeIndex = 0;
}
relativeIndex = relativeIndex < 0 ? Math.ceil(relativeIndex) : Math.floor(relativeIndex);
const resolvedIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;
if (resolvedIndex < 0 || resolvedIndex >= length) {
return undefined;
}
return this[resolvedIndex];
},
writable: true,
configurable: true,
});
}
for (const target of atTargets) {
installAtPolyfill(target);
}

View File

@@ -29,6 +29,7 @@ See https://github.com/adobe-type-tools/cmap-resources
<!-- This snippet is used in production (included from viewer.html) -->
<link rel="resource" type="application/l10n" href="locale/locale.json" />
<script src="compatibility.mjs" type="module"></script>
<script src="../build/pdf.mjs" type="module"></script>
<link rel="stylesheet" href="viewer.css" />

View File

@@ -0,0 +1,32 @@
package cn.keking;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
public class PdfViewerCompatibilityTests {
@Test
void shouldLoadCompatibilityModuleBeforePdfJs() throws IOException {
String viewerHtml = readResource("/static/pdfjs/web/viewer.html");
assert viewerHtml.contains("<script src=\"compatibility.mjs\" type=\"module\"></script>");
assert viewerHtml.indexOf("compatibility.mjs") < viewerHtml.indexOf("../build/pdf.mjs");
}
@Test
void shouldLoadCompatibilityModuleInPdfWorker() throws IOException {
String workerScript = readResource("/static/pdfjs/build/pdf.worker.mjs");
assert workerScript.contains("import \"../web/compatibility.mjs\";");
}
private String readResource(String resourcePath) throws IOException {
try (InputStream inputStream = getClass().getResourceAsStream(resourcePath)) {
assert inputStream != null;
return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
}
}
}