/// import { EventEmitter } from "events"; import { Readable, Writable } from "stream"; import IDetectorFactory from "./detectors"; import IScraperFactory from "./scrapers"; import { IURLHandler } from "./url_handlers"; export interface ICrawler extends EventEmitter { id: string; detector: IDetectorFactory; consumer: Writable; urlHandler: IURLHandler; scraper: IScraperFactory; domain: URL; start(): void; exit(): void; } /** * The DomainCrawler class is responsible for crawling a single website. * It takes a root domain as input (e.g. "reuters.com") * @remarks * The root domain is run through each {@link LinkDetector} * There is a single URLHandler that processes the * URL and emits a {@link WebPage | "url, html"} object */ export default class DomainCrawler extends EventEmitter implements ICrawler { domain: URL; detector: IDetectorFactory; consumer: Writable; urlHandler: IURLHandler; scraper: IScraperFactory; id: string; private detectorStreams; private linkCount; private responseCount; constructor(domain: URL, consumer: Writable, scraper?: IScraperFactory, detector?: IDetectorFactory, urlHandler?: IURLHandler); start(): void; handleURLStream(urlstream: Readable): void; handleHTMLStream(htmlstream: Readable, url: URL): void; exit(): void; }