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.

185 lines (184 loc) 9.5 kB
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;