From 239994ac5e7f58e0a9fe5131a851ca386af192ad Mon Sep 17 00:00:00 2001 From: Artemy Date: Tue, 15 Aug 2023 11:18:08 +0300 Subject: [PATCH] refactor: change handlers argument to window --- src/handlers/main.ts | 17 ++++++++++------- src/handlers/readability.ts | 7 +++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/handlers/main.ts b/src/handlers/main.ts index a082260..21b1409 100644 --- a/src/handlers/main.ts +++ b/src/handlers/main.ts @@ -1,9 +1,10 @@ -import axios from "../types/axios"; import { IHandlerOutput } from "./handler.interface"; -import { readability } from "./readability"; + +import axios from "../types/axios"; import { JSDOM } from "jsdom"; -type EngineFunction = (url: Document) => Promise; +import readability from "./readability"; +import { DOMWindow } from "jsdom"; export default async function handlePage( url: string, @@ -15,27 +16,29 @@ export default async function handlePage( } const response = await axios.get(url); - const document = new JSDOM(response.data, { url: url }).window.document; + const window = new JSDOM(response.data, { url: url }).window; const UrlParsed = new URL(originalUrl); - [...document.getElementsByTagName("a")].forEach((link) => { + [...window.document.getElementsByTagName("a")].forEach((link) => { link.href = `${UrlParsed.origin}/?url=${link.href}${ engine && `&engine=${engine}` }`; }); if (engine) { - return engines[engine](document); + return engines[engine](window); } const host = new URL(url).hostname; - return fallback[host](document) || fallback["*"](document); + return fallback[host](window) || fallback["*"](window); } interface Engines { [key: string]: EngineFunction; } +type EngineFunction = (window: DOMWindow) => Promise; + export const engines: Engines = { readability, }; diff --git a/src/handlers/readability.ts b/src/handlers/readability.ts index fc9a011..f4388ea 100644 --- a/src/handlers/readability.ts +++ b/src/handlers/readability.ts @@ -1,8 +1,11 @@ import { Readability } from "@mozilla/readability"; import { IHandlerOutput } from "./handler.interface"; +import { DOMWindow } from "jsdom"; -export async function readability(document: Document): Promise { - const reader = new Readability(document); +export default async function readability( + window: DOMWindow +): Promise { + const reader = new Readability(window.document); const parsed = reader.parse(); if (!parsed) {