Replace PDFWorker.fromPort with a generic PDFWorker.create method

This allows us to simply invoke `PDFWorker.create` unconditionally from the `getDocument` function, without having to manually check if a global `workerPort` is available first.
This commit is contained in:
Jonas Jenwald 2025-05-17 15:23:55 +02:00
parent 278fc064eb
commit ab672f0b77
2 changed files with 20 additions and 15 deletions

View File

@ -38,14 +38,15 @@ import {
PrintAnnotationStorage, PrintAnnotationStorage,
SerializableEmpty, SerializableEmpty,
} from "./annotation_storage.js"; } from "./annotation_storage.js";
import { FontFaceObject, FontLoader } from "./font_loader.js";
import { import {
deprecated,
isDataScheme, isDataScheme,
isValidFetchUrl, isValidFetchUrl,
PageViewport, PageViewport,
RenderingCancelledException, RenderingCancelledException,
StatTimer, StatTimer,
} from "./display_utils.js"; } from "./display_utils.js";
import { FontFaceObject, FontLoader } from "./font_loader.js";
import { MessageHandler, wrapReason } from "../shared/message_handler.js"; import { MessageHandler, wrapReason } from "../shared/message_handler.js";
import { import {
NodeCanvasFactory, NodeCanvasFactory,
@ -383,15 +384,12 @@ function getDocument(src = {}) {
}; };
if (!worker) { if (!worker) {
const workerParams = {
verbosity,
port: GlobalWorkerOptions.workerPort,
};
// Worker was not provided -- creating and owning our own. If message port // Worker was not provided -- creating and owning our own. If message port
// is specified in global worker options, using it. // is specified in global worker options, using it.
worker = workerParams.port worker = PDFWorker.create({
? PDFWorker.fromPort(workerParams) verbosity,
: new PDFWorker(workerParams); port: GlobalWorkerOptions.workerPort,
});
task._worker = worker; task._worker = worker;
} }
@ -2131,6 +2129,16 @@ class PDFWorker {
new Blob([wrapper], { type: "text/javascript" }) new Blob([wrapper], { type: "text/javascript" })
); );
}; };
this.fromPort = params => {
deprecated(
"`PDFWorker.fromPort` - please use `PDFWorker.create` instead."
);
if (!params?.port) {
throw new Error("PDFWorker.fromPort - invalid method signature.");
}
return this.create(params);
};
} }
if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) { if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING")) {
@ -2364,15 +2372,12 @@ class PDFWorker {
* @param {PDFWorkerParameters} params - The worker initialization parameters. * @param {PDFWorkerParameters} params - The worker initialization parameters.
* @returns {PDFWorker} * @returns {PDFWorker}
*/ */
static fromPort(params) { static create(params) {
if (!params?.port) { const cachedPort = this.#workerPorts.get(params?.port);
throw new Error("PDFWorker.fromPort - invalid method signature.");
}
const cachedPort = this.#workerPorts.get(params.port);
if (cachedPort) { if (cachedPort) {
if (cachedPort._pendingDestroy) { if (cachedPort._pendingDestroy) {
throw new Error( throw new Error(
"PDFWorker.fromPort - the worker is being destroyed.\n" + "PDFWorker.create - the worker is being destroyed.\n" +
"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls." "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."
); );
} }

View File

@ -1082,7 +1082,7 @@ describe("api", function () {
getDocument(tracemonkeyGetDocumentParams); getDocument(tracemonkeyGetDocumentParams);
}).toThrow( }).toThrow(
new Error( new Error(
"PDFWorker.fromPort - the worker is being destroyed.\n" + "PDFWorker.create - the worker is being destroyed.\n" +
"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls." "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."
) )
); );