Files
wehub-resource-sync c48612c494
CI / E2E Tests (push) Has been cancelled
CI / Lint, Typecheck & Unit Tests (push) Has been cancelled
Docs Build / Build docs site (push) Has been cancelled
Publish @openmaic packages / Build, validate & publish (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:03:23 +08:00

54 lines
1.5 KiB
TypeScript

import { DOCUMENT_MIME_TYPES } from '../mime';
import type { DocumentExtractorProvider } from '../types';
const TEXT_MIME_TYPES = [DOCUMENT_MIME_TYPES.txt, DOCUMENT_MIME_TYPES.markdown, 'text/x-markdown'];
function textDecoderForBuffer(buffer: Buffer): TextDecoder {
if (buffer.length >= 2) {
if (buffer[0] === 0xff && buffer[1] === 0xfe) return new TextDecoder('utf-16le');
if (buffer[0] === 0xfe && buffer[1] === 0xff) return new TextDecoder('utf-16be');
}
if (buffer.length >= 3 && buffer[0] === 0xef && buffer[1] === 0xbb && buffer[2] === 0xbf) {
return new TextDecoder('utf-8');
}
return new TextDecoder('utf-8');
}
export const textDocumentExtractorProvider: DocumentExtractorProvider = {
id: 'plain-text',
displayName: 'Plain Text',
supportedMimeTypes: TEXT_MIME_TYPES,
capabilities: {
text: true,
images: false,
tables: false,
formulas: false,
layout: false,
ocr: false,
async: false,
},
async extract(input) {
const text = textDecoderForBuffer(input.buffer).decode(input.buffer);
const isMarkdown =
input.mimeType === DOCUMENT_MIME_TYPES.markdown || input.mimeType === 'text/x-markdown';
return {
metadata: {
fileName: input.fileName,
fileSize: input.fileSize,
mimeType: input.mimeType,
providerId: 'plain-text',
},
blocks: [
{
id: 'text_1',
type: isMarkdown ? 'markdown' : 'text',
text,
},
],
assets: [],
diagnostics: [],
};
},
};