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