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.
213 lines (212 loc) • 14.4 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/cc/parse/utils.cjs");
const require_utils$3 = require("../../../namespaces/creativecommons/parse/utils.cjs");
const require_utils$4 = require("../../../namespaces/dc/parse/utils.cjs");
const require_utils$5 = require("../../../namespaces/dcterms/parse/utils.cjs");
const require_utils$6 = require("../../../namespaces/geo/parse/utils.cjs");
const require_utils$7 = require("../../../namespaces/georss/parse/utils.cjs");
const require_utils$8 = require("../../../namespaces/googleplay/parse/utils.cjs");
const require_utils$9 = require("../../../namespaces/itunes/parse/utils.cjs");
const require_utils$10 = require("../../../namespaces/media/parse/utils.cjs");
const require_utils$11 = require("../../../namespaces/opensearch/parse/utils.cjs");
const require_utils$12 = require("../../../namespaces/pingback/parse/utils.cjs");
const require_utils$13 = require("../../../namespaces/psc/parse/utils.cjs");
const require_utils$14 = require("../../../namespaces/slash/parse/utils.cjs");
const require_utils$15 = require("../../../namespaces/sy/parse/utils.cjs");
const require_utils$16 = require("../../../namespaces/thr/parse/utils.cjs");
const require_utils$17 = require("../../../namespaces/trackback/parse/utils.cjs");
const require_utils$18 = require("../../../namespaces/wfw/parse/utils.cjs");
const require_utils$19 = require("../../../namespaces/atom/parse/utils.cjs");
const require_utils$20 = require("../../../namespaces/content/parse/utils.cjs");
const require_utils$21 = require("../../../namespaces/acast/parse/utils.cjs");
const require_utils$22 = require("../../../namespaces/blogchannel/parse/utils.cjs");
const require_utils$23 = require("../../../namespaces/feedpress/parse/utils.cjs");
const require_utils$24 = require("../../../namespaces/podcast/parse/utils.cjs");
const require_utils$25 = require("../../../namespaces/prism/parse/utils.cjs");
const require_utils$26 = require("../../../namespaces/rawvoice/parse/utils.cjs");
const require_utils$27 = require("../../../namespaces/source/parse/utils.cjs");
const require_utils$28 = require("../../../namespaces/spotify/parse/utils.cjs");
//#region src/feeds/rss/parse/utils.ts
const parsePerson = (value) => {
return require_utils.parseSingularOf(value?.name ?? value, (value) => require_utils.parseString(require_utils.retrieveText(value)));
};
const parseCategory = (value) => {
return require_utils.trimObject({
name: require_utils.parseString(require_utils.retrieveText(value)),
domain: require_utils.parseString(value?.["@domain"])
});
};
const parseCloud = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
domain: require_utils.parseString(value["@domain"]),
port: require_utils.parseNumber(value["@port"]),
path: require_utils.parseString(value["@path"]),
registerProcedure: require_utils.parseString(value["@registerprocedure"]),
protocol: require_utils.parseString(value["@protocol"])
});
};
const parseImage = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
url: require_utils.parseSingularOf(value.url, (value) => require_utils.parseString(require_utils.retrieveText(value))),
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))),
height: require_utils.parseSingularOf(value.height, (value) => require_utils.parseNumber(require_utils.retrieveText(value))),
width: require_utils.parseSingularOf(value.width, (value) => require_utils.parseNumber(require_utils.retrieveText(value)))
});
};
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)))
});
};
const retrieveImage = (value) => {
return require_utils.parseSingularOf(require_utils.parseSingular(value?.channel)?.image, parseImage) ?? require_utils.parseSingularOf(value?.image, parseImage);
};
const retrieveTextInput = (value) => {
return require_utils.parseSingularOf(require_utils.parseSingular(value?.channel)?.textinput, parseTextInput) ?? require_utils.parseSingularOf(value?.textinput, parseTextInput);
};
const retrieveItems = (value, options) => {
return require_utils.parseArrayOf(require_utils.parseSingular(value?.channel)?.item, parseItem, options?.maxItems) ?? require_utils.parseArrayOf(value?.item, parseItem, options?.maxItems);
};
const parseSkipHours = (value) => {
return require_utils.trimArray(value?.hour, (value) => require_utils.parseNumber(require_utils.retrieveText(value)));
};
const parseSkipDays = (value) => {
return require_utils.trimArray(value?.day, (value) => require_utils.parseString(require_utils.retrieveText(value)));
};
const parseEnclosure = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
url: require_utils.parseString(value["@url"]),
length: require_utils.parseNumber(value["@length"]),
type: require_utils.parseString(value["@type"])
});
};
const parseGuid = (value) => {
return require_utils.trimObject({
value: require_utils.parseString(require_utils.retrieveText(value)),
isPermaLink: require_utils.parseBoolean(value?.["@ispermalink"])
});
};
const parseSource = (value) => {
return require_utils.trimObject({
title: require_utils.parseString(require_utils.retrieveText(value)),
url: require_utils.parseString(value?.["@url"])
});
};
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))),
authors: require_utils.parseArrayOf(value.author, parsePerson),
categories: require_utils.parseArrayOf(value.category, parseCategory),
comments: require_utils.parseSingularOf(value.comments, (value) => require_utils.parseString(require_utils.retrieveText(value))),
enclosures: require_utils.parseArrayOf(value.enclosure, parseEnclosure),
guid: require_utils.parseSingularOf(value.guid, parseGuid),
pubDate: require_utils.parseSingularOf(value.pubdate, (value) => require_utils.parseDate(require_utils.retrieveText(value))),
source: require_utils.parseSingularOf(value.source, parseSource),
atom: namespaces.has("atom") ? require_utils$19.retrieveEntry(value) : void 0,
cc: namespaces.has("cc") ? require_utils$2.retrieveItemOrFeed(value) : void 0,
dc: namespaces.has("dc") ? require_utils$4.retrieveItemOrFeed(value) : void 0,
content: namespaces.has("content") ? require_utils$20.retrieveItem(value) : void 0,
creativeCommons: namespaces.has("creativecommons") ? require_utils$3.retrieveItemOrFeed(value) : void 0,
slash: namespaces.has("slash") ? require_utils$14.retrieveItem(value) : void 0,
itunes: namespaces.has("itunes") ? require_utils$9.retrieveItem(value) : void 0,
podcast: namespaces.has("podcast") ? require_utils$24.retrieveItem(value) : void 0,
psc: namespaces.has("psc") ? require_utils$13.retrieveItem(value) : void 0,
googleplay: namespaces.has("googleplay") ? require_utils$8.retrieveItem(value) : void 0,
media: namespaces.has("media") ? require_utils$10.retrieveItemOrFeed(value) : void 0,
georss: namespaces.has("georss") ? require_utils$7.retrieveItemOrFeed(value) : void 0,
geo: namespaces.has("geo") ? require_utils$6.retrieveItemOrFeed(value) : void 0,
thr: namespaces.has("thr") ? require_utils$16.retrieveItem(value) : void 0,
dcterms: namespaces.has("dcterms") ? require_utils$5.retrieveItemOrFeed(value) : void 0,
prism: namespaces.has("prism") ? require_utils$25.retrieveItem(value) : void 0,
wfw: namespaces.has("wfw") ? require_utils$18.retrieveItem(value) : void 0,
sourceNs: namespaces.has("source") ? require_utils$27.retrieveItem(value) : void 0,
rawvoice: namespaces.has("rawvoice") ? require_utils$26.retrieveItem(value) : void 0,
spotify: namespaces.has("spotify") ? require_utils$28.retrieveItem(value) : void 0,
pingback: namespaces.has("pingback") ? require_utils$12.retrieveItem(value) : void 0,
trackback: namespaces.has("trackback") ? require_utils$17.retrieveItem(value) : void 0,
acast: namespaces.has("acast") ? require_utils$21.retrieveItem(value) : void 0
});
};
const parseFeed = (value, options) => {
const channel = require_utils.parseSingular(value?.channel);
if (!require_utils.isObject(channel)) return;
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))),
language: require_utils.parseSingularOf(channel.language, (value) => require_utils.parseString(require_utils.retrieveText(value))),
copyright: require_utils.parseSingularOf(channel.copyright, (value) => require_utils.parseString(require_utils.retrieveText(value))),
managingEditor: require_utils.parseSingularOf(channel.managingeditor, parsePerson),
webMaster: require_utils.parseSingularOf(channel.webmaster, parsePerson),
pubDate: require_utils.parseSingularOf(channel.pubdate, (value) => require_utils.parseDate(require_utils.retrieveText(value))),
lastBuildDate: require_utils.parseSingularOf(channel.lastbuilddate, (value) => require_utils.parseDate(require_utils.retrieveText(value))),
categories: require_utils.parseArrayOf(channel.category, parseCategory),
generator: require_utils.parseSingularOf(channel.generator, (value) => require_utils.parseString(require_utils.retrieveText(value))),
docs: require_utils.parseSingularOf(channel.docs, (value) => require_utils.parseString(require_utils.retrieveText(value))),
cloud: require_utils.parseSingularOf(channel.cloud, parseCloud),
ttl: require_utils.parseSingularOf(channel.ttl, (value) => require_utils.parseNumber(require_utils.retrieveText(value))),
image: retrieveImage(value),
rating: require_utils.parseSingularOf(channel.rating, (value) => require_utils.parseString(require_utils.retrieveText(value))),
textInput: retrieveTextInput(value),
skipHours: require_utils.parseSingularOf(channel.skiphours, parseSkipHours),
skipDays: require_utils.parseSingularOf(channel.skipdays, parseSkipDays),
items: retrieveItems(value, options),
atom: namespaces.has("atom") ? require_utils$19.retrieveFeed(channel) : void 0,
cc: namespaces.has("cc") ? require_utils$2.retrieveItemOrFeed(channel) : void 0,
dc: namespaces.has("dc") ? require_utils$4.retrieveItemOrFeed(channel) : void 0,
sy: namespaces.has("sy") ? require_utils$15.retrieveFeed(channel) : void 0,
itunes: namespaces.has("itunes") ? require_utils$9.retrieveFeed(channel) : void 0,
podcast: namespaces.has("podcast") ? require_utils$24.retrieveFeed(channel) : void 0,
googleplay: namespaces.has("googleplay") ? require_utils$8.retrieveFeed(channel) : void 0,
media: namespaces.has("media") ? require_utils$10.retrieveItemOrFeed(channel) : void 0,
georss: namespaces.has("georss") ? require_utils$7.retrieveItemOrFeed(channel) : void 0,
geo: namespaces.has("geo") ? require_utils$6.retrieveItemOrFeed(channel) : void 0,
dcterms: namespaces.has("dcterms") ? require_utils$5.retrieveItemOrFeed(channel) : void 0,
prism: namespaces.has("prism") ? require_utils$25.retrieveFeed(channel) : void 0,
creativeCommons: namespaces.has("creativecommons") ? require_utils$3.retrieveItemOrFeed(channel) : void 0,
feedpress: namespaces.has("feedpress") ? require_utils$23.retrieveFeed(channel) : void 0,
opensearch: namespaces.has("opensearch") ? require_utils$11.retrieveFeed(channel) : void 0,
admin: namespaces.has("admin") ? require_utils$1.retrieveFeed(channel) : void 0,
sourceNs: namespaces.has("source") ? require_utils$27.retrieveFeed(channel) : void 0,
blogChannel: namespaces.has("blogchannel") ? require_utils$22.retrieveFeed(channel) : void 0,
rawvoice: namespaces.has("rawvoice") ? require_utils$26.retrieveFeed(channel) : void 0,
spotify: namespaces.has("spotify") ? require_utils$28.retrieveFeed(channel) : void 0,
pingback: namespaces.has("pingback") ? require_utils$12.retrieveFeed(channel) : void 0,
acast: namespaces.has("acast") ? require_utils$21.retrieveFeed(channel) : void 0
});
};
const retrieveFeed = (value, options) => {
return require_utils.parseSingularOf(value?.rss, (value) => parseFeed(value, options));
};
//#endregion
exports.parseCategory = parseCategory;
exports.parseCloud = parseCloud;
exports.parseEnclosure = parseEnclosure;
exports.parseFeed = parseFeed;
exports.parseGuid = parseGuid;
exports.parseImage = parseImage;
exports.parseItem = parseItem;
exports.parsePerson = parsePerson;
exports.parseSkipDays = parseSkipDays;
exports.parseSkipHours = parseSkipHours;
exports.parseSource = parseSource;
exports.parseTextInput = parseTextInput;
exports.retrieveFeed = retrieveFeed;
exports.retrieveImage = retrieveImage;
exports.retrieveItems = retrieveItems;
exports.retrieveTextInput = retrieveTextInput;