kordoc 4.0.6 → 4.0.8

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 (86) hide show
  1. package/README.md +823 -806
  2. package/dist/{-NDU7YGSS.js → -LE4RLXVA.js} +8 -8
  3. package/dist/{chunk-5SOZXPQY.js → chunk-2DZQF6YJ.js} +3 -3
  4. package/dist/chunk-2DZQF6YJ.js.map +1 -0
  5. package/dist/{chunk-6GBLFQMA.js → chunk-5RPYBC2Q.js} +1 -1
  6. package/dist/chunk-5RPYBC2Q.js.map +1 -0
  7. package/dist/{chunk-DQJTNXVS.cjs → chunk-6XAAYAWL.cjs} +142 -3
  8. package/dist/chunk-6XAAYAWL.cjs.map +1 -0
  9. package/dist/{chunk-HC2SEH6I.js → chunk-7S3M4N4E.js} +939 -946
  10. package/dist/chunk-7S3M4N4E.js.map +1 -0
  11. package/dist/{chunk-4C7SBZNW.js → chunk-BNU5QGIZ.js} +2 -2
  12. package/dist/chunk-BNU5QGIZ.js.map +1 -0
  13. package/dist/{chunk-63ASYC4N.js → chunk-D35VBACN.js} +3 -3
  14. package/dist/chunk-D35VBACN.js.map +1 -0
  15. package/dist/chunk-DCZVOIEO.cjs.map +1 -1
  16. package/dist/chunk-GS7T56RP.cjs.map +1 -1
  17. package/dist/{chunk-L3I4TIRP.js → chunk-HMUEU7D7.js} +2 -2
  18. package/dist/chunk-HMUEU7D7.js.map +1 -0
  19. package/dist/{chunk-5CJGKKMZ.js → chunk-MEPHGCPQ.js} +1 -1
  20. package/dist/chunk-MEPHGCPQ.js.map +1 -0
  21. package/dist/chunk-MOL7MDBG.js +0 -0
  22. package/dist/{chunk-HOGJ5ALY.js → chunk-OQPILS7B.js} +142 -3
  23. package/dist/chunk-OQPILS7B.js.map +1 -0
  24. package/dist/{chunk-KA4FEBS2.js → chunk-RROH5WHO.js} +2 -2
  25. package/dist/chunk-RROH5WHO.js.map +1 -0
  26. package/dist/{chunk-UVSOSFER.js → chunk-UEIYETCQ.js} +142 -3
  27. package/dist/chunk-UEIYETCQ.js.map +1 -0
  28. package/dist/cli.js +15 -15
  29. package/dist/cli.js.map +1 -1
  30. package/dist/{detect-PJZMUL2Z.js → detect-RI2MQ33K.js} +2 -2
  31. package/dist/formula-5NKVS2LR.cjs.map +1 -1
  32. package/dist/formula-JCNF43NE.js +0 -0
  33. package/dist/index.cjs +1248 -1255
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +1 -1
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.js +925 -932
  38. package/dist/index.js.map +1 -1
  39. package/dist/mcp.js +13 -13
  40. package/dist/mcp.js.map +1 -1
  41. package/dist/page-range-737B4EZW.js +0 -0
  42. package/dist/page-range-P7SDW6LR.cjs.map +1 -1
  43. package/dist/{parser-VEY4B5CJ.cjs → parser-ITMU2WN5.cjs} +231 -37
  44. package/dist/parser-ITMU2WN5.cjs.map +1 -0
  45. package/dist/{parser-DMKHIV4E.js → parser-KMMUS73Q.js} +200 -6
  46. package/dist/parser-KMMUS73Q.js.map +1 -0
  47. package/dist/{parser-C636QIOB.js → parser-TCTCSBYZ.js} +202 -8
  48. package/dist/parser-TCTCSBYZ.js.map +1 -0
  49. package/dist/{profile-io-JYGCC6XQ.js → profile-io-SLN4P76T.js} +3 -3
  50. package/dist/{provider-H4WWSPOV.js → provider-4ZJKV3DC.js} +1 -1
  51. package/dist/provider-4ZJKV3DC.js.map +1 -0
  52. package/dist/{provider-7H4CPZYS.js → provider-AKROB7WQ.js} +1 -1
  53. package/dist/provider-AKROB7WQ.js.map +1 -0
  54. package/dist/{provider-5K7O3Z2O.cjs → provider-G4C2V2PD.cjs} +1 -1
  55. package/dist/provider-G4C2V2PD.cjs.map +1 -0
  56. package/dist/render-25BT623I.js +10 -0
  57. package/dist/seal-R4TETA4C.js +10 -0
  58. package/dist/setup-57FB3LSP.js +0 -0
  59. package/dist/{watch-ZQUFJBFR.js → watch-OHQWSVPE.js} +8 -8
  60. package/dist/watch-OHQWSVPE.js.map +1 -0
  61. package/package.json +97 -97
  62. package/dist/chunk-4C7SBZNW.js.map +0 -1
  63. package/dist/chunk-5CJGKKMZ.js.map +0 -1
  64. package/dist/chunk-5SOZXPQY.js.map +0 -1
  65. package/dist/chunk-63ASYC4N.js.map +0 -1
  66. package/dist/chunk-6GBLFQMA.js.map +0 -1
  67. package/dist/chunk-DQJTNXVS.cjs.map +0 -1
  68. package/dist/chunk-HC2SEH6I.js.map +0 -1
  69. package/dist/chunk-HOGJ5ALY.js.map +0 -1
  70. package/dist/chunk-KA4FEBS2.js.map +0 -1
  71. package/dist/chunk-L3I4TIRP.js.map +0 -1
  72. package/dist/chunk-UVSOSFER.js.map +0 -1
  73. package/dist/parser-C636QIOB.js.map +0 -1
  74. package/dist/parser-DMKHIV4E.js.map +0 -1
  75. package/dist/parser-VEY4B5CJ.cjs.map +0 -1
  76. package/dist/provider-5K7O3Z2O.cjs.map +0 -1
  77. package/dist/provider-7H4CPZYS.js.map +0 -1
  78. package/dist/provider-H4WWSPOV.js.map +0 -1
  79. package/dist/render-ISOEOMTM.js +0 -10
  80. package/dist/seal-676ZIAZZ.js +0 -10
  81. package/dist/watch-ZQUFJBFR.js.map +0 -1
  82. /package/dist/{-NDU7YGSS.js.map → -LE4RLXVA.js.map} +0 -0
  83. /package/dist/{detect-PJZMUL2Z.js.map → detect-RI2MQ33K.js.map} +0 -0
  84. /package/dist/{profile-io-JYGCC6XQ.js.map → profile-io-SLN4P76T.js.map} +0 -0
  85. /package/dist/{render-ISOEOMTM.js.map → render-25BT623I.js.map} +0 -0
  86. /package/dist/{seal-676ZIAZZ.js.map → seal-R4TETA4C.js.map} +0 -0
