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.
185 lines (184 loc) • 9.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/app/generate/utils.cjs");
const require_utils$3 = require("../../../namespaces/arxiv/generate/utils.cjs");
const require_utils$4 = require("../../../namespaces/cc/generate/utils.cjs");
const require_utils$5 = require("../../../namespaces/creativecommons/generate/utils.cjs");
const require_utils$6 = require("../../../namespaces/dc/generate/utils.cjs");
const require_utils$7 = require("../../../namespaces/dcterms/generate/utils.cjs");
const require_utils$8 = require("../../../namespaces/geo/generate/utils.cjs");
const require_utils$9 = require("../../../namespaces/georss/generate/utils.cjs");
const require_utils$10 = require("../../../namespaces/googleplay/generate/utils.cjs");
const require_utils$11 = require("../../../namespaces/itunes/generate/utils.cjs");
const require_utils$12 = require("../../../namespaces/media/generate/utils.cjs");
const require_utils$13 = require("../../../namespaces/opensearch/generate/utils.cjs");
const require_utils$14 = require("../../../namespaces/pingback/generate/utils.cjs");
const require_utils$15 = require("../../../namespaces/psc/generate/utils.cjs");
const require_utils$16 = require("../../../namespaces/slash/generate/utils.cjs");
const require_utils$17 = require("../../../namespaces/sy/generate/utils.cjs");
const require_utils$18 = require("../../../namespaces/thr/generate/utils.cjs");
const require_utils$19 = require("../../../namespaces/trackback/generate/utils.cjs");
const require_utils$20 = require("../../../namespaces/wfw/generate/utils.cjs");
const require_utils$21 = require("../../../namespaces/yt/generate/utils.cjs");
//#region src/feeds/atom/generate/utils.ts
const createNamespaceSetter = (prefix) => {
return (key) => prefix ? `${prefix}${key}` : key;
};
const generateText = (text) => {
return require_utils.generateCdataString(text);
};
const generateLink = (link) => {
if (!require_utils.isObject(link)) return;
return require_utils.trimObject({
"@href": require_utils.generatePlainString(link.href),
"@rel": require_utils.generatePlainString(link.rel),
"@type": require_utils.generatePlainString(link.type),
"@hreflang": require_utils.generatePlainString(link.hreflang),
"@title": require_utils.generatePlainString(link.title),
"@length": require_utils.generateNumber(link.length),
...require_utils$18.generateLink(link.thr)
});
};
const generatePerson = (person, options) => {
if (!require_utils.isObject(person)) return;
const key = createNamespaceSetter(options?.prefix);
return require_utils.trimObject({
[key("name")]: require_utils.generateCdataString(person.name),
[key("uri")]: require_utils.generateCdataString(person.uri),
[key("email")]: require_utils.generateCdataString(person.email),
...require_utils$3.generateAuthor(person.arxiv)
});
};
const generateCategory = (category) => {
if (!require_utils.isObject(category)) return;
return require_utils.trimObject({
"@term": require_utils.generatePlainString(category.term),
"@scheme": require_utils.generatePlainString(category.scheme),
"@label": require_utils.generatePlainString(category.label)
});
};
const generateGenerator = (generator) => {
if (!require_utils.isObject(generator)) return;
return require_utils.trimObject({
...require_utils.generateTextOrCdataString(generator.text),
"@uri": require_utils.generatePlainString(generator.uri),
"@version": require_utils.generatePlainString(generator.version)
});
};
const generateSource = (source, options) => {
if (!require_utils.isObject(source)) return;
const key = createNamespaceSetter(options?.prefix);
return require_utils.trimObject({
[key("author")]: require_utils.trimArray(source.authors, (author) => generatePerson(author, options)),
[key("category")]: require_utils.trimArray(source.categories, (category) => generateCategory(category, options)),
[key("contributor")]: require_utils.trimArray(source.contributors, (contributor) => generatePerson(contributor, options)),
[key("generator")]: generateGenerator(source.generator),
[key("icon")]: require_utils.generateCdataString(source.icon),
[key("id")]: require_utils.generateCdataString(source.id),
[key("link")]: require_utils.trimArray(source.links, (link) => generateLink(link, options)),
[key("logo")]: require_utils.generateCdataString(source.logo),
[key("rights")]: generateText(source.rights),
[key("subtitle")]: generateText(source.subtitle),
[key("title")]: generateText(source.title),
[key("updated")]: require_utils.generateRfc3339Date(source.updated)
});
};
const generateEntry = (entry, options) => {
if (!require_utils.isObject(entry)) return;
const key = createNamespaceSetter(options?.prefix);
const trimmedValue = require_utils.trimObject({
[key("author")]: require_utils.trimArray(entry.authors, generatePerson),
[key("category")]: require_utils.trimArray(entry.categories, generateCategory),
[key("content")]: generateText(entry.content),
[key("contributor")]: require_utils.trimArray(entry.contributors, (contributor) => generatePerson(contributor, options)),
[key("id")]: require_utils.generateCdataString(entry.id),
[key("link")]: require_utils.trimArray(entry.links, (link) => generateLink(link, options)),
[key("published")]: require_utils.generateRfc3339Date(entry.published),
[key("rights")]: generateText(entry.rights),
[key("source")]: generateSource(entry.source),
[key("summary")]: generateText(entry.summary),
[key("title")]: generateText(entry.title),
[key("updated")]: require_utils.generateRfc3339Date(entry.updated)
});
if (!trimmedValue) return;
if (options?.asNamespace) return trimmedValue;
return {
...trimmedValue,
...require_utils$2.generateEntry(entry.app),
...require_utils$3.generateEntry(entry.arxiv),
...require_utils$4.generateItemOrFeed(entry.cc),
...require_utils$6.generateItemOrFeed(entry.dc),
...require_utils$16.generateItem(entry.slash),
...require_utils$11.generateItem(entry.itunes),
...require_utils$10.generateItem(entry.googleplay),
...require_utils$15.generateItem(entry.psc),
...require_utils$12.generateItemOrFeed(entry.media),
...require_utils$9.generateItemOrFeed(entry.georss),
...require_utils$8.generateItemOrFeed(entry.geo),
...require_utils$18.generateItem(entry.thr),
...require_utils$7.generateItemOrFeed(entry.dcterms),
...require_utils$5.generateItemOrFeed(entry.creativeCommons),
...require_utils$20.generateItem(entry.wfw),
...require_utils$21.generateItem(entry.yt),
...require_utils$14.generateItem(entry.pingback),
...require_utils$19.generateItem(entry.trackback)
};
};
const generateFeed = (feed, options) => {
if (!require_utils.isObject(feed)) return;
const key = createNamespaceSetter(options?.prefix);
const valueFeed = require_utils.trimObject({
[key("author")]: require_utils.trimArray(feed.authors, (author) => generatePerson(author, options)),
[key("category")]: require_utils.trimArray(feed.categories, (category) => generateCategory(category, options)),
[key("contributor")]: require_utils.trimArray(feed.contributors, (contributor) => generatePerson(contributor, options)),
[key("generator")]: generateGenerator(feed.generator),
[key("icon")]: require_utils.generateCdataString(feed.icon),
[key("id")]: require_utils.generateCdataString(feed.id),
[key("link")]: require_utils.trimArray(feed.links, (link) => generateLink(link, options)),
[key("logo")]: require_utils.generateCdataString(feed.logo),
[key("rights")]: generateText(feed.rights),
[key("subtitle")]: generateText(feed.subtitle),
[key("title")]: generateText(feed.title),
[key("updated")]: require_utils.generateRfc3339Date(feed.updated)
});
const valueEntries = require_utils.trimObject({ [key("entry")]: require_utils.trimArray(feed.entries, (entry) => generateEntry(entry, options)) });
if (!valueFeed && !valueEntries) return;
if (options?.asNamespace) return { feed: {
...valueFeed,
...valueEntries
} };
const valueFull = {
...valueFeed,
...require_utils$4.generateItemOrFeed(feed.cc),
...require_utils$6.generateItemOrFeed(feed.dc),
...require_utils$17.generateFeed(feed.sy),
...require_utils$11.generateFeed(feed.itunes),
...require_utils$10.generateFeed(feed.googleplay),
...require_utils$12.generateItemOrFeed(feed.media),
...require_utils$9.generateItemOrFeed(feed.georss),
...require_utils$8.generateItemOrFeed(feed.geo),
...require_utils$7.generateItemOrFeed(feed.dcterms),
...require_utils$5.generateItemOrFeed(feed.creativeCommons),
...require_utils$13.generateFeed(feed.opensearch),
...require_utils$21.generateFeed(feed.yt),
...require_utils$1.generateFeed(feed.admin),
...require_utils$14.generateFeed(feed.pingback),
...valueEntries
};
return { feed: {
"@xmlns": "http://www.w3.org/2005/Atom",
...require_utils.generateNamespaceAttrs({ value: valueFull }, require_config.namespaceUris),
...valueFull
} };
};
//#endregion
exports.createNamespaceSetter = createNamespaceSetter;
exports.generateCategory = generateCategory;
exports.generateEntry = generateEntry;
exports.generateFeed = generateFeed;
exports.generateGenerator = generateGenerator;
exports.generateLink = generateLink;
exports.generatePerson = generatePerson;
exports.generateSource = generateSource;
exports.generateText = generateText;