@markitdownjs/image-ocr 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/ocr-converter.d.ts +45 -0
- package/dist/ocr-converter.d.ts.map +1 -0
- package/dist/ocr-converter.js +359 -0
- package/dist/ocr-converter.js.map +1 -0
- package/package.json +40 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Converter, ConversionInput, ConversionResult } from "@markitdownjs/shared";
|
|
2
|
+
/**
|
|
3
|
+
* Converts images to text using OCR (Optical Character Recognition).
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Chunked base64 encoding to prevent stack overflow on large images
|
|
7
|
+
* - Language selection (defaults to English, configurable)
|
|
8
|
+
* - Image dimension extraction from PNG, JPEG, GIF, and BMP headers
|
|
9
|
+
* - OCR confidence score from tesseract.js (when available)
|
|
10
|
+
* - Magic byte detection for additional image formats
|
|
11
|
+
* - Comprehensive error messages when tesseract.js is not installed
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const converter = new ImageOcrConverter();
|
|
16
|
+
* const result = await converter.convert({
|
|
17
|
+
* data: pngBuffer,
|
|
18
|
+
* options: { customProperties: { ocrLanguage: "fra" } }
|
|
19
|
+
* });
|
|
20
|
+
* console.log(result.ast); // DocumentNode with image + extracted text
|
|
21
|
+
* console.log(result.markdown);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class ImageOcrConverter implements Converter {
|
|
25
|
+
readonly id = "image-ocr";
|
|
26
|
+
readonly supportedMimeTypes: string[];
|
|
27
|
+
readonly supportedExtensions: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Checks whether this converter can handle the given input.
|
|
30
|
+
* Validates MIME type, file extension, and magic byte signatures.
|
|
31
|
+
*
|
|
32
|
+
* @param input - The conversion input to check
|
|
33
|
+
* @returns True if this converter can process the input
|
|
34
|
+
*/
|
|
35
|
+
canConvert(input: ConversionInput): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Converts an image file into text via OCR, producing an AST with the image
|
|
38
|
+
* node and the extracted text as a paragraph.
|
|
39
|
+
*
|
|
40
|
+
* @param input - The image data as Uint8Array, ArrayBuffer, Blob, or string
|
|
41
|
+
* @returns A ConversionResult with the AST, Markdown, and image metadata
|
|
42
|
+
*/
|
|
43
|
+
convert(input: ConversionInput): Promise<ConversionResult>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=ocr-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ocr-converter.d.ts","sourceRoot":"","sources":["../src/ocr-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAGjB,MAAM,sBAAsB,CAAC;AAwL9B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,QAAQ,CAAC,EAAE,eAAe;IAC1B,QAAQ,CAAC,kBAAkB,WAOzB;IACF,QAAQ,CAAC,mBAAmB,WAS1B;IAEF;;;;;;OAMG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B1D;;;;;;OAMG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAsIjE"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { createNode, readInputData, detectMimeTypeFromData, generateId, } from "@markitdownjs/shared";
|
|
2
|
+
/** Magic byte signatures for additional image format detection. */
|
|
3
|
+
const IMAGE_SIGNATURES = [
|
|
4
|
+
{ bytes: [0x89, 0x50, 0x4e, 0x47], mime: "image/png" }, // PNG
|
|
5
|
+
{ bytes: [0xff, 0xd8, 0xff], mime: "image/jpeg" }, // JPEG
|
|
6
|
+
{ bytes: [0x52, 0x49, 0x46, 0x46], mime: "image/webp" }, // RIFF (WebP)
|
|
7
|
+
{ bytes: [0x47, 0x49, 0x46, 0x38], mime: "image/gif" }, // GIF8
|
|
8
|
+
{ bytes: [0x42, 0x4d], mime: "image/bmp" }, // BMP
|
|
9
|
+
{ bytes: [0x49, 0x49, 0x2a, 0x00], mime: "image/tiff" }, // TIFF (little-endian)
|
|
10
|
+
{ bytes: [0x4d, 0x4d, 0x00, 0x2a], mime: "image/tiff" }, // TIFF (big-endian)
|
|
11
|
+
{ bytes: [0x00, 0x00, 0x01, 0x00], mime: "image/x-icon" }, // ICO
|
|
12
|
+
{ bytes: [0x38, 0x50, 0x53, 0x00], mime: "image/vnd.adobe.photoshop" }, // PSD
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Converts a Uint8Array to a base64 string safely, without stack overflow.
|
|
16
|
+
*
|
|
17
|
+
* The naive approach `btoa(String.fromCharCode(...data))` fails for arrays
|
|
18
|
+
* larger than ~64K elements due to JavaScript's maximum call stack size.
|
|
19
|
+
* This function processes data in 8KB chunks to avoid the issue.
|
|
20
|
+
*
|
|
21
|
+
* @param data - The byte array to encode
|
|
22
|
+
* @returns A base64-encoded string
|
|
23
|
+
*/
|
|
24
|
+
function uint8ArrayToBase64(data) {
|
|
25
|
+
let binary = "";
|
|
26
|
+
const chunkSize = 8192;
|
|
27
|
+
for (let i = 0; i < data.length; i += chunkSize) {
|
|
28
|
+
const chunk = data.subarray(i, i + chunkSize);
|
|
29
|
+
binary += String.fromCharCode(...chunk);
|
|
30
|
+
}
|
|
31
|
+
return btoa(binary);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Detects the MIME type of an image from its binary data using magic byte signatures.
|
|
35
|
+
* Falls back to the shared `detectMimeTypeFromData` utility.
|
|
36
|
+
*
|
|
37
|
+
* @param data - The raw image bytes
|
|
38
|
+
* @returns The detected MIME type, or undefined if unrecognized
|
|
39
|
+
*/
|
|
40
|
+
function detectImageMimeType(data) {
|
|
41
|
+
if (data.length < 2)
|
|
42
|
+
return undefined;
|
|
43
|
+
for (const sig of IMAGE_SIGNATURES) {
|
|
44
|
+
if (data.length >= sig.bytes.length) {
|
|
45
|
+
const match = sig.bytes.every((byte, idx) => data[idx] === byte);
|
|
46
|
+
if (match)
|
|
47
|
+
return sig.mime;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return detectMimeTypeFromData(data);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Attempts to extract image dimensions from the raw bytes.
|
|
54
|
+
* Supports PNG (IHDR chunk) and JPEG (SOF marker) formats.
|
|
55
|
+
*
|
|
56
|
+
* @param data - The raw image bytes
|
|
57
|
+
* @param mimeType - The detected MIME type
|
|
58
|
+
* @returns An object with width and height, or undefined if unable to parse
|
|
59
|
+
*/
|
|
60
|
+
function extractImageDimensions(data, mimeType) {
|
|
61
|
+
try {
|
|
62
|
+
if (mimeType === "image/png" && data.length >= 24) {
|
|
63
|
+
// PNG: width at offset 16 (4 bytes BE), height at offset 20 (4 bytes BE)
|
|
64
|
+
const width = (data[16] << 24) | (data[17] << 16) | (data[18] << 8) | data[19];
|
|
65
|
+
const height = (data[20] << 24) | (data[21] << 16) | (data[22] << 8) | data[23];
|
|
66
|
+
if (width > 0 && height > 0)
|
|
67
|
+
return { width, height };
|
|
68
|
+
}
|
|
69
|
+
if (mimeType === "image/jpeg" && data.length >= 4) {
|
|
70
|
+
// JPEG: scan for SOF0 (0xC0) or SOF2 (0xC2) marker
|
|
71
|
+
let offset = 2;
|
|
72
|
+
while (offset < data.length - 9) {
|
|
73
|
+
if (data[offset] !== 0xff)
|
|
74
|
+
break;
|
|
75
|
+
const marker = data[offset + 1];
|
|
76
|
+
if (marker === 0xc0 || marker === 0xc2) {
|
|
77
|
+
const height = (data[offset + 5] << 8) | data[offset + 6];
|
|
78
|
+
const width = (data[offset + 7] << 8) | data[offset + 8];
|
|
79
|
+
if (width > 0 && height > 0)
|
|
80
|
+
return { width, height };
|
|
81
|
+
}
|
|
82
|
+
// Skip to next marker
|
|
83
|
+
const segmentLength = (data[offset + 2] << 8) | data[offset + 3];
|
|
84
|
+
offset += 2 + segmentLength;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (mimeType === "image/gif" && data.length >= 10) {
|
|
88
|
+
// GIF: width at offset 6 (2 bytes LE), height at offset 8 (2 bytes LE)
|
|
89
|
+
const width = data[6] | (data[7] << 8);
|
|
90
|
+
const height = data[8] | (data[9] << 8);
|
|
91
|
+
if (width > 0 && height > 0)
|
|
92
|
+
return { width, height };
|
|
93
|
+
}
|
|
94
|
+
if (mimeType === "image/bmp" && data.length >= 26) {
|
|
95
|
+
// BMP: width at offset 18 (4 bytes LE), height at offset 22 (4 bytes LE)
|
|
96
|
+
const width = data[18] | (data[19] << 8) | (data[20] << 16) | (data[21] << 24);
|
|
97
|
+
const height = data[22] | (data[23] << 8) | (data[24] << 16) | (data[25] << 24);
|
|
98
|
+
if (width > 0 && height > 0)
|
|
99
|
+
return { width, height: Math.abs(height) };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Dimension extraction is best-effort; don't fail conversion
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Renders an array of AST nodes into a Markdown string.
|
|
109
|
+
* This is the local renderMarkdown helper for the image-ocr converter.
|
|
110
|
+
*
|
|
111
|
+
* @param nodes - The AST nodes to render
|
|
112
|
+
* @returns The rendered Markdown string
|
|
113
|
+
*/
|
|
114
|
+
function renderMarkdown(nodes) {
|
|
115
|
+
const parts = [];
|
|
116
|
+
for (const node of nodes) {
|
|
117
|
+
parts.push(renderNode(node));
|
|
118
|
+
}
|
|
119
|
+
return parts.join("\n\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Renders a single AST node into its Markdown representation.
|
|
123
|
+
*
|
|
124
|
+
* @param node - The AST node to render
|
|
125
|
+
* @returns The Markdown string for this node
|
|
126
|
+
*/
|
|
127
|
+
function renderNode(node) {
|
|
128
|
+
switch (node.type) {
|
|
129
|
+
case "heading": {
|
|
130
|
+
const n = node;
|
|
131
|
+
return `${"#".repeat(n.level)} ${renderNodes(n.children)}`;
|
|
132
|
+
}
|
|
133
|
+
case "paragraph": {
|
|
134
|
+
return renderNodes(node.children);
|
|
135
|
+
}
|
|
136
|
+
case "image": {
|
|
137
|
+
const n = node;
|
|
138
|
+
return ``;
|
|
139
|
+
}
|
|
140
|
+
case "code": {
|
|
141
|
+
const n = node;
|
|
142
|
+
return "```" + (n.language ?? "") + "\n" + n.value + "\n```";
|
|
143
|
+
}
|
|
144
|
+
case "text": {
|
|
145
|
+
return node.value;
|
|
146
|
+
}
|
|
147
|
+
default:
|
|
148
|
+
if ("children" in node && Array.isArray(node.children)) {
|
|
149
|
+
return renderNodes(node.children);
|
|
150
|
+
}
|
|
151
|
+
return "";
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Recursively renders an array of AST nodes into a single string.
|
|
156
|
+
*
|
|
157
|
+
* @param nodes - The AST nodes to render
|
|
158
|
+
* @returns The concatenated rendered output
|
|
159
|
+
*/
|
|
160
|
+
function renderNodes(nodes) {
|
|
161
|
+
return nodes.map((n) => renderNode(n)).join("");
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Converts images to text using OCR (Optical Character Recognition).
|
|
165
|
+
*
|
|
166
|
+
* Features:
|
|
167
|
+
* - Chunked base64 encoding to prevent stack overflow on large images
|
|
168
|
+
* - Language selection (defaults to English, configurable)
|
|
169
|
+
* - Image dimension extraction from PNG, JPEG, GIF, and BMP headers
|
|
170
|
+
* - OCR confidence score from tesseract.js (when available)
|
|
171
|
+
* - Magic byte detection for additional image formats
|
|
172
|
+
* - Comprehensive error messages when tesseract.js is not installed
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* const converter = new ImageOcrConverter();
|
|
177
|
+
* const result = await converter.convert({
|
|
178
|
+
* data: pngBuffer,
|
|
179
|
+
* options: { customProperties: { ocrLanguage: "fra" } }
|
|
180
|
+
* });
|
|
181
|
+
* console.log(result.ast); // DocumentNode with image + extracted text
|
|
182
|
+
* console.log(result.markdown);
|
|
183
|
+
* ```
|
|
184
|
+
*/
|
|
185
|
+
export class ImageOcrConverter {
|
|
186
|
+
id = "image-ocr";
|
|
187
|
+
supportedMimeTypes = [
|
|
188
|
+
"image/png",
|
|
189
|
+
"image/jpeg",
|
|
190
|
+
"image/webp",
|
|
191
|
+
"image/tiff",
|
|
192
|
+
"image/bmp",
|
|
193
|
+
"image/gif",
|
|
194
|
+
];
|
|
195
|
+
supportedExtensions = [
|
|
196
|
+
".png",
|
|
197
|
+
".jpg",
|
|
198
|
+
".jpeg",
|
|
199
|
+
".webp",
|
|
200
|
+
".tiff",
|
|
201
|
+
".tif",
|
|
202
|
+
".bmp",
|
|
203
|
+
".gif",
|
|
204
|
+
];
|
|
205
|
+
/**
|
|
206
|
+
* Checks whether this converter can handle the given input.
|
|
207
|
+
* Validates MIME type, file extension, and magic byte signatures.
|
|
208
|
+
*
|
|
209
|
+
* @param input - The conversion input to check
|
|
210
|
+
* @returns True if this converter can process the input
|
|
211
|
+
*/
|
|
212
|
+
async canConvert(input) {
|
|
213
|
+
if (input.mimeType && this.supportedMimeTypes.includes(input.mimeType)) {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
if (input.fileName) {
|
|
217
|
+
const ext = input.fileName
|
|
218
|
+
.slice(input.fileName.lastIndexOf("."))
|
|
219
|
+
.toLowerCase();
|
|
220
|
+
if (this.supportedExtensions.includes(ext)) {
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const data = await readInputData(input.data);
|
|
226
|
+
const detected = detectImageMimeType(data);
|
|
227
|
+
if (detected && this.supportedMimeTypes.includes(detected)) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Converts an image file into text via OCR, producing an AST with the image
|
|
238
|
+
* node and the extracted text as a paragraph.
|
|
239
|
+
*
|
|
240
|
+
* @param input - The image data as Uint8Array, ArrayBuffer, Blob, or string
|
|
241
|
+
* @returns A ConversionResult with the AST, Markdown, and image metadata
|
|
242
|
+
*/
|
|
243
|
+
async convert(input) {
|
|
244
|
+
const startTime = performance.now();
|
|
245
|
+
const data = await readInputData(input.data);
|
|
246
|
+
const mimeType = input.mimeType ?? detectImageMimeType(data) ?? "image/png";
|
|
247
|
+
const imageId = generateId();
|
|
248
|
+
// Extract image dimensions (best-effort, from raw bytes)
|
|
249
|
+
const dimensions = extractImageDimensions(data, mimeType);
|
|
250
|
+
// Determine OCR language from options (default: English)
|
|
251
|
+
const ocrLanguage = input.options?.customProperties?.ocrLanguage ?? "eng";
|
|
252
|
+
// Perform OCR
|
|
253
|
+
let ocrText = "";
|
|
254
|
+
let ocrConfidence;
|
|
255
|
+
let ocrSuccess = false;
|
|
256
|
+
try {
|
|
257
|
+
const Tesseract = await import("tesseract.js");
|
|
258
|
+
const blob = new Blob([new Uint8Array(data)], { type: mimeType });
|
|
259
|
+
const result = await Tesseract.recognize(blob, ocrLanguage, {
|
|
260
|
+
logger: undefined, // suppress verbose logging
|
|
261
|
+
});
|
|
262
|
+
ocrText = result.data.text.trim();
|
|
263
|
+
ocrConfidence = result.data.confidence;
|
|
264
|
+
ocrSuccess = ocrText.length > 0;
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
268
|
+
if (errorMessage.includes("Cannot find module") ||
|
|
269
|
+
errorMessage.includes("MODULE_NOT_FOUND") ||
|
|
270
|
+
errorMessage.includes("tesseract")) {
|
|
271
|
+
ocrText =
|
|
272
|
+
"[OCR unavailable: tesseract.js is not installed. " +
|
|
273
|
+
"Install it with: npm install tesseract.js]";
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
ocrText = `[OCR failed: ${errorMessage}]`;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Build the base64 data URL (using safe chunked encoding)
|
|
280
|
+
const base64 = uint8ArrayToBase64(new Uint8Array(data));
|
|
281
|
+
const dataUrl = `data:${mimeType};base64,${base64}`;
|
|
282
|
+
// Build the AST nodes
|
|
283
|
+
const children = [];
|
|
284
|
+
// Image node with dimension metadata
|
|
285
|
+
const imageNode = createNode({
|
|
286
|
+
type: "image",
|
|
287
|
+
src: dataUrl,
|
|
288
|
+
alt: "OCR source image",
|
|
289
|
+
data: new Uint8Array(data),
|
|
290
|
+
mimeType,
|
|
291
|
+
width: dimensions?.width,
|
|
292
|
+
height: dimensions?.height,
|
|
293
|
+
});
|
|
294
|
+
children.push(imageNode);
|
|
295
|
+
// OCR result paragraph with confidence metadata
|
|
296
|
+
if (ocrText) {
|
|
297
|
+
const textNode = createNode({
|
|
298
|
+
type: "text",
|
|
299
|
+
value: ocrText,
|
|
300
|
+
});
|
|
301
|
+
const paragraphNode = createNode({
|
|
302
|
+
type: "paragraph",
|
|
303
|
+
children: [textNode],
|
|
304
|
+
// Attach confidence as custom property
|
|
305
|
+
confidence: ocrConfidence,
|
|
306
|
+
ocrSuccess,
|
|
307
|
+
ocrLanguage,
|
|
308
|
+
});
|
|
309
|
+
children.push(paragraphNode);
|
|
310
|
+
}
|
|
311
|
+
const documentNode = createNode({
|
|
312
|
+
type: "document",
|
|
313
|
+
children,
|
|
314
|
+
});
|
|
315
|
+
const markdown = renderMarkdown(children);
|
|
316
|
+
const endTime = performance.now();
|
|
317
|
+
const stats = {
|
|
318
|
+
startTime,
|
|
319
|
+
endTime,
|
|
320
|
+
duration: endTime - startTime,
|
|
321
|
+
inputSize: data.length,
|
|
322
|
+
outputSize: new TextEncoder().encode(markdown).byteLength,
|
|
323
|
+
};
|
|
324
|
+
const metadata = {
|
|
325
|
+
wordCount: ocrText.split(/\s+/).filter(Boolean).length,
|
|
326
|
+
format: mimeType,
|
|
327
|
+
customProperties: {
|
|
328
|
+
imageId,
|
|
329
|
+
width: dimensions?.width,
|
|
330
|
+
height: dimensions?.height,
|
|
331
|
+
ocrLanguage,
|
|
332
|
+
ocrConfidence,
|
|
333
|
+
ocrSuccess,
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
return {
|
|
337
|
+
markdown,
|
|
338
|
+
metadata,
|
|
339
|
+
assets: [],
|
|
340
|
+
tables: [],
|
|
341
|
+
images: [
|
|
342
|
+
{
|
|
343
|
+
id: imageId,
|
|
344
|
+
data: new Uint8Array(data),
|
|
345
|
+
mimeType,
|
|
346
|
+
alt: "OCR source image",
|
|
347
|
+
width: dimensions?.width,
|
|
348
|
+
height: dimensions?.height,
|
|
349
|
+
},
|
|
350
|
+
],
|
|
351
|
+
headings: [],
|
|
352
|
+
ast: documentNode,
|
|
353
|
+
format: "markdown",
|
|
354
|
+
converterId: this.id,
|
|
355
|
+
stats,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=ocr-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ocr-converter.js","sourceRoot":"","sources":["../src/ocr-converter.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@markitdownjs/image-ocr",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Image OCR converter for MarkItDownJS",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@markitdownjs/shared": "0.1.0"
|
|
21
|
+
},
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"tesseract.js": ">=5.0.0"
|
|
24
|
+
},
|
|
25
|
+
"peerDependenciesMeta": {
|
|
26
|
+
"tesseract.js": {
|
|
27
|
+
"optional": true
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"tesseract.js": "^5.0.0",
|
|
32
|
+
"typescript": "^5.5.0"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc --project tsconfig.json",
|
|
36
|
+
"dev": "tsc --watch --project tsconfig.json",
|
|
37
|
+
"typecheck": "tsc --noEmit",
|
|
38
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
39
|
+
}
|
|
40
|
+
}
|