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
JavaScript
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;