-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.ts
71 lines (61 loc) · 2.19 KB
/
main.ts
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import { indexHtml } from "./src/index-template.ts";
import {
generateJsonData,
generateMarkdownText,
} from "./src/html-to-markdown.ts";
import {
addCorsHeaders,
downloadHeaders,
fetchHtmlText,
generateFilename,
} from "./src/utils.ts";
Deno.serve(async (request: Request) => {
switch (request.method) {
case "GET":
return new Response(indexHtml, {
headers: addCorsHeaders(
new Headers({ "content-type": "text/html" }),
),
});
case "POST": {
try {
const formData = await request.formData();
const download = !!formData.get("download");
const jsonFormat = !!formData.get("json");
const url = formData.get("url") as string;
const urlTextContent = await fetchHtmlText(url);
const headers = new Headers();
addCorsHeaders(headers);
let responseText = "";
if (jsonFormat) {
headers.set("content-type", "application/json");
responseText = generateJsonData(urlTextContent, url);
} else {
headers.set("content-type", "text/plain; charset=utf-8");
responseText = generateMarkdownText(urlTextContent);
}
if (download) {
const fileName = generateFilename(url, jsonFormat);
downloadHeaders(headers, fileName, responseText.length);
}
return new Response(responseText, { headers });
} catch (error) {
console.error("Error processing request:", error);
return new Response(
`Error processing request: ${error.message}`,
{
status: 500,
},
);
}
}
case "OPTIONS":
return new Response(null, {
headers: addCorsHeaders(new Headers()),
});
default:
return new Response("Invalid HTTP method", {
status: 405,
});
}
});