@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 +88 -81
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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 = [
|
|
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
|
|
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
|
|
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
|
|
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
|
|
2911
|
-
|
|
2912
|
-
task,
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
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
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
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
|
-
}
|
|
2957
|
-
|
|
2958
|
-
"[PDFConverter]
|
|
2959
|
-
|
|
2951
|
+
} finally {
|
|
2952
|
+
if (server) {
|
|
2953
|
+
this.logger.info("[PDFConverter] Stopping local file server...");
|
|
2954
|
+
await server.stop();
|
|
2955
|
+
}
|
|
2960
2956
|
}
|
|
2961
|
-
|
|
2962
|
-
this.
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
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
|
-
|
|
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 =
|
|
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 {
|