import { Options } from 'xml2js'; import { RequestOptions } from 'https'; declare namespace Parser { type CustomFieldItem = keyof U | (string | { keepArray: boolean })[] export interface CustomFields { readonly feed?: Array; readonly item?: CustomFieldItem[] | CustomFieldItem[][]; } export interface ParserOptions { readonly xml2js?: Options; readonly requestOptions?: RequestOptions; readonly headers?: Record; readonly defaultRSS?: number; readonly maxRedirects?: number; readonly customFields?: CustomFields; readonly timeout?: number; } export interface Enclosure { url: string; length?: number; type?: string; } export interface Item { link?: string; guid?: string; title?: string; pubDate?: string; creator?: string; summary?: string; content?: string; isoDate?: string; categories?: string[]; contentSnippet?: string; enclosure?: Enclosure; } export interface PaginationLinks { self?: string; first?: string; next?: string; last?: string; prev?: string; } export interface Output { image?: { link?: string; url: string; title?: string; }, paginationLinks?: PaginationLinks; link?: string; title?: string; items: (U & Item)[]; feedUrl?: string; description?: string; itunes?: { [key: string]: any; image?: string; owner?: { name?: string; email?: string; }; author?: string; summary?: string; explicit?: string; categories?: string[]; keywords?: string[]; }; } } /** * Class that handles all parsing or URL, or even XML, RSS feed to JSON. */ declare class Parser { /** * @param options - Parser options. */ constructor(options?: Parser.ParserOptions); /** * Parse XML content to JSON. * * @param xml - The xml to be parsed. * @param callback - Traditional callback. * * @returns Promise that has the same Output as the callback. */ parseString( xml: string, callback?: (err: Error, feed: Parser.Output) => void ): Promise>; /** * Parse URL content to JSON. * * @param feedUrl - The url that needs to be parsed to JSON. * @param callback - Traditional callback. * @param redirectCount - Max of redirects, default is set to five. * * @example * await parseURL('https://www.reddit.com/.rss'); * parseURL('https://www.reddit.com/.rss', (err, feed) => { ... }); * * @returns Promise that has the same Output as the callback. */ parseURL( feedUrl: string, callback?: (err: Error, feed: Parser.Output) => void, redirectCount?: number ): Promise>; } export = Parser;