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.

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