pdfnova 1.0.0

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.
Files changed (76) hide show
  1. package/README.md +336 -0
  2. package/dist/AnnotationReader-ADHPZ3V5.mjs +3 -0
  3. package/dist/AnnotationReader-ADHPZ3V5.mjs.map +1 -0
  4. package/dist/AnnotationReader-C5XLXGWS.cjs +12 -0
  5. package/dist/AnnotationReader-C5XLXGWS.cjs.map +1 -0
  6. package/dist/AnnotationWriter-N3Y4KTPI.cjs +12 -0
  7. package/dist/AnnotationWriter-N3Y4KTPI.cjs.map +1 -0
  8. package/dist/AnnotationWriter-XWY5N6AZ.mjs +3 -0
  9. package/dist/AnnotationWriter-XWY5N6AZ.mjs.map +1 -0
  10. package/dist/FormFiller-2O4MOQYV.cjs +12 -0
  11. package/dist/FormFiller-2O4MOQYV.cjs.map +1 -0
  12. package/dist/FormFiller-6DLWMRN5.mjs +3 -0
  13. package/dist/FormFiller-6DLWMRN5.mjs.map +1 -0
  14. package/dist/FormFlattener-5MWLLH7W.cjs +12 -0
  15. package/dist/FormFlattener-5MWLLH7W.cjs.map +1 -0
  16. package/dist/FormFlattener-YQRQ3QOY.mjs +3 -0
  17. package/dist/FormFlattener-YQRQ3QOY.mjs.map +1 -0
  18. package/dist/FormReader-QAEDFD77.cjs +13 -0
  19. package/dist/FormReader-QAEDFD77.cjs.map +1 -0
  20. package/dist/FormReader-XEF3T5LD.mjs +4 -0
  21. package/dist/FormReader-XEF3T5LD.mjs.map +1 -0
  22. package/dist/SignatureVerifier-2IR7UQGU.mjs +3 -0
  23. package/dist/SignatureVerifier-2IR7UQGU.mjs.map +1 -0
  24. package/dist/SignatureVerifier-4KWQA7X6.cjs +12 -0
  25. package/dist/SignatureVerifier-4KWQA7X6.cjs.map +1 -0
  26. package/dist/WasmMock-2I3GVRQF.mjs +397 -0
  27. package/dist/WasmMock-2I3GVRQF.mjs.map +1 -0
  28. package/dist/WasmMock-OYPV4J6B.cjs +399 -0
  29. package/dist/WasmMock-OYPV4J6B.cjs.map +1 -0
  30. package/dist/chunk-2OWW5BYD.mjs +1847 -0
  31. package/dist/chunk-2OWW5BYD.mjs.map +1 -0
  32. package/dist/chunk-2YFCKMVK.cjs +72 -0
  33. package/dist/chunk-2YFCKMVK.cjs.map +1 -0
  34. package/dist/chunk-7FGOUG4Z.cjs +51 -0
  35. package/dist/chunk-7FGOUG4Z.cjs.map +1 -0
  36. package/dist/chunk-CPMUWWNS.cjs +44 -0
  37. package/dist/chunk-CPMUWWNS.cjs.map +1 -0
  38. package/dist/chunk-DVMAQ62T.cjs +109 -0
  39. package/dist/chunk-DVMAQ62T.cjs.map +1 -0
  40. package/dist/chunk-ETSUOY4U.cjs +104 -0
  41. package/dist/chunk-ETSUOY4U.cjs.map +1 -0
  42. package/dist/chunk-FD5RTJ5W.mjs +60 -0
  43. package/dist/chunk-FD5RTJ5W.mjs.map +1 -0
  44. package/dist/chunk-FO3DQLVB.mjs +42 -0
  45. package/dist/chunk-FO3DQLVB.mjs.map +1 -0
  46. package/dist/chunk-G2FA6VKV.cjs +62 -0
  47. package/dist/chunk-G2FA6VKV.cjs.map +1 -0
  48. package/dist/chunk-G7575D5X.mjs +67 -0
  49. package/dist/chunk-G7575D5X.mjs.map +1 -0
  50. package/dist/chunk-I7OBHZLB.mjs +75 -0
  51. package/dist/chunk-I7OBHZLB.mjs.map +1 -0
  52. package/dist/chunk-INA3KRJK.cjs +1863 -0
  53. package/dist/chunk-INA3KRJK.cjs.map +1 -0
  54. package/dist/chunk-RZFKZ2CA.cjs +77 -0
  55. package/dist/chunk-RZFKZ2CA.cjs.map +1 -0
  56. package/dist/chunk-VRJQZOCH.mjs +107 -0
  57. package/dist/chunk-VRJQZOCH.mjs.map +1 -0
  58. package/dist/chunk-X53667JS.mjs +102 -0
  59. package/dist/chunk-X53667JS.mjs.map +1 -0
  60. package/dist/chunk-XEHKVFPJ.mjs +49 -0
  61. package/dist/chunk-XEHKVFPJ.mjs.map +1 -0
  62. package/dist/index.cjs +112 -0
  63. package/dist/index.cjs.map +1 -0
  64. package/dist/index.d.cts +103 -0
  65. package/dist/index.d.ts +103 -0
  66. package/dist/index.mjs +14 -0
  67. package/dist/index.mjs.map +1 -0
  68. package/dist/lite-CMz-Yosm.d.cts +662 -0
  69. package/dist/lite-CMz-Yosm.d.ts +662 -0
  70. package/dist/lite.cjs +70 -0
  71. package/dist/lite.cjs.map +1 -0
  72. package/dist/lite.d.cts +1 -0
  73. package/dist/lite.d.ts +1 -0
  74. package/dist/lite.mjs +8 -0
  75. package/dist/lite.mjs.map +1 -0
  76. package/package.json +68 -0
