@heripo/pdf-parser 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -705,7 +705,13 @@ var DoclingServer = class _DoclingServer {
705
705
  await _DoclingServer.killProcessOnPort(this.logger, this.port);
706
706
  }
707
707
  const doclingServePath = join(this.venvPath, "bin", "docling-serve");
708
- const args = ["run", "--port", this.port.toString()];
708
+ const args = [
709
+ "run",
710
+ "--host",
711
+ "127.0.0.1",
712
+ "--port",
713
+ this.port.toString()
714
+ ];
709
715
  this.logger.info(
710
716
  "[DoclingEnvironment] Starting docling-serve on port",
711
717
  this.port
@@ -812,7 +818,10 @@ var DOCLING_RUNTIME_PACKAGES = [
812
818
  "docling==2.88.0",
813
819
  "docling-core==2.73.0",
814
820
  "docling-ibm-models==3.13.0",
815
- "docling-parse==5.9.0"
821
+ "docling-parse==5.9.0",
822
+ "msgpack==1.1.2",
823
+ "redis==7.4.0",
824
+ "rq==2.8.0"
816
825
  ];
817
826
  var DOCLING_SERVE_RUNTIME_PACKAGES = [
818
827
  "fastapi[standard]<0.130.0",
@@ -820,11 +829,12 @@ var DOCLING_SERVE_RUNTIME_PACKAGES = [
820
829
  "pydantic~=2.10",
821
830
  "pydantic-settings~=2.4",
822
831
  "python-multipart<0.1.0,>=0.0.14",
823
- "typer~=0.12",
832
+ "typer==0.21.2",
824
833
  "uvicorn[standard]<1.0.0,>=0.29.0",
825
834
  "websockets<17.0,>=14.0",
826
835
  "scalar-fastapi>=1.0.3",
827
- "docling-mcp>=1.0.0",
836
+ "docling-mcp==3.4.0",
837
+ "docling-slim==2.95.0",
828
838
  "opentelemetry-api==1.36.0",
829
839
  "opentelemetry-sdk==1.36.0",
830
840
  "opentelemetry-exporter-otlp==1.36.0",
@@ -2875,7 +2885,8 @@ var ChunkedPDFConverter = class {
2875
2885
  };
2876
2886
 
2877
2887
  // src/core/docling-conversion-executor.ts
2878
- import { existsSync as existsSync4, rmSync as rmSync3 } from "fs";
2888
+ import { existsSync as existsSync4, mkdtempSync, rmSync as rmSync3 } from "fs";
2889
+ import { tmpdir } from "os";
2879
2890
  import { join as join7 } from "path";
2880
2891
  var DoclingConversionExecutor = class {
2881
2892
  constructor(logger, client, timeout) {
@@ -2905,89 +2916,85 @@ var DoclingConversionExecutor = class {
2905
2916
  this.logger.info(
2906
2917
  "[PDFConverter] Results will be returned as ZIP to avoid memory limits"
2907
2918
  );
2908
- const { httpUrl, server } = await this.resolveUrl(url);
2919
+ const outputDir = join7(process.cwd(), "output", reportId);
2920
+ const workDir = mkdtempSync(join7(tmpdir(), "heripo-docling-"));
2921
+ const zipPath = join7(workDir, "result.zip");
2922
+ const extractDir = join7(workDir, "result_extracted");
2909
2923
  try {
2910
- const task = await this.startConversionTask(httpUrl, conversionOptions);
2911
- await trackTaskProgress(
2912
- task,
2913
- this.timeout,
2914
- this.logger,
2915
- "[PDFConverter]",
2916
- {
2917
- showDetailedProgress: true
2918
- }
2919
- );
2920
- if (abortSignal?.aborted) {
2921
- this.logger.info(
2922
- "[PDFConverter] Conversion aborted after docling completion"
2924
+ const { httpUrl, server } = await this.resolveUrl(url);
2925
+ try {
2926
+ const task = await this.startConversionTask(httpUrl, conversionOptions);
2927
+ await trackTaskProgress(
2928
+ task,
2929
+ this.timeout,
2930
+ this.logger,
2931
+ "[PDFConverter]",
2932
+ {
2933
+ showDetailedProgress: true
2934
+ }
2923
2935
  );
2924
- const error = new Error("PDF conversion was aborted");
2925
- error.name = "AbortError";
2926
- throw error;
2927
- }
2928
- const cwd2 = process.cwd();
2929
- const zipPath2 = join7(cwd2, "result.zip");
2930
- await downloadTaskResult(
2931
- this.client,
2932
- task.taskId,
2933
- zipPath2,
2934
- this.logger,
2935
- "[PDFConverter]"
2936
- );
2937
- } finally {
2938
- if (server) {
2939
- this.logger.info("[PDFConverter] Stopping local file server...");
2940
- await server.stop();
2941
- }
2942
- }
2943
- const cwd = process.cwd();
2944
- const zipPath = join7(cwd, "result.zip");
2945
- const extractDir = join7(cwd, "result_extracted");
2946
- const outputDir = join7(cwd, "output", reportId);
2947
- try {
2948
- await this.processConvertedFiles(zipPath, extractDir, outputDir);
2949
- if (url.startsWith("file://")) {
2950
- await renderAndUpdatePageImages(
2951
- url.slice(7),
2952
- outputDir,
2936
+ if (abortSignal?.aborted) {
2937
+ this.logger.info(
2938
+ "[PDFConverter] Conversion aborted after docling completion"
2939
+ );
2940
+ const error = new Error("PDF conversion was aborted");
2941
+ error.name = "AbortError";
2942
+ throw error;
2943
+ }
2944
+ await downloadTaskResult(
2945
+ this.client,
2946
+ task.taskId,
2947
+ zipPath,
2953
2948
  this.logger,
2954
2949
  "[PDFConverter]"
2955
2950
  );
2956
- } else {
2957
- this.logger.warn(
2958
- "[PDFConverter] Page image rendering skipped: only supported for local files (file:// URLs)"
2959
- );
2951
+ } finally {
2952
+ if (server) {
2953
+ this.logger.info("[PDFConverter] Stopping local file server...");
2954
+ await server.stop();
2955
+ }
2960
2956
  }
2961
- if (abortSignal?.aborted) {
2962
- this.logger.info("[PDFConverter] Conversion aborted before callback");
2963
- const error = new Error("PDF conversion was aborted");
2964
- error.name = "AbortError";
2965
- throw error;
2957
+ try {
2958
+ await this.processConvertedFiles(zipPath, extractDir, outputDir);
2959
+ if (url.startsWith("file://")) {
2960
+ await renderAndUpdatePageImages(
2961
+ url.slice(7),
2962
+ outputDir,
2963
+ this.logger,
2964
+ "[PDFConverter]"
2965
+ );
2966
+ } else {
2967
+ this.logger.warn(
2968
+ "[PDFConverter] Page image rendering skipped: only supported for local files (file:// URLs)"
2969
+ );
2970
+ }
2971
+ if (abortSignal?.aborted) {
2972
+ this.logger.info("[PDFConverter] Conversion aborted before callback");
2973
+ const error = new Error("PDF conversion was aborted");
2974
+ error.name = "AbortError";
2975
+ throw error;
2976
+ }
2977
+ this.logger.info("[PDFConverter] Executing completion callback...");
2978
+ await onComplete(outputDir);
2979
+ const duration = Date.now() - startTime;
2980
+ this.logger.info("[PDFConverter] Conversion completed successfully!");
2981
+ this.logger.info("[PDFConverter] Total time:", duration, "ms");
2982
+ } finally {
2983
+ if (cleanupAfterCallback) {
2984
+ this.logger.info(
2985
+ "[PDFConverter] Cleaning up output directory:",
2986
+ outputDir
2987
+ );
2988
+ if (existsSync4(outputDir)) {
2989
+ rmSync3(outputDir, { recursive: true, force: true });
2990
+ }
2991
+ } else {
2992
+ this.logger.info("[PDFConverter] Output preserved at:", outputDir);
2993
+ }
2966
2994
  }
2967
- this.logger.info("[PDFConverter] Executing completion callback...");
2968
- await onComplete(outputDir);
2969
- const duration = Date.now() - startTime;
2970
- this.logger.info("[PDFConverter] Conversion completed successfully!");
2971
- this.logger.info("[PDFConverter] Total time:", duration, "ms");
2972
2995
  } finally {
2973
2996
  this.logger.info("[PDFConverter] Cleaning up temporary files...");
2974
- if (existsSync4(zipPath)) {
2975
- rmSync3(zipPath, { force: true });
2976
- }
2977
- if (existsSync4(extractDir)) {
2978
- rmSync3(extractDir, { recursive: true, force: true });
2979
- }
2980
- if (cleanupAfterCallback) {
2981
- this.logger.info(
2982
- "[PDFConverter] Cleaning up output directory:",
2983
- outputDir
2984
- );
2985
- if (existsSync4(outputDir)) {
2986
- rmSync3(outputDir, { recursive: true, force: true });
2987
- }
2988
- } else {
2989
- this.logger.info("[PDFConverter] Output preserved at:", outputDir);
2990
- }
2997
+ rmSync3(workDir, { recursive: true, force: true });
2991
2998
  }
2992
2999
  return null;
2993
3000
  }
@@ -3042,7 +3049,7 @@ var DoclingConversionExecutor = class {
3042
3049
 
3043
3050
  // src/core/image-pdf-converter.ts
3044
3051
  import { existsSync as existsSync5, rmSync as rmSync4 } from "fs";
3045
- import { tmpdir } from "os";
3052
+ import { tmpdir as tmpdir2 } from "os";
3046
3053
  import { join as join8 } from "path";
3047
3054
  var ImagePdfConverter = class {
3048
3055
  constructor(logger) {
@@ -3059,7 +3066,7 @@ var ImagePdfConverter = class {
3059
3066
  */
3060
3067
  async convert(pdfUrl, reportId) {
3061
3068
  const timestamp = Date.now();
3062
- const tempDir = tmpdir();
3069
+ const tempDir = tmpdir2();
3063
3070
  const inputPath = join8(tempDir, `${reportId}-${timestamp}-input.pdf`);
3064
3071
  const outputPath = join8(tempDir, `${reportId}-${timestamp}-image.pdf`);
3065
3072
  try {