UNPKG

feedsmith

Version:

Fast, all‑in‑one feed parser and generator for RSS, Atom, RDF, and JSON Feed, with support for Podcast, iTunes, Dublin Core, and OPML files.

105 lines (104 loc) 6.64 kB
const require_utils = require("../../../common/utils.cjs"); const require_utils$1 = require("../../../namespaces/admin/parse/utils.cjs"); const require_utils$2 = require("../../../namespaces/dc/parse/utils.cjs"); const require_utils$3 = require("../../../namespaces/dcterms/parse/utils.cjs"); const require_utils$4 = require("../../../namespaces/georss/parse/utils.cjs"); const require_utils$5 = require("../../../namespaces/media/parse/utils.cjs"); const require_utils$6 = require("../../../namespaces/slash/parse/utils.cjs"); const require_utils$7 = require("../../../namespaces/sy/parse/utils.cjs"); const require_utils$8 = require("../../../namespaces/wfw/parse/utils.cjs"); const require_utils$9 = require("../../../namespaces/atom/parse/utils.cjs"); const require_utils$10 = require("../../../namespaces/content/parse/utils.cjs"); const require_utils$11 = require("../../../namespaces/rdf/parse/utils.cjs"); //#region src/feeds/rdf/parse/utils.ts const retrieveByAbout = (elements, resourceUri) => { if (!resourceUri) return; return (Array.isArray(elements) ? elements : [elements]).find((el) => el?.["@about"] === resourceUri); }; const findByTocReference = (value, property) => { if (!require_utils.isObject(value)) return; const resourceUri = require_utils.parseString(require_utils.parseSingular(require_utils.parseSingular(value.channel)?.[property])?.["@resource"]); return retrieveByAbout(value[property], resourceUri); }; const parseImage = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ title: require_utils.parseSingularOf(value.title, (value) => require_utils.parseString(require_utils.retrieveText(value))), link: require_utils.parseSingularOf(value.link, (value) => require_utils.parseString(require_utils.retrieveText(value))), url: require_utils.parseSingularOf(value.url, (value) => require_utils.parseString(require_utils.retrieveText(value))), rdf: require_utils$11.retrieveAbout(value) }); }; const retrieveImage = (value) => { return parseImage(findByTocReference(value, "image")) ?? require_utils.parseSingularOf(value?.image, parseImage); }; const parseTextInput = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ title: require_utils.parseSingularOf(value.title, (value) => require_utils.parseString(require_utils.retrieveText(value))), description: require_utils.parseSingularOf(value.description, (value) => require_utils.parseString(require_utils.retrieveText(value))), name: require_utils.parseSingularOf(value.name, (value) => require_utils.parseString(require_utils.retrieveText(value))), link: require_utils.parseSingularOf(value.link, (value) => require_utils.parseString(require_utils.retrieveText(value))), rdf: require_utils$11.retrieveAbout(value) }); }; const retrieveTextInput = (value) => { return parseTextInput(findByTocReference(value, "textinput")) ?? require_utils.parseSingularOf(value?.textinput, parseTextInput); }; const parseItem = (value) => { if (!require_utils.isObject(value)) return; const namespaces = require_utils.detectNamespaces(value); return require_utils.trimObject({ title: require_utils.parseSingularOf(value.title, (value) => require_utils.parseString(require_utils.retrieveText(value))), link: require_utils.parseSingularOf(value.link, (value) => require_utils.parseString(require_utils.retrieveText(value))), description: require_utils.parseSingularOf(value.description, (value) => require_utils.parseString(require_utils.retrieveText(value))), rdf: require_utils$11.retrieveAbout(value), atom: namespaces.has("atom") ? require_utils$9.retrieveEntry(value) : void 0, dc: namespaces.has("dc") ? require_utils$2.retrieveItemOrFeed(value) : void 0, content: namespaces.has("content") ? require_utils$10.retrieveItem(value) : void 0, slash: namespaces.has("slash") ? require_utils$6.retrieveItem(value) : void 0, media: namespaces.has("media") ? require_utils$5.retrieveItemOrFeed(value) : void 0, georss: namespaces.has("georss") ? require_utils$4.retrieveItemOrFeed(value) : void 0, dcterms: namespaces.has("dcterms") ? require_utils$3.retrieveItemOrFeed(value) : void 0, wfw: namespaces.has("wfw") ? require_utils$8.retrieveItem(value) : void 0 }); }; const retrieveItems = (value, options) => { if (!require_utils.isObject(value)) return; const items = require_utils.trimArray(require_utils.parseArrayOf(require_utils.parseSingular(require_utils.parseSingular(require_utils.parseSingular(value.channel)?.items)?.seq)?.li, (li) => require_utils.parseString(li?.["@resource"]), options?.maxItems)?.map((uri) => retrieveByAbout(value.item, uri)), parseItem); if (items?.length) return items; return require_utils.parseArrayOf(value?.item, parseItem, options?.maxItems); }; const parseFeed = (value, options) => { if (!require_utils.isObject(value)) return; const channel = require_utils.parseSingular(value.channel); const namespaces = require_utils.detectNamespaces(channel); return require_utils.trimObject({ title: require_utils.parseSingularOf(channel?.title, (value) => require_utils.parseString(require_utils.retrieveText(value))), link: require_utils.parseSingularOf(channel?.link, (value) => require_utils.parseString(require_utils.retrieveText(value))), description: require_utils.parseSingularOf(channel?.description, (value) => require_utils.parseString(require_utils.retrieveText(value))), image: retrieveImage(value), items: retrieveItems(value, options), textInput: retrieveTextInput(value), rdf: require_utils$11.retrieveAbout(channel), atom: namespaces.has("atom") ? require_utils$9.retrieveFeed(channel) : void 0, dc: namespaces.has("dc") ? require_utils$2.retrieveItemOrFeed(channel) : void 0, sy: namespaces.has("sy") ? require_utils$7.retrieveFeed(channel) : void 0, media: namespaces.has("media") ? require_utils$5.retrieveItemOrFeed(channel) : void 0, georss: namespaces.has("georss") ? require_utils$4.retrieveItemOrFeed(channel) : void 0, dcterms: namespaces.has("dcterms") ? require_utils$3.retrieveItemOrFeed(channel) : void 0, admin: namespaces.has("admin") ? require_utils$1.retrieveFeed(channel) : void 0 }); }; const retrieveFeed = (value, options) => { return require_utils.parseSingularOf(value?.rdf, (value) => parseFeed(value, options)); }; //#endregion exports.parseFeed = parseFeed; exports.parseImage = parseImage; exports.parseItem = parseItem; exports.parseTextInput = parseTextInput; exports.retrieveFeed = retrieveFeed; exports.retrieveImage = retrieveImage; exports.retrieveItems = retrieveItems; exports.retrieveTextInput = retrieveTextInput;