package/README.md ADDED
@@ -0,0 +1,336 @@
1
+ # pdfnova
2
+
3
+ **PDFium-powered PDF library for JavaScript.** Chrome-grade rendering via WebAssembly with full TypeScript types. Supports text extraction, search, bookmarks, annotations, forms, and digital signatures.
4
+
5
+ Built on [`@embedpdf/pdfium`](https://www.npmjs.com/package/@embedpdf/pdfium) — the real PDFium engine (used in Chrome) compiled to WebAssembly.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install pdfnova
11
+ ```
12
+
13
+ ## Two Tiers
14
+
15
+ | | pdfnova/lite | pdfnova (full) |
16
+ | ------------------------ | ------------ | -------------- |
17
+ | **JS Bundle (minified)** | ~3KB | ~5KB |
18
+ | **WASM Binary** | 4.4MB on disk / ~1.5MB over the wire (Brotli) | |
19
+ | Rendering | Yes | Yes |
20
+ | Text extraction | Yes | Yes |
21
+ | Text layer (DOM) | Yes | Yes |
22
+ | Search | Yes | Yes |
23
+ | Bookmarks/TOC | Yes | Yes |
24
+ | Virtualization | Yes | Yes |
25
+ | Worker/OffscreenCanvas | Yes | Yes |
26
+ | Annotations (read/write) | — | Yes |
27
+ | Form filling/flattening | — | Yes |
28
+ | Digital signatures | — | Yes |
29
+ | doc.save() | — | Yes |
30
+
31
+ > The WASM binary is fetched once and cached in IndexedDB — subsequent page loads are instant with zero network cost. Both tiers share the same binary — the lite/full distinction controls which TypeScript API features are available.
32
+
33
+ ```typescript
34
+ // Lightweight — render, text, search, bookmarks
35
+ import { PDFDocument } from "pdfnova/lite";
36
+
37
+ // Full — everything above + annotations, forms, signatures
38
+ import { PDFDocument } from "pdfnova";
39
+ ```
40
+
41
+ ## Quick Start
42
+
43
+ ```typescript
44
+ import { PDFDocument } from "pdfnova/lite";
45
+
46
+ // Open from URL, ArrayBuffer, File, Blob, or base64 data URI
47
+ const doc = await PDFDocument.open("/report.pdf");
48
+
49
+ // Document info
50
+ console.log(doc.pageCount); // 42
51
+ console.log(doc.metadata); // { title, author, subject, ... }
52
+ console.log(doc.outline); // OutlineItem[] (bookmarks tree)
53
+
54
+ // Render a page
55
+ const page = doc.getPage(0);
56
+ const canvas = document.createElement("canvas");
57
+ await page.render(canvas, { scale: 2 });
58
+
59
+ // Text extraction with character-level precision
60
+ const text = page.getText();
61
+ const spans = page.getTextSpans(); // TextSpan[] with x, y, width, height
62
+
63
+ // Build a selectable text layer over the canvas
64
+ page.createTextLayer(container);
65
+
66
+ // Full-text search
67
+ const results = doc.search("quarterly revenue");
68
+
69
+ // Cleanup
70
+ doc.close();
71
+ ```
72
+
73
+ ## Rendering
74
+
75
+ ```typescript
76
+ const page = doc.getPage(0);
77
+
78
+ // Render to canvas
79
+ await page.render(canvas, {
80
+ scale: 2, // 2x resolution
81
+ rotation: 90, // 0, 90, 180, 270
82
+ background: "#ffffff",
83
+ });
84
+
85
+ // Render to ImageData (no DOM required)
86
+ const imageData = await page.renderToImageData({ scale: 1.5 });
87
+
88
+ // Thumbnails
89
+ import { PageRenderer } from "pdfnova/lite";
90
+ await PageRenderer.renderThumbnail(page, thumbCanvas, 200);
91
+
92
+ // Fit-to-width scale calculation
93
+ const scale = PageRenderer.fitWidthScale(page, containerWidth);
94
+ ```
95
+
96
+ ## Virtual Renderer
97
+
98
+ For large documents, only render visible pages:
99
+
100
+ ```typescript
101
+ import { VirtualRenderer } from "pdfnova/lite";
102
+
103
+ const renderer = new VirtualRenderer({
104
+ container: document.getElementById("viewer")!,
105
+ scale: 1.5,
106
+ overscan: 2, // render 2 pages above/below viewport
107
+ cacheSize: 10, // LRU cache for rendered pages
108
+ });
109
+
110
+ await renderer.setDocument(doc);
111
+ renderer.scrollToPage(5);
112
+ console.log(renderer.getCurrentPage());
113
+ ```
114
+
115
+ ## Text Layer
116
+
117
+ pdfnova uses PDFium's character-level bounding boxes for pixel-perfect text selection:
118
+
119
+ ```typescript
120
+ // Span-level positioning (fast, good enough for most use cases)
121
+ const layer = page.createTextLayer(container);
122
+
123
+ // Character-level positioning (slower but pixel-perfect)
124
+ import { TextLayerBuilder } from "pdfnova/lite";
125
+ const builder = new TextLayerBuilder(wasm, bridge);
126
+ builder.buildCharLevel(textPagePtr, container, page.width, page.height, scale);
127
+ ```
128
+
129
+ ## Search
130
+
131
+ ```typescript
132
+ // Search a single page
133
+ const pageResults = page.search("revenue", { caseSensitive: true });
134
+
135
+ // Search entire document
136
+ const allResults = doc.search("quarterly revenue", { wholeWord: true });
137
+
138
+ // Each result has:
139
+ // - pageIndex, charIndex, charCount
140
+ // - rects (TextRect[] for highlighting)
141
+ // - text (matched text)
142
+ ```
143
+
144
+ ## Bookmarks / Table of Contents
145
+
146
+ ```typescript
147
+ const outline = doc.outline;
148
+ // OutlineItem { title, pageIndex, children: OutlineItem[] }
149
+
150
+ for (const item of outline) {
151
+ console.log(`${item.title} → page ${item.pageIndex + 1}`);
152
+ for (const child of item.children) {
153
+ console.log(` ${child.title} → page ${child.pageIndex + 1}`);
154
+ }
155
+ }
156
+ ```
157
+
158
+ ## Annotations (full tier)
159
+
160
+ ```typescript
161
+ import { PDFDocument, AnnotationType } from "pdfnova";
162
+
163
+ const doc = await PDFDocument.open(data);
164
+ const page = doc.getPage(0);
165
+
166
+ // Read existing annotations
167
+ const annotations = await page.getAnnotations();
168
+
169
+ // Add a highlight annotation
170
+ await page.addAnnotation({
171
+ type: AnnotationType.Highlight,
172
+ rect: { left: 72, top: 720, right: 300, bottom: 700 },
173
+ color: { r: 255, g: 235, b: 59, a: 128 },
174
+ contents: "Important section",
175
+ });
176
+
177
+ // Remove an annotation
178
+ await page.removeAnnotation(0);
179
+
180
+ // Save modified PDF
181
+ const bytes = await doc.save();
182
+ ```
183
+
184
+ ## Form Filling (full tier)
185
+
186
+ ```typescript
187
+ import { PDFDocument } from "pdfnova";
188
+
189
+ const doc = await PDFDocument.open(formPdf);
190
+
191
+ // Read all form fields
192
+ const fields = await doc.getFormFields();
193
+ // FormFieldData { name, type, value, isChecked, pageIndex }
194
+
195
+ // Fill fields
196
+ await doc.setFormField("name", "John Doe");
197
+ await doc.setFormField("email", "john@example.com");
198
+
199
+ // Flatten forms (make non-interactive)
200
+ await doc.flattenForms();
201
+
202
+ // Save
203
+ const filled = await doc.save();
204
+ ```
205
+
206
+ ## Digital Signatures (full tier)
207
+
208
+ ```typescript
209
+ import { PDFDocument } from "pdfnova";
210
+
211
+ const doc = await PDFDocument.open(signedPdf);
212
+
213
+ const signatures = await doc.getSignatures();
214
+ // SignatureData { index, contents, byteRange, subFilter, reason, signingTime }
215
+
216
+ // Format signature info
217
+ import { SignatureInfo } from "pdfnova";
218
+ for (const sig of signatures) {
219
+ console.log(SignatureInfo.formatSummary(sig));
220
+ console.log(SignatureInfo.getSignatureFormat(sig.subFilter));
221
+ }
222
+ ```
223
+
224
+ ## Worker Pool
225
+
226
+ Render pages concurrently across multiple Web Workers:
227
+
228
+ ```typescript
229
+ import { WorkerPool } from "pdfnova/lite";
230
+
231
+ const pool = new WorkerPool(4); // 4 workers
232
+ await pool.init({ tier: "lite" });
233
+
234
+ // Render multiple pages in parallel
235
+ const images = await pool.renderPages([0, 1, 2, 3], { scale: 2 });
236
+
237
+ pool.destroy();
238
+ ```
239
+
240
+ ## Authenticated URLs
241
+
242
+ ```typescript
243
+ const doc = await PDFDocument.open(
244
+ "https://api.example.com/documents/123/download",
245
+ {
246
+ headers: { Authorization: "Bearer eyJ..." },
247
+ credentials: "include",
248
+ },
249
+ );
250
+ ```
251
+
252
+ ## Password-Protected PDFs
253
+
254
+ ```typescript
255
+ const doc = await PDFDocument.open(encryptedPdf, {
256
+ password: "secret123",
257
+ });
258
+ ```
259
+
260
+ ## Custom WASM URL
261
+
262
+ By default, pdfnova loads the PDFium WASM binary from jsDelivr CDN. To self-host:
263
+
264
+ ```typescript
265
+ const doc = await PDFDocument.open(data, {
266
+ wasmUrl: "https://cdn.example.com/pdfium.wasm",
267
+ });
268
+ ```
269
+
270
+ You can get the WASM binary from `node_modules/@embedpdf/pdfium/dist/pdfium.wasm` and serve it from your own infrastructure.
271
+
272
+ ## API Reference
273
+
274
+ ### PDFDocument
275
+
276
+ | Method/Property | Description |
277
+ | ------------------------------------ | -------------------------------------------------------------------------------- |
278
+ | `PDFDocument.open(source, options?)` | Open a PDF from URL, ArrayBuffer, File, Blob, or data URI |
279
+ | `.pageCount` | Number of pages |
280
+ | `.metadata` | `{ title, author, subject, keywords, creator, producer, creationDate, modDate }` |
281
+ | `.outline` | Bookmark tree (`OutlineItem[]`) |
282
+ | `.permissions` | `{ print, copy, modify, annotate, fillForms, ... }` |
283
+ | `.getPage(index)` | Get a page (0-indexed) |
284
+ | `.search(query, options?)` | Search entire document |
285
+ | `.getFormFields()` | Read form fields (full tier) |
286
+ | `.setFormField(name, value)` | Fill a form field (full tier) |
287
+ | `.flattenForms()` | Flatten forms (full tier) |
288
+ | `.getSignatures()` | Read digital signatures (full tier) |
289
+ | `.save()` | Save modified PDF as Uint8Array (full tier) |
290
+ | `.close()` | Free all WASM memory |
291
+
292
+ ### PDFPage
293
+
294
+ | Method/Property | Description |
295
+ | ------------------------------ | ------------------------------ |
296
+ | `.pageIndex` | 0-based page index |
297
+ | `.width` / `.height` | Page dimensions in PDF points |
298
+ | `.render(canvas, options?)` | Render to canvas |
299
+ | `.renderToImageData(options?)` | Render to ImageData |
300
+ | `.getText()` | Extract plain text |
301
+ | `.getTextSpans()` | Extract text with positions |
302
+ | `.getCharBoxes()` | Character-level bounding boxes |
303
+ | `.createTextLayer(container)` | Build selectable text layer |
304
+ | `.search(query, options?)` | Search this page |
305
+ | `.getLinks()` | Extract hyperlinks |
306
+ | `.getAnnotations()` | Read annotations (full tier) |
307
+ | `.addAnnotation(options)` | Add annotation (full tier) |
308
+ | `.removeAnnotation(index)` | Remove annotation (full tier) |
309
+ | `.close()` | Free page resources |
310
+
311
+ ## How WASM Loading Works
312
+
313
+ pdfnova uses [`@embedpdf/pdfium`](https://www.npmjs.com/package/@embedpdf/pdfium) for the pre-built PDFium WebAssembly binary. No manual compilation is needed.
314
+
315
+ 1. On first use, `WasmLoader` fetches `pdfium.wasm` (4.4MB) from CDN — ~1.5MB with Brotli compression (standard on CDNs)
316
+ 2. The binary is cached in **IndexedDB** — subsequent visits load instantly with zero network cost
317
+ 3. The module is initialized via `PDFiumExt_Init()` and adapted to pdfnova's typed interface
318
+ 4. All downstream API calls go through the real PDFium C engine via the WASM bridge
319
+
320
+ To override the WASM URL (e.g., for air-gapped environments), pass `wasmUrl` in `PDFDocument.open()` options.
321
+
322
+ To clear the cached binary: `WasmLoader.clearCache()`
323
+
324
+ ## Development
325
+
326
+ ```bash
327
+ npm install # Install dependencies
328
+ npm run build # TypeScript check + tsup build
329
+ npm test # Run all 71 tests
330
+ npm run test:watch # Watch mode
331
+ npm run test:coverage # With V8 coverage report
332
+ ```
333
+
334
+ ## License
335
+
336
+ MIT
@@ -0,0 +1,3 @@
1
+ export { AnnotationReader } from './chunk-VRJQZOCH.mjs';
2
+ //# sourceMappingURL=AnnotationReader-ADHPZ3V5.mjs.map
3
+ //# sourceMappingURL=AnnotationReader-ADHPZ3V5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"AnnotationReader-ADHPZ3V5.mjs"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkDVMAQ62T_cjs = require('./chunk-DVMAQ62T.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "AnnotationReader", {
8
+ enumerable: true,
9
+ get: function () { return chunkDVMAQ62T_cjs.AnnotationReader; }
10
+ });
11
+ //# sourceMappingURL=AnnotationReader-C5XLXGWS.cjs.map
12
+ //# sourceMappingURL=AnnotationReader-C5XLXGWS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"AnnotationReader-C5XLXGWS.cjs"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkRZFKZ2CA_cjs = require('./chunk-RZFKZ2CA.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "AnnotationWriter", {
8
+ enumerable: true,
9
+ get: function () { return chunkRZFKZ2CA_cjs.AnnotationWriter; }
10
+ });
11
+ //# sourceMappingURL=AnnotationWriter-N3Y4KTPI.cjs.map
12
+ //# sourceMappingURL=AnnotationWriter-N3Y4KTPI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"AnnotationWriter-N3Y4KTPI.cjs"}
@@ -0,0 +1,3 @@
1
+ export { AnnotationWriter } from './chunk-I7OBHZLB.mjs';
2
+ //# sourceMappingURL=AnnotationWriter-XWY5N6AZ.mjs.map
3
+ //# sourceMappingURL=AnnotationWriter-XWY5N6AZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"AnnotationWriter-XWY5N6AZ.mjs"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunk7FGOUG4Z_cjs = require('./chunk-7FGOUG4Z.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "FormFiller", {
8
+ enumerable: true,
9
+ get: function () { return chunk7FGOUG4Z_cjs.FormFiller; }
10
+ });
11
+ //# sourceMappingURL=FormFiller-2O4MOQYV.cjs.map
12
+ //# sourceMappingURL=FormFiller-2O4MOQYV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"FormFiller-2O4MOQYV.cjs"}
@@ -0,0 +1,3 @@
1
+ export { FormFiller } from './chunk-XEHKVFPJ.mjs';
2
+ //# sourceMappingURL=FormFiller-6DLWMRN5.mjs.map
3
+ //# sourceMappingURL=FormFiller-6DLWMRN5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"FormFiller-6DLWMRN5.mjs"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkCPMUWWNS_cjs = require('./chunk-CPMUWWNS.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "FormFlattener", {
8
+ enumerable: true,
9
+ get: function () { return chunkCPMUWWNS_cjs.FormFlattener; }
10
+ });
11
+ //# sourceMappingURL=FormFlattener-5MWLLH7W.cjs.map
12
+ //# sourceMappingURL=FormFlattener-5MWLLH7W.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"FormFlattener-5MWLLH7W.cjs"}
@@ -0,0 +1,3 @@
1
+ export { FormFlattener } from './chunk-FO3DQLVB.mjs';
2
+ //# sourceMappingURL=FormFlattener-YQRQ3QOY.mjs.map
3
+ //# sourceMappingURL=FormFlattener-YQRQ3QOY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"FormFlattener-YQRQ3QOY.mjs"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunkG2FA6VKV_cjs = require('./chunk-G2FA6VKV.cjs');
4
+ require('./chunk-2YFCKMVK.cjs');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "FormReader", {
9
+ enumerable: true,
10
+ get: function () { return chunkG2FA6VKV_cjs.FormReader; }
11
+ });
12
+ //# sourceMappingURL=FormReader-QAEDFD77.cjs.map
13
+ //# sourceMappingURL=FormReader-QAEDFD77.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"FormReader-QAEDFD77.cjs"}
@@ -0,0 +1,4 @@
1
+ export { FormReader } from './chunk-FD5RTJ5W.mjs';
2
+ import './chunk-G7575D5X.mjs';
3
+ //# sourceMappingURL=FormReader-XEF3T5LD.mjs.map
4
+ //# sourceMappingURL=FormReader-XEF3T5LD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"FormReader-XEF3T5LD.mjs"}
@@ -0,0 +1,3 @@
1
+ export { SignatureVerifier } from './chunk-X53667JS.mjs';
2
+ //# sourceMappingURL=SignatureVerifier-2IR7UQGU.mjs.map
3
+ //# sourceMappingURL=SignatureVerifier-2IR7UQGU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SignatureVerifier-2IR7UQGU.mjs"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkETSUOY4U_cjs = require('./chunk-ETSUOY4U.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "SignatureVerifier", {
8
+ enumerable: true,
9
+ get: function () { return chunkETSUOY4U_cjs.SignatureVerifier; }
10
+ });
11
+ //# sourceMappingURL=SignatureVerifier-4KWQA7X6.cjs.map
12
+ //# sourceMappingURL=SignatureVerifier-4KWQA7X6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SignatureVerifier-4KWQA7X6.cjs"}