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
@@ -0,0 +1,397 @@
1
+ // src/core/WasmMock.ts
2
+ function createMockModule() {
3
+ const heap = new ArrayBuffer(256 * 1024 * 1024);
4
+ const HEAPU8 = new Uint8Array(heap);
5
+ const HEAPU32 = new Uint32Array(heap);
6
+ const HEAP32 = new Int32Array(heap);
7
+ const HEAPF32 = new Float32Array(heap);
8
+ const HEAPF64 = new Float64Array(heap);
9
+ let nextPtr = 1024;
10
+ function malloc(size) {
11
+ const aligned = size + 7 & -8;
12
+ const ptr = nextPtr;
13
+ nextPtr += aligned;
14
+ return ptr;
15
+ }
16
+ function free(_ptr) {
17
+ }
18
+ const documents = /* @__PURE__ */ new Map();
19
+ let nextDocHandle = 100;
20
+ let lastError = 0;
21
+ const pages = /* @__PURE__ */ new Map();
22
+ let nextPageHandle = 1e3;
23
+ const textPages = /* @__PURE__ */ new Map();
24
+ let nextTextPageHandle = 5e3;
25
+ const bitmaps = /* @__PURE__ */ new Map();
26
+ let nextBitmapHandle = 1e4;
27
+ const searches = /* @__PURE__ */ new Map();
28
+ let nextSearchHandle = 2e4;
29
+ const module = {
30
+ HEAPU8,
31
+ HEAPU32,
32
+ HEAP32,
33
+ HEAPF32,
34
+ HEAPF64,
35
+ _malloc: malloc,
36
+ _free: free,
37
+ _FPDF_InitLibraryWithConfig(_configPtr) {
38
+ },
39
+ _FPDF_DestroyLibrary() {
40
+ documents.clear();
41
+ pages.clear();
42
+ textPages.clear();
43
+ bitmaps.clear();
44
+ },
45
+ _FPDF_LoadMemDocument(buf, size, password) {
46
+ const data = HEAPU8.slice(buf, buf + size);
47
+ const header = String.fromCharCode(...data.slice(0, 5));
48
+ if (header !== "%PDF-") {
49
+ lastError = 1;
50
+ return 0;
51
+ }
52
+ const handle = nextDocHandle++;
53
+ const pw = password ? module.UTF8ToString(password) : null;
54
+ const content = new TextDecoder().decode(data);
55
+ const pageMatches = content.match(/\/Type\s*\/Page[^s]/g);
56
+ const pageCount = pageMatches ? pageMatches.length : 1;
57
+ documents.set(handle, { data, pageCount, password: pw });
58
+ lastError = 0;
59
+ return handle;
60
+ },
61
+ _FPDF_CloseDocument(doc) {
62
+ documents.delete(doc);
63
+ },
64
+ _FPDF_GetLastError() {
65
+ return lastError;
66
+ },
67
+ _FPDF_GetPageCount(doc) {
68
+ return documents.get(doc)?.pageCount ?? 0;
69
+ },
70
+ _FPDF_LoadPage(doc, pageIndex) {
71
+ const d = documents.get(doc);
72
+ if (!d || pageIndex < 0 || pageIndex >= d.pageCount) return 0;
73
+ const handle = nextPageHandle++;
74
+ pages.set(handle, { docHandle: doc, pageIndex, width: 612, height: 792 });
75
+ return handle;
76
+ },
77
+ _FPDF_ClosePage(page) {
78
+ pages.delete(page);
79
+ },
80
+ _FPDF_GetPageWidthF(page) {
81
+ return pages.get(page)?.width ?? 0;
82
+ },
83
+ _FPDF_GetPageHeightF(page) {
84
+ return pages.get(page)?.height ?? 0;
85
+ },
86
+ _FPDFBitmap_Create(width, height, _alpha) {
87
+ const stride = width * 4;
88
+ const bufSize = stride * height;
89
+ const buffer = malloc(bufSize);
90
+ HEAPU8.fill(255, buffer, buffer + bufSize);
91
+ const handle = nextBitmapHandle++;
92
+ bitmaps.set(handle, { width, height, buffer, stride });
93
+ return handle;
94
+ },
95
+ _FPDFBitmap_FillRect(bitmap, left, top, width, height, color) {
96
+ const bmp = bitmaps.get(bitmap);
97
+ if (!bmp) return;
98
+ const r = color >> 24 & 255, g = color >> 16 & 255, b = color >> 8 & 255, a = color & 255;
99
+ for (let y = top; y < top + height && y < bmp.height; y++) {
100
+ for (let x = left; x < left + width && x < bmp.width; x++) {
101
+ const offset = bmp.buffer + y * bmp.stride + x * 4;
102
+ HEAPU8[offset] = b;
103
+ HEAPU8[offset + 1] = g;
104
+ HEAPU8[offset + 2] = r;
105
+ HEAPU8[offset + 3] = a;
106
+ }
107
+ }
108
+ },
109
+ _FPDFBitmap_GetBuffer(bitmap) {
110
+ return bitmaps.get(bitmap)?.buffer ?? 0;
111
+ },
112
+ _FPDFBitmap_GetStride(bitmap) {
113
+ return bitmaps.get(bitmap)?.stride ?? 0;
114
+ },
115
+ _FPDFBitmap_Destroy(bitmap) {
116
+ bitmaps.delete(bitmap);
117
+ },
118
+ _FPDF_RenderPageBitmap() {
119
+ },
120
+ _FPDFText_LoadPage(page) {
121
+ if (!pages.has(page)) return 0;
122
+ const handle = nextTextPageHandle++;
123
+ textPages.set(handle, { pageHandle: page, text: "Sample PDF text content for page." });
124
+ return handle;
125
+ },
126
+ _FPDFText_ClosePage(textPage) {
127
+ textPages.delete(textPage);
128
+ },
129
+ _FPDFText_CountChars(textPage) {
130
+ return textPages.get(textPage)?.text.length ?? 0;
131
+ },
132
+ _FPDFText_GetUnicode(textPage, index) {
133
+ const tp = textPages.get(textPage);
134
+ return tp ? tp.text.charCodeAt(index) : 0;
135
+ },
136
+ _FPDFText_GetFontSize(textPage, _index) {
137
+ return textPages.has(textPage) ? 12 : 0;
138
+ },
139
+ _FPDFText_GetCharBox(textPage, index, leftPtr, rightPtr, bottomPtr, topPtr) {
140
+ if (!textPages.has(textPage)) return 0;
141
+ const charWidth = 7.2;
142
+ const x = index % 80 * charWidth;
143
+ const y = 792 - Math.floor(index / 80) * 14;
144
+ HEAPF64[leftPtr >> 3] = x;
145
+ HEAPF64[rightPtr >> 3] = x + charWidth;
146
+ HEAPF64[bottomPtr >> 3] = y - 12;
147
+ HEAPF64[topPtr >> 3] = y;
148
+ return 1;
149
+ },
150
+ _FPDFText_GetText(textPage, startIndex, count, buf) {
151
+ const tp = textPages.get(textPage);
152
+ if (!tp) return 0;
153
+ const sub = tp.text.slice(startIndex, startIndex + count);
154
+ module.stringToUTF16(sub, buf, (count + 1) * 2);
155
+ return sub.length;
156
+ },
157
+ _FPDFText_FindStart(textPage, findWhat, flags, startIndex) {
158
+ const tp = textPages.get(textPage);
159
+ if (!tp) return 0;
160
+ const query = module.UTF16ToString(findWhat);
161
+ const caseSensitive = (flags & 1) !== 0;
162
+ const handle = nextSearchHandle++;
163
+ searches.set(handle, { tpHandle: textPage, needle: query, caseSensitive, pos: startIndex, matchIdx: -1, matchLen: query.length });
164
+ return handle;
165
+ },
166
+ _FPDFText_FindNext(findHandle) {
167
+ const state = searches.get(findHandle);
168
+ if (!state) return 0;
169
+ const tp = textPages.get(state.tpHandle);
170
+ if (!tp) return 0;
171
+ const text = state.caseSensitive ? tp.text : tp.text.toLowerCase();
172
+ const needle = state.caseSensitive ? state.needle : state.needle.toLowerCase();
173
+ const idx = text.indexOf(needle, state.pos);
174
+ if (idx < 0) {
175
+ state.matchIdx = -1;
176
+ return 0;
177
+ }
178
+ state.matchIdx = idx;
179
+ state.pos = idx + 1;
180
+ return 1;
181
+ },
182
+ _FPDFText_FindClose(findHandle) {
183
+ searches.delete(findHandle);
184
+ },
185
+ _FPDFText_GetSchResultIndex(findHandle) {
186
+ return searches.get(findHandle)?.matchIdx ?? -1;
187
+ },
188
+ _FPDFText_GetSchCount(findHandle) {
189
+ return searches.get(findHandle)?.matchLen ?? 0;
190
+ },
191
+ _FPDFText_CountRects(textPage, _startIndex, _count) {
192
+ return textPages.has(textPage) ? 1 : 0;
193
+ },
194
+ _FPDFText_GetRect(textPage, _rectIndex, leftPtr, topPtr, rightPtr, bottomPtr) {
195
+ if (!textPages.has(textPage)) return 0;
196
+ HEAPF64[leftPtr >> 3] = 72;
197
+ HEAPF64[topPtr >> 3] = 720;
198
+ HEAPF64[rightPtr >> 3] = 540;
199
+ HEAPF64[bottomPtr >> 3] = 708;
200
+ return 1;
201
+ },
202
+ _FPDF_GetMetaText(doc, tag, buf, bufLen) {
203
+ if (!documents.has(doc)) return 0;
204
+ const tagStr = module.UTF8ToString(tag);
205
+ const meta = {
206
+ Title: "Untitled",
207
+ Author: "",
208
+ Subject: "",
209
+ Keywords: "",
210
+ Creator: "pdfnova",
211
+ Producer: "pdfnova",
212
+ CreationDate: "",
213
+ ModDate: ""
214
+ };
215
+ const value = meta[tagStr] ?? "";
216
+ if (bufLen === 0) return (value.length + 1) * 2;
217
+ module.stringToUTF16(value, buf, bufLen);
218
+ return (value.length + 1) * 2;
219
+ },
220
+ _FPDFBookmark_GetFirstChild(_doc, _bookmark) {
221
+ return 0;
222
+ },
223
+ _FPDFBookmark_GetNextSibling(_doc, _bookmark) {
224
+ return 0;
225
+ },
226
+ _FPDFBookmark_GetTitle(_bookmark, _buf, _bufLen) {
227
+ return 0;
228
+ },
229
+ _FPDFBookmark_GetAction(_bookmark) {
230
+ return 0;
231
+ },
232
+ _FPDFBookmark_GetDest(_doc, _bookmark) {
233
+ return 0;
234
+ },
235
+ _FPDFDest_GetDestPageIndex(_doc, _dest) {
236
+ return 0;
237
+ },
238
+ _FPDFLink_LoadWebLinks(_textPage) {
239
+ return 0;
240
+ },
241
+ _FPDFLink_CountWebLinks(_linkPage) {
242
+ return 0;
243
+ },
244
+ _FPDFLink_GetURL(_linkPage, _linkIndex, _buf, _bufLen) {
245
+ return 0;
246
+ },
247
+ _FPDFLink_CountRects(_linkPage, _linkIndex) {
248
+ return 0;
249
+ },
250
+ _FPDFLink_GetRect() {
251
+ },
252
+ _FPDFLink_CloseWebLinks(_linkPage) {
253
+ },
254
+ _FPDFPage_GetAnnotCount(page) {
255
+ return pages.has(page) ? 0 : 0;
256
+ },
257
+ _FPDFPage_GetAnnot(_page, _index) {
258
+ return 0;
259
+ },
260
+ _FPDFPage_CreateAnnot(_page, _subtype) {
261
+ return malloc(8);
262
+ },
263
+ _FPDFPage_RemoveAnnot(_page, _index) {
264
+ return 1;
265
+ },
266
+ _FPDFAnnot_GetSubtype(_annot) {
267
+ return 0;
268
+ },
269
+ _FPDFAnnot_GetRect(_annot, _rect) {
270
+ return 1;
271
+ },
272
+ _FPDFAnnot_SetRect(_annot, _rect) {
273
+ return 1;
274
+ },
275
+ _FPDFAnnot_GetColor(_annot, _type, _r, _g, _b, _a) {
276
+ return 1;
277
+ },
278
+ _FPDFAnnot_SetColor(_annot, _type, _r, _g, _b, _a) {
279
+ return 1;
280
+ },
281
+ _FPDFAnnot_GetStringValue(_annot, _key, _buf, _bufLen) {
282
+ return 0;
283
+ },
284
+ _FPDFAnnot_SetStringValue(_annot, _key, _value) {
285
+ return 1;
286
+ },
287
+ _FPDFAnnot_AppendAttachmentPoints(_annot, _points) {
288
+ return 1;
289
+ },
290
+ _FPDFAnnot_CountAttachmentPoints(_annot) {
291
+ return 0;
292
+ },
293
+ _FPDFAnnot_GetAttachmentPoints(_annot, _index, _points) {
294
+ return 1;
295
+ },
296
+ _FPDFPage_CloseAnnot(_annot) {
297
+ },
298
+ _FPDFDOC_InitFormFillEnvironment(_doc, _formInfo) {
299
+ return malloc(8);
300
+ },
301
+ _FPDFDOC_ExitFormFillEnvironment(_formHandle) {
302
+ },
303
+ _FPDF_GetFormType(_doc) {
304
+ return 0;
305
+ },
306
+ _FPDFPage_HasFormFieldAtPoint(_formHandle, _page, _x, _y) {
307
+ return -1;
308
+ },
309
+ _FORM_OnMouseMove(_formHandle, _page, _modifier, _x, _y) {
310
+ },
311
+ _FPDFAnnot_GetFormFieldType(_formHandle, _annot) {
312
+ return -1;
313
+ },
314
+ _FPDFAnnot_GetFormFieldName(_formHandle, _annot, _buf, _bufLen) {
315
+ return 0;
316
+ },
317
+ _FPDFAnnot_GetFormFieldValue(_formHandle, _annot, _buf, _bufLen) {
318
+ return 0;
319
+ },
320
+ _FPDFAnnot_SetFormFieldValue(_formHandle, _annot, _value) {
321
+ },
322
+ _FPDFAnnot_GetFormFieldFlags(_formHandle, _annot) {
323
+ return 0;
324
+ },
325
+ _FPDFAnnot_IsChecked(_formHandle, _annot) {
326
+ return 0;
327
+ },
328
+ _FPDFPage_Flatten(_page, _usage) {
329
+ return 1;
330
+ },
331
+ _FPDF_SaveAsCopy(_doc, _writer, _flags) {
332
+ return 1;
333
+ },
334
+ _FPDF_SaveWithVersion(_doc, _writer, _flags, _version) {
335
+ return 1;
336
+ },
337
+ _FPDF_GetSignatureCount(_doc) {
338
+ return 0;
339
+ },
340
+ _FPDF_GetSignatureObject(_doc, _index) {
341
+ return 0;
342
+ },
343
+ _FPDFSignObj_GetContents(_sig, _buf, _bufLen) {
344
+ return 0;
345
+ },
346
+ _FPDFSignObj_GetByteRange(_sig, _buf, _bufLen) {
347
+ return 0;
348
+ },
349
+ _FPDFSignObj_GetSubFilter(_sig, _buf, _bufLen) {
350
+ return 0;
351
+ },
352
+ _FPDFSignObj_GetReason(_sig, _buf, _bufLen) {
353
+ return 0;
354
+ },
355
+ _FPDFSignObj_GetTime(_sig, _buf, _bufLen) {
356
+ return 0;
357
+ },
358
+ _FPDFSignObj_GetDocMDPPermission(_sig) {
359
+ return 0;
360
+ },
361
+ UTF8ToString(ptr) {
362
+ let end = ptr;
363
+ while (HEAPU8[end] !== 0) end++;
364
+ return new TextDecoder().decode(HEAPU8.slice(ptr, end));
365
+ },
366
+ UTF16ToString(ptr) {
367
+ const u16 = new Uint16Array(heap, ptr);
368
+ let str = "";
369
+ for (let i = 0; u16[i] !== 0; i++) str += String.fromCharCode(u16[i]);
370
+ return str;
371
+ },
372
+ stringToUTF8(str, outPtr, maxBytes) {
373
+ const encoded = new TextEncoder().encode(str);
374
+ const len = Math.min(encoded.length, maxBytes - 1);
375
+ HEAPU8.set(encoded.subarray(0, len), outPtr);
376
+ HEAPU8[outPtr + len] = 0;
377
+ },
378
+ stringToUTF16(str, outPtr, maxBytes) {
379
+ const u16 = new Uint16Array(heap, outPtr, maxBytes >> 1);
380
+ for (let i = 0; i < str.length && i < (maxBytes >> 1) - 1; i++) {
381
+ u16[i] = str.charCodeAt(i);
382
+ }
383
+ if (str.length < maxBytes >> 1) u16[str.length] = 0;
384
+ },
385
+ lengthBytesUTF8(str) {
386
+ return new TextEncoder().encode(str).length;
387
+ },
388
+ lengthBytesUTF16(str) {
389
+ return str.length * 2;
390
+ }
391
+ };
392
+ return module;
393
+ }
394
+
395
+ export { createMockModule };
396
+ //# sourceMappingURL=WasmMock-2I3GVRQF.mjs.map
397
+ //# sourceMappingURL=WasmMock-2I3GVRQF.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/WasmMock.ts"],"names":[],"mappings":"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","file":"WasmMock-2I3GVRQF.mjs","sourcesContent":["import type { WasmModule } from '../types';\n\n/**\n * Creates a mock PDFium module for development/testing environments\n * where the real WASM binary cannot be loaded (Node.js, jsdom, etc.).\n *\n * The mock exercises the full API surface with basic PDF structure\n * parsing, but does NOT perform real rendering or text extraction.\n */\nexport function createMockModule(): WasmModule {\n const heap = new ArrayBuffer(256 * 1024 * 1024);\n const HEAPU8 = new Uint8Array(heap);\n const HEAPU32 = new Uint32Array(heap);\n const HEAP32 = new Int32Array(heap);\n const HEAPF32 = new Float32Array(heap);\n const HEAPF64 = new Float64Array(heap);\n\n let nextPtr = 1024;\n\n function malloc(size: number): number {\n const aligned = (size + 7) & ~7;\n const ptr = nextPtr;\n nextPtr += aligned;\n return ptr;\n }\n\n function free(_ptr: number): void {}\n\n const documents = new Map<number, { data: Uint8Array; pageCount: number; password: string | null }>();\n let nextDocHandle = 100;\n let lastError = 0;\n\n const pages = new Map<number, { docHandle: number; pageIndex: number; width: number; height: number }>();\n let nextPageHandle = 1000;\n\n const textPages = new Map<number, { pageHandle: number; text: string }>();\n let nextTextPageHandle = 5000;\n\n const bitmaps = new Map<number, { width: number; height: number; buffer: number; stride: number }>();\n let nextBitmapHandle = 10000;\n\n interface SearchState { tpHandle: number; needle: string; caseSensitive: boolean; pos: number; matchIdx: number; matchLen: number; }\n const searches = new Map<number, SearchState>();\n let nextSearchHandle = 20000;\n\n const module: WasmModule = {\n HEAPU8, HEAPU32, HEAP32, HEAPF32, HEAPF64,\n _malloc: malloc,\n _free: free,\n\n _FPDF_InitLibraryWithConfig(_configPtr: number) {},\n _FPDF_DestroyLibrary() { documents.clear(); pages.clear(); textPages.clear(); bitmaps.clear(); },\n\n _FPDF_LoadMemDocument(buf: number, size: number, password: number): number {\n const data = HEAPU8.slice(buf, buf + size);\n const header = String.fromCharCode(...data.slice(0, 5));\n if (header !== '%PDF-') { lastError = 1; return 0; }\n const handle = nextDocHandle++;\n const pw = password ? module.UTF8ToString(password) : null;\n const content = new TextDecoder().decode(data);\n const pageMatches = content.match(/\\/Type\\s*\\/Page[^s]/g);\n const pageCount = pageMatches ? pageMatches.length : 1;\n documents.set(handle, { data, pageCount, password: pw });\n lastError = 0;\n return handle;\n },\n\n _FPDF_CloseDocument(doc: number) { documents.delete(doc); },\n _FPDF_GetLastError() { return lastError; },\n _FPDF_GetPageCount(doc: number) { return documents.get(doc)?.pageCount ?? 0; },\n\n _FPDF_LoadPage(doc: number, pageIndex: number): number {\n const d = documents.get(doc);\n if (!d || pageIndex < 0 || pageIndex >= d.pageCount) return 0;\n const handle = nextPageHandle++;\n pages.set(handle, { docHandle: doc, pageIndex, width: 612, height: 792 });\n return handle;\n },\n _FPDF_ClosePage(page: number) { pages.delete(page); },\n _FPDF_GetPageWidthF(page: number) { return pages.get(page)?.width ?? 0; },\n _FPDF_GetPageHeightF(page: number) { return pages.get(page)?.height ?? 0; },\n\n _FPDFBitmap_Create(width: number, height: number, _alpha: number): number {\n const stride = width * 4;\n const bufSize = stride * height;\n const buffer = malloc(bufSize);\n HEAPU8.fill(255, buffer, buffer + bufSize);\n const handle = nextBitmapHandle++;\n bitmaps.set(handle, { width, height, buffer, stride });\n return handle;\n },\n _FPDFBitmap_FillRect(bitmap: number, left: number, top: number, width: number, height: number, color: number) {\n const bmp = bitmaps.get(bitmap);\n if (!bmp) return;\n const r = (color >> 24) & 0xff, g = (color >> 16) & 0xff, b = (color >> 8) & 0xff, a = color & 0xff;\n for (let y = top; y < top + height && y < bmp.height; y++) {\n for (let x = left; x < left + width && x < bmp.width; x++) {\n const offset = bmp.buffer + y * bmp.stride + x * 4;\n HEAPU8[offset] = b; HEAPU8[offset + 1] = g; HEAPU8[offset + 2] = r; HEAPU8[offset + 3] = a;\n }\n }\n },\n _FPDFBitmap_GetBuffer(bitmap: number) { return bitmaps.get(bitmap)?.buffer ?? 0; },\n _FPDFBitmap_GetStride(bitmap: number) { return bitmaps.get(bitmap)?.stride ?? 0; },\n _FPDFBitmap_Destroy(bitmap: number) { bitmaps.delete(bitmap); },\n\n _FPDF_RenderPageBitmap() {},\n\n _FPDFText_LoadPage(page: number): number {\n if (!pages.has(page)) return 0;\n const handle = nextTextPageHandle++;\n textPages.set(handle, { pageHandle: page, text: 'Sample PDF text content for page.' });\n return handle;\n },\n _FPDFText_ClosePage(textPage: number) { textPages.delete(textPage); },\n _FPDFText_CountChars(textPage: number) { return textPages.get(textPage)?.text.length ?? 0; },\n _FPDFText_GetUnicode(textPage: number, index: number) {\n const tp = textPages.get(textPage);\n return tp ? tp.text.charCodeAt(index) : 0;\n },\n _FPDFText_GetFontSize(textPage: number, _index: number) { return textPages.has(textPage) ? 12.0 : 0; },\n _FPDFText_GetCharBox(textPage: number, index: number, leftPtr: number, rightPtr: number, bottomPtr: number, topPtr: number): number {\n if (!textPages.has(textPage)) return 0;\n const charWidth = 7.2;\n const x = (index % 80) * charWidth;\n const y = 792 - Math.floor(index / 80) * 14;\n HEAPF64[leftPtr >> 3] = x;\n HEAPF64[rightPtr >> 3] = x + charWidth;\n HEAPF64[bottomPtr >> 3] = y - 12;\n HEAPF64[topPtr >> 3] = y;\n return 1;\n },\n _FPDFText_GetText(textPage: number, startIndex: number, count: number, buf: number): number {\n const tp = textPages.get(textPage);\n if (!tp) return 0;\n const sub = tp.text.slice(startIndex, startIndex + count);\n module.stringToUTF16(sub, buf, (count + 1) * 2);\n return sub.length;\n },\n _FPDFText_FindStart(textPage: number, findWhat: number, flags: number, startIndex: number): number {\n const tp = textPages.get(textPage);\n if (!tp) return 0;\n const query = module.UTF16ToString(findWhat);\n const caseSensitive = (flags & 0x01) !== 0;\n const handle = nextSearchHandle++;\n searches.set(handle, { tpHandle: textPage, needle: query, caseSensitive, pos: startIndex, matchIdx: -1, matchLen: query.length });\n return handle;\n },\n _FPDFText_FindNext(findHandle: number): number {\n const state = searches.get(findHandle);\n if (!state) return 0;\n const tp = textPages.get(state.tpHandle);\n if (!tp) return 0;\n const text = state.caseSensitive ? tp.text : tp.text.toLowerCase();\n const needle = state.caseSensitive ? state.needle : state.needle.toLowerCase();\n const idx = text.indexOf(needle, state.pos);\n if (idx < 0) { state.matchIdx = -1; return 0; }\n state.matchIdx = idx;\n state.pos = idx + 1;\n return 1;\n },\n _FPDFText_FindClose(findHandle: number) { searches.delete(findHandle); },\n _FPDFText_GetSchResultIndex(findHandle: number): number { return searches.get(findHandle)?.matchIdx ?? -1; },\n _FPDFText_GetSchCount(findHandle: number): number { return searches.get(findHandle)?.matchLen ?? 0; },\n _FPDFText_CountRects(textPage: number, _startIndex: number, _count: number): number { return textPages.has(textPage) ? 1 : 0; },\n _FPDFText_GetRect(textPage: number, _rectIndex: number, leftPtr: number, topPtr: number, rightPtr: number, bottomPtr: number): number {\n if (!textPages.has(textPage)) return 0;\n HEAPF64[leftPtr >> 3] = 72; HEAPF64[topPtr >> 3] = 720;\n HEAPF64[rightPtr >> 3] = 540; HEAPF64[bottomPtr >> 3] = 708;\n return 1;\n },\n\n _FPDF_GetMetaText(doc: number, tag: number, buf: number, bufLen: number): number {\n if (!documents.has(doc)) return 0;\n const tagStr = module.UTF8ToString(tag);\n const meta: Record<string, string> = {\n Title: 'Untitled', Author: '', Subject: '', Keywords: '',\n Creator: 'pdfnova', Producer: 'pdfnova', CreationDate: '', ModDate: '',\n };\n const value = meta[tagStr] ?? '';\n if (bufLen === 0) return (value.length + 1) * 2;\n module.stringToUTF16(value, buf, bufLen);\n return (value.length + 1) * 2;\n },\n\n _FPDFBookmark_GetFirstChild(_doc: number, _bookmark: number) { return 0; },\n _FPDFBookmark_GetNextSibling(_doc: number, _bookmark: number) { return 0; },\n _FPDFBookmark_GetTitle(_bookmark: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFBookmark_GetAction(_bookmark: number) { return 0; },\n _FPDFBookmark_GetDest(_doc: number, _bookmark: number) { return 0; },\n _FPDFDest_GetDestPageIndex(_doc: number, _dest: number) { return 0; },\n\n _FPDFLink_LoadWebLinks(_textPage: number) { return 0; },\n _FPDFLink_CountWebLinks(_linkPage: number) { return 0; },\n _FPDFLink_GetURL(_linkPage: number, _linkIndex: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFLink_CountRects(_linkPage: number, _linkIndex: number) { return 0; },\n _FPDFLink_GetRect() {},\n _FPDFLink_CloseWebLinks(_linkPage: number) {},\n\n _FPDFPage_GetAnnotCount(page: number) { return pages.has(page) ? 0 : 0; },\n _FPDFPage_GetAnnot(_page: number, _index: number) { return 0; },\n _FPDFPage_CreateAnnot(_page: number, _subtype: number) { return malloc(8); },\n _FPDFPage_RemoveAnnot(_page: number, _index: number) { return 1; },\n _FPDFAnnot_GetSubtype(_annot: number) { return 0; },\n _FPDFAnnot_GetRect(_annot: number, _rect: number) { return 1; },\n _FPDFAnnot_SetRect(_annot: number, _rect: number) { return 1; },\n _FPDFAnnot_GetColor(_annot: number, _type: number, _r: number, _g: number, _b: number, _a: number) { return 1; },\n _FPDFAnnot_SetColor(_annot: number, _type: number, _r: number, _g: number, _b: number, _a: number) { return 1; },\n _FPDFAnnot_GetStringValue(_annot: number, _key: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFAnnot_SetStringValue(_annot: number, _key: number, _value: number) { return 1; },\n _FPDFAnnot_AppendAttachmentPoints(_annot: number, _points: number) { return 1; },\n _FPDFAnnot_CountAttachmentPoints(_annot: number) { return 0; },\n _FPDFAnnot_GetAttachmentPoints(_annot: number, _index: number, _points: number) { return 1; },\n _FPDFPage_CloseAnnot(_annot: number) {},\n\n _FPDFDOC_InitFormFillEnvironment(_doc: number, _formInfo: number) { return malloc(8); },\n _FPDFDOC_ExitFormFillEnvironment(_formHandle: number) {},\n _FPDF_GetFormType(_doc: number) { return 0; },\n _FPDFPage_HasFormFieldAtPoint(_formHandle: number, _page: number, _x: number, _y: number) { return -1; },\n _FORM_OnMouseMove(_formHandle: number, _page: number, _modifier: number, _x: number, _y: number) {},\n\n _FPDFAnnot_GetFormFieldType(_formHandle: number, _annot: number) { return -1; },\n _FPDFAnnot_GetFormFieldName(_formHandle: number, _annot: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFAnnot_GetFormFieldValue(_formHandle: number, _annot: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFAnnot_SetFormFieldValue(_formHandle: number, _annot: number, _value: number) {},\n _FPDFAnnot_GetFormFieldFlags(_formHandle: number, _annot: number) { return 0; },\n _FPDFAnnot_IsChecked(_formHandle: number, _annot: number) { return 0; },\n\n _FPDFPage_Flatten(_page: number, _usage: number) { return 1; },\n\n _FPDF_SaveAsCopy(_doc: number, _writer: number, _flags: number) { return 1; },\n _FPDF_SaveWithVersion(_doc: number, _writer: number, _flags: number, _version: number) { return 1; },\n\n _FPDF_GetSignatureCount(_doc: number) { return 0; },\n _FPDF_GetSignatureObject(_doc: number, _index: number) { return 0; },\n _FPDFSignObj_GetContents(_sig: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFSignObj_GetByteRange(_sig: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFSignObj_GetSubFilter(_sig: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFSignObj_GetReason(_sig: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFSignObj_GetTime(_sig: number, _buf: number, _bufLen: number) { return 0; },\n _FPDFSignObj_GetDocMDPPermission(_sig: number) { return 0; },\n\n UTF8ToString(ptr: number): string {\n let end = ptr;\n while (HEAPU8[end] !== 0) end++;\n return new TextDecoder().decode(HEAPU8.slice(ptr, end));\n },\n UTF16ToString(ptr: number): string {\n const u16 = new Uint16Array(heap, ptr);\n let str = '';\n for (let i = 0; u16[i] !== 0; i++) str += String.fromCharCode(u16[i]);\n return str;\n },\n stringToUTF8(str: string, outPtr: number, maxBytes: number) {\n const encoded = new TextEncoder().encode(str);\n const len = Math.min(encoded.length, maxBytes - 1);\n HEAPU8.set(encoded.subarray(0, len), outPtr);\n HEAPU8[outPtr + len] = 0;\n },\n stringToUTF16(str: string, outPtr: number, maxBytes: number) {\n const u16 = new Uint16Array(heap, outPtr, maxBytes >> 1);\n for (let i = 0; i < str.length && i < (maxBytes >> 1) - 1; i++) {\n u16[i] = str.charCodeAt(i);\n }\n if (str.length < (maxBytes >> 1)) u16[str.length] = 0;\n },\n lengthBytesUTF8(str: string): number {\n return new TextEncoder().encode(str).length;\n },\n lengthBytesUTF16(str: string): number {\n return str.length * 2;\n },\n };\n\n return module;\n}\n"]}