Skip to content

Commit 50c2e0e

Browse files
committed
fix(asyncReader): handle CJS/ESM interop and null GlobalWorkerOptions
In Vite watch mode, pdfjs-dist is served without pre-bundling when the package is linked via file: path, causing the module to be wrapped under .default instead of exposing named exports directly. This results in PDFWorker being undefined at runtime. - Add normalizePdfjs() to unwrap .default when present (CJS/ESM interop) - Guard ensureWorkerSrc against undefined GlobalWorkerOptions - Reset sharedWorker to null in setWorkerPath to force recreation - Add .catch with console.warn in setWorkerPath for failed async updates Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent e50c6ef commit 50c2e0e

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

src/utils/asyncReader.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,16 @@ let pdfjsPromise: Promise<typeof import('pdfjs-dist')> | null = null
88
let workerUrlPromise: Promise<string> | null = null
99
let workerSrcOverride: string | null = null
1010

11+
type PdfjsModule = typeof import('pdfjs-dist')
12+
13+
function normalizePdfjs(mod: PdfjsModule): PdfjsModule {
14+
const m = mod as PdfjsModule & { default?: PdfjsModule }
15+
return (m.default?.PDFWorker ? m.default : m) as PdfjsModule
16+
}
17+
1118
function loadPdfjs() {
1219
if (!pdfjsPromise) {
13-
pdfjsPromise = import('pdfjs-dist')
20+
pdfjsPromise = import('pdfjs-dist').then(normalizePdfjs)
1421
}
1522
return pdfjsPromise
1623
}
@@ -24,7 +31,10 @@ function loadWorkerUrl() {
2431
return workerUrlPromise
2532
}
2633

27-
async function ensureWorkerSrc(pdfjs: typeof import('pdfjs-dist')) {
34+
async function ensureWorkerSrc(pdfjs: PdfjsModule) {
35+
if (!pdfjs?.GlobalWorkerOptions) {
36+
return
37+
}
2838
if (workerSrcOverride) {
2939
pdfjs.GlobalWorkerOptions.workerSrc = workerSrcOverride
3040
return
@@ -34,7 +44,7 @@ async function ensureWorkerSrc(pdfjs: typeof import('pdfjs-dist')) {
3444
}
3545
}
3646

37-
async function getSharedWorker(pdfjs: typeof import('pdfjs-dist')): Promise<PDFWorker> {
47+
async function getSharedWorker(pdfjs: PdfjsModule): Promise<PDFWorker> {
3848
if (!sharedWorker) {
3949
await ensureWorkerSrc(pdfjs)
4050
sharedWorker = new pdfjs.PDFWorker({}) as PDFWorker
@@ -44,9 +54,14 @@ async function getSharedWorker(pdfjs: typeof import('pdfjs-dist')): Promise<PDFW
4454

4555
export function setWorkerPath(path: string) {
4656
workerSrcOverride = path
57+
sharedWorker = null
4758
if (pdfjsPromise) {
4859
pdfjsPromise.then((pdfjs) => {
49-
pdfjs.GlobalWorkerOptions.workerSrc = path
60+
if (pdfjs?.GlobalWorkerOptions) {
61+
pdfjs.GlobalWorkerOptions.workerSrc = path
62+
}
63+
}).catch((error) => {
64+
console.warn('setWorkerPath: failed to update pdfjs workerSrc immediately', error)
5065
})
5166
}
5267
}

0 commit comments

Comments
 (0)