From 1c80412f6166e57acd1fd6001782e04f6b2d159d Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 12 Apr 2025 12:36:09 +0200 Subject: [PATCH] Change `PDFDocument.prototype._xfaStreams` to return a `Map` Using a `Map` rather than an `Object` is a nicer, since it has better support for both iteration and checking if a key exists. We also change the initial values to be `null`, rather than empty strings, and reduce duplication when creating the `Map`. *Please note:* Since this is worker-thread code, these changes are "invisible" at the API-level. --- src/core/document.js | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/core/document.js b/src/core/document.js index c543f718b..7f91414cd 100644 --- a/src/core/document.js +++ b/src/core/document.js @@ -1117,24 +1117,26 @@ class PDFDocument { } get _xfaStreams() { - const acroForm = this.catalog.acroForm; + const { acroForm } = this.catalog; if (!acroForm) { return null; } const xfa = acroForm.get("XFA"); - const entries = { - "xdp:xdp": "", - template: "", - datasets: "", - config: "", - connectionSet: "", - localeSet: "", - stylesheet: "", - "/xdp:xdp": "", - }; + const entries = new Map( + [ + "xdp:xdp", + "template", + "datasets", + "config", + "connectionSet", + "localeSet", + "stylesheet", + "/xdp:xdp", + ].map(e => [e, null]) + ); if (xfa instanceof BaseStream && !xfa.isEmpty) { - entries["xdp:xdp"] = xfa; + entries.set("xdp:xdp", xfa); return entries; } @@ -1152,14 +1154,14 @@ class PDFDocument { name = xfa[i]; } - if (!entries.hasOwnProperty(name)) { + if (!entries.has(name)) { continue; } const data = this.xref.fetchIfRef(xfa[i + 1]); if (!(data instanceof BaseStream) || data.isEmpty) { continue; } - entries[name] = data; + entries.set(name, data); } return entries; } @@ -1170,7 +1172,7 @@ class PDFDocument { return shadow(this, "xfaDatasets", null); } for (const key of ["datasets", "xdp:xdp"]) { - const stream = streams[key]; + const stream = streams.get(key); if (!stream) { continue; } @@ -1192,7 +1194,7 @@ class PDFDocument { return null; } const data = Object.create(null); - for (const [key, stream] of Object.entries(streams)) { + for (const [key, stream] of streams) { if (!stream) { continue; }