@@ -3,8 +3,9 @@ import {
3
3
  HEADING_RATIO_H1,
4
4
  HEADING_RATIO_H2,
5
5
  HEADING_RATIO_H3,
6
- blocksToMarkdown
7
- } from "./chunk-UVSOSFER.js";
6
+ blocksToMarkdown,
7
+ encodePng
8
+ } from "./chunk-UEIYETCQ.js";
8
9
  import {
9
10
  parsePageRange
10
11
  } from "./chunk-MOL7MDBG.js";
@@ -12,7 +13,7 @@ import {
12
13
  KordocError,
13
14
  safeMax,
14
15
  safeMin
15
- } from "./chunk-L3I4TIRP.js";
16
+ } from "./chunk-HMUEU7D7.js";
16
17
 
17
18
  // src/pdf/line-extract.ts
18
19
  import { OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
@@ -1223,10 +1224,180 @@ function normalizeUndersegmentedTable(originalCells, colXs, items) {
1223
1224
  return rebuilt;
1224
1225
  }
1225
1226
 
1227
+ // src/pdf/image-extract.ts
1228
+ import { OPS as OPS3, ImageKind } from "pdfjs-dist/legacy/build/pdf.mjs";
1229
+ var IMAGE_RESOLVE_TIMEOUT_MS = 5e3;
1230
+ function resolveImgData(page, objId) {
1231
+ const store = objId.startsWith("g_") ? page.commonObjs : page.objs;
1232
+ return new Promise((resolve) => {
1233
+ let done = false;
1234
+ const timer = setTimeout(() => {
1235
+ if (!done) {
1236
+ done = true;
1237
+ resolve(null);
1238
+ }
1239
+ }, IMAGE_RESOLVE_TIMEOUT_MS);
1240
+ try {
1241
+ store.get(objId, (data) => {
1242
+ if (!done) {
1243
+ done = true;
1244
+ clearTimeout(timer);
1245
+ resolve(data ?? null);
1246
+ }
1247
+ });
1248
+ } catch {
1249
+ if (!done) {
1250
+ done = true;
1251
+ clearTimeout(timer);
1252
+ resolve(null);
1253
+ }
1254
+ }
1255
+ });
1256
+ }
1257
+ var MIN_DIM = 8;
1258
+ var MAX_PIXELS = 36e6;
1259
+ var MAX_IMAGES_PER_DOC = 200;
1260
+ var MAX_TOTAL_IMAGE_BYTES = 128 * 1024 * 1024;
1261
+ function createPdfImageState() {
1262
+ return { imageIndex: 0, totalBytes: 0, seen: /* @__PURE__ */ new Map(), capWarned: false };
1263
+ }
1264
+ function fnv1a(data) {
1265
+ let h = 2166136261;
1266
+ for (let i = 0; i < data.length; i++) {
1267
+ h ^= data[i];
1268
+ h = Math.imul(h, 16777619);
1269
+ }
1270
+ return h >>> 0;
1271
+ }
1272
+ function toRgba(img) {
1273
+ const { width: w, height: h, kind, data } = img;
1274
+ if (!data || !w || !h) return null;
1275
+ const rgba = new Uint8Array(w * h * 4);
1276
+ if (kind === ImageKind.RGBA_32BPP) {
1277
+ if (data.length < w * h * 4) return null;
1278
+ rgba.set(data.subarray(0, w * h * 4));
1279
+ return rgba;
1280
+ }
1281
+ if (kind === ImageKind.RGB_24BPP) {
1282
+ if (data.length < w * h * 3) return null;
1283
+ for (let i = 0, s = 0, d = 0; i < w * h; i++, s += 3, d += 4) {
1284
+ rgba[d] = data[s];
1285
+ rgba[d + 1] = data[s + 1];
1286
+ rgba[d + 2] = data[s + 2];
1287
+ rgba[d + 3] = 255;
1288
+ }
1289
+ return rgba;
1290
+ }
1291
+ if (kind === ImageKind.GRAYSCALE_1BPP) {
1292
+ const stride = w + 7 >> 3;
1293
+ if (data.length < stride * h) return null;
1294
+ for (let y = 0; y < h; y++) {
1295
+ for (let x = 0; x < w; x++) {
1296
+ const bit = data[y * stride + (x >> 3)] >> 7 - (x & 7) & 1;
1297
+ const v = bit ? 255 : 0;
1298
+ const d = (y * w + x) * 4;
1299
+ rgba[d] = v;
1300
+ rgba[d + 1] = v;
1301
+ rgba[d + 2] = v;
1302
+ rgba[d + 3] = 255;
1303
+ }
1304
+ }
1305
+ return rgba;
1306
+ }
1307
+ return null;
1308
+ }
1309
+ async function extractPageImages(page, fnArray, argsArray, pageNumber, state, warnings) {
1310
+ const blocks = [];
1311
+ const images = [];
1312
+ const pageSeenIds = /* @__PURE__ */ new Set();
1313
+ for (let i = 0; i < fnArray.length; i++) {
1314
+ const op = fnArray[i];
1315
+ let imgData = null;
1316
+ let dedupeId = null;
1317
+ if (op === OPS3.paintImageXObject || op === OPS3.paintImageXObjectRepeat) {
1318
+ const objId = argsArray[i]?.[0];
1319
+ if (typeof objId !== "string" || pageSeenIds.has(objId)) continue;
1320
+ pageSeenIds.add(objId);
1321
+ dedupeId = objId;
1322
+ imgData = await resolveImgData(page, objId);
1323
+ } else if (op === OPS3.paintInlineImageXObject) {
1324
+ imgData = argsArray[i]?.[0];
1325
+ } else {
1326
+ continue;
1327
+ }
1328
+ if (!imgData?.data || !imgData.width || !imgData.height) continue;
1329
+ const { width: w, height: h } = imgData;
1330
+ if (w < MIN_DIM || h < MIN_DIM) continue;
1331
+ if (w * h > MAX_PIXELS) {
1332
+ warnings.push({ page: pageNumber, message: `\uC774\uBBF8\uC9C0 \uD06C\uAE30 \uCD08\uACFC\uB85C \uCD94\uCD9C \uC0DD\uB7B5 (${w}\xD7${h})`, code: "SKIPPED_IMAGE" });
1333
+ continue;
1334
+ }
1335
+ const hash = `${w}x${h}k${imgData.kind ?? "?"}h${fnv1a(imgData.data)}${dedupeId ? "" : "inline"}`;
1336
+ if (state.seen.has(hash)) continue;
1337
+ if (state.imageIndex >= MAX_IMAGES_PER_DOC || state.totalBytes >= MAX_TOTAL_IMAGE_BYTES) {
1338
+ if (!state.capWarned) {
1339
+ state.capWarned = true;
1340
+ warnings.push({ page: pageNumber, message: `\uC774\uBBF8\uC9C0 \uCD94\uCD9C \uC0C1\uD55C \uB3C4\uB2EC (${MAX_IMAGES_PER_DOC}\uAC1C/128MB) \u2014 \uC774\uD6C4 \uC774\uBBF8\uC9C0 \uC0DD\uB7B5`, code: "SKIPPED_IMAGE" });
1341
+ }
1342
+ continue;
1343
+ }
1344
+ const rgba = toRgba(imgData);
1345
+ if (!rgba) continue;
1346
+ const png = encodePng(w, h, rgba);
1347
+ state.imageIndex++;
1348
+ state.totalBytes += png.length;
1349
+ const filename = `image_${String(state.imageIndex).padStart(3, "0")}.png`;
1350
+ state.seen.set(hash, filename);
1351
+ images.push({ filename, data: png, mimeType: "image/png" });
1352
+ blocks.push({ type: "image", text: filename, pageNumber });
1353
+ }
1354
+ return { blocks, images };
1355
+ }
1356
+ function injectPageImageBlocks(blocks, pageImages) {
1357
+ if (pageImages.size === 0) return;
1358
+ const lastIndexForPage = /* @__PURE__ */ new Map();
1359
+ for (let i = 0; i < blocks.length; i++) {
1360
+ const p = blocks[i].pageNumber;
1361
+ if (p !== void 0) lastIndexForPage.set(p, i);
1362
+ }
1363
+ const pageAtIndex = /* @__PURE__ */ new Map();
1364
+ for (const [p, last] of lastIndexForPage) pageAtIndex.set(last, p);
1365
+ const result = [];
1366
+ const injected = /* @__PURE__ */ new Set();
1367
+ for (let i = 0; i < blocks.length; i++) {
1368
+ result.push(blocks[i]);
1369
+ const p = pageAtIndex.get(i);
1370
+ if (p !== void 0 && pageImages.has(p)) {
1371
+ result.push(...pageImages.get(p));
1372
+ injected.add(p);
1373
+ }
1374
+ }
1375
+ for (const p of [...pageImages.keys()].sort((a, b) => a - b)) {
1376
+ if (injected.has(p)) continue;
1377
+ let at = result.length;
1378
+ for (let i = 0; i < result.length; i++) {
1379
+ const bp = result[i].pageNumber;
1380
+ if (bp !== void 0 && bp > p) {
1381
+ at = i;
1382
+ break;
1383
+ }
1384
+ }
1385
+ result.splice(at, 0, ...pageImages.get(p));
1386
+ }
1387
+ blocks.length = 0;
1388
+ blocks.push(...result);
1389
+ }
1390
+
1226
1391
  // src/pdf/quality.ts
1392
+ var RARE_JONG = /* @__PURE__ */ new Set([3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 18, 24, 25, 26]);
1393
+ var MOJIBAKE_MIN_HANGUL = 30;
1394
+ var MOJIBAKE_MAX_NOBATCHIM = 0.15;
1395
+ var MOJIBAKE_MIN_RAREBATCHIM = 0.25;
1227
1396
  function computePageQuality(page, text) {
1228
1397
  let total = 0;
1229
1398
  let hangul = 0;
1399
+ let hangulNoBatchim = 0;
1400
+ let hangulRareBatchim = 0;
1230
1401
  let control = 0;
1231
1402
  let replacement = 0;
1232
1403
  let pua = 0;
@@ -1244,6 +1415,9 @@ function computePageQuality(page, text) {
1244
1415
  }
1245
1416
  if (code >= 44032 && code <= 55203) {
1246
1417
  hangul++;
1418
+ const jong = (code - 44032) % 28;
1419
+ if (jong === 0) hangulNoBatchim++;
1420
+ else if (RARE_JONG.has(jong)) hangulRareBatchim++;
1247
1421
  continue;
1248
1422
  }
1249
1423
  if (code >= 57344 && code <= 63743 || code >= 56192 && code <= 56319) {
@@ -1255,6 +1429,9 @@ function computePageQuality(page, text) {
1255
1429
  const puaRatio = pua / denom;
1256
1430
  const controlCharRatio = control / denom;
1257
1431
  const replacementCharRatio = replacement / denom;
1432
+ const hangulNoBatchimRatio = hangul > 0 ? hangulNoBatchim / hangul : 0;
1433
+ const hangulRareBatchimRatio = hangul > 0 ? hangulRareBatchim / hangul : 0;
1434
+ const garbledHangul = hangul >= MOJIBAKE_MIN_HANGUL && hangulNoBatchimRatio < MOJIBAKE_MAX_NOBATCHIM && hangulRareBatchimRatio >= MOJIBAKE_MIN_RAREBATCHIM;
1258
1435
  let needsOcr = false;
1259
1436
  let ocrReason;
1260
1437
  if (total < LOW_TEXT_THRESHOLD) {
@@ -1269,6 +1446,9 @@ function computePageQuality(page, text) {
1269
1446
  } else if (replacementCharRatio >= HIGH_REPLACEMENT_THRESHOLD) {
1270
1447
  needsOcr = true;
1271
1448
  ocrReason = "high_replacement";
1449
+ } else if (garbledHangul) {
1450
+ needsOcr = true;
1451
+ ocrReason = "garbled_hangul";
1272
1452
  }
1273
1453
  return {
1274
1454
  page,
@@ -1277,6 +1457,8 @@ function computePageQuality(page, text) {
1277
1457
  controlCharRatio,
1278
1458
  replacementCharRatio,
1279
1459
  puaRatio,
1460
+ hangulNoBatchimRatio,
1461
+ hangulRareBatchimRatio,
1280
1462
  needsOcr,
1281
1463
  ocrReason
1282
1464
  };
@@ -3568,6 +3750,9 @@ async function parsePdfDocument(buffer, options) {
3568
3750
  const pageHeights = /* @__PURE__ */ new Map();
3569
3751
  const pagesWithLargeImage = /* @__PURE__ */ new Set();
3570
3752
  const skippedImagePages = /* @__PURE__ */ new Map();
3753
+ const imageState = createPdfImageState();
3754
+ const extractedImages = [];
3755
+ const pageImageBlocks = /* @__PURE__ */ new Map();
3571
3756
  let parsedPages = 0;
3572
3757
  for (let i = 1; i <= effectivePageCount; i++) {
3573
3758
  if (pageFilter && !pageFilter.has(i)) continue;
@@ -3605,6 +3790,12 @@ async function parsePdfDocument(buffer, options) {
3605
3790
  }
3606
3791
  const pageBlocks = extractPageBlocksWithLines(visible, i, opList, viewport.width, viewport.height);
3607
3792
  for (const b of pageBlocks) blocks.push(b);
3793
+ try {
3794
+ const { blocks: imgBlocks, images: pageImages } = await extractPageImages(page, opList.fnArray, opList.argsArray, i, imageState, warnings);
3795
+ if (imgBlocks.length > 0) pageImageBlocks.set(i, imgBlocks);
3796
+ extractedImages.push(...pageImages);
3797
+ } catch {
3798
+ }
3608
3799
  let pageText = "";
3609
3800
  for (const b of pageBlocks) {
3610
3801
  const t = b.text || "";
@@ -3626,11 +3817,11 @@ async function parsePdfDocument(buffer, options) {
3626
3817
  if (totalChars / Math.max(parsedPageCount, 1) < 10) {
3627
3818
  if (options?.ocr) {
3628
3819
  try {
3629
- const { ocrPages } = await import("./provider-7H4CPZYS.js");
3820
+ const { ocrPages } = await import("./provider-AKROB7WQ.js");
3630
3821
  const ocrBlocks = await ocrPages(doc, options.ocr, pageFilter, effectivePageCount);
3631
3822
  if (ocrBlocks.length > 0) {
3632
3823
  const ocrMarkdown = ocrBlocks.map((b) => b.text || "").filter(Boolean).join("\n\n");
3633
- return { markdown: ocrMarkdown, blocks: ocrBlocks, metadata, warnings, isImageBased: true, pageQuality, qualitySummary: summarizeDocumentQuality(pageQuality) };
3824
+ return { markdown: ocrMarkdown, blocks: ocrBlocks, metadata, warnings, isImageBased: true, pageQuality, qualitySummary: summarizeDocumentQuality(pageQuality), images: extractedImages.length > 0 ? extractedImages : void 0 };
3634
3825
  }
3635
3826
  } catch {
3636
3827
  }
@@ -3646,7 +3837,8 @@ async function parsePdfDocument(buffer, options) {
3646
3837
  low_text: "\uD14D\uC2A4\uD2B8\uAC00 \uAC70\uC758 \uC5C6\uB294 \uD398\uC774\uC9C0 (\uC2A4\uCE94/\uC774\uBBF8\uC9C0 \uCD94\uC815)",
3647
3838
  high_pua: "\uAE00\uAF34 \uB9E4\uD551 \uC2E4\uD328 (PUA \uBE44\uC728 \uB192\uC74C) \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
3648
3839
  high_control: "\uC81C\uC5B4\uBB38\uC790 \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
3649
- high_replacement: "\uB300\uCCB4\uBB38\uC790(U+FFFD) \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00"
3840
+ high_replacement: "\uB300\uCCB4\uBB38\uC790(U+FFFD) \uBE44\uC728 \uB192\uC74C \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8 \uC2E0\uB8B0 \uBD88\uAC00",
3841
+ garbled_hangul: "\uAE00\uAF34 \uB9E4\uD551 \uC2E4\uD328 (\uD55C\uAE00 \uC790\uC18C \uBD84\uD3EC \uC774\uC0C1) \u2014 \uCD94\uCD9C \uD14D\uC2A4\uD2B8\uAC00 \uAE68\uC84C\uC744 \uC218 \uC788\uC74C"
3650
3842
  };
3651
3843
  for (const pq of pageQuality) {
3652
3844
  if (!pq.needsOcr || !pq.ocrReason) continue;
@@ -3666,6 +3858,7 @@ async function parsePdfDocument(buffer, options) {
3666
3858
  }
3667
3859
  }
3668
3860
  mergeCrossPageTables(blocks);
3861
+ injectPageImageBlocks(blocks, pageImageBlocks);
3669
3862
  if (options?.formulaOcr && formulaBuffer) {
3670
3863
  try {
3671
3864
  await applyFormulaOcr(formulaBuffer, blocks, pageFilter, effectivePageCount, warnings, options.onProgress);
@@ -3694,7 +3887,8 @@ async function parsePdfDocument(buffer, options) {
3694
3887
  warnings: warnings.length > 0 ? warnings : void 0,
3695
3888
  isImageBased: isImageBased || void 0,
3696
3889
  pageQuality,
3697
- qualitySummary: summarizeDocumentQuality(pageQuality)
3890
+ qualitySummary: summarizeDocumentQuality(pageQuality),
3891
+ images: extractedImages.length > 0 ? extractedImages : void 0
3698
3892
  };
3699
3893
  } finally {
3700
3894
  await doc.destroy().catch(() => {
@@ -3744,4 +3938,4 @@ export {
3744
3938
  parsePdfDocument,
3745
3939
  removeHeaderFooterBlocks
3746
3940
  };
3747
- //# sourceMappingURL=parser-C636QIOB.js.map
3941
+ //# sourceMappingURL=parser-TCTCSBYZ.js.map