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
import { fetchText } from "https://esm.town/v/stevekrouse/fetchText";
import { Readability } from "npm:@mozilla/readability";
// @ts-expect-error
import jsdom from "npm:jsdom";
const JSDOM = jsdom.JSDOM;
export function readableHtml(urlOrContent: URL | string, options?: RequestInit): Promise<string> {
if (typeof urlOrContent === "string") {
return readableHtmlFromText(urlOrContent);
} else {
return readableHtmlFromUrl(urlOrContent);
}
}
export default readableHtml;
async function readableHtmlFromUrl(url: URL, options?: RequestInit): Promise<string> {
const body = await fetchText(url.toString(), options);
return readableHtmlFromText(body);
}
async function readableHtmlFromText(content: string): Promise<string> {
let doc = new JSDOM(content);
let reader = new Readability(doc.window.document);
let article = reader.parse();
return article.textContent;
}