diff --git a/src/core/catalog.js b/src/core/catalog.js index 8f09309b9..00524c32e 100644 --- a/src/core/catalog.js +++ b/src/core/catalog.js @@ -720,12 +720,12 @@ class Catalog { } } } else if (obj instanceof Dict) { - obj.forEach(function (key, value) { + for (const [key, value] of obj) { const dest = fetchDest(value); if (dest) { dests[key] = dest; } - }); + } } return shadow(this, "destinations", dests); } diff --git a/src/core/document.js b/src/core/document.js index 3c2599233..1744066d1 100644 --- a/src/core/document.js +++ b/src/core/document.js @@ -1282,13 +1282,8 @@ class PDFDocument { }, }; - const fonts = new Map(); - fontRes.forEach((fontName, font) => { - fonts.set(fontName, font); - }); const promises = []; - - for (const [fontName, font] of fonts) { + for (const [fontName, font] of fontRes) { const descriptor = font.get("FontDescriptor"); if (!(descriptor instanceof Dict)) { continue; diff --git a/src/core/primitives.js b/src/core/primitives.js index bf556b538..c48a34eb7 100644 --- a/src/core/primitives.js +++ b/src/core/primitives.js @@ -203,14 +203,14 @@ class Dict { return this._map.has(key); } - forEach(callback) { + *[Symbol.iterator]() { for (const [key, value] of this._map) { - callback( + yield [ key, value instanceof Ref && this.xref ? this.xref.fetch(value, this.suppressEncryption) - : value - ); + : value, + ]; } } diff --git a/src/core/struct_tree.js b/src/core/struct_tree.js index 7f5c7b45e..fa27a14c0 100644 --- a/src/core/struct_tree.js +++ b/src/core/struct_tree.js @@ -62,12 +62,11 @@ class StructTreeRoot { if (!(roleMapDict instanceof Dict)) { return; } - roleMapDict.forEach((key, value) => { - if (!(value instanceof Name)) { - return; + for (const [key, value] of roleMapDict) { + if (value instanceof Name) { + this.roleMap.set(key, value.name); } - this.roleMap.set(key, value.name); - }); + } } static async canCreateStructureTree({ diff --git a/src/core/worker.js b/src/core/worker.js index cba6cb0ce..e285d6491 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -688,11 +688,11 @@ class WorkerMessageHandler { const infoObj = Object.create(null); const xrefInfo = xref.trailer.get("Info") || null; if (xrefInfo instanceof Dict) { - xrefInfo.forEach((key, value) => { + for (const [key, value] of xrefInfo) { if (typeof value === "string") { infoObj[key] = stringToPDFString(value); } - }); + } } newXrefInfo = { diff --git a/test/unit/primitives_spec.js b/test/unit/primitives_spec.js index caefdf025..00c491004 100644 --- a/test/unit/primitives_spec.js +++ b/test/unit/primitives_spec.js @@ -221,17 +221,12 @@ describe("primitives", function () { expect(values[2]).toEqual(testFontFile); }); - it("should callback for each stored key", function () { - const callbackSpy = jasmine.createSpy("spy on callback in dictionary"); - - dictWithManyKeys.forEach(callbackSpy); - - expect(callbackSpy).toHaveBeenCalled(); - const callbackSpyCalls = callbackSpy.calls; - expect(callbackSpyCalls.argsFor(0)).toEqual(["FontFile", testFontFile]); - expect(callbackSpyCalls.argsFor(1)).toEqual(["FontFile2", testFontFile2]); - expect(callbackSpyCalls.argsFor(2)).toEqual(["FontFile3", testFontFile3]); - expect(callbackSpyCalls.count()).toEqual(3); + it("should iterate through each stored key", function () { + expect([...dictWithManyKeys]).toEqual([ + ["FontFile", testFontFile], + ["FontFile2", testFontFile2], + ["FontFile3", testFontFile3], + ]); }); it("should handle keys pointing to indirect objects, both sync and async", async function () {