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.
211 lines (210 loc) • 10.5 kB
JavaScript
const require_config = require("../../../common/config.cjs");
const require_utils = require("../../../common/utils.cjs");
const require_utils$1 = require("../../../namespaces/admin/generate/utils.cjs");
const require_utils$2 = require("../../../namespaces/cc/generate/utils.cjs");
const require_utils$3 = require("../../../namespaces/creativecommons/generate/utils.cjs");
const require_utils$4 = require("../../../namespaces/dc/generate/utils.cjs");
const require_utils$5 = require("../../../namespaces/dcterms/generate/utils.cjs");
const require_utils$6 = require("../../../namespaces/geo/generate/utils.cjs");
const require_utils$7 = require("../../../namespaces/georss/generate/utils.cjs");
const require_utils$8 = require("../../../namespaces/googleplay/generate/utils.cjs");
const require_utils$9 = require("../../../namespaces/itunes/generate/utils.cjs");
const require_utils$10 = require("../../../namespaces/media/generate/utils.cjs");
const require_utils$11 = require("../../../namespaces/opensearch/generate/utils.cjs");
const require_utils$12 = require("../../../namespaces/pingback/generate/utils.cjs");
const require_utils$13 = require("../../../namespaces/psc/generate/utils.cjs");
const require_utils$14 = require("../../../namespaces/slash/generate/utils.cjs");
const require_utils$15 = require("../../../namespaces/sy/generate/utils.cjs");
const require_utils$16 = require("../../../namespaces/thr/generate/utils.cjs");
const require_utils$17 = require("../../../namespaces/trackback/generate/utils.cjs");
const require_utils$18 = require("../../../namespaces/wfw/generate/utils.cjs");
const require_utils$19 = require("../../../namespaces/acast/generate/utils.cjs");
const require_utils$20 = require("../../../namespaces/atom/generate/utils.cjs");
const require_utils$21 = require("../../../namespaces/blogchannel/generate/utils.cjs");
const require_utils$22 = require("../../../namespaces/content/generate/utils.cjs");
const require_utils$23 = require("../../../namespaces/feedpress/generate/utils.cjs");
const require_utils$24 = require("../../../namespaces/podcast/generate/utils.cjs");
const require_utils$25 = require("../../../namespaces/prism/generate/utils.cjs");
const require_utils$26 = require("../../../namespaces/rawvoice/generate/utils.cjs");
const require_utils$27 = require("../../../namespaces/source/generate/utils.cjs");
const require_utils$28 = require("../../../namespaces/spotify/generate/utils.cjs");
//#region src/feeds/rss/generate/utils.ts
const generatePerson = (person) => {
if (require_utils.isObject(person)) {
const name = require_utils.generatePlainString(person.name);
const email = require_utils.generatePlainString(person.email);
if (email && name) return require_utils.generateCdataString(`${email} (${name})`);
if (name) return require_utils.generateCdataString(name);
if (email) return require_utils.generateCdataString(email);
return;
}
return require_utils.generateCdataString(person);
};
const generateCategory = (category) => {
if (!require_utils.isObject(category)) return;
return require_utils.trimObject({
"@domain": require_utils.generatePlainString(category.domain),
...require_utils.generateTextOrCdataString(category.name)
});
};
const generateCloud = (cloud) => {
if (!require_utils.isObject(cloud)) return;
return require_utils.trimObject({
"@domain": require_utils.generatePlainString(cloud.domain),
"@port": require_utils.generateNumber(cloud.port),
"@path": require_utils.generatePlainString(cloud.path),
"@registerProcedure": require_utils.generatePlainString(cloud.registerProcedure),
"@protocol": require_utils.generatePlainString(cloud.protocol)
});
};
const generateImage = (image) => {
if (!require_utils.isObject(image)) return;
return require_utils.trimObject({
url: require_utils.generateCdataString(image.url),
title: require_utils.generateCdataString(image.title),
link: require_utils.generateCdataString(image.link),
description: require_utils.generateCdataString(image.description),
height: require_utils.generateNumber(image.height),
width: require_utils.generateNumber(image.width)
});
};
const generateTextInput = (textInput) => {
if (!require_utils.isObject(textInput)) return;
return require_utils.trimObject({
title: require_utils.generateCdataString(textInput.title),
description: require_utils.generateCdataString(textInput.description),
name: require_utils.generateCdataString(textInput.name),
link: require_utils.generateCdataString(textInput.link)
});
};
const generateEnclosure = (enclosure) => {
if (!require_utils.isObject(enclosure)) return;
return require_utils.trimObject({
"@url": require_utils.generatePlainString(enclosure.url),
"@length": require_utils.generateNumber(enclosure.length),
"@type": require_utils.generatePlainString(enclosure.type)
});
};
const generateSkipHours = (skipHours) => {
return require_utils.trimObject({ hour: require_utils.trimArray(skipHours, require_utils.generateNumber) });
};
const generateSkipDays = (skipDays) => {
return require_utils.trimObject({ day: require_utils.trimArray(skipDays, require_utils.generateCdataString) });
};
const generateGuid = (guid) => {
return require_utils.trimObject({
...require_utils.generateTextOrCdataString(guid?.value),
"@isPermaLink": require_utils.generateBoolean(guid?.isPermaLink)
});
};
const generateSource = (source) => {
if (!require_utils.isObject(source)) return;
return require_utils.trimObject({
...require_utils.generateTextOrCdataString(source.title),
"@url": require_utils.generatePlainString(source.url)
});
};
const generateItem = (item) => {
if (!require_utils.isObject(item)) return;
return require_utils.trimObject({
title: require_utils.generateCdataString(item.title),
link: require_utils.generateCdataString(item.link),
description: require_utils.generateCdataString(item.description),
author: require_utils.trimArray(item.authors, generatePerson),
category: require_utils.trimArray(item.categories, generateCategory),
comments: require_utils.generateCdataString(item.comments),
enclosure: require_utils.trimArray(item.enclosures, generateEnclosure),
guid: generateGuid(item.guid),
pubDate: require_utils.generateRfc822Date(item.pubDate),
source: generateSource(item.source),
...require_utils$20.generateEntry(item.atom),
...require_utils$2.generateItemOrFeed(item.cc),
...require_utils$4.generateItemOrFeed(item.dc),
...require_utils$22.generateItem(item.content),
...require_utils$3.generateItemOrFeed(item.creativeCommons),
...require_utils$14.generateItem(item.slash),
...require_utils$9.generateItem(item.itunes),
...require_utils$24.generateItem(item.podcast),
...require_utils$13.generateItem(item.psc),
...require_utils$8.generateItem(item.googleplay),
...require_utils$10.generateItemOrFeed(item.media),
...require_utils$7.generateItemOrFeed(item.georss),
...require_utils$6.generateItemOrFeed(item.geo),
...require_utils$16.generateItem(item.thr),
...require_utils$5.generateItemOrFeed(item.dcterms),
...require_utils$25.generateItem(item.prism),
...require_utils$18.generateItem(item.wfw),
...require_utils$27.generateItem(item.sourceNs),
...require_utils$26.generateItem(item.rawvoice),
...require_utils$28.generateItem(item.spotify),
...require_utils$12.generateItem(item.pingback),
...require_utils$17.generateItem(item.trackback),
...require_utils$19.generateItem(item.acast)
});
};
const generateFeed = (feed) => {
if (!require_utils.isObject(feed)) return;
const trimmedValue = require_utils.trimObject({
title: require_utils.generateCdataString(feed.title),
link: require_utils.generateCdataString(feed.link),
description: require_utils.generateCdataString(feed.description),
language: require_utils.generateCdataString(feed.language),
copyright: require_utils.generateCdataString(feed.copyright),
managingEditor: generatePerson(feed.managingEditor),
webMaster: generatePerson(feed.webMaster),
pubDate: require_utils.generateRfc822Date(feed.pubDate),
lastBuildDate: require_utils.generateRfc822Date(feed.lastBuildDate),
category: require_utils.trimArray(feed.categories, generateCategory),
generator: require_utils.generateCdataString(feed.generator),
docs: require_utils.generateCdataString(feed.docs),
cloud: generateCloud(feed.cloud),
ttl: require_utils.generateNumber(feed.ttl),
image: generateImage(feed.image),
rating: require_utils.generateCdataString(feed.rating),
textInput: generateTextInput(feed.textInput),
skipHours: generateSkipHours(feed.skipHours),
skipDays: generateSkipDays(feed.skipDays),
...require_utils$20.generateFeed(feed.atom),
...require_utils$2.generateItemOrFeed(feed.cc),
...require_utils$4.generateItemOrFeed(feed.dc),
...require_utils$15.generateFeed(feed.sy),
...require_utils$9.generateFeed(feed.itunes),
...require_utils$24.generateFeed(feed.podcast),
...require_utils$8.generateFeed(feed.googleplay),
...require_utils$10.generateItemOrFeed(feed.media),
...require_utils$7.generateItemOrFeed(feed.georss),
...require_utils$6.generateItemOrFeed(feed.geo),
...require_utils$5.generateItemOrFeed(feed.dcterms),
...require_utils$25.generateFeed(feed.prism),
...require_utils$3.generateItemOrFeed(feed.creativeCommons),
...require_utils$23.generateFeed(feed.feedpress),
...require_utils$11.generateFeed(feed.opensearch),
...require_utils$1.generateFeed(feed.admin),
...require_utils$27.generateFeed(feed.sourceNs),
...require_utils$21.generateFeed(feed.blogChannel),
...require_utils$26.generateFeed(feed.rawvoice),
...require_utils$28.generateFeed(feed.spotify),
...require_utils$12.generateFeed(feed.pingback),
...require_utils$19.generateFeed(feed.acast),
item: require_utils.trimArray(feed.items, generateItem)
});
if (!trimmedValue) return;
return { rss: {
"@version": "2.0",
...require_utils.generateNamespaceAttrs(trimmedValue, require_config.namespaceUris),
channel: trimmedValue
} };
};
//#endregion
exports.generateCategory = generateCategory;
exports.generateCloud = generateCloud;
exports.generateEnclosure = generateEnclosure;
exports.generateFeed = generateFeed;
exports.generateGuid = generateGuid;
exports.generateImage = generateImage;
exports.generateItem = generateItem;
exports.generatePerson = generatePerson;
exports.generateSkipDays = generateSkipDays;
exports.generateSkipHours = generateSkipHours;
exports.generateSource = generateSource;
exports.generateTextInput = generateTextInput;