@nyazkhan/react-pdf-viewer
Version:
A comprehensive React TypeScript component library for viewing and interacting with PDF files using Mozilla PDF.js. Features include text selection, highlighting, search, sidebar, multiple view modes, and complete PDF.js web viewer functionality.
79 lines (77 loc) • 2.77 kB
JavaScript
"use client"
// src/lib/worker.ts
import * as pdfjsLib from "pdfjs-dist";
var isWorkerConfigured = false;
var workerRetryCount = 0;
var MAX_WORKER_RETRIES = 3;
var configurePDFWorker = (workerSrc, force = false) => {
if (isWorkerConfigured && !force) {
return;
}
if (force) {
try {
delete pdfjsLib.GlobalWorkerOptions.workerSrc;
} catch (error) {
console.warn("Error clearing existing worker:", error);
}
}
if (workerSrc && workerSrc.trim()) {
pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;
} else if (!pdfjsLib.GlobalWorkerOptions.workerSrc || pdfjsLib.GlobalWorkerOptions.workerSrc === "") {
const fallbackWorkers = [
`https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,
`https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,
`https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.min.js`
];
const workerIndex = workerRetryCount % fallbackWorkers.length;
pdfjsLib.GlobalWorkerOptions.workerSrc = fallbackWorkers[workerIndex];
console.log(`Configuring PDF worker (attempt ${workerRetryCount + 1}):`, pdfjsLib.GlobalWorkerOptions.workerSrc);
}
isWorkerConfigured = true;
};
var getWorkerSrc = () => pdfjsLib.GlobalWorkerOptions.workerSrc;
var WorkerSources = {
// Local worker (copy pdf.worker.min.mjs to your public directory)
LOCAL: "/pdf.worker.min.js",
// jsDelivr CDN (recommended - more reliable)
JSDELIVR: `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,
// unpkg CDN (alternative)
UNPKG: `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,
// Mozilla CDN (if available)
MOZILLA: `https://mozilla.github.io/pdf.js/build/pdf.worker.mjs`
};
var resetWorkerConfiguration = () => {
isWorkerConfigured = false;
workerRetryCount = 0;
try {
delete pdfjsLib.GlobalWorkerOptions.workerSrc;
} catch (error) {
pdfjsLib.GlobalWorkerOptions.workerSrc = "";
}
configurePDFWorker(void 0, true);
};
var retryWorkerConfiguration = () => {
if (workerRetryCount < MAX_WORKER_RETRIES) {
workerRetryCount++;
isWorkerConfigured = false;
configurePDFWorker(void 0, true);
return true;
}
return false;
};
var isWorkerConfiguredProperly = () => {
const workerSrc = pdfjsLib.GlobalWorkerOptions.workerSrc;
return !!(workerSrc && workerSrc.trim() && workerSrc !== "undefined") && isWorkerConfigured;
};
var getWorkerRetryCount = () => workerRetryCount;
configurePDFWorker();
export {
configurePDFWorker,
getWorkerSrc,
WorkerSources,
resetWorkerConfiguration,
retryWorkerConfiguration,
isWorkerConfiguredProperly,
getWorkerRetryCount
};
//# sourceMappingURL=chunk-NHSWJHVN.mjs.map