Merge pull request #20944 from Snuffleupagus/PDFObjects-resolve-once

Avoid resolving an `objId` more than once in the `PDFObjects` class
This commit is contained in:
Tim van der Meij 2026-03-22 12:25:08 +01:00 committed by GitHub
commit 1aa95d28d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -28,16 +28,6 @@ const dataObj = () => ({
class PDFObjects {
#objs = new Map();
/**
* Ensures there is an object defined for `objId`.
*
* @param {string} objId
* @returns {Object}
*/
#ensureObj(objId) {
return this.#objs.getOrInsertComputed(objId, dataObj);
}
/**
* If called *without* callback, this returns the data of `objId` but the
* object needs to be resolved. If it isn't, this method throws.
@ -54,7 +44,7 @@ class PDFObjects {
// If there is a callback, then the get can be async and the object is
// not required to be resolved right now.
if (callback) {
const obj = this.#ensureObj(objId);
const obj = this.#objs.getOrInsertComputed(objId, dataObj);
obj.promise.then(() => callback(obj.data));
return null;
}
@ -99,7 +89,10 @@ class PDFObjects {
* @param {any} [data]
*/
resolve(objId, data = null) {
const obj = this.#ensureObj(objId);
const obj = this.#objs.getOrInsertComputed(objId, dataObj);
if (obj.data !== INITIAL_DATA) {
throw new Error(`Object already resolved ${objId}.`);
}
obj.data = data;
obj.resolve();
}