svelte-pdf-view 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,11 +19,11 @@ A modern, modular PDF viewer component for Svelte 5. Built on top of [PDF.js](ht
19
19
  ## Installation
20
20
 
21
21
  ```bash
22
- npm install svelte-pdf-view
22
+ npm install svelte-pdf-view pdfjs-dist
23
23
  # or
24
- pnpm add svelte-pdf-view
24
+ pnpm add svelte-pdf-view pdfjs-dist
25
25
  # or
26
- yarn add svelte-pdf-view
26
+ yarn add svelte-pdf-view pdfjs-dist
27
27
  ```
28
28
 
29
29
  If you want to use the default `<PdfToolbar>` component, also install:
@@ -41,7 +41,7 @@ If you're using Vite (including SvelteKit), you may need to exclude `pdfjs-dist`
41
41
  export default defineConfig({
42
42
  // ... other config
43
43
  optimizeDeps: {
44
- exclude: ['pdfjs-dist']
44
+ exclude: ['svelte-pdf-view']
45
45
  }
46
46
  });
47
47
  ```
@@ -45,19 +45,25 @@
45
45
  let viewer: import('./pdf-viewer/PDFViewerCore.js').PDFViewerCore | null = null;
46
46
  let findController: import('./pdf-viewer/FindController.js').FindController | null = null;
47
47
  let pdfjsLib: typeof import('pdfjs-dist/legacy/build/pdf.mjs') | null = null;
48
+ let pdfWorker: import('pdfjs-dist/legacy/build/pdf.mjs').PDFWorker | null = null;
49
+ let rawWorker: Worker | null = null;
48
50
 
49
51
  async function initPdfJs() {
50
52
  if (!BROWSER) return null;
51
53
 
54
+ // Return cached instance if already initialized
55
+ if (pdfjsLib && pdfWorker) return pdfjsLib;
56
+
52
57
  pdfjsLib = await import('pdfjs-dist/legacy/build/pdf.mjs');
53
58
 
54
- // Create worker using import.meta.url for proper bundler resolution
55
- const worker = new pdfjsLib.PDFWorker({
56
- port: new Worker(new URL('pdfjs-dist/legacy/build/pdf.worker.mjs', import.meta.url), {
57
- type: 'module'
58
- }) as unknown as null
59
+ // Create worker only once using import.meta.url for proper bundler resolution
60
+ rawWorker = new Worker(new URL('pdfjs-dist/legacy/build/pdf.worker.mjs', import.meta.url), {
61
+ type: 'module'
62
+ });
63
+ pdfWorker = new pdfjsLib.PDFWorker({
64
+ port: rawWorker as unknown as null
59
65
  });
60
- pdfjsLib.GlobalWorkerOptions.workerPort = worker.port;
66
+ pdfjsLib.GlobalWorkerOptions.workerPort = pdfWorker.port;
61
67
 
62
68
  return pdfjsLib;
63
69
  }
@@ -228,6 +234,17 @@
228
234
  viewer = null;
229
235
  }
230
236
  findController = null;
237
+
238
+ // Cleanup worker to prevent memory leaks
239
+ if (pdfWorker) {
240
+ pdfWorker.destroy();
241
+ pdfWorker = null;
242
+ }
243
+ if (rawWorker) {
244
+ rawWorker.terminate();
245
+ rawWorker = null;
246
+ }
247
+ pdfjsLib = null;
231
248
  });
232
249
  </script>
233
250
 
@@ -43,19 +43,25 @@
43
43
  let viewer: import('./pdf-viewer/PDFViewerCore.js').PDFViewerCore | null = null;
44
44
  let findController: import('./pdf-viewer/FindController.js').FindController | null = null;
45
45
  let pdfjsLib: typeof import('pdfjs-dist/legacy/build/pdf.mjs') | null = null;
46
+ let pdfWorker: import('pdfjs-dist/legacy/build/pdf.mjs').PDFWorker | null = null;
47
+ let rawWorker: Worker | null = null;
46
48
 
47
49
  async function initPdfJs() {
48
50
  if (!BROWSER) return null;
49
51
 
52
+ // Return cached instance if already initialized
53
+ if (pdfjsLib && pdfWorker) return pdfjsLib;
54
+
50
55
  pdfjsLib = await import('pdfjs-dist/legacy/build/pdf.mjs');
51
56
 
52
- // Create worker using import.meta.url
53
- const worker = new pdfjsLib.PDFWorker({
54
- port: new Worker(new URL('pdfjs-dist/legacy/build/pdf.worker.mjs', import.meta.url), {
55
- type: 'module'
56
- }) as unknown as null
57
+ // Create worker only once using import.meta.url
58
+ rawWorker = new Worker(new URL('pdfjs-dist/legacy/build/pdf.worker.mjs', import.meta.url), {
59
+ type: 'module'
60
+ });
61
+ pdfWorker = new pdfjsLib.PDFWorker({
62
+ port: rawWorker as unknown as null
57
63
  });
58
- pdfjsLib.GlobalWorkerOptions.workerPort = worker.port;
64
+ pdfjsLib.GlobalWorkerOptions.workerPort = pdfWorker.port;
59
65
 
60
66
  return pdfjsLib;
61
67
  }
@@ -223,6 +229,17 @@
223
229
  viewer = null;
224
230
  }
225
231
  findController = null;
232
+
233
+ // Cleanup worker to prevent memory leaks
234
+ if (pdfWorker) {
235
+ pdfWorker.destroy();
236
+ pdfWorker = null;
237
+ }
238
+ if (rawWorker) {
239
+ rawWorker.terminate();
240
+ rawWorker = null;
241
+ }
242
+ pdfjsLib = null;
226
243
  });
227
244
  </script>
228
245
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-pdf-view",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "A modern, modular PDF viewer component for Svelte 5. Built on PDF.js with TypeScript support",
5
5
  "author": "Louis Li",
6
6
  "license": "Apache-2.0",
@@ -44,6 +44,7 @@
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@lucide/svelte": ">=0.500.0",
47
+ "pdfjs-dist": "^5.0.0",
47
48
  "svelte": "^5.0.0"
48
49
  },
49
50
  "peerDependenciesMeta": {
@@ -64,6 +65,7 @@
64
65
  "eslint-config-prettier": "^10.1.8",
65
66
  "eslint-plugin-svelte": "^3.13.0",
66
67
  "globals": "^16.5.0",
68
+ "pdfjs-dist": "^5.4.394",
67
69
  "prettier": "^3.6.2",
68
70
  "prettier-plugin-svelte": "^3.4.0",
69
71
  "publint": "^0.3.15",
@@ -84,7 +86,6 @@
84
86
  "svelte-component"
85
87
  ],
86
88
  "dependencies": {
87
- "esm-env": "^1.2.2",
88
- "pdfjs-dist": "^5.4.394"
89
+ "esm-env": "^1.2.2"
89
90
  }
90
91
  }