Simplify the getUuid helper function

We can remove most feature testing from this helper function, with the exception of `randomUUID` since that's only available in "secure contexts", and also remove the fallback code-path.
Note that this code was only added for Node.js compatibility, and it's no longer necessary now that the minimum support version is `20`; see also https://developer.mozilla.org/en-US/docs/Web/API/Crypto#browser_compatibility

Finally, this patch also adds a basic unit-test for the helper function.
This commit is contained in:
Jonas Jenwald 2024-11-21 13:03:08 +01:00
parent 07765e993e
commit c290a12ce1
2 changed files with 11 additions and 11 deletions

View File

@ -1075,21 +1075,12 @@ function normalizeUnicode(str) {
function getUuid() { function getUuid() {
if ( if (
(typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) || (typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")) ||
(typeof crypto !== "undefined" && typeof crypto?.randomUUID === "function") typeof crypto.randomUUID === "function"
) { ) {
return crypto.randomUUID(); return crypto.randomUUID();
} }
const buf = new Uint8Array(32); const buf = new Uint8Array(32);
if ( crypto.getRandomValues(buf);
typeof crypto !== "undefined" &&
typeof crypto?.getRandomValues === "function"
) {
crypto.getRandomValues(buf);
} else {
for (let i = 0; i < 32; i++) {
buf[i] = Math.floor(Math.random() * 255);
}
}
return bytesToString(buf); return bytesToString(buf);
} }

View File

@ -18,6 +18,7 @@ import {
bytesToString, bytesToString,
createValidAbsoluteUrl, createValidAbsoluteUrl,
getModificationDate, getModificationDate,
getUuid,
string32, string32,
stringToBytes, stringToBytes,
stringToPDFString, stringToPDFString,
@ -248,4 +249,12 @@ describe("util", function () {
expect(getModificationDate(date)).toEqual("31410609020653"); expect(getModificationDate(date)).toEqual("31410609020653");
}); });
}); });
describe("getUuid", function () {
it("should get uuid string", function () {
const uuid = getUuid();
expect(typeof uuid).toEqual("string");
expect(uuid.length).toBeGreaterThanOrEqual(32);
});
});
}); });