UNPKG

@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.

1 lines 4.97 kB
{"version":3,"sources":["../src/lib/worker.ts"],"sourcesContent":["import * as pdfjsLib from 'pdfjs-dist'\n\n// Track if worker has been configured to prevent multiple configurations\nlet isWorkerConfigured = false\nlet workerRetryCount = 0\nconst MAX_WORKER_RETRIES = 3\n\n/**\n * Configure PDF.js worker source with retry logic\n * Call this before using any PDF components\n */\nexport const configurePDFWorker = (workerSrc?: string, force = false) => {\n // Prevent multiple configurations unless forced\n if (isWorkerConfigured && !force) {\n return\n }\n\n // Clear any existing worker configuration\n if (force) {\n try {\n // Clear the worker source properly\n delete (pdfjsLib.GlobalWorkerOptions as any).workerSrc\n } catch (error) {\n console.warn('Error clearing existing worker:', error)\n }\n }\n\n if (workerSrc && workerSrc.trim()) {\n pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc\n } else if (!pdfjsLib.GlobalWorkerOptions.workerSrc || pdfjsLib.GlobalWorkerOptions.workerSrc === '') {\n // Try multiple CDN options as fallbacks\n const fallbackWorkers = [\n `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,\n `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,\n `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.min.js`\n ]\n \n // Use the first available worker based on retry count\n const workerIndex = workerRetryCount % fallbackWorkers.length\n pdfjsLib.GlobalWorkerOptions.workerSrc = fallbackWorkers[workerIndex]\n \n console.log(`Configuring PDF worker (attempt ${workerRetryCount + 1}):`, pdfjsLib.GlobalWorkerOptions.workerSrc)\n }\n \n isWorkerConfigured = true\n}\n\n/**\n * Get the current worker configuration\n */\nexport const getWorkerSrc = () => pdfjsLib.GlobalWorkerOptions.workerSrc\n\n/**\n * Common worker configurations\n */\nexport const WorkerSources = {\n // Local worker (copy pdf.worker.min.mjs to your public directory)\n LOCAL: '/pdf.worker.min.js',\n \n // jsDelivr CDN (recommended - more reliable)\n JSDELIVR: `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,\n \n // unpkg CDN (alternative)\n UNPKG: `https://unpkg.com/pdfjs-dist@${pdfjsLib.version}/build/pdf.worker.min.mjs`,\n \n // Mozilla CDN (if available)\n MOZILLA: `https://mozilla.github.io/pdf.js/build/pdf.worker.mjs`,\n} as const\n\n/**\n * Reset worker configuration (useful for troubleshooting)\n */\nexport const resetWorkerConfiguration = () => {\n isWorkerConfigured = false\n workerRetryCount = 0\n // Clear worker source properly to avoid \"Invalid workerSrc type\" error\n try {\n delete (pdfjsLib.GlobalWorkerOptions as any).workerSrc\n } catch (error) {\n // If delete fails, set to empty string as fallback\n pdfjsLib.GlobalWorkerOptions.workerSrc = ''\n }\n // Reconfigure with default\n configurePDFWorker(undefined, true)\n}\n\n/**\n * Retry worker configuration with next fallback\n */\nexport const retryWorkerConfiguration = () => {\n if (workerRetryCount < MAX_WORKER_RETRIES) {\n workerRetryCount++\n isWorkerConfigured = false\n configurePDFWorker(undefined, true)\n return true\n }\n return false\n}\n\n/**\n * Check if worker is properly configured\n */\nexport const isWorkerConfiguredProperly = () => {\n const workerSrc = pdfjsLib.GlobalWorkerOptions.workerSrc\n return !!(workerSrc && workerSrc.trim() && workerSrc !== 'undefined') && isWorkerConfigured\n}\n\n/**\n * Get current retry count for debugging\n */\nexport const getWorkerRetryCount = () => workerRetryCount\n\n// Auto-configure on import with fallback\nconfigurePDFWorker() "],"mappings":";;;AAAA,YAAY,cAAc;AAG1B,IAAI,qBAAqB;AACzB,IAAI,mBAAmB;AACvB,IAAM,qBAAqB;AAMpB,IAAM,qBAAqB,CAAC,WAAoB,QAAQ,UAAU;AAEvE,MAAI,sBAAsB,CAAC,OAAO;AAChC;AAAA,EACF;AAGA,MAAI,OAAO;AACT,QAAI;AAEF,aAAiB,6BAA4B;AAAA,IAC/C,SAAS,OAAO;AACd,cAAQ,KAAK,mCAAmC,KAAK;AAAA,IACvD;AAAA,EACF;AAEA,MAAI,aAAa,UAAU,KAAK,GAAG;AACjC,IAAS,6BAAoB,YAAY;AAAA,EAC3C,WAAW,CAAU,6BAAoB,aAAsB,6BAAoB,cAAc,IAAI;AAEnG,UAAM,kBAAkB;AAAA,MACtB,2CAAoD,gBAAO;AAAA,MAC3D,gCAAyC,gBAAO;AAAA,MAChD,iDAA0D,gBAAO;AAAA,IACnE;AAGA,UAAM,cAAc,mBAAmB,gBAAgB;AACvD,IAAS,6BAAoB,YAAY,gBAAgB,WAAW;AAEpE,YAAQ,IAAI,mCAAmC,mBAAmB,CAAC,MAAe,6BAAoB,SAAS;AAAA,EACjH;AAEA,uBAAqB;AACvB;AAKO,IAAM,eAAe,MAAe,6BAAoB;AAKxD,IAAM,gBAAgB;AAAA;AAAA,EAE3B,OAAO;AAAA;AAAA,EAGP,UAAU,2CAAoD,gBAAO;AAAA;AAAA,EAGrE,OAAO,gCAAyC,gBAAO;AAAA;AAAA,EAGvD,SAAS;AACX;AAKO,IAAM,2BAA2B,MAAM;AAC5C,uBAAqB;AACrB,qBAAmB;AAEnB,MAAI;AACF,WAAiB,6BAA4B;AAAA,EAC/C,SAAS,OAAO;AAEd,IAAS,6BAAoB,YAAY;AAAA,EAC3C;AAEA,qBAAmB,QAAW,IAAI;AACpC;AAKO,IAAM,2BAA2B,MAAM;AAC5C,MAAI,mBAAmB,oBAAoB;AACzC;AACA,yBAAqB;AACrB,uBAAmB,QAAW,IAAI;AAClC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAKO,IAAM,6BAA6B,MAAM;AAC9C,QAAM,YAAqB,6BAAoB;AAC/C,SAAO,CAAC,EAAE,aAAa,UAAU,KAAK,KAAK,cAAc,gBAAgB;AAC3E;AAKO,IAAM,sBAAsB,MAAM;AAGzC,mBAAmB;","names":[]}