@uploadista/flow-documents-nodes 0.0.20 → 0.1.0-beta.5
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/.turbo/turbo-build.log +34 -33
- package/.turbo/turbo-check.log +6 -0
- package/.turbo/turbo-test.log +140 -0
- package/dist/{index-CN8GG19X.d.cts → index-DN0piYEv.d.cts} +3 -3
- package/dist/index-DN0piYEv.d.cts.map +1 -0
- package/dist/{index-DXwYQF9t.d.mts → index-aD9vy0kH.d.mts} +3 -3
- package/dist/index-aD9vy0kH.d.mts.map +1 -0
- package/dist/index.d.cts +35 -34
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +35 -34
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.mts +1 -1
- package/dist/types-wF9yqL-x.mjs.map +1 -1
- package/package.json +8 -8
- package/src/types/convert-to-markdown-node.ts +1 -3
- package/src/types/index.ts +6 -6
- package/src/types/ocr-node.ts +1 -3
- package/tests/document-nodes.test.ts +4 -4
- package/dist/index-CN8GG19X.d.cts.map +0 -1
- package/dist/index-DXwYQF9t.d.mts.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { a as MergePdfParams, c as extractTextParamsSchema, d as ConvertToMarkdownParams, f as convertToMarkdownParamsSchema, i as ocrParamsSchema, l as DescribeDocumentParams, n as splitPdfParamsSchema, o as mergePdfParamsSchema, r as OcrParams, s as ExtractTextParams, t as SplitPdfParams, u as describeDocumentParamsSchema } from "./index-
|
|
1
|
+
import { a as MergePdfParams, c as extractTextParamsSchema, d as ConvertToMarkdownParams, f as convertToMarkdownParamsSchema, i as ocrParamsSchema, l as DescribeDocumentParams, n as splitPdfParamsSchema, o as mergePdfParamsSchema, r as OcrParams, s as ExtractTextParams, t as SplitPdfParams, u as describeDocumentParamsSchema } from "./index-aD9vy0kH.mjs";
|
|
2
2
|
import { UploadistaError } from "@uploadista/core/errors";
|
|
3
3
|
import * as _uploadista_core_flow2 from "@uploadista/core/flow";
|
|
4
4
|
import { DocumentAiPlugin, DocumentPlugin, FileNamingConfig, NodeType, OcrResolution, OcrTaskType } from "@uploadista/core/flow";
|
|
5
|
+
import * as _uploadista_core_types5 from "@uploadista/core/types";
|
|
5
6
|
import { UploadEngine } from "@uploadista/core/upload";
|
|
6
7
|
import { Effect } from "effect";
|
|
7
8
|
import * as zod1 from "zod";
|
|
@@ -31,7 +32,7 @@ declare function createConvertToMarkdownNode(id: string, params?: ConvertToMarkd
|
|
|
31
32
|
}[] | undefined;
|
|
32
33
|
};
|
|
33
34
|
size?: number | undefined;
|
|
34
|
-
metadata?: Record<string,
|
|
35
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
35
36
|
creationDate?: string | undefined;
|
|
36
37
|
url?: string | undefined;
|
|
37
38
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -63,7 +64,7 @@ declare function createConvertToMarkdownNode(id: string, params?: ConvertToMarkd
|
|
|
63
64
|
}[] | undefined;
|
|
64
65
|
};
|
|
65
66
|
size?: number | undefined;
|
|
66
|
-
metadata?: Record<string,
|
|
67
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
67
68
|
creationDate?: string | undefined;
|
|
68
69
|
url?: string | undefined;
|
|
69
70
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -96,7 +97,7 @@ declare function createConvertToMarkdownNode(id: string, params?: ConvertToMarkd
|
|
|
96
97
|
}[] | undefined;
|
|
97
98
|
};
|
|
98
99
|
size?: number | undefined;
|
|
99
|
-
metadata?: Record<string,
|
|
100
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
100
101
|
creationDate?: string | undefined;
|
|
101
102
|
url?: string | undefined;
|
|
102
103
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -128,7 +129,7 @@ declare function createConvertToMarkdownNode(id: string, params?: ConvertToMarkd
|
|
|
128
129
|
}[] | undefined;
|
|
129
130
|
};
|
|
130
131
|
size?: number | undefined;
|
|
131
|
-
metadata?: Record<string,
|
|
132
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
132
133
|
creationDate?: string | undefined;
|
|
133
134
|
url?: string | undefined;
|
|
134
135
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -162,7 +163,7 @@ declare function createConvertToMarkdownNode(id: string, params?: ConvertToMarkd
|
|
|
162
163
|
}[] | undefined;
|
|
163
164
|
};
|
|
164
165
|
size?: number | undefined;
|
|
165
|
-
metadata?: Record<string,
|
|
166
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
166
167
|
creationDate?: string | undefined;
|
|
167
168
|
url?: string | undefined;
|
|
168
169
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -200,7 +201,7 @@ declare function createConvertToMarkdownNode(id: string, params?: ConvertToMarkd
|
|
|
200
201
|
}[] | undefined;
|
|
201
202
|
};
|
|
202
203
|
size?: number | undefined;
|
|
203
|
-
metadata?: Record<string,
|
|
204
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
204
205
|
creationDate?: string | undefined;
|
|
205
206
|
url?: string | undefined;
|
|
206
207
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -256,7 +257,7 @@ declare function createDescribeDocumentNode(id: string, params?: DescribeDocumen
|
|
|
256
257
|
}[] | undefined;
|
|
257
258
|
};
|
|
258
259
|
size?: number | undefined;
|
|
259
|
-
metadata?: Record<string,
|
|
260
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
260
261
|
creationDate?: string | undefined;
|
|
261
262
|
url?: string | undefined;
|
|
262
263
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -288,7 +289,7 @@ declare function createDescribeDocumentNode(id: string, params?: DescribeDocumen
|
|
|
288
289
|
}[] | undefined;
|
|
289
290
|
};
|
|
290
291
|
size?: number | undefined;
|
|
291
|
-
metadata?: Record<string,
|
|
292
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
292
293
|
creationDate?: string | undefined;
|
|
293
294
|
url?: string | undefined;
|
|
294
295
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -321,7 +322,7 @@ declare function createDescribeDocumentNode(id: string, params?: DescribeDocumen
|
|
|
321
322
|
}[] | undefined;
|
|
322
323
|
};
|
|
323
324
|
size?: number | undefined;
|
|
324
|
-
metadata?: Record<string,
|
|
325
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
325
326
|
creationDate?: string | undefined;
|
|
326
327
|
url?: string | undefined;
|
|
327
328
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -353,7 +354,7 @@ declare function createDescribeDocumentNode(id: string, params?: DescribeDocumen
|
|
|
353
354
|
}[] | undefined;
|
|
354
355
|
};
|
|
355
356
|
size?: number | undefined;
|
|
356
|
-
metadata?: Record<string,
|
|
357
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
357
358
|
creationDate?: string | undefined;
|
|
358
359
|
url?: string | undefined;
|
|
359
360
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -387,7 +388,7 @@ declare function createDescribeDocumentNode(id: string, params?: DescribeDocumen
|
|
|
387
388
|
}[] | undefined;
|
|
388
389
|
};
|
|
389
390
|
size?: number | undefined;
|
|
390
|
-
metadata?: Record<string,
|
|
391
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
391
392
|
creationDate?: string | undefined;
|
|
392
393
|
url?: string | undefined;
|
|
393
394
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -425,7 +426,7 @@ declare function createDescribeDocumentNode(id: string, params?: DescribeDocumen
|
|
|
425
426
|
}[] | undefined;
|
|
426
427
|
};
|
|
427
428
|
size?: number | undefined;
|
|
428
|
-
metadata?: Record<string,
|
|
429
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
429
430
|
creationDate?: string | undefined;
|
|
430
431
|
url?: string | undefined;
|
|
431
432
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -481,7 +482,7 @@ declare function createExtractTextNode(id: string, params?: ExtractTextNodeParam
|
|
|
481
482
|
}[] | undefined;
|
|
482
483
|
};
|
|
483
484
|
size?: number | undefined;
|
|
484
|
-
metadata?: Record<string,
|
|
485
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
485
486
|
creationDate?: string | undefined;
|
|
486
487
|
url?: string | undefined;
|
|
487
488
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -513,7 +514,7 @@ declare function createExtractTextNode(id: string, params?: ExtractTextNodeParam
|
|
|
513
514
|
}[] | undefined;
|
|
514
515
|
};
|
|
515
516
|
size?: number | undefined;
|
|
516
|
-
metadata?: Record<string,
|
|
517
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
517
518
|
creationDate?: string | undefined;
|
|
518
519
|
url?: string | undefined;
|
|
519
520
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -546,7 +547,7 @@ declare function createExtractTextNode(id: string, params?: ExtractTextNodeParam
|
|
|
546
547
|
}[] | undefined;
|
|
547
548
|
};
|
|
548
549
|
size?: number | undefined;
|
|
549
|
-
metadata?: Record<string,
|
|
550
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
550
551
|
creationDate?: string | undefined;
|
|
551
552
|
url?: string | undefined;
|
|
552
553
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -578,7 +579,7 @@ declare function createExtractTextNode(id: string, params?: ExtractTextNodeParam
|
|
|
578
579
|
}[] | undefined;
|
|
579
580
|
};
|
|
580
581
|
size?: number | undefined;
|
|
581
|
-
metadata?: Record<string,
|
|
582
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
582
583
|
creationDate?: string | undefined;
|
|
583
584
|
url?: string | undefined;
|
|
584
585
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -612,7 +613,7 @@ declare function createExtractTextNode(id: string, params?: ExtractTextNodeParam
|
|
|
612
613
|
}[] | undefined;
|
|
613
614
|
};
|
|
614
615
|
size?: number | undefined;
|
|
615
|
-
metadata?: Record<string,
|
|
616
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
616
617
|
creationDate?: string | undefined;
|
|
617
618
|
url?: string | undefined;
|
|
618
619
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -650,7 +651,7 @@ declare function createExtractTextNode(id: string, params?: ExtractTextNodeParam
|
|
|
650
651
|
}[] | undefined;
|
|
651
652
|
};
|
|
652
653
|
size?: number | undefined;
|
|
653
|
-
metadata?: Record<string,
|
|
654
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
654
655
|
creationDate?: string | undefined;
|
|
655
656
|
url?: string | undefined;
|
|
656
657
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -712,7 +713,7 @@ declare function createMergePdfNode(id: string, params?: MergePdfNodeParams): Ef
|
|
|
712
713
|
}[] | undefined;
|
|
713
714
|
};
|
|
714
715
|
size?: number | undefined;
|
|
715
|
-
metadata?: Record<string,
|
|
716
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
716
717
|
creationDate?: string | undefined;
|
|
717
718
|
url?: string | undefined;
|
|
718
719
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -744,7 +745,7 @@ declare function createMergePdfNode(id: string, params?: MergePdfNodeParams): Ef
|
|
|
744
745
|
}[] | undefined;
|
|
745
746
|
};
|
|
746
747
|
size?: number | undefined;
|
|
747
|
-
metadata?: Record<string,
|
|
748
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
748
749
|
creationDate?: string | undefined;
|
|
749
750
|
url?: string | undefined;
|
|
750
751
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -777,7 +778,7 @@ declare function createMergePdfNode(id: string, params?: MergePdfNodeParams): Ef
|
|
|
777
778
|
}[] | undefined;
|
|
778
779
|
};
|
|
779
780
|
size?: number | undefined;
|
|
780
|
-
metadata?: Record<string,
|
|
781
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
781
782
|
creationDate?: string | undefined;
|
|
782
783
|
url?: string | undefined;
|
|
783
784
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -809,7 +810,7 @@ declare function createMergePdfNode(id: string, params?: MergePdfNodeParams): Ef
|
|
|
809
810
|
}[] | undefined;
|
|
810
811
|
};
|
|
811
812
|
size?: number | undefined;
|
|
812
|
-
metadata?: Record<string,
|
|
813
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
813
814
|
creationDate?: string | undefined;
|
|
814
815
|
url?: string | undefined;
|
|
815
816
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -843,7 +844,7 @@ declare function createMergePdfNode(id: string, params?: MergePdfNodeParams): Ef
|
|
|
843
844
|
}[] | undefined;
|
|
844
845
|
};
|
|
845
846
|
size?: number | undefined;
|
|
846
|
-
metadata?: Record<string,
|
|
847
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
847
848
|
creationDate?: string | undefined;
|
|
848
849
|
url?: string | undefined;
|
|
849
850
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -881,7 +882,7 @@ declare function createMergePdfNode(id: string, params?: MergePdfNodeParams): Ef
|
|
|
881
882
|
}[] | undefined;
|
|
882
883
|
};
|
|
883
884
|
size?: number | undefined;
|
|
884
|
-
metadata?: Record<string,
|
|
885
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
885
886
|
creationDate?: string | undefined;
|
|
886
887
|
url?: string | undefined;
|
|
887
888
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -941,7 +942,7 @@ declare function createOcrNode(id: string, params: OcrNodeParams): Effect.Effect
|
|
|
941
942
|
}[] | undefined;
|
|
942
943
|
};
|
|
943
944
|
size?: number | undefined;
|
|
944
|
-
metadata?: Record<string,
|
|
945
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
945
946
|
creationDate?: string | undefined;
|
|
946
947
|
url?: string | undefined;
|
|
947
948
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -973,7 +974,7 @@ declare function createOcrNode(id: string, params: OcrNodeParams): Effect.Effect
|
|
|
973
974
|
}[] | undefined;
|
|
974
975
|
};
|
|
975
976
|
size?: number | undefined;
|
|
976
|
-
metadata?: Record<string,
|
|
977
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
977
978
|
creationDate?: string | undefined;
|
|
978
979
|
url?: string | undefined;
|
|
979
980
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1018,7 +1019,7 @@ declare function createOcrNode(id: string, params: OcrNodeParams): Effect.Effect
|
|
|
1018
1019
|
}[] | undefined;
|
|
1019
1020
|
};
|
|
1020
1021
|
size?: number | undefined;
|
|
1021
|
-
metadata?: Record<string,
|
|
1022
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1022
1023
|
creationDate?: string | undefined;
|
|
1023
1024
|
url?: string | undefined;
|
|
1024
1025
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1093,7 +1094,7 @@ declare function createSplitPdfNode(id: string, params: SplitPdfNodeParams): Eff
|
|
|
1093
1094
|
}[] | undefined;
|
|
1094
1095
|
};
|
|
1095
1096
|
size?: number | undefined;
|
|
1096
|
-
metadata?: Record<string,
|
|
1097
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1097
1098
|
creationDate?: string | undefined;
|
|
1098
1099
|
url?: string | undefined;
|
|
1099
1100
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1125,7 +1126,7 @@ declare function createSplitPdfNode(id: string, params: SplitPdfNodeParams): Eff
|
|
|
1125
1126
|
}[] | undefined;
|
|
1126
1127
|
};
|
|
1127
1128
|
size?: number | undefined;
|
|
1128
|
-
metadata?: Record<string,
|
|
1129
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1129
1130
|
creationDate?: string | undefined;
|
|
1130
1131
|
url?: string | undefined;
|
|
1131
1132
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1158,7 +1159,7 @@ declare function createSplitPdfNode(id: string, params: SplitPdfNodeParams): Eff
|
|
|
1158
1159
|
}[] | undefined;
|
|
1159
1160
|
};
|
|
1160
1161
|
size?: number | undefined;
|
|
1161
|
-
metadata?: Record<string,
|
|
1162
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1162
1163
|
creationDate?: string | undefined;
|
|
1163
1164
|
url?: string | undefined;
|
|
1164
1165
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1190,7 +1191,7 @@ declare function createSplitPdfNode(id: string, params: SplitPdfNodeParams): Eff
|
|
|
1190
1191
|
}[] | undefined;
|
|
1191
1192
|
};
|
|
1192
1193
|
size?: number | undefined;
|
|
1193
|
-
metadata?: Record<string,
|
|
1194
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1194
1195
|
creationDate?: string | undefined;
|
|
1195
1196
|
url?: string | undefined;
|
|
1196
1197
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1224,7 +1225,7 @@ declare function createSplitPdfNode(id: string, params: SplitPdfNodeParams): Eff
|
|
|
1224
1225
|
}[] | undefined;
|
|
1225
1226
|
};
|
|
1226
1227
|
size?: number | undefined;
|
|
1227
|
-
metadata?: Record<string,
|
|
1228
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1228
1229
|
creationDate?: string | undefined;
|
|
1229
1230
|
url?: string | undefined;
|
|
1230
1231
|
sizeIsDeferred?: boolean | undefined;
|
|
@@ -1262,7 +1263,7 @@ declare function createSplitPdfNode(id: string, params: SplitPdfNodeParams): Eff
|
|
|
1262
1263
|
}[] | undefined;
|
|
1263
1264
|
};
|
|
1264
1265
|
size?: number | undefined;
|
|
1265
|
-
metadata?: Record<string,
|
|
1266
|
+
metadata?: Record<string, _uploadista_core_types5.JsonValue> | undefined;
|
|
1266
1267
|
creationDate?: string | undefined;
|
|
1267
1268
|
url?: string | undefined;
|
|
1268
1269
|
sizeIsDeferred?: boolean | undefined;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/convert-to-markdown-node.ts","../src/describe-document-node.ts","../src/extract-text-node.ts","../src/merge-pdf-node.ts","../src/ocr-node.ts","../src/split-pdf-node.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/convert-to-markdown-node.ts","../src/describe-document-node.ts","../src/extract-text-node.ts","../src/merge-pdf-node.ts","../src/ocr-node.ts","../src/split-pdf-node.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["markdown: string","markdownSource: \"text\" | \"ocr\"","pdfBuffers: Uint8Array[]","namingConfig: FileNamingConfig","pdfBytes","stream","namingConfig: FileNamingConfig","uploadResult","newMetadata"],"sources":["../src/convert-to-markdown-node.ts","../src/describe-document-node.ts","../src/extract-text-node.ts","../src/merge-pdf-node.ts","../src/ocr-node.ts","../src/split-pdf-node.ts"],"sourcesContent":["import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentAiPlugin,\n DocumentPlugin,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect, Either } from \"effect\";\n\nexport type ConvertToMarkdownNodeParams = {\n credentialId?: string;\n resolution?: \"tiny\" | \"small\" | \"base\" | \"gundam\" | \"large\";\n keepOutput?: boolean;\n};\n\nexport function createConvertToMarkdownNode(\n id: string,\n params: ConvertToMarkdownNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const documentAiService = yield* DocumentAiPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Convert to Markdown\",\n description:\n \"Convert documents to Markdown format (intelligently uses OCR if needed)\",\n type: NodeType.process,\n nodeTypeId: \"convert-to-markdown\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n // AI service (OCR) - enable circuit breaker with skip fallback\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n resetTimeout: 60000,\n fallback: { type: \"skip\", passThrough: true },\n },\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(`Converting file ${file.id} to Markdown`);\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Try to extract text first (for searchable PDFs)\n const extractResult = yield* documentService\n .extractText(fileBytes)\n .pipe(Effect.either);\n\n let markdown: string;\n let markdownSource: \"text\" | \"ocr\";\n\n if (\n Either.isRight(extractResult) &&\n extractResult.right.trim().length > 0\n ) {\n // Successfully extracted text from searchable PDF\n const text = extractResult.right;\n\n yield* Effect.logInfo(\n `Successfully extracted ${text.length} characters from searchable PDF`,\n );\n\n // Simple text-to-markdown conversion\n // In a real implementation, this could be more sophisticated\n markdown = text\n .split(\"\\n\\n\")\n .map((para: string) => para.trim())\n .filter((para: string) => para.length > 0)\n .join(\"\\n\\n\");\n\n markdownSource = \"text\";\n\n yield* Effect.logInfo(\n `Converted text to Markdown (${markdown.length} characters)`,\n );\n } else {\n // Text extraction failed or returned empty - use OCR\n yield* Effect.logInfo(\n \"Text extraction failed or returned empty, falling back to OCR\",\n );\n\n const fileUrl = file.url;\n\n if (!fileUrl) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause: \"URL is required for OCR-based markdown conversion\",\n }).toEffect();\n }\n\n // Build context for DocumentAI plugin\n const context = {\n clientId,\n credentialId: params.credentialId,\n };\n\n // Perform OCR with markdown conversion\n const ocrResult = yield* documentAiService\n .performOCR(\n fileUrl,\n {\n taskType: \"convertToMarkdown\",\n resolution: params.resolution || \"gundam\",\n },\n context,\n )\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to perform OCR\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to perform OCR for markdown conversion\",\n }).toEffect();\n }),\n ),\n );\n\n markdown = ocrResult.extractedText;\n markdownSource = \"ocr\";\n\n yield* Effect.logInfo(\n `Successfully converted scanned document to Markdown using OCR (${markdown.length} characters)`,\n );\n }\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n // Add markdown to metadata\n const newMetadata = {\n ...file.metadata,\n ...metadata,\n markdown,\n markdownSource,\n };\n\n yield* Effect.logInfo(\n `Successfully converted file ${file.id} to Markdown via ${markdownSource}`,\n );\n\n return completeNodeExecution({\n ...file,\n metadata: newMetadata,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n NodeType,\n resolveUploadMetadata,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\n\nexport type DescribeDocumentNodeParams = {\n keepOutput?: boolean;\n};\n\nexport function createDescribeDocumentNode(\n id: string,\n params: DescribeDocumentNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Describe Document\",\n description: \"Extract metadata from PDF documents\",\n type: NodeType.process,\n nodeTypeId: \"describe-document\",\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(`Extracting metadata from PDF file ${file.id}`);\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Get metadata with error handling\n const documentMetadata = yield* documentService\n .getMetadata(fileBytes)\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to extract metadata\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to extract metadata\",\n }).toEffect();\n }),\n ),\n );\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n // Add document metadata to file metadata (filter out null values)\n const newMetadata = {\n ...file.metadata,\n ...metadata,\n pageCount: documentMetadata.pageCount,\n format: documentMetadata.format,\n ...(documentMetadata.author && { author: documentMetadata.author }),\n ...(documentMetadata.title && { title: documentMetadata.title }),\n ...(documentMetadata.subject && {\n subject: documentMetadata.subject,\n }),\n ...(documentMetadata.creator && {\n creator: documentMetadata.creator,\n }),\n ...(documentMetadata.creationDate && {\n creationDate: documentMetadata.creationDate,\n }),\n ...(documentMetadata.modifiedDate && {\n modifiedDate: documentMetadata.modifiedDate,\n }),\n fileSize: documentMetadata.fileSize,\n };\n\n yield* Effect.logInfo(\n `Successfully extracted metadata from file ${file.id}: ${documentMetadata.pageCount} pages`,\n );\n\n return completeNodeExecution({\n ...file,\n metadata: newMetadata,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\n\nexport type ExtractTextNodeParams = {\n keepOutput?: boolean;\n};\n\nexport function createExtractTextNode(\n id: string,\n params: ExtractTextNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Extract Text\",\n description: \"Extract text from searchable PDF documents\",\n type: NodeType.process,\n nodeTypeId: \"extract-text\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(`Extracting text from PDF file ${file.id}`);\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Extract text with error handling\n const extractedText = yield* documentService\n .extractText(fileBytes)\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to extract text\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to extract text\",\n }).toEffect();\n }),\n ),\n );\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n // Add extracted text to metadata\n const newMetadata = {\n ...file.metadata,\n ...metadata,\n extractedText,\n };\n\n if (!extractedText || extractedText.trim().length === 0) {\n yield* Effect.logWarning(\n `No text extracted from file ${file.id}. This might be a scanned document. Consider using the OCR node instead.`,\n );\n } else {\n yield* Effect.logInfo(\n `Successfully extracted ${extractedText.length} characters from file ${file.id}`,\n );\n }\n\n return completeNodeExecution({\n ...file,\n metadata: newMetadata,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n applyFileNaming,\n buildNamingContext,\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n type FileNamingConfig,\n getBaseName,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\nimport { z } from \"zod\";\n\nexport type MergePdfNodeParams = {\n inputCount?: number;\n keepOutput?: boolean;\n /**\n * Optional file naming configuration.\n * Auto suffix: `merged`\n */\n naming?: FileNamingConfig;\n};\n\n// Schema for multiple file inputs\nconst multipleFilesSchema = z.array(uploadFileSchema);\n\nexport function createMergePdfNode(\n id: string,\n params: MergePdfNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Merge PDFs\",\n description: \"Merge multiple PDF documents into one\",\n type: NodeType.process,\n nodeTypeId: \"merge-pdf\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: multipleFilesSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: files, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n // Validate that we have an array of files\n if (!Array.isArray(files)) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n \"Merge PDF node requires an array of files from a Merge utility node\",\n }).toEffect();\n }\n\n if (files.length === 0) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause: \"At least one PDF file is required for merging\",\n }).toEffect();\n }\n\n // Read buffers from all files\n const pdfBuffers: Uint8Array[] = [];\n let totalPages = 0;\n\n for (const file of files) {\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n pdfBuffers.push(fileBytes);\n\n // Sum up page counts if available\n const fileMetadata = resolveUploadMetadata(file.metadata).metadata;\n if (\n fileMetadata?.pageCount &&\n typeof fileMetadata.pageCount === \"number\"\n ) {\n totalPages += fileMetadata.pageCount;\n }\n }\n\n yield* Effect.logInfo(`Merging ${files.length} PDF files`);\n\n // Merge PDFs with error handling\n const mergedPdf = yield* documentService\n .mergePdfs({ pdfs: pdfBuffers })\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to merge PDFs\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to merge PDFs\",\n }).toEffect();\n }),\n ),\n );\n\n // Use metadata from first file as base\n const firstFile = files[0];\n const { metadata } = resolveUploadMetadata(firstFile.metadata);\n\n // Create a stream from the merged PDF bytes\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue(mergedPdf);\n controller.close();\n },\n });\n\n // Generate output filename\n let outputFileName = `merged-${files.length}-documents.pdf`;\n if (params.naming) {\n const namingConfig: FileNamingConfig = {\n ...params.naming,\n autoSuffix: params.naming.autoSuffix ?? (() => \"merged\"),\n };\n const namingContext = buildNamingContext(\n firstFile,\n { flowId, jobId, nodeId: id, nodeType: \"merge-pdf\" },\n { mergedCount: files.length },\n );\n const namedFile = applyFileNaming(\n firstFile,\n namingContext,\n namingConfig,\n );\n outputFileName = `${getBaseName(namedFile)}.pdf`;\n }\n\n // Upload the merged PDF back to the upload server\n const result = yield* uploadEngine.upload(\n {\n storageId: firstFile.storage.id,\n size: mergedPdf.byteLength,\n type: \"application/pdf\",\n fileName: outputFileName,\n lastModified: 0,\n metadata: JSON.stringify({\n ...metadata,\n pageCount: totalPages,\n mergedFrom: files.length,\n }),\n flow,\n },\n clientId,\n stream,\n );\n\n const newMetadata = {\n ...metadata,\n pageCount: totalPages,\n mergedFrom: files.length,\n fileName: outputFileName,\n };\n\n yield* Effect.logInfo(\n `Successfully merged ${files.length} PDFs into one document with ${totalPages} pages`,\n );\n\n return completeNodeExecution({\n ...result,\n metadata: newMetadata,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentAiPlugin,\n NodeType,\n OCR_OUTPUT_TYPE_ID,\n type OcrResolution,\n type OcrTaskType,\n ocrOutputSchema,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { Effect } from \"effect\";\n\nexport type OcrNodeParams = {\n taskType: OcrTaskType;\n resolution?: OcrResolution;\n credentialId?: string;\n referenceText?: string;\n keepOutput?: boolean;\n};\n\nexport function createOcrNode(id: string, params: OcrNodeParams) {\n return Effect.gen(function* () {\n const documentAiService = yield* DocumentAiPlugin;\n\n return yield* createFlowNode({\n id,\n name: \"OCR\",\n description: \"Extract text from scanned documents using AI\",\n type: NodeType.process,\n nodeTypeId: \"ocr\",\n outputTypeId: OCR_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: ocrOutputSchema,\n // AI service - enable circuit breaker with skip fallback\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n resetTimeout: 60000,\n fallback: { type: \"skip\", passThrough: true },\n },\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n const fileUrl = file.url;\n\n // Validate input\n if (!fileUrl) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause: \"URL is required for OCR operation\",\n }).toEffect();\n }\n\n yield* Effect.logInfo(\n `Starting OCR for file ${file.id} with task type: ${params.taskType}`,\n );\n\n // Build context for DocumentAI plugin\n const context = {\n clientId,\n credentialId: params.credentialId,\n };\n\n // Perform OCR with error handling\n const ocrResult = yield* documentAiService\n .performOCR(\n fileUrl,\n {\n taskType: params.taskType,\n resolution: params.resolution,\n referenceText: params.referenceText,\n },\n context,\n )\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to perform OCR\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to perform OCR\",\n }).toEffect();\n }),\n ),\n );\n\n yield* Effect.logInfo(\n `Successfully completed OCR for file ${file.id}, extracted ${ocrResult.extractedText.length} characters`,\n );\n\n // Return structured OCR output (not UploadFile)\n return completeNodeExecution({\n extractedText: ocrResult.extractedText,\n format: ocrResult.format,\n taskType: params.taskType,\n confidence: ocrResult.confidence,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n applyFileNaming,\n buildNamingContext,\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n type FileNamingConfig,\n getBaseName,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\n\nexport type SplitPdfNodeParams = {\n mode: \"range\" | \"individual\";\n startPage?: number;\n endPage?: number;\n keepOutput?: boolean;\n /**\n * Optional file naming configuration.\n * Auto suffix: `page-${pageNumber}` for individual mode, `pages-${start}-${end}` for range mode\n */\n naming?: FileNamingConfig;\n};\n\nexport function createSplitPdfNode(id: string, params: SplitPdfNodeParams) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Split PDF\",\n description: \"Split PDF into pages or page ranges\",\n type: NodeType.process,\n nodeTypeId: \"split-pdf\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(\n `Splitting PDF file ${file.id} in ${params.mode} mode`,\n );\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Split PDF with error handling\n const result = yield* documentService\n .splitPdf(fileBytes, params)\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to split PDF\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to split PDF\",\n }).toEffect();\n }),\n ),\n );\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n if (result.mode === \"individual\") {\n // Return array of files (one per page)\n yield* Effect.logInfo(\n `Successfully split PDF into ${result.pdfs.length} individual pages`,\n );\n\n // For individual mode, we'd need to return multiple files\n // This requires special handling in the flow engine\n // For now, we'll return the first page and log a warning\n yield* Effect.logWarning(\n \"Individual page mode returns multiple files - flow engine support required\",\n );\n\n const pdfBytes = result.pdfs[0];\n\n // Create a stream from the PDF bytes\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue(pdfBytes);\n controller.close();\n },\n });\n\n // Generate output filename\n let outputFileName = `${getBaseName((metadata?.fileName as string) || \"document\")}-page-1.pdf`;\n if (params.naming) {\n const namingConfig: FileNamingConfig = {\n ...params.naming,\n autoSuffix:\n params.naming.autoSuffix ??\n ((ctx) => `page-${ctx.pageNumber ?? 1}`),\n };\n const namingContext = buildNamingContext(\n file,\n { flowId, jobId, nodeId: id, nodeType: \"split-pdf\" },\n { pageNumber: 1 },\n );\n const namedFile = applyFileNaming(\n file,\n namingContext,\n namingConfig,\n );\n outputFileName = `${getBaseName(namedFile)}.pdf`;\n }\n\n // Upload the split PDF back to the upload server\n const uploadResult = yield* uploadEngine.upload(\n {\n storageId: file.storage.id,\n size: pdfBytes.byteLength,\n type: \"application/pdf\",\n fileName: outputFileName,\n lastModified: 0,\n metadata: JSON.stringify({\n ...metadata,\n pageCount: 1,\n splitMode: \"individual\",\n }),\n flow,\n },\n clientId,\n stream,\n );\n\n const newMetadata = {\n ...metadata,\n pageCount: 1,\n splitMode: \"individual\",\n };\n\n return completeNodeExecution({\n ...uploadResult,\n metadata: newMetadata,\n });\n }\n\n // Range mode - return single PDF with selected pages\n const pageCount =\n params.endPage && params.startPage\n ? params.endPage - params.startPage + 1\n : 1;\n\n const pdfBytes = result.pdf;\n\n // Create a stream from the PDF bytes\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue(pdfBytes);\n controller.close();\n },\n });\n\n // Generate output filename for range mode\n let rangeOutputFileName = `${getBaseName((metadata?.fileName as string) || \"document\")}-pages-${params.startPage}-${params.endPage}.pdf`;\n if (params.naming) {\n const namingConfig: FileNamingConfig = {\n ...params.naming,\n autoSuffix:\n params.naming.autoSuffix ??\n (() => `pages-${params.startPage}-${params.endPage}`),\n };\n const namingContext = buildNamingContext(\n file,\n { flowId, jobId, nodeId: id, nodeType: \"split-pdf\" },\n { startPage: params.startPage, endPage: params.endPage },\n );\n const namedFile = applyFileNaming(\n file,\n namingContext,\n namingConfig,\n );\n rangeOutputFileName = `${getBaseName(namedFile)}.pdf`;\n }\n\n // Upload the split PDF back to the upload server\n const uploadResult = yield* uploadEngine.upload(\n {\n storageId: file.storage.id,\n size: pdfBytes.byteLength,\n type: \"application/pdf\",\n fileName: rangeOutputFileName,\n lastModified: 0,\n metadata: JSON.stringify({\n ...metadata,\n pageCount,\n splitMode: \"range\",\n splitRange: `${params.startPage}-${params.endPage}`,\n }),\n flow,\n },\n clientId,\n stream,\n );\n\n const newMetadata = {\n ...metadata,\n pageCount,\n splitMode: \"range\",\n splitRange: `${params.startPage}-${params.endPage}`,\n };\n\n yield* Effect.logInfo(\n `Successfully split PDF to pages ${params.startPage}-${params.endPage}`,\n );\n\n return completeNodeExecution({\n ...uploadResult,\n metadata: newMetadata,\n });\n });\n },\n });\n });\n}\n"],"mappings":"kmBAoBA,SAAgB,EACd,EACA,EAAsC,EAAE,CACxC,CACA,OAAO,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAkB,MAAO,EACzB,EAAoB,MAAO,EAC3B,EAAe,MAAO,EAE5B,OAAO,MAAO,EAAe,CAC3B,KACA,KAAM,sBACN,YACE,0EACF,KAAM,EAAS,QACf,WAAY,sBACZ,aAAc,EACd,WAAY,EAAO,WACnB,YAAa,EACb,aAAc,EAEd,eAAgB,CACd,QAAS,GACT,iBAAkB,EAClB,aAAc,IACd,SAAU,CAAE,KAAM,OAAQ,YAAa,GAAM,CAC9C,CACD,KAAM,CAAE,KAAM,EAAM,SAAQ,QAAO,cAC1B,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAO,CACX,SACA,OAAQ,EACR,QACD,CAED,MAAO,EAAO,QAAQ,mBAAmB,EAAK,GAAG,cAAc,CAG/D,IAAM,EAAY,MAAO,EAAa,KAAK,EAAK,GAAI,EAAS,CAGvD,EAAgB,MAAO,EAC1B,YAAY,EAAU,CACtB,KAAK,EAAO,OAAO,CAElBA,EACAC,EAEJ,GACE,EAAO,QAAQ,EAAc,EAC7B,EAAc,MAAM,MAAM,CAAC,OAAS,EACpC,CAEA,IAAM,EAAO,EAAc,MAE3B,MAAO,EAAO,QACZ,0BAA0B,EAAK,OAAO,iCACvC,CAID,EAAW,EACR,MAAM;;EAAO,CACb,IAAK,GAAiB,EAAK,MAAM,CAAC,CAClC,OAAQ,GAAiB,EAAK,OAAS,EAAE,CACzC,KAAK;;EAAO,CAEf,EAAiB,OAEjB,MAAO,EAAO,QACZ,+BAA+B,EAAS,OAAO,cAChD,KACI,CAEL,MAAO,EAAO,QACZ,gEACD,CAED,IAAM,EAAU,EAAK,IAErB,GAAI,CAAC,EACH,OAAO,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MAAO,oDACR,CAAC,CAAC,UAAU,CAIf,IAAM,EAAU,CACd,WACA,aAAc,EAAO,aACtB,CA0BD,GAvBkB,MAAO,EACtB,WACC,EACA,CACE,SAAU,oBACV,WAAY,EAAO,YAAc,SAClC,CACD,EACD,CACA,KACC,EAAO,SAAU,GACf,EAAO,IAAI,WAAa,CAEtB,OADA,MAAO,EAAO,SAAS,wBAAyB,EAAM,CAC/C,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,aAAiB,MACb,EAAM,QACN,gDACP,CAAC,CAAC,UAAU,EACb,CACH,CACF,EAEkB,cACrB,EAAiB,MAEjB,MAAO,EAAO,QACZ,kEAAkE,EAAS,OAAO,cACnF,CAGH,GAAM,CAAE,YAAa,EAAsB,EAAK,SAAS,CAGnD,EAAc,CAClB,GAAG,EAAK,SACR,GAAG,EACH,WACA,iBACD,CAMD,OAJA,MAAO,EAAO,QACZ,+BAA+B,EAAK,GAAG,mBAAmB,IAC3D,CAEM,EAAsB,CAC3B,GAAG,EACH,SAAU,EACV,OACD,CAAC,EACF,CAEL,CAAC,EACF,CCtJJ,SAAgB,EACd,EACA,EAAqC,EAAE,CACvC,CACA,OAAO,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAkB,MAAO,EACzB,EAAe,MAAO,EAE5B,OAAO,MAAO,EAAe,CAC3B,KACA,KAAM,oBACN,YAAa,sCACb,KAAM,EAAS,QACf,WAAY,oBACZ,WAAY,EAAO,WACnB,YAAa,EACb,aAAc,EACd,KAAM,CAAE,KAAM,EAAM,SAAQ,QAAO,cAC1B,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAO,CACX,SACA,OAAQ,EACR,QACD,CAED,MAAO,EAAO,QAAQ,qCAAqC,EAAK,KAAK,CAGrE,IAAM,EAAY,MAAO,EAAa,KAAK,EAAK,GAAI,EAAS,CAGvD,EAAmB,MAAO,EAC7B,YAAY,EAAU,CACtB,KACC,EAAO,SAAU,GACf,EAAO,IAAI,WAAa,CAEtB,OADA,MAAO,EAAO,SAAS,6BAA8B,EAAM,CACpD,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,aAAiB,MACb,EAAM,QACN,6BACP,CAAC,CAAC,UAAU,EACb,CACH,CACF,CAEG,CAAE,YAAa,EAAsB,EAAK,SAAS,CAGnD,EAAc,CAClB,GAAG,EAAK,SACR,GAAG,EACH,UAAW,EAAiB,UAC5B,OAAQ,EAAiB,OACzB,GAAI,EAAiB,QAAU,CAAE,OAAQ,EAAiB,OAAQ,CAClE,GAAI,EAAiB,OAAS,CAAE,MAAO,EAAiB,MAAO,CAC/D,GAAI,EAAiB,SAAW,CAC9B,QAAS,EAAiB,QAC3B,CACD,GAAI,EAAiB,SAAW,CAC9B,QAAS,EAAiB,QAC3B,CACD,GAAI,EAAiB,cAAgB,CACnC,aAAc,EAAiB,aAChC,CACD,GAAI,EAAiB,cAAgB,CACnC,aAAc,EAAiB,aAChC,CACD,SAAU,EAAiB,SAC5B,CAMD,OAJA,MAAO,EAAO,QACZ,6CAA6C,EAAK,GAAG,IAAI,EAAiB,UAAU,QACrF,CAEM,EAAsB,CAC3B,GAAG,EACH,SAAU,EACV,OACD,CAAC,EACF,CAEL,CAAC,EACF,CCnFJ,SAAgB,EACd,EACA,EAAgC,EAAE,CAClC,CACA,OAAO,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAkB,MAAO,EACzB,EAAe,MAAO,EAE5B,OAAO,MAAO,EAAe,CAC3B,KACA,KAAM,eACN,YAAa,6CACb,KAAM,EAAS,QACf,WAAY,eACZ,aAAc,EACd,WAAY,EAAO,WACnB,YAAa,EACb,aAAc,EACd,KAAM,CAAE,KAAM,EAAM,SAAQ,QAAO,cAC1B,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAO,CACX,SACA,OAAQ,EACR,QACD,CAED,MAAO,EAAO,QAAQ,iCAAiC,EAAK,KAAK,CAGjE,IAAM,EAAY,MAAO,EAAa,KAAK,EAAK,GAAI,EAAS,CAGvD,EAAgB,MAAO,EAC1B,YAAY,EAAU,CACtB,KACC,EAAO,SAAU,GACf,EAAO,IAAI,WAAa,CAEtB,OADA,MAAO,EAAO,SAAS,yBAA0B,EAAM,CAChD,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,aAAiB,MACb,EAAM,QACN,yBACP,CAAC,CAAC,UAAU,EACb,CACH,CACF,CAEG,CAAE,YAAa,EAAsB,EAAK,SAAS,CAGnD,EAAc,CAClB,GAAG,EAAK,SACR,GAAG,EACH,gBACD,CAYD,MAVI,CAAC,GAAiB,EAAc,MAAM,CAAC,SAAW,EACpD,MAAO,EAAO,WACZ,+BAA+B,EAAK,GAAG,0EACxC,CAED,MAAO,EAAO,QACZ,0BAA0B,EAAc,OAAO,wBAAwB,EAAK,KAC7E,CAGI,EAAsB,CAC3B,GAAG,EACH,SAAU,EACV,OACD,CAAC,EACF,CAEL,CAAC,EACF,CC/DJ,MAAM,EAAsB,EAAE,MAAM,EAAiB,CAErD,SAAgB,EACd,EACA,EAA6B,EAAE,CAC/B,CACA,OAAO,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAkB,MAAO,EACzB,EAAe,MAAO,EAE5B,OAAO,MAAO,EAAe,CAC3B,KACA,KAAM,aACN,YAAa,wCACb,KAAM,EAAS,QACf,WAAY,YACZ,aAAc,EACd,WAAY,EAAO,WACnB,YAAa,EACb,aAAc,EACd,KAAM,CAAE,KAAM,EAAO,SAAQ,QAAO,cAC3B,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAO,CACX,SACA,OAAQ,EACR,QACD,CAGD,GAAI,CAAC,MAAM,QAAQ,EAAM,CACvB,OAAO,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,sEACH,CAAC,CAAC,UAAU,CAGf,GAAI,EAAM,SAAW,EACnB,OAAO,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MAAO,gDACR,CAAC,CAAC,UAAU,CAIf,IAAMC,EAA2B,EAAE,CAC/B,EAAa,EAEjB,IAAK,IAAM,KAAQ,EAAO,CAExB,IAAM,EAAY,MAAO,EAAa,KAAK,EAAK,GAAI,EAAS,CAC7D,EAAW,KAAK,EAAU,CAG1B,IAAM,EAAe,EAAsB,EAAK,SAAS,CAAC,SAExD,GAAc,WACd,OAAO,EAAa,WAAc,WAElC,GAAc,EAAa,WAI/B,MAAO,EAAO,QAAQ,WAAW,EAAM,OAAO,YAAY,CAG1D,IAAM,EAAY,MAAO,EACtB,UAAU,CAAE,KAAM,EAAY,CAAC,CAC/B,KACC,EAAO,SAAU,GACf,EAAO,IAAI,WAAa,CAEtB,OADA,MAAO,EAAO,SAAS,uBAAwB,EAAM,CAC9C,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,aAAiB,MACb,EAAM,QACN,uBACP,CAAC,CAAC,UAAU,EACb,CACH,CACF,CAGG,EAAY,EAAM,GAClB,CAAE,YAAa,EAAsB,EAAU,SAAS,CAGxD,EAAS,IAAI,eAAe,CAChC,MAAM,EAAY,CAChB,EAAW,QAAQ,EAAU,CAC7B,EAAW,OAAO,EAErB,CAAC,CAGE,EAAiB,UAAU,EAAM,OAAO,gBAC5C,GAAI,EAAO,OAAQ,CACjB,IAAMC,EAAiC,CACrC,GAAG,EAAO,OACV,WAAY,EAAO,OAAO,iBAAqB,UAChD,CAWD,EAAiB,GAAG,EALF,EAChB,EANoB,EACpB,EACA,CAAE,SAAQ,QAAO,OAAQ,EAAI,SAAU,YAAa,CACpD,CAAE,YAAa,EAAM,OAAQ,CAC9B,CAIC,EACD,CACyC,CAAC,MAI7C,IAAM,EAAS,MAAO,EAAa,OACjC,CACE,UAAW,EAAU,QAAQ,GAC7B,KAAM,EAAU,WAChB,KAAM,kBACN,SAAU,EACV,aAAc,EACd,SAAU,KAAK,UAAU,CACvB,GAAG,EACH,UAAW,EACX,WAAY,EAAM,OACnB,CAAC,CACF,OACD,CACD,EACA,EACD,CAEK,EAAc,CAClB,GAAG,EACH,UAAW,EACX,WAAY,EAAM,OAClB,SAAU,EACX,CAMD,OAJA,MAAO,EAAO,QACZ,uBAAuB,EAAM,OAAO,+BAA+B,EAAW,QAC/E,CAEM,EAAsB,CAC3B,GAAG,EACH,SAAU,EACX,CAAC,EACF,CAEL,CAAC,EACF,CC5JJ,SAAgB,EAAc,EAAY,EAAuB,CAC/D,OAAO,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAoB,MAAO,EAEjC,OAAO,MAAO,EAAe,CAC3B,KACA,KAAM,MACN,YAAa,+CACb,KAAM,EAAS,QACf,WAAY,MACZ,aAAc,EACd,WAAY,EAAO,WACnB,YAAa,EACb,aAAc,EAEd,eAAgB,CACd,QAAS,GACT,iBAAkB,EAClB,aAAc,IACd,SAAU,CAAE,KAAM,OAAQ,YAAa,GAAM,CAC9C,CACD,KAAM,CAAE,KAAM,EAAM,SAAQ,QAAO,cAC1B,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAO,CACX,SACA,OAAQ,EACR,QACD,CAEK,EAAU,EAAK,IAGrB,GAAI,CAAC,EACH,OAAO,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MAAO,oCACR,CAAC,CAAC,UAAU,CAGf,MAAO,EAAO,QACZ,yBAAyB,EAAK,GAAG,mBAAmB,EAAO,WAC5D,CAGD,IAAM,EAAU,CACd,WACA,aAAc,EAAO,aACtB,CAGK,EAAY,MAAO,EACtB,WACC,EACA,CACE,SAAU,EAAO,SACjB,WAAY,EAAO,WACnB,cAAe,EAAO,cACvB,CACD,EACD,CACA,KACC,EAAO,SAAU,GACf,EAAO,IAAI,WAAa,CAEtB,OADA,MAAO,EAAO,SAAS,wBAAyB,EAAM,CAC/C,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,aAAiB,MACb,EAAM,QACN,wBACP,CAAC,CAAC,UAAU,EACb,CACH,CACF,CAOH,OALA,MAAO,EAAO,QACZ,uCAAuC,EAAK,GAAG,cAAc,EAAU,cAAc,OAAO,aAC7F,CAGM,EAAsB,CAC3B,cAAe,EAAU,cACzB,OAAQ,EAAU,OAClB,SAAU,EAAO,SACjB,WAAY,EAAU,WACtB,OACD,CAAC,EACF,CAEL,CAAC,EACF,CCjFJ,SAAgB,EAAmB,EAAY,EAA4B,CACzE,OAAO,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAkB,MAAO,EACzB,EAAe,MAAO,EAE5B,OAAO,MAAO,EAAe,CAC3B,KACA,KAAM,YACN,YAAa,sCACb,KAAM,EAAS,QACf,WAAY,YACZ,aAAc,EACd,WAAY,EAAO,WACnB,YAAa,EACb,aAAc,EACd,KAAM,CAAE,KAAM,EAAM,SAAQ,QAAO,cAC1B,EAAO,IAAI,WAAa,CAC7B,IAAM,EAAO,CACX,SACA,OAAQ,EACR,QACD,CAED,MAAO,EAAO,QACZ,sBAAsB,EAAK,GAAG,MAAM,EAAO,KAAK,OACjD,CAGD,IAAM,EAAY,MAAO,EAAa,KAAK,EAAK,GAAI,EAAS,CAGvD,EAAS,MAAO,EACnB,SAAS,EAAW,EAAO,CAC3B,KACC,EAAO,SAAU,GACf,EAAO,IAAI,WAAa,CAEtB,OADA,MAAO,EAAO,SAAS,sBAAuB,EAAM,CAC7C,MAAO,EAAgB,SAAS,kBAAmB,CACxD,MACE,aAAiB,MACb,EAAM,QACN,sBACP,CAAC,CAAC,UAAU,EACb,CACH,CACF,CAEG,CAAE,YAAa,EAAsB,EAAK,SAAS,CAEzD,GAAI,EAAO,OAAS,aAAc,CAEhC,MAAO,EAAO,QACZ,+BAA+B,EAAO,KAAK,OAAO,mBACnD,CAKD,MAAO,EAAO,WACZ,6EACD,CAED,IAAMC,EAAW,EAAO,KAAK,GAGvBC,EAAS,IAAI,eAAe,CAChC,MAAM,EAAY,CAChB,EAAW,QAAQD,EAAS,CAC5B,EAAW,OAAO,EAErB,CAAC,CAGE,EAAiB,GAAG,EAAa,GAAU,UAAuB,WAAW,CAAC,aAClF,GAAI,EAAO,OAAQ,CACjB,IAAME,EAAiC,CACrC,GAAG,EAAO,OACV,WACE,EAAO,OAAO,aACZ,GAAQ,QAAQ,EAAI,YAAc,KACvC,CAWD,EAAiB,GAAG,EALF,EAChB,EANoB,EACpB,EACA,CAAE,SAAQ,QAAO,OAAQ,EAAI,SAAU,YAAa,CACpD,CAAE,WAAY,EAAG,CAClB,CAIC,EACD,CACyC,CAAC,MAI7C,IAAMC,EAAe,MAAO,EAAa,OACvC,CACE,UAAW,EAAK,QAAQ,GACxB,KAAMH,EAAS,WACf,KAAM,kBACN,SAAU,EACV,aAAc,EACd,SAAU,KAAK,UAAU,CACvB,GAAG,EACH,UAAW,EACX,UAAW,aACZ,CAAC,CACF,OACD,CACD,EACAC,EACD,CAEKG,EAAc,CAClB,GAAG,EACH,UAAW,EACX,UAAW,aACZ,CAED,OAAO,EAAsB,CAC3B,GAAGD,EACH,SAAUC,EACX,CAAC,CAIJ,IAAM,EACJ,EAAO,SAAW,EAAO,UACrB,EAAO,QAAU,EAAO,UAAY,EACpC,EAEA,EAAW,EAAO,IAGlB,EAAS,IAAI,eAAe,CAChC,MAAM,EAAY,CAChB,EAAW,QAAQ,EAAS,CAC5B,EAAW,OAAO,EAErB,CAAC,CAGE,EAAsB,GAAG,EAAa,GAAU,UAAuB,WAAW,CAAC,SAAS,EAAO,UAAU,GAAG,EAAO,QAAQ,MACnI,GAAI,EAAO,OAAQ,CACjB,IAAMF,EAAiC,CACrC,GAAG,EAAO,OACV,WACE,EAAO,OAAO,iBACP,SAAS,EAAO,UAAU,GAAG,EAAO,WAC9C,CAWD,EAAsB,GAAG,EALP,EAChB,EANoB,EACpB,EACA,CAAE,SAAQ,QAAO,OAAQ,EAAI,SAAU,YAAa,CACpD,CAAE,UAAW,EAAO,UAAW,QAAS,EAAO,QAAS,CACzD,CAIC,EACD,CAC8C,CAAC,MAIlD,IAAM,EAAe,MAAO,EAAa,OACvC,CACE,UAAW,EAAK,QAAQ,GACxB,KAAM,EAAS,WACf,KAAM,kBACN,SAAU,EACV,aAAc,EACd,SAAU,KAAK,UAAU,CACvB,GAAG,EACH,YACA,UAAW,QACX,WAAY,GAAG,EAAO,UAAU,GAAG,EAAO,UAC3C,CAAC,CACF,OACD,CACD,EACA,EACD,CAEK,EAAc,CAClB,GAAG,EACH,YACA,UAAW,QACX,WAAY,GAAG,EAAO,UAAU,GAAG,EAAO,UAC3C,CAMD,OAJA,MAAO,EAAO,QACZ,mCAAmC,EAAO,UAAU,GAAG,EAAO,UAC/D,CAEM,EAAsB,CAC3B,GAAG,EACH,SAAU,EACX,CAAC,EACF,CAEL,CAAC,EACF"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["pdfBytes","stream","uploadResult","newMetadata"],"sources":["../src/convert-to-markdown-node.ts","../src/describe-document-node.ts","../src/extract-text-node.ts","../src/merge-pdf-node.ts","../src/ocr-node.ts","../src/split-pdf-node.ts"],"sourcesContent":["import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentAiPlugin,\n DocumentPlugin,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect, Either } from \"effect\";\n\nexport type ConvertToMarkdownNodeParams = {\n credentialId?: string;\n resolution?: \"tiny\" | \"small\" | \"base\" | \"gundam\" | \"large\";\n keepOutput?: boolean;\n};\n\nexport function createConvertToMarkdownNode(\n id: string,\n params: ConvertToMarkdownNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const documentAiService = yield* DocumentAiPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Convert to Markdown\",\n description:\n \"Convert documents to Markdown format (intelligently uses OCR if needed)\",\n type: NodeType.process,\n nodeTypeId: \"convert-to-markdown\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n // AI service (OCR) - enable circuit breaker with skip fallback\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n resetTimeout: 60000,\n fallback: { type: \"skip\", passThrough: true },\n },\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(`Converting file ${file.id} to Markdown`);\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Try to extract text first (for searchable PDFs)\n const extractResult = yield* documentService\n .extractText(fileBytes)\n .pipe(Effect.either);\n\n let markdown: string;\n let markdownSource: \"text\" | \"ocr\";\n\n if (\n Either.isRight(extractResult) &&\n extractResult.right.trim().length > 0\n ) {\n // Successfully extracted text from searchable PDF\n const text = extractResult.right;\n\n yield* Effect.logInfo(\n `Successfully extracted ${text.length} characters from searchable PDF`,\n );\n\n // Simple text-to-markdown conversion\n // In a real implementation, this could be more sophisticated\n markdown = text\n .split(\"\\n\\n\")\n .map((para: string) => para.trim())\n .filter((para: string) => para.length > 0)\n .join(\"\\n\\n\");\n\n markdownSource = \"text\";\n\n yield* Effect.logInfo(\n `Converted text to Markdown (${markdown.length} characters)`,\n );\n } else {\n // Text extraction failed or returned empty - use OCR\n yield* Effect.logInfo(\n \"Text extraction failed or returned empty, falling back to OCR\",\n );\n\n const fileUrl = file.url;\n\n if (!fileUrl) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause: \"URL is required for OCR-based markdown conversion\",\n }).toEffect();\n }\n\n // Build context for DocumentAI plugin\n const context = {\n clientId,\n credentialId: params.credentialId,\n };\n\n // Perform OCR with markdown conversion\n const ocrResult = yield* documentAiService\n .performOCR(\n fileUrl,\n {\n taskType: \"convertToMarkdown\",\n resolution: params.resolution || \"gundam\",\n },\n context,\n )\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to perform OCR\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to perform OCR for markdown conversion\",\n }).toEffect();\n }),\n ),\n );\n\n markdown = ocrResult.extractedText;\n markdownSource = \"ocr\";\n\n yield* Effect.logInfo(\n `Successfully converted scanned document to Markdown using OCR (${markdown.length} characters)`,\n );\n }\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n // Add markdown to metadata\n const newMetadata = {\n ...file.metadata,\n ...metadata,\n markdown,\n markdownSource,\n };\n\n yield* Effect.logInfo(\n `Successfully converted file ${file.id} to Markdown via ${markdownSource}`,\n );\n\n return completeNodeExecution({\n ...file,\n metadata: newMetadata,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n NodeType,\n resolveUploadMetadata,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\n\nexport type DescribeDocumentNodeParams = {\n keepOutput?: boolean;\n};\n\nexport function createDescribeDocumentNode(\n id: string,\n params: DescribeDocumentNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Describe Document\",\n description: \"Extract metadata from PDF documents\",\n type: NodeType.process,\n nodeTypeId: \"describe-document\",\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(`Extracting metadata from PDF file ${file.id}`);\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Get metadata with error handling\n const documentMetadata = yield* documentService\n .getMetadata(fileBytes)\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to extract metadata\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to extract metadata\",\n }).toEffect();\n }),\n ),\n );\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n // Add document metadata to file metadata (filter out null values)\n const newMetadata = {\n ...file.metadata,\n ...metadata,\n pageCount: documentMetadata.pageCount,\n format: documentMetadata.format,\n ...(documentMetadata.author && { author: documentMetadata.author }),\n ...(documentMetadata.title && { title: documentMetadata.title }),\n ...(documentMetadata.subject && {\n subject: documentMetadata.subject,\n }),\n ...(documentMetadata.creator && {\n creator: documentMetadata.creator,\n }),\n ...(documentMetadata.creationDate && {\n creationDate: documentMetadata.creationDate,\n }),\n ...(documentMetadata.modifiedDate && {\n modifiedDate: documentMetadata.modifiedDate,\n }),\n fileSize: documentMetadata.fileSize,\n };\n\n yield* Effect.logInfo(\n `Successfully extracted metadata from file ${file.id}: ${documentMetadata.pageCount} pages`,\n );\n\n return completeNodeExecution({\n ...file,\n metadata: newMetadata,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\n\nexport type ExtractTextNodeParams = {\n keepOutput?: boolean;\n};\n\nexport function createExtractTextNode(\n id: string,\n params: ExtractTextNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Extract Text\",\n description: \"Extract text from searchable PDF documents\",\n type: NodeType.process,\n nodeTypeId: \"extract-text\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(`Extracting text from PDF file ${file.id}`);\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Extract text with error handling\n const extractedText = yield* documentService\n .extractText(fileBytes)\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to extract text\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to extract text\",\n }).toEffect();\n }),\n ),\n );\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n // Add extracted text to metadata\n const newMetadata = {\n ...file.metadata,\n ...metadata,\n extractedText,\n };\n\n if (!extractedText || extractedText.trim().length === 0) {\n yield* Effect.logWarning(\n `No text extracted from file ${file.id}. This might be a scanned document. Consider using the OCR node instead.`,\n );\n } else {\n yield* Effect.logInfo(\n `Successfully extracted ${extractedText.length} characters from file ${file.id}`,\n );\n }\n\n return completeNodeExecution({\n ...file,\n metadata: newMetadata,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n applyFileNaming,\n buildNamingContext,\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n type FileNamingConfig,\n getBaseName,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\nimport { z } from \"zod\";\n\nexport type MergePdfNodeParams = {\n inputCount?: number;\n keepOutput?: boolean;\n /**\n * Optional file naming configuration.\n * Auto suffix: `merged`\n */\n naming?: FileNamingConfig;\n};\n\n// Schema for multiple file inputs\nconst multipleFilesSchema = z.array(uploadFileSchema);\n\nexport function createMergePdfNode(\n id: string,\n params: MergePdfNodeParams = {},\n) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Merge PDFs\",\n description: \"Merge multiple PDF documents into one\",\n type: NodeType.process,\n nodeTypeId: \"merge-pdf\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: multipleFilesSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: files, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n // Validate that we have an array of files\n if (!Array.isArray(files)) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n \"Merge PDF node requires an array of files from a Merge utility node\",\n }).toEffect();\n }\n\n if (files.length === 0) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause: \"At least one PDF file is required for merging\",\n }).toEffect();\n }\n\n // Read buffers from all files\n const pdfBuffers: Uint8Array[] = [];\n let totalPages = 0;\n\n for (const file of files) {\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n pdfBuffers.push(fileBytes);\n\n // Sum up page counts if available\n const fileMetadata = resolveUploadMetadata(file.metadata).metadata;\n if (\n fileMetadata?.pageCount &&\n typeof fileMetadata.pageCount === \"number\"\n ) {\n totalPages += fileMetadata.pageCount;\n }\n }\n\n yield* Effect.logInfo(`Merging ${files.length} PDF files`);\n\n // Merge PDFs with error handling\n const mergedPdf = yield* documentService\n .mergePdfs({ pdfs: pdfBuffers })\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to merge PDFs\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to merge PDFs\",\n }).toEffect();\n }),\n ),\n );\n\n // Use metadata from first file as base\n const firstFile = files[0];\n const { metadata } = resolveUploadMetadata(firstFile.metadata);\n\n // Create a stream from the merged PDF bytes\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue(mergedPdf);\n controller.close();\n },\n });\n\n // Generate output filename\n let outputFileName = `merged-${files.length}-documents.pdf`;\n if (params.naming) {\n const namingConfig: FileNamingConfig = {\n ...params.naming,\n autoSuffix: params.naming.autoSuffix ?? (() => \"merged\"),\n };\n const namingContext = buildNamingContext(\n firstFile,\n { flowId, jobId, nodeId: id, nodeType: \"merge-pdf\" },\n { mergedCount: files.length },\n );\n const namedFile = applyFileNaming(\n firstFile,\n namingContext,\n namingConfig,\n );\n outputFileName = `${getBaseName(namedFile)}.pdf`;\n }\n\n // Upload the merged PDF back to the upload server\n const result = yield* uploadEngine.upload(\n {\n storageId: firstFile.storage.id,\n size: mergedPdf.byteLength,\n type: \"application/pdf\",\n fileName: outputFileName,\n lastModified: 0,\n metadata: JSON.stringify({\n ...metadata,\n pageCount: totalPages,\n mergedFrom: files.length,\n }),\n flow,\n },\n clientId,\n stream,\n );\n\n const newMetadata = {\n ...metadata,\n pageCount: totalPages,\n mergedFrom: files.length,\n fileName: outputFileName,\n };\n\n yield* Effect.logInfo(\n `Successfully merged ${files.length} PDFs into one document with ${totalPages} pages`,\n );\n\n return completeNodeExecution({\n ...result,\n metadata: newMetadata,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n completeNodeExecution,\n createFlowNode,\n DocumentAiPlugin,\n NodeType,\n OCR_OUTPUT_TYPE_ID,\n type OcrResolution,\n type OcrTaskType,\n ocrOutputSchema,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { Effect } from \"effect\";\n\nexport type OcrNodeParams = {\n taskType: OcrTaskType;\n resolution?: OcrResolution;\n credentialId?: string;\n referenceText?: string;\n keepOutput?: boolean;\n};\n\nexport function createOcrNode(id: string, params: OcrNodeParams) {\n return Effect.gen(function* () {\n const documentAiService = yield* DocumentAiPlugin;\n\n return yield* createFlowNode({\n id,\n name: \"OCR\",\n description: \"Extract text from scanned documents using AI\",\n type: NodeType.process,\n nodeTypeId: \"ocr\",\n outputTypeId: OCR_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: ocrOutputSchema,\n // AI service - enable circuit breaker with skip fallback\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n resetTimeout: 60000,\n fallback: { type: \"skip\", passThrough: true },\n },\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n const fileUrl = file.url;\n\n // Validate input\n if (!fileUrl) {\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause: \"URL is required for OCR operation\",\n }).toEffect();\n }\n\n yield* Effect.logInfo(\n `Starting OCR for file ${file.id} with task type: ${params.taskType}`,\n );\n\n // Build context for DocumentAI plugin\n const context = {\n clientId,\n credentialId: params.credentialId,\n };\n\n // Perform OCR with error handling\n const ocrResult = yield* documentAiService\n .performOCR(\n fileUrl,\n {\n taskType: params.taskType,\n resolution: params.resolution,\n referenceText: params.referenceText,\n },\n context,\n )\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to perform OCR\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to perform OCR\",\n }).toEffect();\n }),\n ),\n );\n\n yield* Effect.logInfo(\n `Successfully completed OCR for file ${file.id}, extracted ${ocrResult.extractedText.length} characters`,\n );\n\n // Return structured OCR output (not UploadFile)\n return completeNodeExecution({\n extractedText: ocrResult.extractedText,\n format: ocrResult.format,\n taskType: params.taskType,\n confidence: ocrResult.confidence,\n flow,\n });\n });\n },\n });\n });\n}\n","import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n applyFileNaming,\n buildNamingContext,\n completeNodeExecution,\n createFlowNode,\n DocumentPlugin,\n type FileNamingConfig,\n getBaseName,\n NodeType,\n resolveUploadMetadata,\n STORAGE_OUTPUT_TYPE_ID,\n} from \"@uploadista/core/flow\";\nimport { uploadFileSchema } from \"@uploadista/core/types\";\nimport { UploadEngine } from \"@uploadista/core/upload\";\nimport { Effect } from \"effect\";\n\nexport type SplitPdfNodeParams = {\n mode: \"range\" | \"individual\";\n startPage?: number;\n endPage?: number;\n keepOutput?: boolean;\n /**\n * Optional file naming configuration.\n * Auto suffix: `page-${pageNumber}` for individual mode, `pages-${start}-${end}` for range mode\n */\n naming?: FileNamingConfig;\n};\n\nexport function createSplitPdfNode(id: string, params: SplitPdfNodeParams) {\n return Effect.gen(function* () {\n const documentService = yield* DocumentPlugin;\n const uploadEngine = yield* UploadEngine;\n\n return yield* createFlowNode({\n id,\n name: \"Split PDF\",\n description: \"Split PDF into pages or page ranges\",\n type: NodeType.process,\n nodeTypeId: \"split-pdf\",\n outputTypeId: STORAGE_OUTPUT_TYPE_ID,\n keepOutput: params.keepOutput,\n inputSchema: uploadFileSchema,\n outputSchema: uploadFileSchema,\n run: ({ data: file, flowId, jobId, clientId }) => {\n return Effect.gen(function* () {\n const flow = {\n flowId,\n nodeId: id,\n jobId,\n };\n\n yield* Effect.logInfo(\n `Splitting PDF file ${file.id} in ${params.mode} mode`,\n );\n\n // Read file bytes from upload server\n const fileBytes = yield* uploadEngine.read(file.id, clientId);\n\n // Split PDF with error handling\n const result = yield* documentService\n .splitPdf(fileBytes, params)\n .pipe(\n Effect.catchAll((error) =>\n Effect.gen(function* () {\n yield* Effect.logError(\"Failed to split PDF\", error);\n return yield* UploadistaError.fromCode(\"FLOW_NODE_ERROR\", {\n cause:\n error instanceof Error\n ? error.message\n : \"Failed to split PDF\",\n }).toEffect();\n }),\n ),\n );\n\n const { metadata } = resolveUploadMetadata(file.metadata);\n\n if (result.mode === \"individual\") {\n // Return array of files (one per page)\n yield* Effect.logInfo(\n `Successfully split PDF into ${result.pdfs.length} individual pages`,\n );\n\n // For individual mode, we'd need to return multiple files\n // This requires special handling in the flow engine\n // For now, we'll return the first page and log a warning\n yield* Effect.logWarning(\n \"Individual page mode returns multiple files - flow engine support required\",\n );\n\n const pdfBytes = result.pdfs[0];\n\n // Create a stream from the PDF bytes\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue(pdfBytes);\n controller.close();\n },\n });\n\n // Generate output filename\n let outputFileName = `${getBaseName((metadata?.fileName as string) || \"document\")}-page-1.pdf`;\n if (params.naming) {\n const namingConfig: FileNamingConfig = {\n ...params.naming,\n autoSuffix:\n params.naming.autoSuffix ??\n ((ctx) => `page-${ctx.pageNumber ?? 1}`),\n };\n const namingContext = buildNamingContext(\n file,\n { flowId, jobId, nodeId: id, nodeType: \"split-pdf\" },\n { pageNumber: 1 },\n );\n const namedFile = applyFileNaming(\n file,\n namingContext,\n namingConfig,\n );\n outputFileName = `${getBaseName(namedFile)}.pdf`;\n }\n\n // Upload the split PDF back to the upload server\n const uploadResult = yield* uploadEngine.upload(\n {\n storageId: file.storage.id,\n size: pdfBytes.byteLength,\n type: \"application/pdf\",\n fileName: outputFileName,\n lastModified: 0,\n metadata: JSON.stringify({\n ...metadata,\n pageCount: 1,\n splitMode: \"individual\",\n }),\n flow,\n },\n clientId,\n stream,\n );\n\n const newMetadata = {\n ...metadata,\n pageCount: 1,\n splitMode: \"individual\",\n };\n\n return completeNodeExecution({\n ...uploadResult,\n metadata: newMetadata,\n });\n }\n\n // Range mode - return single PDF with selected pages\n const pageCount =\n params.endPage && params.startPage\n ? params.endPage - params.startPage + 1\n : 1;\n\n const pdfBytes = result.pdf;\n\n // Create a stream from the PDF bytes\n const stream = new ReadableStream({\n start(controller) {\n controller.enqueue(pdfBytes);\n controller.close();\n },\n });\n\n // Generate output filename for range mode\n let rangeOutputFileName = `${getBaseName((metadata?.fileName as string) || \"document\")}-pages-${params.startPage}-${params.endPage}.pdf`;\n if (params.naming) {\n const namingConfig: FileNamingConfig = {\n ...params.naming,\n autoSuffix:\n params.naming.autoSuffix ??\n (() => `pages-${params.startPage}-${params.endPage}`),\n };\n const namingContext = buildNamingContext(\n file,\n { flowId, jobId, nodeId: id, nodeType: \"split-pdf\" },\n { startPage: params.startPage, endPage: params.endPage },\n );\n const namedFile = applyFileNaming(\n file,\n namingContext,\n namingConfig,\n );\n rangeOutputFileName = `${getBaseName(namedFile)}.pdf`;\n }\n\n // Upload the split PDF back to the upload server\n const uploadResult = yield* uploadEngine.upload(\n {\n storageId: file.storage.id,\n size: pdfBytes.byteLength,\n type: \"application/pdf\",\n fileName: rangeOutputFileName,\n lastModified: 0,\n metadata: JSON.stringify({\n ...metadata,\n pageCount,\n splitMode: \"range\",\n splitRange: `${params.startPage}-${params.endPage}`,\n }),\n flow,\n },\n clientId,\n stream,\n );\n\n const newMetadata = {\n ...metadata,\n pageCount,\n splitMode: \"range\",\n splitRange: `${params.startPage}-${params.endPage}`,\n };\n\n yield* Effect.logInfo(\n `Successfully split PDF to pages ${params.startPage}-${params.endPage}`,\n );\n\n return completeNodeExecution({\n ...uploadResult,\n metadata: newMetadata,\n });\n });\n },\n });\n });\n}\n"],"mappings":"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"}
|
package/dist/types/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as MergePdfParams, c as extractTextParamsSchema, d as ConvertToMarkdownParams, f as convertToMarkdownParamsSchema, i as ocrParamsSchema, l as DescribeDocumentParams, n as splitPdfParamsSchema, o as mergePdfParamsSchema, r as OcrParams, s as ExtractTextParams, t as SplitPdfParams, u as describeDocumentParamsSchema } from "../index-
|
|
1
|
+
import { a as MergePdfParams, c as extractTextParamsSchema, d as ConvertToMarkdownParams, f as convertToMarkdownParamsSchema, i as ocrParamsSchema, l as DescribeDocumentParams, n as splitPdfParamsSchema, o as mergePdfParamsSchema, r as OcrParams, s as ExtractTextParams, t as SplitPdfParams, u as describeDocumentParamsSchema } from "../index-DN0piYEv.cjs";
|
|
2
2
|
export { ConvertToMarkdownParams, DescribeDocumentParams, ExtractTextParams, MergePdfParams, OcrParams, SplitPdfParams, convertToMarkdownParamsSchema, describeDocumentParamsSchema, extractTextParamsSchema, mergePdfParamsSchema, ocrParamsSchema, splitPdfParamsSchema };
|
package/dist/types/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as MergePdfParams, c as extractTextParamsSchema, d as ConvertToMarkdownParams, f as convertToMarkdownParamsSchema, i as ocrParamsSchema, l as DescribeDocumentParams, n as splitPdfParamsSchema, o as mergePdfParamsSchema, r as OcrParams, s as ExtractTextParams, t as SplitPdfParams, u as describeDocumentParamsSchema } from "../index-
|
|
1
|
+
import { a as MergePdfParams, c as extractTextParamsSchema, d as ConvertToMarkdownParams, f as convertToMarkdownParamsSchema, i as ocrParamsSchema, l as DescribeDocumentParams, n as splitPdfParamsSchema, o as mergePdfParamsSchema, r as OcrParams, s as ExtractTextParams, t as SplitPdfParams, u as describeDocumentParamsSchema } from "../index-aD9vy0kH.mjs";
|
|
2
2
|
export { ConvertToMarkdownParams, DescribeDocumentParams, ExtractTextParams, MergePdfParams, OcrParams, SplitPdfParams, convertToMarkdownParamsSchema, describeDocumentParamsSchema, extractTextParamsSchema, mergePdfParamsSchema, ocrParamsSchema, splitPdfParamsSchema };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-wF9yqL-x.mjs","names":[],"sources":["../src/types/convert-to-markdown-node.ts","../src/types/describe-document-node.ts","../src/types/extract-text-node.ts","../src/types/merge-pdf-node.ts","../src/types/ocr-node.ts","../src/types/split-pdf-node.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const convertToMarkdownParamsSchema = z.object({\n credentialId: z.string().optional(),\n resolution: z
|
|
1
|
+
{"version":3,"file":"types-wF9yqL-x.mjs","names":[],"sources":["../src/types/convert-to-markdown-node.ts","../src/types/describe-document-node.ts","../src/types/extract-text-node.ts","../src/types/merge-pdf-node.ts","../src/types/ocr-node.ts","../src/types/split-pdf-node.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const convertToMarkdownParamsSchema = z.object({\n credentialId: z.string().optional(),\n resolution: z.enum([\"tiny\", \"small\", \"base\", \"gundam\", \"large\"]).optional(),\n});\n\nexport type ConvertToMarkdownParams = z.infer<\n typeof convertToMarkdownParamsSchema\n>;\n","import { z } from \"zod\";\n\nexport const describeDocumentParamsSchema = z.object({});\n\nexport type DescribeDocumentParams = z.infer<\n typeof describeDocumentParamsSchema\n>;\n","import { z } from \"zod\";\n\nexport const extractTextParamsSchema = z.object({});\n\nexport type ExtractTextParams = z.infer<typeof extractTextParamsSchema>;\n","import { z } from \"zod\";\n\nexport const mergePdfParamsSchema = z.object({\n inputCount: z.number().positive().optional(),\n});\n\nexport type MergePdfParams = z.infer<typeof mergePdfParamsSchema>;\n","import { z } from \"zod\";\n\nexport const ocrParamsSchema = z.object({\n taskType: z.enum([\n \"convertToMarkdown\",\n \"freeOcr\",\n \"parseFigure\",\n \"locateObject\",\n ]),\n resolution: z.enum([\"tiny\", \"small\", \"base\", \"gundam\", \"large\"]).optional(),\n credentialId: z.string().optional(),\n referenceText: z.string().optional(),\n});\n\nexport type OcrParams = z.infer<typeof ocrParamsSchema>;\n","import { z } from \"zod\";\n\nexport const splitPdfParamsSchema = z.object({\n mode: z.enum([\"range\", \"individual\"]),\n startPage: z.number().positive().optional(),\n endPage: z.number().positive().optional(),\n});\n\nexport type SplitPdfParams = z.infer<typeof splitPdfParamsSchema>;\n"],"mappings":"wBAEA,MAAa,EAAgC,EAAE,OAAO,CACpD,aAAc,EAAE,QAAQ,CAAC,UAAU,CACnC,WAAY,EAAE,KAAK,CAAC,OAAQ,QAAS,OAAQ,SAAU,QAAQ,CAAC,CAAC,UAAU,CAC5E,CAAC,CCHW,EAA+B,EAAE,OAAO,EAAE,CAAC,CCA3C,EAA0B,EAAE,OAAO,EAAE,CAAC,CCAtC,EAAuB,EAAE,OAAO,CAC3C,WAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAC7C,CAAC,CCFW,EAAkB,EAAE,OAAO,CACtC,SAAU,EAAE,KAAK,CACf,oBACA,UACA,cACA,eACD,CAAC,CACF,WAAY,EAAE,KAAK,CAAC,OAAQ,QAAS,OAAQ,SAAU,QAAQ,CAAC,CAAC,UAAU,CAC3E,aAAc,EAAE,QAAQ,CAAC,UAAU,CACnC,cAAe,EAAE,QAAQ,CAAC,UAAU,CACrC,CAAC,CCVW,EAAuB,EAAE,OAAO,CAC3C,KAAM,EAAE,KAAK,CAAC,QAAS,aAAa,CAAC,CACrC,UAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAC3C,QAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uploadista/flow-documents-nodes",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.1.0-beta.5",
|
|
5
5
|
"description": "Document processing nodes for Uploadista Flow",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Uploadista",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@uploadista/core": "0.0.
|
|
23
|
+
"@uploadista/core": "0.1.0-beta.5"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"effect": "^3.0.0",
|
|
@@ -28,12 +28,12 @@
|
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@effect/vitest": "0.27.0",
|
|
31
|
-
"@types/node": "24.10.
|
|
32
|
-
"effect": "3.19.
|
|
33
|
-
"tsdown": "0.
|
|
34
|
-
"vitest": "4.0.
|
|
35
|
-
"zod": "4.
|
|
36
|
-
"@uploadista/typescript-config": "0.0.
|
|
31
|
+
"@types/node": "24.10.8",
|
|
32
|
+
"effect": "3.19.14",
|
|
33
|
+
"tsdown": "0.19.0",
|
|
34
|
+
"vitest": "4.0.17",
|
|
35
|
+
"zod": "4.3.5",
|
|
36
|
+
"@uploadista/typescript-config": "0.1.0-beta.5"
|
|
37
37
|
},
|
|
38
38
|
"scripts": {
|
|
39
39
|
"build": "tsc --noEmit && tsdown",
|
|
@@ -2,9 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
|
|
3
3
|
export const convertToMarkdownParamsSchema = z.object({
|
|
4
4
|
credentialId: z.string().optional(),
|
|
5
|
-
resolution: z
|
|
6
|
-
.enum(["tiny", "small", "base", "gundam", "large"])
|
|
7
|
-
.optional(),
|
|
5
|
+
resolution: z.enum(["tiny", "small", "base", "gundam", "large"]).optional(),
|
|
8
6
|
});
|
|
9
7
|
|
|
10
8
|
export type ConvertToMarkdownParams = z.infer<
|