/
FeedHandler.ts
52 lines (46 loc) · 1.38 KB
/
FeedHandler.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
import DomHandler, { DomHandlerOptions } from "domhandler";
import { getFeed, Feed } from "domutils";
import { Parser, ParserOptions } from "./Parser.js";
export { getFeed };
/** @deprecated Handler is no longer necessary; use `getFeed` or `parseFeed` instead. */
export class FeedHandler extends DomHandler {
feed?: Feed;
/**
*
* @param callback
* @param options
*/
constructor(
callback?: ((error: Error | null) => void) | DomHandlerOptions,
options?: DomHandlerOptions
) {
if (typeof callback === "object") {
callback = undefined;
options = callback;
}
super(callback, options);
}
override onend(): void {
const feed = getFeed(this.dom);
if (feed) {
this.feed = feed;
this.handleCallback(null);
} else {
this.handleCallback(new Error("couldn't find root of feed"));
}
}
}
/**
* Parse a feed.
*
* @param feed The feed that should be parsed, as a string.
* @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`.
*/
export function parseFeed(
feed: string,
options: ParserOptions & DomHandlerOptions = { xmlMode: true }
): Feed | null {
const handler = new DomHandler(null, options);
new Parser(handler, options).end(feed);
return getFeed(handler.dom);
}