File size: 1,429 Bytes
676fc08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { readTextFromFile } from "./textParser";

const TextFormatFileMimeTypes = [
  "application/json",
  "application/ld+json",
  "application/vnd.api+json",
  "application/xhtml+xml",
  "application/xml",
  "application/atom+xml",
  "application/rss+xml",
  "application/x-yaml",
  "application/rtf",
  "application/x-javascript",
  "application/x-typescript",
  "application/ecmascript",
  "application/x-python",
  "application/x-httpd-php",
  "application/x-latex",
  "application/x-sh",
  "application/x-csh",
  "image/svg+xml",
];

export async function fileParser(file: File): Promise<string> {
  if (
    file.type.startsWith("text/") ||
    TextFormatFileMimeTypes.includes(file.type)
  ) {
    return await readTextFromFile(file);
  } else if (
    file.type.startsWith("application/vnd.openxmlformats-officedocument") ||
    file.type.startsWith("application/vnd.oasis.opendocument")
  ) {
    const { readTextFromOffice } = await import("./officeParser");
    const result = await readTextFromOffice(file);
    if (result instanceof File) {
      return await readTextFromFile(result);
    } else if (typeof result === "string") {
      return result;
    } else {
      return "";
    }
  } else if (file.type === "application/pdf") {
    const { readTextFromPDF } = await import("./pdfParser");
    return await readTextFromPDF(file);
  } else {
    throw new Error(`Unsupported file type: ${file.type}`);
  }
}