diff --git a/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts b/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts index 9d56d95c..7bdf387d 100644 --- a/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts +++ b/frontend/src/lib/document/viewer/usePdfRenderer.svelte.test.ts @@ -193,4 +193,17 @@ describe('createPdfRenderer', () => { await expect(r.init()).rejects.toThrow('load failed'); expect(r.pdfjsReady).toBe(false); }); + + it('init() is idempotent — libLoader called only once on repeated calls', async () => { + const fakePdfjs = { + GlobalWorkerOptions: { workerSrc: '' }, + getDocument: vi.fn(), + TextLayer: class {} + } as unknown as typeof import('pdfjs-dist'); + const fakeLoader = vi.fn().mockResolvedValue([fakePdfjs, { default: '' }] as const); + const r = createPdfRenderer(fakeLoader); + await r.init(); + await r.init(); + expect(fakeLoader).toHaveBeenCalledOnce(); + }); }); diff --git a/frontend/src/lib/document/viewer/usePdfRenderer.svelte.ts b/frontend/src/lib/document/viewer/usePdfRenderer.svelte.ts index 700984e9..13315f8e 100644 --- a/frontend/src/lib/document/viewer/usePdfRenderer.svelte.ts +++ b/frontend/src/lib/document/viewer/usePdfRenderer.svelte.ts @@ -23,6 +23,7 @@ export function createPdfRenderer(libLoader: LibLoader = defaultLibLoader) { let pdfjsLib: typeof import('pdfjs-dist') | null = null; async function init(): Promise { + if (pdfjsReady) return; const [lib, { default: workerUrl }] = await libLoader(); lib.GlobalWorkerOptions.workerSrc = workerUrl; pdfjsLib = lib;